GitHub Projectsでissueに設定できるStatusはissueに設定しているわけではない
こんにちは!GitHub Projectsって名前は長いと思ってるMizutani(@sirycity)です。Copilotみたいに固有名詞が欲しい…笑
今日はそんなGitHub Projectsのちょっとめんどい仕様です。タイトル分かりにくくない?
はじめに
GitHub ProjectsはGitHubのプロジェクト機能です(進次郎)
…いやまさにその通りで、GitHubに備え付けられているプロジェクト管理機能です。長いので以下Projectsと表記します。
そんな機能あったっけ?
このProjects、影が薄いです。なんでかって言うとリリースが遅かったからです。単純に名前がダサいからじゃ
GitHubをリリース当初から使ってるチームはGitHub以外のプロジェクト管理ツールをずっと使い続けていたので今更Projectsを使わない、みたいな事情があるんじゃないかと予想しています。
ProjectsはissueにStatusを設定できる
一方GitHubのissueは、もうずっと前からあるGitHubのメイン機能です。やることリストみたいなもん。例えばこんなやつ。
https://github.com/nodejs/node/issue/1
#1 deps: update openssl to 1.0.1j
↑のissueだと「nodejsが依存してるopensslのバージョン上げてねー」みたいなことです。
やることリストの期日
んで、やることリストは往々にして「いつやるか?」みたいなことを設定したくなるわけです(林修)この期日の設定欄、一般的なプロジェクト管理ツールのissueに相当する機能にはあります。Jiraのチケットとか。
一方GitHubのissueには期日の設定がありません。GitHubは期日についてはマイルストーンで管理して、そのマイルストーンをissueが設定するみたいな設計思想でした。ただここに関してはつい最近Projectsの設定であたかも直接issueに対して期日を設定しているみたいにすることもできるようになりました。後半で書きます。
やることリストの進捗
もう一つ、やることリストには「着手しているかまだ未着手か」みたい状態(Status)に関する情報も欲しいですよね。これもGitHubには無かったです。Jiraとかにはあった。
ここに関してもちょっと前のProjectsでできるようになりました。To Do
とかIn progress
とか。こちらは見出しのとおり、任意のissueに対して直接Statusに関する情報を付与することができる…ように見えます。シンプルですね。
嘘
少し嘘つきました。ここがこの記事の趣旨なんですが、projectsは任意のissueに対してStatusの情報を付与しているわけではないです。そう見えるだけです。正確には任意のprojectにおいて「このissueのStatusはこれ」みたいな情報が集中管理されているみたいなイメージです。
例
大学・大学生・血液型の関係性をイメージしてみましょう。血液型の状態は当然大学生に依存して決まってますね。大学が経営破綻して消滅しても血液型は変わりません。これがProjects・Status・issueの誤ったイメージです。
大学・大学生・成績の関係性をイメージしてみましょう。成績の状態は大学生に依存しているわけではなく大学に依存して集中管理されているのでここ自信ない、大学が消滅すれば成績は無くなります。これがProjects・Status・issueの正しいイメージです。
一般的には前者が正しく思えますが実際は後者。という例でした。
分かりやすい設定画面
こんな例を出されても分からないと思うので(趣旨崩壊)、Projectsの設定画面を見てみましょう。こっちの方が確実に分かりやすい。
まずはhttps://github.com/【ユーザー名】?tab=projects
に移動して、New project
から新しくプロジェクト作りましょう。後から消せるので大丈夫。そしたらプロジェクト画面に移って右上の・・・
からSettings
を押しましょう。もしくはhttps://github.com/users/【ユーザー名】/projects/1/settings
に直接飛んでもOK。
そしたら画面左に注目。Custom fields
の所にStatus
ってありますね。もうお分かりでしょうか、Statusはプロジェクトのカスタムフィールドです。つまりProjectsを人間が見やすくするためのView機能のために作られた項目ってことで、平たく言えばProjectsのための項目ってことです。issueのための項目じゃないってことです。
Statusはカスタムフィールドの一種に過ぎない
さらに分かりやすくしてみましょう。そこにある+ New field
ってやつ押して適当な名前で3つくらいフィールドを追加してみましょう。後から消せるから大丈夫。書き終わった?これも全部Projectsのviewに依存するフィールドです。issueに設定しているわけじゃないです。
んで、こうやって見るとStatusが特殊な機能ではなくただ単に初期設定されているだけのカスタムフィールドの一種に過ぎないってことも分かるかと思います。まあ厳密に言うとStatusだけは変更削除できなかったりWorkflowに設定できたり…と若干特別扱いはされてるけどね。
issueの期日について
ちなみに↑で書いたissueに期日を設定できるってのも、別にそういう機能があるわけじゃなくて単純に日付型のカスタムフィールドを2つ作ってProjectsのviewに設定してるだけです。設定方法は一昨日の記事からどうぞ↓
ちなみに
Statusがissueに依存してないってことは、やろうと思えばProjectsを複数個作って1つのissueに複数のStatusを設定することもできます。…そんなことする意味があるかは別として。
どうしてこうなった
こんな仕様になったのは何故かって、そらもうprojectsが最近できた機能だからってことなんでしょうね。予想だけど。
さいごに
projectsの仕様についてざーっと書きました。需要があるかどうかは果てしなく謎ですが、projects始めてみようっていう暇人に届けば良い…かなと思ってます。以上。