inSmartBank

AI家計簿アプリ「ワンバンク」を開発・運営する株式会社スマートバンクの Tech Blog です。より幅広いテーマはnoteで発信中です https://note.com/smartbankinc

Claude Codeにドキュメントを読み込ませ、Issue分解から実装まで任せてみた

https://cdn-ak.f.st-hatena.com/images/fotolife/s/smartbank/20251008/20251008164451.png

こんにちは!サーバサイドエンジニアのtanihiroこと井谷です。

皆さん、Claude Code使っていますか?先日公開した委員会制度の記事でも触れましたが、株式会社スマートバンクでは開発効率向上のための様々な取り組みを行っています。その一環として、6月よりエンジニアに対してClaude Maxプランを解放しており、私もその恩恵にあやかってClaude Codeを触り始めました。

今回は、通常の開発の中で「Claude Codeにドキュメントを読み込ませ、Issueの分解から実装までを任せてみる」というアプローチを試してみたので、AIエージェントを使った開発プロセスの1つとして紹介できればと思います。

結果として、感覚的には従来の1.5倍程度の開発効率を体感しており、十分実用的な手法だと感じています。一方で、AIにより自走させるための課題も見えてきました。

ちなみに、私はGitHub Copilot派(最後はGitHub Copilotが勝つだろう派)でしたが、もともとVimがメインエディタなこともあり、CLIツールとの親和性も高く、現在はClaude Codeしか使わなくなってしまいました。

事前準備として設計ドキュメントを用意

株式会社スマートバンクでは、もともと設計段階でかなり丁寧にドキュメントを用意します。プロダクトマネージャーがPRD(プロダクト要求仕様書)を作成し、その資料をもとにエンジニアが詳細設計を行います。

最近ではドキュメントを作成する際にもAIを活用しており、AIと壁打ちをしながら設計書を作成します。ドキュメントはNotionに保存され、最終的には他のエンジニアにもレビューをして頂き、設計の精度を高めていく運用が実施されています。

今回も、ワンバンクのとある機能のAPI開発に向けて「データモデリング(テーブル設計)」と「API設計書」を用意しました。

ステップ1:ドキュメント読み込みとIssue分解

作成したドキュメントをローカルに保存し、以下のようなプロンプトを与えます。

@xxx/ この中に、現在取り掛かろうとしている「{project name}」というプロジェクトの詳細設計が詰まっています。
優秀なエンジニアのあなたには、この実装を担当してもらいたいです。

そこで、以下のことをまずあなたに頼みたいです。

- 設計を理解し、適切な粒度のISSUEに区切る
- そのISSUE毎にPRを作成することを前提とする
- PRのレビューは私含め、人間が行うため、レビューしやすい粒度にする
- ISSUE化のリストアップしたものをxxx以下にmarkdownとして出力し、現在の進捗をそのファイルで管理する
- あなたは途中で作業が中断された場合にも、そのファイルを確認することで、現在の進捗を確認でき、続きを実装することができるように、そのファイルを管理する必要がある
- これらの指示をいつでも思い出せるようにする必要がある
- 現在の進捗を報告するカスタムスラッシュコマンドをつくる
- 現在の進捗から続きを実装するためのカスタムスラッシュコマンドをつくる

プロンプトを作成するうえで意識したのは、以下の点です。

  • Reviewを行う際の負担が大きくならないように、なるべく小さくIssueを分解してほしいこと
  • 開発を進めていく中で、現在のステータスを人間が意識するのではなく、AIが意識できるようになること

plan mode で上記プロンプトを実行し、何回かラリーを繰り返したうえで下記の「進捗ファイル」が作成されました。

# {project name} 実装進捗管理

## プロジェクト概要
- **目的**: xxxxxxx
- **開始日**: 2025-06-16
- **総ISSUE数**: 18

## 実装フェーズ一覧

### Phase 1: データベース基盤構築

