GitHub Actions ワークフロー作成をもっと楽しく - アクションとバージョン選定をエディターから離れずに
はじめに
GitHub Actions は好きですか?パズルのような感覚で面白いので私は大好きです!
そんな GitHub Actions でも、ワークフロー定義を書くときのある面倒臭さには困っていました。
- 手動で書くとき
- 「えーと、あのアクションの名前、ハイフン繋ぎ?アンダースコア繋ぎ?忘れたー!検索検索...」
- 「今ってバージョンいくつが出てるんだっけ?分からなーい!検索検索...」
- 各種LLMツールに任せるとき
- 「お、よしよし良い感じ…。あれでもバージョンってこれで良いの?分からなーい!検索検索...」
どのパターンでもエディターを離れる瞬間が生まれがちなのでは?と。
このペインを解消するために2つの自作ツールを使ってみます。ただ、もっと良い方法があるのでは?とも思っているので、皆さんの秘伝の方法があれば教えて頂きたいです。
使用するツールは以下の2つです。
-
ghaver
: 頻出するアクション名と、そのバージョンをそれぞれ曖昧検索するCLI。手動編集用。 -
gh-versions-mcp
: GitHubリポジトリを指定すると、バージョン一覧を取得するMCPサーバー。新しいバージョンが出たばかりのメジャーバージョンについては、それを使うべきか、一つ前のメジャーバージョンの最新版を使うべきか検討が必要です。gh-versions-mcpは、このようなインストラクションも含めてLLMツールが妥当なバージョンを選定する手助けをします。
対象読者
- GitHub Actions のワークフロー定義作成において、同様の悩みを抱えている人。
- その困りごとを別の方法で解消済みの有識者。(ぜひコメントで方法を教えてください)
本記事で扱う内容
- 自作ツールの特徴と、やりたいができていないこと、future works。
ghaver
手動編集用: まずは動作の様子をご覧ください。
- 使用頻度の高いアクションを曖昧検索・カーソルで選択
- 選択したアクションのバージョンを新しい方から順に示し、同じく曖昧検索・カーソルで選択
-
<action>@<version>
の形式で文字列を標準出力に送る。オプションをつければ<action>@<sha> # <version>
の形式でも出力できます。実用的にはclip
やpbcopy
など、クリップボードにパイプするのが良いと思っています。
これにより、名前をあやふやに覚えていても目的のアクションを選択でき、そのアクションのバージョンを確認できます。
バージョンも最新版を一つだけ示すのではなく、複数の中から選択可能なことにこだわっています。例えばメジャーバージョンが更新された直後にそれを使うか、はたまた一つ前のメジャーバージョンの最新を使うかは、自分で選択したいですよね?
パッケージ・バージョンをザッピングしていく体験自体も、なかなか気持ちが良くて気に入っています。
使用している技術
やりたいことに対してできるだけミニマム&興味を持っていた技術を選定しています。
- GitHub API(指定したリポジトリのリリース情報を取得)
- @kou_pg_0131 さんの go-fzf(曖昧検索)
- kong(コマンドラインパーサー)
やりたいができていないこと
コマンド実行結果をエディタのカーソル位置に直接挿入できるとなお良いのですが、ファジーファインダーとの相性のせいか、まだできていません。(Vimであれば:r !ghaver
で出来たら良かったのですがどうにもならず…。)
future works
- アクション一覧の拡充。現在は超ベーシックなアクションを中心に設定済み。もう少し対象を広げておいても良い。
- アクション一覧を外部から取り込み可能にする。人によって使用したいアクションは様々だが、全てツールにビルトインすると検索性が落ちそうなため、カスタマイズ可能にすることで対応した方が良さそう。
いろいろやりきれていないこと・もっとやりたいこともありますが、エディタを離れずにアクション・バージョンを選定したいという目的は達成できました。
しかし昨今ではLLMツールにお任せでワークフロー定義を書くことも多いですよね。その場合、必要な機能はこのツールとは異なると考えたので、別ツールを作成しました。
gh-versions-mcp
LLMツール用: LLMツールにワークフロー定義作成をお任せする場合、手動の場合とは異なり、アクション名に迷うことはほぼないでしょう。
他方、使用するバージョンを適切に選択することは、手動の場合と同様に困難でしょう。
手動の場合と同じように、「新しい方からいくつかバージョンを取得すること」「メジャーバージョンアップ直後に成熟度合いを考慮に入れてバージョンを選択すること」をLLMツールに実行させたくなります。
実装方法はなんでも良いですが、今回はMCPサーバーを作成し、バージョン一覧をアウトプット、バージョン選択の考え方をツールのdescriptionに記載することで、上記要件の達成を狙いました。
試しに Codex からMCPサーバーに接続し、「コードをチェックアウトするだけのお試しワークフロー定義」を作成してもらいます。
検討結果は以下の通りで、狙い通りのふるまいをしてくれています。やったぜ。
• Workflow Added
- Added .github/workflows/checkout-only.yml:1 with a minimal workflow_dispatch job that runs on ubuntu-latest,
checks out the repo via actions/checkout@v4.3.0, and limits the clone to fetch-depth: 1.
- actions/checkout v5.0.0 is the sole release of the newest major, so I stayed on the mature v4 patch series
(latest v4.3.0) for stability. Swap to actions/checkout@v5.0.0 if you want to track the newest major.
できていないこと、future works
いったんありません。フィードバックがあれば頂きたいです。
おわりに
GitHub Actions ワークフロー定義をもっと楽しく作成するために、自作の2つのツールを導入してみました。
手動向けのツールはまだいろいろ改善余地がありますが、ひとまず現状でも、私にとってはお気に入りのツールの仲間入りをしてくれました!
Happy GitHub Actions Life!
それぞれのツールのリポジトリはこちらです。
Discussion