Blog

GitHub CLIでIssue作成

この記事は、ニフティグループ Advent Calendar 2025 3日目の記事です。

はじめに


こんにちは!新卒1年目のパクパクです 👋

OJT中のタスクの中でGraphQLで処理していたIssue作成のプロセスを、GitHub CLI(ghコマンド)に処理する作業を行いました。

この過程で学んだghコマンドについてご紹介します。それでは Let’s go!

 

目標


ghコマンドを使い、メインIssueとサブIssueを作成してプロジェクトに追加する

 

1. プロジェクトデータの取得 (Get Project and Field IDs)


Issueを作成してプロジェクトボードで管理するには、まず必要となる各種IDを収集する必要があります。ghコマンドで情報を取得し、jqを使ってJSONデータを使います。

 

gh project view

gh project view [<number>] [flags]
プロジェクトの詳細情報を取得します。

オレンジ色の情報をコマンドで取得します
  • オプション [flags]
    • --owner : 個人またはOrganizationのアカウント
    • --format : 出力フォーマット

 

例えば、Organizationがmy-orgである1番プロジェクトに関する詳細情報を取得したい場合は、以下のように入力します。

入力

出力

末尾の -q .id オプションで、プロジェクトIDの値だけ抽出しました。

 

gh project field-list

gh project field-list [<number>] [flags]
プロジェクトのフィールド情報を一覧表示します。

  • オプション [flags]
    • --owner : 個人またはOrganizationのアカウント
    • --format : 出力フォーマット

 入力

出力

StatusフィールドのIDを取得するために、下記のコマンドを使いました。ghコマンドの結果をjqに直接渡してIDを抽出します。

 

 

gh project item-list

gh project item-list [<number>] [flags]
プロジェクトに追加されているアイテム(IssueやPRなど)を一覧表示します。

  • オプション [flags]
    • --owner : 個人またはOrganizationのアカウント
    • --format : 出力フォーマット

入力

出力

プロジェクトアイテムの中から現在のスプリント情報を特定するために、各sprintのstartDateを取得します。

 

2. Issueの作成 (メインIssueとサブIssue)


gh issue create

gh issue create [flags]
新しいIssueを作成します。

 

  • オプション [flags]
    • R, -repo: Issueを作成するリポジトリを選択します。
    • t, -title: Issueのタイトルを指定します。
    • b, -body: Issueのボディ(内容)を指定します。
    • l, -label: Issueのラベルを指定します。

 

このコマンドで、GitHub上でIssueが作成されます。

入力

 

 

gh issue view

gh issue view {<number> | <url>} [flags]
Issueの詳細情報を表示します

入力

出力

 

ここでも-q .id を使って、作成されたIssueのIDだけ取得できます。

入力

 

3. Issueをプロジェクトに追加する


gh project item-add

gh project item-add [<number>] [flags]
プロジェクトにアイテム(IssueやPR)を追加します。

  • オプション ([flags]
    • -owner: 個人またはOrganizationのアカウント
    • -url: プロジェクトに追加したいIssueやPRのURL

入力

 

 

gh project item-edit

gh project item-edit [flags]
プロジェクト内のアイテム(IssueやPRなど)のフィールド値を変更します。

 

  • オプション [flags]
    • -id: 編集したいアイテムのID
    • -project-id: 対象のプロジェクトID
    • -field-id: 値を設定したいフィールドのID
    • -single-select-option-id: 単一選択フィールド(Single Select)で設定したいオプションのID
    • -iteration-id: イテレーション(Iteration)フィールドで設定したい値のID
    • -date: 日付フィールドに設定したい値(YYYY-MM-DD形式)
    • -number: 数値フィールドに設定したい値

 

例えば、プロジェクトの日付を指定したりする場合に下記のコマンドを使います。

入力

 

 

 

4. メインIssueとサブIssueを紐付ける


gh api

gh api <endpoint> [flags]
GitHub APIに対してHTTPリクエストを送信します。

 

Issueをメイン ↔ サブ関係で紐付ける機能は、ghコマンドではまだサポートされていません。そのため、gh apiコマンドを使ってGitHub APIを直接呼び出すことで対応します。

Request Bodyとして送信するデータはJSON形で渡します。

入力

 

このようにして、GitHub REST APIのエンドポイント(.../sub_issues)に対して直接POSTリクエストを送信し、Issueの親子関係を設定しました。

まとめ


これまではブラウザ上で操作するのが当たり前だと思っていましたが、今回、GitHub CLI(gh コマンド)を使ってみて、Issue作成から親子関係の紐付けまでできるということを学びました。 UIだけでなく、CLI環境でも色んな作業ができることを知り、これからもCLIツールを活用して、開発効率を上げていきたいと思います!

明日は、中井さんの「ファミコンのソフトを作る。Rust で」です。
お楽しみです 😊

 

参照

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!