🦒

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は、以下のような実行タイミングを提案してくれました:

  1. ローカル開発時

    • npm test - 手動実行
    • npm test:watch - ファイル変更時に自動実行
  2. プルリクエスト/マージリクエスト時

    • 全テストスイート実行
    • コードカバレッジチェック
  3. 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はこちら。
https://github.com/Masa1984a/MCP_Driven_UX_Template/actions

2時間弱での成果

💡 驚くべきことに、この一連の作業はわずか2時間弱で完了しました!

従来の方法では:

  • ドキュメントを読む時間
  • 試行錯誤の時間
  • エラー原因の調査時間
  • 解決策の検討時間

これらを合わせると、おそらく1週間かかっていたでしょう。

Claude Codeとの協働により:

  • ✅ エラーの即座の原因分析
  • ✅ 最適な解決策の提案
  • ✅ 現実的な判断のサポート
  • ✅ コード生成の自動化

これらが体験でき、大幅な時間短縮につながりました。

まとめ

Claude Codeとの協働により、わずか2時間弱でCI/CDパイプラインを構築できました。最終的に実現できたのは:

  • ✅ 自動テスト実行
  • ✅ Lintチェック
  • ✅ TypeScriptビルド検証
  • ✅ Dockerイメージビルド検証
  • ✅ カバレッジレポート生成
  • ✅ セキュリティスキャン

AIペアプログラミングの素晴らしさは、技術的な課題に直面したときに、すぐに相談相手がいることです。エラーメッセージを見せれば原因を分析してくれ、現実的な解決策を一緒に考えてくれます。

💡 時間効率の面でも、学習効果の面でも、AIペアプログラミングは非常に有効な開発手法だと実感しました。

皆さんもぜひ、AIツールを活用した開発を試してみてください。思っているより簡単に、そして驚くほど短時間で、品質の高い開発環境が構築できますよ!

Accenture Japan (有志)

Discussion