こんにちは、CX事業本部 Delivery部の若槻です。
GitHub projects は、Issue や Pull Request と統合的に利用できるプロジェクト管理機能です。
今までは projects を API で管理したい場合は GraphQL API を使用する必要がありましたが、このたびの GitHub CLI のアップデートにより projects command が一般利用可能(GA)となり、CLI から projects が管理ができるようになりました。
利用可能になったコマンド
今回利用可能になった projects command は以下となります。
- gh project close
- gh project copy
- gh project create
- gh project delete
- gh project edit
- gh project field-create
- gh project field-delete
- gh project field-list
- gh project item-add
- gh project item-archive
- gh project item-create
- gh project item-delete
- gh project item-edit
- gh project item-list
- gh project list
- gh project view
大きく分けて、projects 自体を管理するコマンド、projects 内のカードを管理するコマンド、およびカードのフィールドを管理するコマンドの3種類です。
コマンド一覧は下記から確認できます。
試してみる
権限の設定
まず、projects command を使用するためには GitHub の認証トークンに権限スコープ project
が設定されている必要があります。
試しに project list
コマンドを実行すると、read:project
スコープが足りない旨のエラーが表示されます。
$ gh project list
error: your authentication token is missing required scopes [read:project]
To request it, run: gh auth refresh -s read:project
認証ステータスを確認すると、Token scopes に project
が設定されていません。
$ gh auth status
github.com
✓ Logged in to github.com as cm-rwakatsuki (/Users/wakatsuki.ryuta/.config/gh/hosts.yml)
✓ Git operations for github.com configured to use https protocol.
✓ Token: gho_************************************
✓ Token scopes: gist, read:org, repo, workflow
gh auth refresh
コマンドで project
スコープを追加します。
gh auth refresh -s project
再度認証ステータスを確認すると、Token scopes に project
が設定されていることが確認できました。
$ gh auth status
github.com
✓ Logged in to github.com as cm-rwakatsuki (keyring)
✓ Git operations for github.com configured to use https protocol.
✓ Token: gho_************************************
✓ Token scopes: gist, project, read:org, repo, workflow
project list
コマンドも実行できるようになりました。
$ gh project list
NUMBER TITLE STATE ID
4 test project open PVT_kwHOA2ucV84AGIFl
3 DevIO Neta open PVT_kwHOA2ucV84AEG5E
アイテムの操作
projects command で最も行いたいであろうアイテムの操作を試してみます。
アイテムの追加
まず、gh project list
コマンドで操作したい project の NUMBER を予め確認しておきます。
アイテムを project に追加する場合は、gh project item-add
コマンドを使用します。先程 gh project list
コマンドで確認した project の NUMBER により追加先の project を指定します。--owner
では、追加先の project の owner 、--url
では、追加するアイテムの URL を指定します。
gh project item-add 4 --owner "@me" --url https://github.com/cm-rwakatsuki/test/issues/5
注意点として、draft issue の追加はできないようです。
アイテム一覧の取得
アイテムの一覧は gh project item-list
コマンドで取得できます。project の NUMBER および owner を指定します。
$ gh project item-list 4 --owner "@me"
TYPE TITLE NUMBER REPOSITORY ID
Issue デバッグ対応 2 cm-rwakatsuki/test PVTI_lAHOA2ucV84AGIFlzgCiJl0
Issue ボタンの配置を変更 3 cm-rwakatsuki/test PVTI_lAHOA2ucV84AGIFlzgFjPTY
DraftIssue ログ監視ツールの検討 PVTI_lAHOA2ucV84AGIFlzgFjPUw
DraftIssue ドキュメント修正 PVTI_lAHOA2ucV84AGIFlzgFjPVM
DraftIssue APIの実装 PVTI_lAHOA2ucV84AGIFlzgGavco
Issue API 実装 5 cm-rwakatsuki/test PVTI_lAHOA2ucV84AGIFlzgH632s
ステータスは分からない点には注意です。project item-view
コマンドがあっても良さそうなのですが、まだ実装されていませんでした。
フィールド一覧の取得
フィールドの一覧は gh project field-list
コマンドで取得できます。project の NUMBER および owner を指定します。
$ gh project field-list 4 --owner "@me"
NAME DATA TYPE ID
Title ProjectV2Field PVTF_lAHOA2ucV84AGIFlzgDh-dU
Assignees ProjectV2Field PVTF_lAHOA2ucV84AGIFlzgDh-dY
Status ProjectV2SingleSelectField PVTSSF_lAHOA2ucV84AGIFlzgDh-dc
Labels ProjectV2Field PVTF_lAHOA2ucV84AGIFlzgDh-dg
Linked pull requests ProjectV2Field PVTF_lAHOA2ucV84AGIFlzgDh-dk
Reviewers ProjectV2Field PVTF_lAHOA2ucV84AGIFlzgDh-ds
Repository ProjectV2Field PVTF_lAHOA2ucV84AGIFlzgDh-dw
Milestone ProjectV2Field PVTF_lAHOA2ucV84AGIFlzgDh-d0
New Field ProjectV2Field PVTF_lAHOA2ucV84AGIFlzgJ455o
これにより、例えばアイテムのステータスをコマンドで更新したい場合は ID PVTSSF_lAHOA2ucV84AGIFlzgDh-dc
を指定すれば良いことが分かります。
アイテムの編集
アイテムの編集は gh project item-edit
コマンドで行います。ワークフロー自動化のために最も使われるであろうコマンドだと思われますが、現状ではいくつか制限がありました。
draft issue の編集ができない
draft issue のタイトルを変更しようとすると、以下のようなエラーが表示されました。
$ gh project item-edit \
--id "PVTI_lAHOA2ucV84AGIFlzgFjPUw" \
--field-id "PVTSSF_lAHOA2ucV84AGIFlzgDh-dc" \
--project-id "PVT_kwHOA2ucV84AGIFl" \
--title "hoge"
ID must be the ID of the draft issue content which is prefixed with `DI_`
project list
で確認した際は操作したい draft issue の ID は PVTI_
から始まる値だったのですが、DI_
で始まる ID を指定せよとのことです。よって draft issue を編集する方法が分かりませんでした。
ステータスの編集ができない
issue のステータスを変更しようとすると、以下のようなエラーが表示されました。
$ gh project item-edit \
--id "PVTI_lAHOA2ucV84AGIFlzgFjPUw" \
--field-id "PVTSSF_lAHOA2ucV84AGIFlzgDh-dc" \
--project-id "PVT_kwHOA2ucV84AGIFl" \
--single-select-option-id "Done"
GraphQL: The single select option Id does not belong to the field (updateProjectV2ItemFieldValue)
上記の single-select-option-id プロパティで指定したのは、ステータスの ID ではなく名前です。どうやら ID を指定する必要があるようですが、その ID の確認方法が分かりませんでした。
おわりに
GitHub CLI project command が一般利用可能になったので試してみました。
現状ではアイテムの編集方法が分からず、特に draft issue の操作ができないのは残念でした。もし分かる方がいれば教えてくださると助かります。
以上