#### ISSUE #1: xxxxxxテーブルの作成
- **ステータス**: 未着手
- **担当者**: Claude
- **PR番号**: -
- **説明**: xxxxxxx
- **実装内容**:
  - マイグレーションファイルの作成
  - xxxモデルの作成
  - アソシエーション設定(xxx)
  - バリデーションとenum定義(xxx)
  - FactoryとRSpecテスト
- **依存関係**: なし
- **技術メモ**: 
  - xxxは暗号化
  
=== 長いので割愛 ===

## 実装状況サマリー
- **未着手**: 18個
- **進行中**: 0個
- **完了**: 0個
- **全体進捗**: 0%

## 次に実装するISSUE
ISSUE #1: xxxxxxテーブルの作成

## 更新履歴
- 2025-06-16: 初版作成

ステップ2:カスタムコマンドで進捗管理を自動化

これだけでは、巨大な進捗ファイルが出来上がっただけなので、「現在の進捗状況はどうなっているのか」「次に取り組むべきタスクはなんなのか」というアクションをAIがすぐに起こせるように、カスタムスラッシュコマンドを用意しました。

ちなみに、このカスタムスラッシュコマンドも要件をClaude Codeに伝え、Claude Codeに作らせています。

/{project name}-status 現在の進捗を報告

# {project name} 進捗確認

現在の{project name}プロジェクトの進捗を確認します。

## 実行内容
1. `xxx/implementation_progress.md` を読み込み
2. 現在の進捗状況をサマリー表示
3. 次に実装すべきISSUEを特定
4. 進行中のタスクがあれば状況を報告

## プロンプト
xxx/implementation_progress.mdを読み込んで、現在の{project name}プロジェクトの進捗状況を報告してください。

以下の情報を含めてください:
- 全体の進捗(完了/進行中/未着手の数)
- 現在進行中のISSUE
- 次に実装すべきISSUE
- 最近の更新や問題があれば

簡潔に日本語で報告してください。

/{project name}-continue 次のタスクから実装を継続

# {project name} 実装継続

{project name}プロジェクトの実装を継続します。

## 実行内容
1. `xxx/implementation_progress.md` を読み込み
2. 次に実装すべきISSUEを特定
3. そのISSUEの実装を開始
4. 進捗ファイルを適切に更新

## プロンプト
xxx/implementation_progress.mdを読み込んで、**{project name}**プロジェクトの次の実装タスクを継続してください。

以下の手順で進めてください:
1. 現在の進捗状況を確認
2. 次に実装すべきISSUEを特定(未着手で依存関係が満たされているもの)
3. そのISSUEの実装を開始
4. 実装完了後、progress.mdを更新

実装ガイドライン(ai_guidelines/)に従って実装し、適切なテストも含めてください。

株式会社スマートバンクでは、AI向けのガイドラインを整備しており、今回も開発を進める際にはそちらを参照するように指定しています。

blog.smartbank.co.jp

/{project name}-rebuild-issues 実装計画のISSUEを再構築

また、実装中に設計に手が入ることもあったので、ISSUEを再構築するコマンドも作らせました。

# {project name} 実装計画再構築

設計ドキュメントを読み込んで、実装計画のISSUEを再構築します。

## 実行内容
1. 設計ドキュメント(データモデル、API設計)を読み込み
2. 現在の実装計画との差分を特定
3. ISSUEの追加・修正・順序変更を実施
4. `implementation_progress.md`を更新

## プロンプト
以下のファイルを読み込んで、{project name}プロジェクトの実装計画を再構築してください:
1. xxx/00_data_modeling.md
2. xxx/01_api_design.md
4. xxx/implementation_progress.md

読み込み後、以下の手順で実装計画を再構築してください:

1. 設計ドキュメントと現在の実装計画の差分を特定
2. 不足しているISSUEや修正が必要なISSUEをリストアップ
3. 実装順序の最適化(依存関係を考慮)
4. implementation_progress.mdを更新

