Projects View
現在のリポジトリにリンクされた GitHub Projects (v2) を読み取り専用のボード
として眺めるビューです(リンクの取得は gh repo view --json projectsV2、
ボードは ボード本体は GraphQL)。
ボードは全幅で表示され、最初のリンク済みプロジェクトがすぐに読み込まれます。
列は Status の選択肢を GitHub 上の順に 1 列ずつ、加えてステータス未設定の
アイテム用の No status 列です。カードにはアイテム種別(● issue、⇅
pull request、✎ draft)、番号、タイトル、担当者を表示し、別リポジトリの
アイテムには番号の前に薄い色で owner/repo が付きます。
複数のリンク済みプロジェクトと固定
リンクされたプロジェクトが複数あるときはヘッダに Board: <タイトル> (i/n)
と出て、p / P で順に切り替えられます。1 つもリンクされていないときは
リンク方法(リポジトリの Projects タブ、または gh project link)を案内
します。設定のトップレベルに projects-board を書くと、タイトルまたは
プロジェクト番号でボードを 1 つに固定できます —
設定リファレンスの projects-board
を参照してください。
テーブルモードと詳細ペイン
t でテーブルモードに切り替わり、1 行 1 アイテムでプロジェクトの
フィールド(Status、Priority、Estimate、Iteration、日付、カスタムの
テキスト / 数値フィールド)を列として表示・ソートできます。h / l と
s でソート列を選びます。
詳細ペインは選択中アイテムの全フィールド値に続けて、GitHub View と同じ issue / PR の本文とコメントを表示します(draft は本文のみ)。
オプションの projects 一覧ペイン
projects 一覧ペインも実装されていますが、組み込みレイアウトには配置
されていません。設定でレイアウトに配置すると、リンク済みプロジェクトを
選べる一覧が戻ってきます。貼り付けられるレイアウト例は
設定レシピ
を参照してください。
保存済みビュー
プロジェクトの保存済みビュー(ProjectV2.views。gh project からは取れない
ため GraphQL で取得)はボードと一緒に読み込まれます。ヘッダに現在のビュー名
とレイアウト(Board: vig demo board · Sprint [board] (2/3))が表示され、
v / V で切り替えられます。保存済みビューが無いプロジェクト(またはビュー
取得に失敗した場合)は従来どおり Status 固定の kanban になります。
Table ビューは定義どおりに描画されます: 表示フィールドがそのまま列に
(ビューの順、先頭に # 列)、ビューのソートが初期ソートに(降順は ▴
表示)、グループ化はグループごとの太字見出し行に(No <field> は最後)
なります。
Board ビューもビューの定義に従います: 列はビューの列フィールド
(verticalGroupByFields — 単一選択またはイテレーションフィールド、
オプション順 + No <field>。未設定なら Status)、ソートは各列内の
カード順、水平グループはスイムレーン(値ごとの帯 + 見出し行)に
なります。Space で選択中レーンの折りたたみ、列の端で j / k を
押すと隣のレーンへ移動します。Roadmap ビューはタイムラインを描画します: 左にアイテム行、右に
時間軸(アイテムごとのバー、黄色の今日マーカー、イテレーションの帯)。
期間はプロジェクトの日付フィールド(名前に start / begin を含む
ものが開始、target / end / due / finish を含むものが終了。日付
フィールドが 1 つだけなら点)から、日付の無いアイテムはイテレーション
の開始 + 期間から求めます。+ / - で月 / 週 / 日のズーム、h / l
で横スクロール、t でテーブルと行き来できます。期間の無いアイテムは
バー無しで並びます。
ビューのフィルタ式(status:Todo -label:bug assignee:@me is:issue no:milestone …)は、取得済みのアイテムに対して手元で評価します(追加の
API 呼び出しなし)。どのレイアウトでもグループ化・ソートの前に適用され
ます。対応: タイトルの自由語、field:value(, 区切りの複数値・引用符付き
の値)、- による否定、is:issue|pr|draft、no: / has:、assignee:
(@me はサインイン中のログイン)、label:、milestone:、repo:。範囲
(>、..)・ワイルドカード・is:open|closed は評価できないため、
ステータスバーに ⚠ filter: unsupported "…" と出して無視します。フィルタ
で隠れた件数もステータスバーに (3 filtered out) と表示されます。
キーバインド
| キー | 操作 |
|---|---|
p / P | 次 / 前のリンク済みプロジェクトへ |
h / l、← / →(ボード) | 前 / 次の列へ(テーブルモードではソート列の切り替え) |
j / k(ボード) | 列内のカード移動(テーブルモードでは行移動) |
t(ボード) | テーブルモードの切り替え |
s(ボード、テーブルモード) | ソート列を順に切り替え |
Enter / i(ボード) | 詳細ペインにフォーカス |
v / V | プロジェクトの保存済みビューを切り替え |
Space | 選択中のスイムレーンを折りたたみ / 展開 |
+ / - | ロードマップの時間軸をズームイン / アウト |
o | プロジェクト / アイテムをブラウザで開く |
y | プロジェクト / アイテムの URL をコピー |
j / k / Ctrl+d / Ctrl+u(詳細) | スクロール |
h / Esc(詳細) | ボードに戻る |
Tab / Shift+Tab | ペイン切り替え: Board → Detail |
/ n N | 検索(列をまたいだアイテムのタイトル / 番号) |
r | リンク済みプロジェクト・ボード・表示中アイテムを再取得 |
自動更新
ページを表示している間、vig は
projects-poll-interval
(既定 30 秒)ごとにボードが変わったかを GitHub に尋ねます。プローブは
プロジェクトの updatedAt だけを読み(GraphQL 1 ポイント。カードの移動や
フィールド編集で動きます)、動いたときだけボードを再取得します。選択・
ビュー・ソートはそのまま保たれます。ステータスバーにはボードの経過時間
(board 12s ago)と、再取得直後は短く ↻ updated が出ます。5 分以上
経ってからページに戻ったときの stale 再取得もこれまで通りです。どちらも
github-auto-refresh・アイドル時の間隔延長・残量が少ないときの抑制に
従います。
制約
gh projectにはトークンのprojectスコープが必要です。無い場合は ペインの代わりに案内を表示するので、gh auth refresh -s projectを 実行してからrを押してください。- ボードは GraphQL 2 リクエスト(フィールド・保存済みビュー・アイテム
数、次にその数に合わせたページでアイテム)で、表示に必要なものだけを
取得します。コストはアイテム × フィールド 100 組あたり約 1 ポイント
(小さなボードで ~2 ポイント)。500 件を超える分はステータスバーに
(truncated)と出ます。 - アカウントの GraphQL クォータ(5,000 ポイント/時)の残りが 1,500 を
切るとヘッダに
⚠ api N leftと警告し、自動再取得は自分で減速・停止 します — トラブルシューティング参照。 - このビューからアイテムの追加・移動・編集・削除は一切行いません。