Claude CodeとCI/CDパイプラインを構築した話し
こんにちは!今回は、SWE(Software Engineer)エージェントの1つである「Claude Code」と一緒にGitHub ActionsでCI/CDパイプラインを構築した体験を共有したいと思います。AIとの掛け合いでどのように開発が進んだか、実際のやり取りを再現しながらお伝えします。
💡 なんと、この作業は2時間弱で完了しました! AIとの協業を実感できる事例だと思います。
Claude CodeとCI/CDパイプラインを構築している一コマ
はじめに:なぜCI/CDが必要だったのか
私が管理しているMCP Driven UX Templateというリポジトリ。ある程度仕組みが作れたので、品質管理の仕組みを早めに整えたいと思っていました。
👨💻 私:「このリポジトリについて、CI/CDを考えていきたい。自動的にテストする観点でどのように段階的に考えて行けばよい?」
🤖 Claude Code:「このリポジトリはTypeScript/Node.js APIとPython MCPサーバーで構成されたマイクロサービスアーキテクチャですね。段階的アプローチを提案します!」
そして、以下のような段階的な計画を提示してくれました:
第1段階:基本的なユニットテスト
第2段階:統合テスト
第3段階:CI/CDパイプライン
第4段階:高度なテスト
💡 なるほど、いきなり全部やるのではなく、段階的に進めるのが良さそうです。
テストのタイミングについて
👨💻 私:「このテストはどのタイミングで行われるか?」
🤖 Claude Code:「良い質問ですね!テスト実行タイミングを整理します」
Claude Codeは、以下のような実行タイミングを提案してくれました:
-
ローカル開発時
-
npm test
- 手動実行 -
npm test:watch
- ファイル変更時に自動実行
-
-
プルリクエスト/マージリクエスト時
- 全テストスイート実行
- コードカバレッジチェック
-
CI/CDパイプライン
- push毎に実行
- 統合テスト含む全テスト
👨💻 私:「自端末と、GitHub上でテストが行われるということ?」
🤖 Claude Code:「はい、その通りです!」
💡 両方でテストすることで、個人の開発効率とチーム全体の品質を両立できるという説明に納得しました。
CI/CDパイプラインって何?
ここで基本的な質問をしてみました。
👨💻 私:「さっきCI/CDパイプラインと言っていたけど、パイプラインって何?Gitの概念?」
🤖 Claude Code:「パイプラインはGitの概念ではなく、CI/CDツールの概念です。水道管(パイプライン)のように、コードが段階的に流れていくイメージです」
コード → テスト → ビルド → デプロイ
💡 なるほど、イメージしやすい説明です!
いよいよ実装開始
👨💻 私:「CI/CDパイプラインを試してみたいけど、どうしたらよいか?」
🤖 Claude Code:「GitHub Actionsで簡単に始められます!」
ここで重要な制約を伝えました:
👨💻 私:「環境制約でGitHubへの直接作成やGitコマンドはうまく動かない気がする。ファイル作成以外が発生する場合は私が手を動かすので教えて」
🤖 Claude Code:「了解しました!CI/CDパイプラインを設定するための手順を説明します」
💡 Claude Codeは制約を理解して、必要なファイルを作成し始めました。
エラーとの戦い
エラー1:古いバージョンの問題
最初のプッシュ後、GitHub Actionsでエラーが発生しました。
Error: Missing download info for actions/upload-artifact@v3
👨💻 私:「下記エラーでした。<エラーログ>」
🤖 Claude Code:「actions/upload-artifact@v3が古いバージョンなので、v4に更新しましょう!」
エラー2:ESLintの設定不足
ESLint couldn't find a configuration file.
👨💻 私:「下記エラーでした<エラーログ>」
🤖 Claude Code:「ESLintの設定ファイルが見つからないエラーですね。ESLint設定ファイルを作成しましょう!」
エラー3:pgTypedの問題
これが一番厄介でした。CIでビルドしようとすると:
Error: getaddrinfo EAI_AGAIN db
🤖 Claude Code:「pgTypedがデータベースに接続しようとしてエラーになっています。CI環境ではdbというホスト名が解決できません」
💡 この問題に対して、Claude Codeは巧妙な回避策を提案しました:
🤖 Claude Code:「CIでは事前にクエリファイルを生成しておく必要があります。ダミーファイル生成スクリプトを作りましょう!」
// generate-dummy-queries.js
files.forEach(file => {
const baseName = path.basename(file, '.sql');
const content = `
export interface I${pascalName}Result {
id?: number;
name?: string;
// ... 必要な型定義
}
export const ${camelName} = {
run: async (params?: I${pascalName}Params) => []
};`;
fs.writeFileSync(queryFile, content);
});
エラー4:Dockerビルドの環境変数
env file .env not found
👨💻 私:「この.envって、.env.sampleをコピー&リネームして作る想定なんですよね。CI/CDでは空ファイルでよい?それとも運用を想定したコピー&リネームが良い?」
🤖 Claude Code:「良い質問です!CI/CDでは.env.sampleをコピーする方が運用に近くて良いですね」
カバレッジ問題の現実的な解決
テストカバレッジ70%の閾値でエラーになりました。
👨💻 私:「テストってサンプルで少ししか作ってないから70%いかないよね。どういった修正になる?」
🤖 Claude Code:「その通りです!サンプルテストしかないので70%のカバレッジ閾値は厳しすぎますね。いくつかの選択肢があります」
結局、現実的な1%に設定することにしました。
👨💻 私:「OK。案1のカバレッジの閾値を下げるにしましょうか。10%もいかないと思うので、1%で」
🤖 Claude Code:「修正完了!プッシュしてください」
ついに成功!
最後のプッシュ後...
👨💻 私:「お、全部グリーンになったよ!」
🤖 Claude Code:「🎉 素晴らしい!完璧なCI/CDパイプラインが完成しました!」
オールグリーンになった様子
実際に構築したGitHubのActionsはこちら。
2時間弱での成果
💡 驚くべきことに、この一連の作業はわずか2時間弱で完了しました!
従来の方法では:
- ドキュメントを読む時間
- 試行錯誤の時間
- エラー原因の調査時間
- 解決策の検討時間
これらを合わせると、おそらく1週間かかっていたでしょう。
Claude Codeとの協働により:
- ✅ エラーの即座の原因分析
- ✅ 最適な解決策の提案
- ✅ 現実的な判断のサポート
- ✅ コード生成の自動化
これらが体験でき、大幅な時間短縮につながりました。
まとめ
Claude Codeとの協働により、わずか2時間弱でCI/CDパイプラインを構築できました。最終的に実現できたのは:
- ✅ 自動テスト実行
- ✅ Lintチェック
- ✅ TypeScriptビルド検証
- ✅ Dockerイメージビルド検証
- ✅ カバレッジレポート生成
- ✅ セキュリティスキャン
AIペアプログラミングの素晴らしさは、技術的な課題に直面したときに、すぐに相談相手がいることです。エラーメッセージを見せれば原因を分析してくれ、現実的な解決策を一緒に考えてくれます。
💡 時間効率の面でも、学習効果の面でも、AIペアプログラミングは非常に有効な開発手法だと実感しました。
皆さんもぜひ、AIツールを活用した開発を試してみてください。思っているより簡単に、そして驚くほど短時間で、品質の高い開発環境が構築できますよ!
Discussion