特に以下の点を確認してください:
- データモデルが設計通りか(テーブル名、カラム名、enum値)
- APIエンドポイントが設計通りか
- 状態遷移ロジックが正しく実装されているか
- 機能が網羅されているか

更新後、変更内容のサマリーを報告してください。

これらのカスタムスラッシュコマンドを使用することで、セッションを開始してすぐの状態でも、適切にコンテキストを与えられるようになりました。

> /{project name}-status is running…

⏺ Read(xxx/implementation_progress.md)
  ⎿  Read 336 lines (ctrl+r to expand)

⏺ 📊 {project name}プロジェクト 進捗状況

  全体進捗

  - 完了: 1個
  - 進行中: 0個
  - 未着手: 17個
  - 全体進捗: 5.6%

  現在の状況

  - 最新完了: ISSUE #1 (xxxxxxテーブルの作成) - PR #xxxでマージ済み
  - 進行中のISSUE: なし
  - 次に実装すべき: ISSUE #2 (xxxxxxテーブルの作成)

  Phase 1の状況

  データベース基盤構築フェーズで、xxxモデルの基盤は完成。次はxxxを管理するテーブルの実装が必要。

  次のタスクから再開可能な状態です。
> /{project name}-continue is running…

⏺ 実装進捗ファイルを確認して、次のタスクを開始します。

⏺ Read(xxx/implementation_progress.md)
  ⎿  Read 424 lines (ctrl+r to expand)

⏺ 次のタスクを確認します。現在の進捗を見ると、次に実装すべきISSUEは ISSUE #10: xxxの更新 です。

⏺ Update Todos
  ⎿  ☐ xxxを特定
     ☐ xxxに更新
     ☐ PRの作成
     ☐ テストの更新

⏺ まず、新しいブランチを作成します。

⏺ Bash(git checkout -b feature/xxxxxx)
  ⎿  Running…

ステップ3:実際の開発・レビュープロセス

用意したカスタムスラッシュコマンドを叩きながら、開発を進めていきます。

最初はauto-accept edits onで進めていましたが、意図通りにならないことも多く、編集時は人間が確認するようにしました。基本的には「承認」をポチポチしつつ、ズレがあれば都度指摘を入れる形です。

各Issue完了後にDraft PRを作成し、改めて全体を確認すると、編集時には気づかなかった細かい問題(コード全体の一貫性や命名規則、株式会社スマートバンク固有の実装パターンとの整合性など)が見つかります。気になる点があればClaude Codeに戻って修正指示を出すという流れです。

実は一番時間がかかったのは、PRのDraftができてから自分なりの品質確認を完了させ、他メンバーにレビュー依頼を提出するまでの時間でした。

このあたりはAIのガイドラインの整備や、重複コードを見つけ出すツールなどで改善していけるポイントだと思っています。

もちろん、Claude Codeにほぼ自走してもらうことが理想ではありますが、開発スピードは十分早くなっていることを体感しました。

実装が完了していくと、どんどん進捗を更新していってくれる

ステップ4:開発ルールの育成

実装を進めていくと、毎度同じ指摘をClaude Codeに入れていたりすることがあります。それらは開発ルールとして、進捗ファイルに追記していきました。(本来は CLAUDE.md に書くべきですが、今回は実験的なこともあり、進捗ファイルに記載しました)

ルールを追加する際にも、自分でエディタを開くことはなく、Claudeとのやり取りの中で「これ、ルールに追加しておいて」と指示を出していました。

## 実装ルール
1. **PR作成単位**: 一つ一つのISSUE単位で必ずPRを作成すること
2. **ブランチ管理**: 実装開始時に必ずブランチを切ること
3. **PR作成タイミング**: 実装完了後、progress.mdを更新する前に必ずPRを作成すること
4. **完了の定義**: PRを作成するところまで到達したら「完了」とすること
5. **コミット粒度**: 適度な粒度でコミットを作成すること
6. **作業区切り**: 必ず一つ一つのISSUEで区切ること。連続して作業をしないこと
7. **品質チェック**: コミットの前に必ずRuboCopとRSpecを実行すること
8. **コマンド実行**: 
   - RSpecテスト: `bin/rspec`を使用すること
