GitHub Actions ワークフロービューア
VMark は GitHub Actions のワークフロー YAML をインタラクティブな有向非巡回グラフ(DAG)としてレンダリングし、ジョブ、ステップ、トリガー、権限、同時実行(concurrency)を構造化されたフォームから編集できるようにします — 元のファイルのコメント、アンカー、フォーマットを失うことなく行えます。
この機能は 2 つの場面で動作します:
.github/workflows/配下のスタンドアロンの.ymlファイル(またはトップレベルにon:とjobs:キーを持つ任意の YAML ファイル): 左側にソース、右側にインタラクティブなキャンバスとフォームエディタを配置した分割ビュー。- Markdown のコードフェンス: 三連バッククォートの
yamlまたはymlフェンスブロックに認識可能なワークフローが含まれている場合、VMark はmermaidブロックと同じ方法で、同じジョブグラフを画像としてインラインにレンダリングします。
VMark 独自のワークフローとは別物です
トップレベルの steps: で genie/… や action/… を使う YAML ファイルは Genie ワークフロー です — VMark が実行できる、VMark 独自のパイプライン形式です。GitHub Actions のワークフローは、ここでは表示と編集のみを行います。この機能でないもの を参照してください。
スタンドアロンのワークフローファイル
VMark で任意の .github/workflows/*.yml ファイルを開きます。ファイルは分割ビューで開きます — 左側に YAML ソース、右側にワークフローのワークベンチ(ソース · 分割 · プレビュー トグルでレイアウトを切り替えられます)。ワークベンチには以下が表示されます:
- ワークフロー全体をインタラクティブな React Flow キャンバスとして表示(ジョブはノード、
needs:依存関係はエッジ)。コントロールストリップでは、ズーム、グラフをペインに合わせる表示、上から下/左から右のレイアウト切り替えができます — 幅の広いペインで長いneeds:の連鎖を見るときに便利です。 - キャンバス右上のエクスポートコントロール(エクスポート を参照)。
- キャンバスの下に構造化エディタパネル: 診断 バナー、保存/破棄コントロール、ワークフローレベルのフォーム、選択中のジョブまたはステップのフォーム。
キャンバス内のジョブをクリックして編集します。ジョブ内のステップをクリックしてそのステップを編集します。Escape キーを押すと選択が解除され、フォーカスがソースに戻ります。
ソースを編集している間、VMark は 2 つのペインを同期させます: カーソルをジョブの行に移動するとキャンバス上のそのノードがハイライトされ、$ 式は解析されたワークフローのコンテキストに対して補完され、ローカルの uses: 参照を Cmd キーを押しながらクリックすると対象ファイルが開きます。
ジョブの編集
編集可能なフィールド:
| フィールド | パッチ種別 |
|---|---|
name | job.set |
runs-on | job.set |
if | job.set |
読み取り専用のサマリー: ステップ数、needs:、および uses:(再利用可能なワークフロージョブ用)。
フォームの上にある ジョブを追加 は、入力した ID からジョブを作成します — ID は英字またはアンダースコアで始まり、既存のジョブと重複しないことが必要です — 作成したジョブは、変更するまで ubuntu-latest で実行されます。ジョブフォームの削除ボタンは、確認のうえ選択中のジョブを削除します。
ジョブフォームにはそのジョブのステップも一覧表示されます。各行は上下に移動したり、(確認のうえ)削除したりでき、ステップを追加 は新しいステップを run: echo TODO として末尾に追加するので、そのまま編集できます。
ステップの編集
編集可能なフィールド:
| フィールド | パッチ種別 |
|---|---|
name | step.set |
run(run-step 用) | step.set |
working-directory | step.set |
if | step.set |
with: キー | with.set / with.remove |
with: ブロックは、追加/編集/削除のキー/値の行としてレンダリングされます。キーの名前を変更すると、古いキーに対する with.remove の後に新しいキーに対する with.set が発行されます。別の行ですでに使われているキーは、その場で拒否されます。
uses: ステップでは、アクション参照自体は読み取り専用です — 別のアクションが必要な場合はソースで変更してください。
トリガー
マッピングとして書かれたトリガー(on: { push: { branches: [main] } })には、編集可能なフィルターフィールドがあります — branches、branches-ignore、tags、tags-ignore、paths、paths-ignore、types で、それぞれカンマ区切りのリストです。schedule の cron は読みやすい文章として表示され、5 分より短い間隔で実行される場合は警告が出ます(GitHub はそのようなスケジュールを間引きます)。cron は読み取り専用です。イベント名だけ、またはイベント名のリストとして書かれたトリガーも同様に読み取り専用なので、ソースで編集してください。
権限と同時実行
ジョブフォームの上には、ワークフローレベルのフォームが 2 つあります:
- Permissions(権限)— GitHub のデフォルト(
permissions:キーなし)、read-all、write-all、none、またはスコープごとの表(contents、pull-requests、…)で、それぞれに read/write/none を選びます。 - Concurrency(同時実行)—
groupと、cancel-in-progressするかどうか。式として書かれたcancel-in-progressは表示されますが、ここでは編集できません。
編集の保存
フィールドを変更するとメモリ上のパッチリストに編集がキューイングされます。保存ボタンには現在の数(例: 未保存 3 件)が表示され、新しいジョブやステップは保存する前からキャンバスとフォームに表示されます。
保存をクリックすると、VMark は以下を行います:
- エディタから現在の YAML を読み取ります。
- キューイングされたすべてのパッチを YAML の CST(具象構文ツリー)に適用 — コメント、アンカー、既存のフォーマットを保持します。
- ディスク上のファイルの場合は、結果をファイルに書き込んでから、エディタをそれに合わせて更新します — ただし、その間にソースで入力していた場合は、入力した内容が保持されます。
書き込みに失敗しても何も失われません: 編集はキューに残ったままなので、もう一度保存できます。無題のドキュメントには書き込むファイルがないため、保存はエディタだけを更新します。保存するには Cmd+Shift+S を押してください。破棄 はキューイングされた編集を取り消します。
フォーマットの保持
デフォルトの保存パスは、すべてのパッチを yaml パッケージの CST API で実行します — コメント、アンカーノード、カスタムインデント、既存のフロー対ブロックスタイルの選択は保持されます。
正規化された再フォーマット出力を望む場合は、設定 → 詳細設定で 保存時に YAML フォーマットを保持 を無効にします。再フォーマットパスはコメントを削除するため、これはオプトインです。
Markdown 内のコードフェンス
YAML コードフェンスにワークフローを入力します:
```yaml
name: ci
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pnpm test
```VMark はワークフローの形状(トップレベルの on: と jobs: キー)を検出し、そのジョブグラフの画像をインラインでレンダリングします — スタンドアロンのビューと同じキャンバスを画像としてキャプチャしたものです。画像は読み取り専用です。ダブルクリックするとソースを編集できます。
診断
VMark はパース+ Lint の診断をフォームパネル上部のバナーに表示します。行をクリックすると、ソースが該当する行にジャンプします。行を特定できない場合(例: プレビューモード)は、該当するジョブが選択されます:
| コードのプレフィックス | 意味 |
|---|---|
GHA-PARSE-* | YAML の形式不正、または必須キーの欠落 |
GHA-JOB-* | ジョブレベルの問題(重複 ID、uses: と steps: の競合) |
GHA-NEEDS-* | 依存関係の問題(不明な参照、循環) |
GHA-STEP-* | ステップレベルの問題 |
GHA-EXPR-* | 不明なコンテキスト参照 |
GHA-MATRIX-* | マトリックス展開の問題 |
GHA-SEC-* | セキュリティ警告(例: pull_request_target のチェックアウトパターン) |
GHA-ACTIONLINT-* | actionlint がインストールされている場合に転送される |
より豊富な式の診断のためには、actionlint をインストールしてください。設定 → 詳細設定(ワークフローファイル)の 利用可能な場合 actionlint を使用 がオンのとき(デフォルトでオン)、VMark はワークフローファイルのソースが変わるたびにログインシェルの PATH からバイナリを実行し、その結果を GHA-ACTIONLINT-<rule> のタグ付きでワークベンチの診断バナーに追加します。上記の組み込みチェックが actionlint を待つことはありません。トグルがオンなのにバイナリがインストールされていない場合、VMark はセッションごとに一度だけ通知し、それ以外は何も表示しません。バイナリはあるものの実行に失敗した場合は、actionlint 自身のメッセージとともに一度だけ報告されます。actionlint を完全にスキップするには、トグルをオフにしてください。MCP の workflow.validate 操作は、同じチェックを必要なときに実行します。
アクションメタデータ
公開 GitHub アクションを参照する uses: ステップに対して、VMark は各アクションの action.yml を取得して、構造化エディタに入力の説明を取り込みます。結果はディスクに 24 時間キャッシュされます。ワークスペースローカルのアクション(./…)はディスクから読み込まれ、ネットワークは使われません。
ワークフローエディタを完全にオフラインに保つには、設定 → 詳細設定(ワークフローファイル)で アクションメタデータを取得 をオフにします — オフの間はネットワークリクエストが行われず、with: フォームは自由形式のキー/値の行にフォールバックします。
エクスポート
キャンバス右上のエクスポートコントロールでは、3 つの形式を選べます:
| 形式 | 用途 |
|---|---|
| Mermaid | README やその他の Markdown ドキュメントへの埋め込み。クリップボードにコピーされます。情報の損失あり: 実行ステータス、アクションアイコン、カスタムバッジ、マトリックス展開の詳細は省略されます。 |
| SVG | ベクターグラフィックスを必要とするドキュメントへの埋め込み。HTML コンテンツに foreignObject を使用します。 |
| PNG | チャットや SVG がサポートされていない場所での共有。キャンバスの現在のズームでレンダリングされます。 |
この機能でないもの
VMark は GitHub Actions ワークフローを実行しません。これはビューア兼エディタです — 実行は GitHub の役割のままです。この機能は純粋にワークフロー YAML の閲覧、レビュー、作成のためのものです。VMark 独自の実行可能なパイプラインは別の形式です: Genie ワークフロー を参照してください。