AI を使った開発で実践していること
個人的なメモとしての役割メイン、数ヶ月後に振り返ってもおもしろそう。
以下、口頭で話した内容をclaudecodeにまとめてもらいました!
普段の AI の使い分けと、開発時のプラクティスについて。
使っている AI サービスと用途
主に使っているのは以下の 3 つ。Claude と ChatGPT は個人で課金、Gemini は会社で利用可能な状態になっている。
| サービス | 主な用途 | 契約 |
|---|---|---|
| Claude | コーディング | 個人課金 |
| ChatGPT | 日常の質問、壁打ち | 個人課金 |
| Gemini | 予定管理、画像処理 | 会社 |
ChatGPT
日常の質問や雑談に使っている。ディープリサーチで調べ物をすることもある。
音声チャットで壁打ちをすることが多い。思考が詰まったときに口頭で話しながら整理するのに向いている。過去の会話を覚えているので、文脈を踏まえた返答が返ってくる。
Gemini
使用頻度は低いが、Google カレンダーとの連携で使う場面がある。
- 予定が書いてある画像やスクリーンショットを投げてカレンダーに予定を登録してもらう
- ナノバナナを使いたいときに投げる
Claude
開発は基本的に Claude Code で行っている。
Claude Code の WebView も使っている。出先で環境を立ち上げるほどでもない軽いタスクは Web 側に投げて完結させることがある。
Web サービスの設定方法や操作手順がわからないときは Claude Cowork を使っている。画面を見ながら操作手順を調べてもらったり、そのまま作業を代行させたりしている。
Claude Code の運用
開発環境の基盤
ワークスペースは常に DevContainer で構築している。ローカルのツール管理には mise を使っており、Claude Code を含む各種ツールを mise の管理下に置いている。
mise による最新版の維持
ローカル環境を立ち上げたらまず mise で Claude Code をアップグレードする。自動アップデートが入ることもあるが、手動でも毎回確認している。
公式マーケットプレイスのスキル導入
定期的に Claude Code 公式マーケットプレイスを確認して、新しいスキルやプラグインを導入している。認証不要のものは基本的に全て入れる。公式以外のマーケットプレイスは見ていない。
設定のスコープ
Claude Code の設定はプロジェクトスコープにして .claude ディレクトリに配置している。使用スキル、プラグイン、共通ルールをリポジトリに含めることで、環境間で同期できるようにしている。
docstring への背景情報の記録
コーディング時の共通指示として、背景情報を docstring に詳細に残すようにしている。なぜその実装にしたのか、なぜこの処理が必要なのかをコード内に書き残す。
この指示のように、特定のプロジェクトに限らず横断的に適用したいルールがある。こうした共通ルールの管理は次のテンプレート同期で行っている。
テンプレートによるプロジェクト横断の設定同期
以下のような設定をテンプレートリポジトリで一元管理している。
- DevContainer の設定
- mise の設定
- Claude Code の設定(
.claude配下) - 使用スキル・プラグインの定義
- コーディング時の共通ルール(docstring の書き方など)
このテンプレートに対して、各プロジェクトから双方向に同期できる仕組みを作っている。
運用の流れ:
- プロジェクト A で設定を改善する
- プロジェクト A からテンプレートにプッシュする
- プロジェクト B でテンプレートからプルする → プロジェクト A の改善が反映される
- プロジェクト B で別の改善を加える
- プロジェクト B からテンプレートにプッシュする
- プロジェクト A でテンプレートからプルする → プロジェクト B の改善も反映される
どのプロジェクトで行った改善でもテンプレート経由で他のプロジェクトに伝播するので、設定が常に最新の状態に保たれる。新規プロジェクトを作るときもテンプレートから始めれば、その時点での最新設定が手に入る。
Jujutsu によるバージョン管理
Claude Code で並列に開発するようになってから Jujutsu(jj)を導入した。まだ完全には理解していないが、Git のときよりもコミットを気軽に打てるようになった。どのブランチにいるかをあまり意識せずに作業を進め、必要に応じてリベースやコンフリクト解決の指示を出している。
サブモジュールによるマルチリポジトリ構成
会社のプロジェクトでは、管理用のルートリポジトリを作り、関連リポジトリをサブモジュールとして配置している。ルートで Claude Code を起動すると全リポジトリのコンテキストを参照できる。ルート側にフックを入れて、テスト実行などの制御も行っている。
MCP・CLI によるツール連携
SQL クエリの検証環境
Redash で SQL を書く場面では、AI にクエリを生成させる環境を用意している。
- Redash のスキーマ情報をローカルにインポート
- ローカルに空の PostgreSQL DB を立てる(スキーマのみ Redash と同一)
- 生成したクエリをローカル DB で実行して構文を検証
- 通ったら Redash に持っていく
本番 DB には顧客情報が含まれるため、ローカルにはスキーマ情報のみを配置する。クエリの構文エラーを事前に検出できるので、Redash 上での手戻りがなくなる。
Chrome DevTools MCP
DevContainer 内に Playwright と Chrome を入れ、Chrome DevTools MCP で動作確認を行えるようにしている。ホストの Chrome ではなく DevContainer 内で完結させている。
AI が動作確認まで自律的に実行できる環境を作っておくと、修正と検証のイテレーションを自動で回してくれる。
音声入力による指示
AI への指示はほぼ全て音声入力で行っている。タイピングで指示を出すこともあるが、基本は口頭。
理由は、口頭の方が情報量が増えるため。タイピングだと端的な指示になりがちだが、口頭だと「これをやってください。背景としてはこういう事情があって、こういう目的でこの実装にしたい」という形で、背景情報が自然に含まれる。タイピングでは省略しがちな情報が、口頭だとストレスなく伝えられる。
AI に渡すコンテキストの質が上がれば、出力の精度も上がる。音声入力はそのための手段として有効だと考えている。
Discussion