9. **PRテンプレート**: PR作成時は必ず`xxx/pr_template.md`のテンプレートを使用すること
10. **PR作成方法**: 必ず以下の条件でPRを作成すること
    - `--draft`オプションを使用してDraftで作成
    - `--base`オプションで適切なベースブランチを指定
    - ISSUE番号などの内部情報をタイトルや説明に含めない
11. **コミットメッセージ**: ISSUE番号などのローカル情報はコミットメッセージに含めないこと

なお、ネット上でもよく話題にあがりますが、このルールが絶対に守られるわけではないのが難しいところですね…。

git worktreeで並列化を試してみた

ある程度直列でタスクを進められることがわかってきたので、git worktreeを利用し複数のIssueを並列にClaude Codeにまかせてみることにしました。

git worktree add ../issue11 -b feature/issue11 origin/develop
git worktree add ../issue12 -b feature/issue12 origin/develop
git worktree add ../issue13 -b feature/issue13 origin/develop

各ディレクトリで、以下のように指示を出してみます。

ISSUE#11~#13までをgit worktreeで並列に進めることにしました。あなたは#11担当です。進めてください。

注意点として、隠しファイルはworktreeではコピーされないため、ignoreしていた「進捗ファイル」などはworktree側には存在しません。そのため、シンボリックリンクを設定し、各ディレクトリで共通の「進捗ファイル」を参照するようにしました。

並列化の様子

しかし、これは完全に人間がボトルネックとなりました。各ディレクトリで次々と「編集の確認」を求められ、あっという間に頭がパンクする感覚がありました。

worktree毎に脳みそを切り替える必要があり、スイッチングコストが増した分、直列で進めていたときよりも効率は悪くなったような気がします。

並列化する際にはある程度自走させ、出来上がったものをPRで確認するなどにしないと、なかなか難しいなと感じました。(そうなると、DevinやClaude Code Actionsでいいじゃないか、という気もするのですが)

で、Claude Maxプランはお得なの?

6月の初旬から約3週間使ってみましたが、ccusage コマンドで試算すると、従量課金の場合は約$400相当のAPI利用料がかかっていたことがわかりました。

2025年6月現在、利用しているClaude Maxプラン (5x) の月額料金は$100なので、約$300もお得だったことになります。ただし、Opusモデルはわりとすぐに利用制限に達してしまった印象です。

今回紹介したプロジェクト以外にもClaude Codeを活用していましたが、本来これだけかかっていたコストを一切気にせずにガンガン利用していけるプランは素晴らしいですね。

ccusageの実行結果

おわりに

現在は開発もだいぶ進んできたのですが、設計やコードレビュー、QAなど重要な部分は人間が担保しつつ、実装部分は今のところほぼClaude Codeが進めています。

丁寧に作成したドキュメントを用意し、適切な粒度でIssue分解をさせることで、かなりスムーズにAIエージェントでの開発を進められることがわかってきました。それと同時に、AIにもっと自走させるために人間が整備することなど、開発効率を更に上げるための課題も少なからず見えてきたように思います。

株式会社スマートバンクでは、今回のようなAIエージェントを活用した新しい開発手法にも積極的に挑戦し、開発効率の向上を追求しています。最新の技術やツールを使って、より良いプロダクトを作ることに興味のあるエンジニアの方がいらっしゃいましたら、ぜひ一緒に働きましょう!

smartbank.co.jp


※この記事のアイキャッチ画像は oh-my-logo を使用して作成しました。素敵なツールをありがとうございます。

We create the new normal of easy budgeting, easy banking, and easy living.
In this tech blog, engineers and other members will share their insights.