概要
- CircleCI 初期メンバーによるCIシステムの実体験に基づく批判
- GitHub Actions の使い勝手や設計の問題点を詳細に解説
- YAML地獄 や Marketplace の危険性について言及
- 自分の計算資源を持てない ことの不便さを指摘
- 細かい不満点が積み重なり、 理想的なCI体験 からは程遠い現状を説明
GitHub Actionsの「体験」とは何か
- CIシステム としてのGitHub Actionsの普及理由は、 リポジトリに統合されている ことのみ
- ビルド失敗時 のUI遷移は複雑で、 エラー特定までに多くのクリック と待ち時間が発生
- ログビューア は長大なログに対応できず、 ブラウザが頻繁にクラッシュ
- 問題解決のために 生ログをダウンロード し、ローカルで確認する必要性
- 戻るボタン の挙動が不安定で、 目的のPRページに戻れない ストレス
デバッグ・ループの苦痛
- コミット→ビルド→失敗→修正 のサイクルが 非常に遅い
- 小さな修正でも フィードバックループが20分 かかることも
- 何度も繰り返す ことで、作業効率とモチベーションの低下
「YAML地獄」と表現言語
- すべてのCIは結局 大量のYAML管理 に行き着く
- GitHub Actions YAML は独自の表現言語や文脈モデル、複雑な補間ルールを持つ
- 条件付き環境変数設定や式展開で 微妙なミスが頻発しやすい
- ドキュメントよりも失敗から学ぶ 設計で、学習コストが高い
Marketplaceのリスク
- Marketplace には質のばらつきが大きい サードパーティ製アクション が多数存在
- 外部アクションを使うたびに、 リポジトリやシークレットへのアクセス権を他人に渡す リスク
- 依存管理の「正常化」による セキュリティリスクの見落とし
計算資源の制約とランナー事情
- Microsoftのランナーは遅く、カスタマイズ不可
- 高速なビルド や 大規模リソース が必要な場合、追加料金が高額
- サードパーティ企業(Namespace, BuildJet等)が「 速いGitHub Actionsランナー」をビジネスにする現状
- セルフホストランナー も利用可能だが、 YAMLやUIの問題は解決しない
細かい不満点の蓄積
- キャッシュ管理 が分かりにくく、 デバッグに多くの時間がかかる
- 再利用ワークフロー の制限やテストしづらさ
- GITHUB_TOKENの権限管理 が複雑で、細かい制御が困難
- 同時実行制御の柔軟性不足
- シークレットをif条件で使えない ため、ワークフローの分岐に工夫が必要
Nix Shopへの言及
- Nix Shop の場合、 Garnix のような新世代CIツールで YAML不要の自動ビルド が可能
- 多くの開発現場はNix Shopではないため、 一般的なCI利用者向けの問題提起
まとめとCIの理想像
- Buildkite のような「 理想的なCI体験」と比較し、GitHub Actionsの現状を問題視
- 細かい不満点が積み重なり、開発者体験が大きく損なわれている現実
- 真に 開発者が求めるCI とは何か、再考を促す内容
作者が挙げているCIシステムは色々使ったけど、CircleCIやGitHub Actionsもたくさんやってきたけど、あんまり同じ結論には至ってないな。ただ一つ注意点があって、作者が推してるBuildkiteは使ったことがないんだよね。年々、CIツールは専門的なものから一般的なものに変わってきた。JenkinsはもともとJavaプロジェクトのビルドには優れてたけど、それ以外はあんまりだったし、TravisもRailsプロジェクト用の明確なステップがあった。CircleCIも昔はそんな感じだった。これは行き止まりだったんだ。CIは特別なものじゃないって、コミュニティとして気づいたんだよね。実際、CIジョブは多様で、ウェブフレームワークや言語の知識をCIシステムに組み込むのは良くないアイデアだって分かったから、CIシステムは一般的なワークフローオーケストレーターになったんだ。ログや合否のUIがちょっと乗っかってるだけ。これは良いことだよ!CircleCI 2からGitHub Actionsに移行したのも、まさにCircleCIが専門から一般モデルへの移行を失敗したからで、そのモデルではパフォーマンスが良くて正しいCIシステムを表現できなかったんだ。GHAではそれができた。GHAにも欠点はあるけど、ログブラウザ?どうでもいいよ、ファイルをダウンロードすればいいし、少なくともCIは動くから。YAML?まぁ、ちょっとYAMLじゃないけど、設定フォーマットに追加の意味を持たせるのは最初でも最後でもないし、全てのCIシステムには独自のクセがあるからね。プラグインがDockerイメージ?重いかもしれないけど、正直言って悪いUXではないよ。何が大事かって?自分のコンピュートを持つこと?そうだね!これは重要だけど、主要なCIシステムではどれでもできるから、差別化にはならない。ダイナミックパイプライン?それは本当に素晴らしいし、Buildkiteを選ぶ理由としてはいいね。これらのプラットフォームでの経験からの私の結論は、Actionsは本当に重要な点では「かなり良い」し、他の点では問題ないってこと。もし会社を始めるならBuildkiteを選ぶかもしれないけど、オープンソースプロジェクトにはActionsがいいよ。