🦍

GitHub Actionsを操作するVimプラグインを作った

はじめに

GitHub Actionsを操作するNeovimプラグインを作ったので簡単ですが紹介したいと思います。

https://github.com/skanehira/github-actions.nvim

普段の開発でPRを出してCIの結果を確認する、という作業は日常茶飯事かと思います。

このプラグインを使うとVimからCIの状況確認やログの閲覧、ワークフローの再実行などができるようになるので、Vim引きこもり生活が快適になります。

みなさんもぜひVim引きこもり生活を快適にしていきましょう

モチベーション

PRを出したあとCIが落ちることってよくありますよね。
そのときのログ確認までの流れを考えてみると、だいたい次のようなステップになります。

  1. ブラウザを開く
  2. gh pr view -wもしくはGitHubのPRページに移動する
  3. Checksタブをクリックする
  4. 失敗したジョブをクリックする
  5. ログを確認する

正直これが面倒で、とくにVimで作業しているときにブラウザに切り替えるのはコンテキストスイッチが発生してストレスでした。

gh run view --logなどのCLIも使えますが、インタラクティブな操作がしづらいという問題があります。
そこで、Vimで作業しつつCIの状況をwatchしたり、ログを確認したりできるプラグインを作ることにしました。

やはりすべてをVimで完結するのが正義ですね。

機能

主な機能を紹介していきます。

actionsのバージョン診断

ワークフローファイルを開くと、使用しているactionsのバージョンをextmarkで表示します。
古いバージョンを使っている場合は警告が出るので、アップデートのタイミングを把握しやすくなります。

very 便利。

Image from Gyazo

workflowのdispatch/watch

手動トリガーのワークフローをVimから直接dispatchしたり、失敗したワークフローをrerunしたりできます。
flaky testで落ちたときの再実行がとても楽になりました。

またgh run watch相当の機能をVim内で使えます。
PRを出したあとにワークフローをwatchしておけば、リアルタイムでステータスの変化を確認できます。

very 便利。

Image from Gyazo

ログの確認

実行済みワークフローのログをバッファに表示できます。
Vimの検索がそのまま使えるので、エラー箇所を探すのが楽です。

very 便利。

Image from Gyazo

実装について

実装は全部Claude Codeにやらせています。
とくにTree-sitterのクエリは自分では全然わからないので丸投げしました。

モジュール設計はlazy.nvimを参考にしつつ、コロケーションを意識した構成にしています。

コロケーションにすると、凝集度を高め関心事が集約されてメンテしやすかったので、今後もプラグインを開発する際はそれをベースにしていきたいなと思いました。

lua/github-actions/
├── init.lua
├── config.lua
├── versions/           # バージョン診断機能
│   ├── init.lua        # エントリーポイント
│   ├── parser.lua      # YAMLパース
│   ├── checker.lua     # バージョンチェック
│   └── ui/
│       └── display.lua # extmark表示
├── watch/              # watch機能
├── history/            # ログ履歴機能
└── ...

今後の展望について

現在、PRに紐づくworkflowを確認する方法がないため、組織で開発しているとworkflowが大量に実行されて、どれが自分のPRのものなのかわからない問題があります。

その機能をこれから実装していく予定で、それができると一旦自分のワークフロー的には満足できそうです。

さいごに

自分が普段感じていたCI確認のストレスを解消するために作ったプラグインですが、同じようなストレスを感じている方にはぜひ使ってみてください。
機能要望やバグ報告などのフィードバックをお待ちしています。

Discussion