Claudeと創る、限界を超えたロボット開発 - ROS2開発効率5倍化とXROBOCON優勝までの軌跡
目次
- この記事の対象読者
- 結論:Claude活用で何が変わったのか
- 開発効率の定量的な変化
- はじめに
- Claude活用の進化:3段階の成長プロセス
- Claude活用で学んだベストプラクティス
- まとめ:Claudeとの協働がもたらしたもの
- おわりに - AI協働開発の未来
- 付録:ROS2用語集
1. この記事の対象読者
✅ この記事はこんな方に役立ちます
- AI開発ツール(Claude/GitHub Copilot等)を使っているが、もっと効率化したい
- 複雑なシステム開発でAIをどう活用すべきか悩んでいる
- 「AIに仕事を任せても期待通りにならない」と感じている
- サンクコスト(過去の労力への執着)で新しい手法に踏み切れない
- チーム開発でAIツールをどう使うか模索している
❌ ROS2の知識は不要です
この記事はROS2の技術解説ではなく、「AI協働開発のベストプラクティス」を学べる内容です。登場する技術的課題は、Webアプリ開発、データ分析、組込み開発など、あらゆる分野に応用できます。
2. 結論:Claude活用で何が変わったのか
2025年、私はROS2(Robot Operating System 2:ロボット開発用のソフトウェア基盤)を使った2つのロボット開発プロジェクトに取り組みました。そして、その開発の中心にはClaude CodeというAI開発パートナーがいました。
結論から言います。Claude Codeとの協働により、ROS2開発のコーディング効率は5倍以上に向上しました。 そして何より、チームでXROBOCON 2025優勝という成果に貢献できたのです。(https://www.xrobocon.tech/)
Claude活用の3段階成長プロセス
Phase 1: 手探りの質問ベース
開発効率:1倍(ベースライン)
心境:「AIって結局使えないのでは...?」
問題:毎回同じ説明を繰り返す虚無感
Phase 2: CLAUDE.mdで仕様を明文化【ブレイクスルー】
開発効率:5倍
心境:「これだ...!Claudeが専属エンジニアになった!」
成果:XROBOCON 2025優勝🏆
Phase 3: マルチエージェント&自動化【確立されたワークフロー】
開発効率:5倍以上(Phase 2で達成した水準を維持)
心境:「最初から正しいアプローチで開発できる安心感」
成果:2,000ファイル超でもスムーズ開発
3. 開発効率の定量的な変化
XROBOCON開発初期(Phase 1)vs メカナムホイールロボット開発最終段階(Phase 3)
| 指標 | 開発初期(Phase 1) | 開発最終段階(Phase 3) | 改善率 |
|---|---|---|---|
| 問題特定までの時間 | 1-2時間 | 10-30分 | 75%短縮 |
| 同じ質問の繰り返し | 頻繁 | ほぼゼロ | 95%削減 |
| ビルドエラー解決 | 30分-1時間 | 5-15分 | 80%短縮 |
| TF問題のデバッグ | 半日-1日 | 30分-1時間 | 85%短縮 |
主観的な変化
Phase 1(XROBOCON開発初期)
- ❌ 毎回プロジェクト説明から始める虚無感
- ❌ 同じ問題を何度も質問する自己嫌悪
- ❌ 「これ前も聞いたな...」という既視感
Phase 3(メカナムホイールロボット開発最終段階)
- ✅ Claudeがプロジェクトを完全理解している安心感
- ✅ 専門エージェントが的確な提案をしてくれる頼もしさ
- ✅ 過去の知見が蓄積されている満足感
4. はじめに
この記事で伝えたいのは、AIと協働して、自分の担当領域で限界を超えていく体験です。
重要な注記:チーム開発について
本記事で紹介するXROBOCONプロジェクトはチーム開発です。私が主に担当したのはソフトウェアによる「判断」部分(どこに移動する?壁を検出した?登る?)であり、以下の役割分担がありました:
- ソフトウェア上位制御:私(ロボットの「頭脳」)
- 駆動系・昇降系制御:他のチームメンバー(「神経」)
- 駆動回路開発:他のチームメンバー(「筋肉」)
- メカ設計:他のチームメンバー(「骨格」)
- VR+ROS2連携:他のチームメンバー(「神の声」)
- プロジェクトマネジメント:リーダー(「司令官」)
優勝はチーム全員の努力の結果です。本記事は、その中で私が主担当した「判断する部分」のソフトウェア開発におけるClaude活用の体験を共有するものです。
取り組んだ2つのプロジェクト
-
XROBOCON 2025 - 壁登りロボット【優勝🏆】
- 競技用自律壁登りロボットシステム
- 技術要素:自己位置推定、自動ナビゲーション、壁の検出、高さが違う3段の壁上り制御
- ソースファイル数:151ファイル
- 成果:Claude活用により開発効率5倍超、大会優勝達成
-
メカナムホイールロボット with 3Dカメラ
Claude活用の進化:3段階の成長プロセス
5. Phase 1: 手探りの質問ベース開発と苦闘
開発スタイル:「困ったらとりあえず聞く」
大会に参加を決めた際、私は不安を抱えていました。チームの中で私が主担当する「ナビゲーション」「壁検出」「壁上り制御」という3つの複雑なROS2上位制御を協調動作させる必要があったのですが、これを設計・実装するのは困難に思えたのです。
正直に言うと、「自分一人でこの複雑さを扱えるのか...」という不安がありました。 でも同時に、「Claudeという強力なパートナーがいる。一人で抱え込まなくていいんだ」という安心感もありました。
典型的な会話例
私:「ナビゲーション(自動移動)が動かないんですけど...」
Claude:「座標系(位置の基準点)の構成を確認しましょう。base_link → odom → mapの構成ですね」
私:「いや、うちのシステムはd_team_map → d_team_odom → d_team_base_linkの順です」
Claude:「申し訳ございません。では、d_team_map → d_team_odom → d_team_base_linkで確認します」
(数日後、別の問題で...)
私:「壁検出の座標がずれるんですけど」
Claude:「座標系はmap → odom → base_linkですよね?」
私:「...また同じ間違い。d_team_map → d_team_odom → d_team_base_linkです。前も説明しましたよね?」
この時期はClaudeが過去の説明を忘れて同じ間違いを繰り返すため、毎回修正する手間がかかり、非効率な状態でした。
正直に言うと、この段階では「AIを使っても大して効率上がらないな...」と感じていました。 むしろ、説明する時間を考えると自分で書いた方が早いのでは?という疑念すらありました。
Phase 1での技術的課題と苦闘
問題1:ナビゲーション制御の暴走 - 「なぜロボットが壁に突っ込むのか...」
大会3ヶ月前、ロボットが制御不能になり壁に激突しました。ナビゲーションプログラムに経路追従アルゴリズムは実装したはずなのに、なぜか目標点を通り過ぎて暴走する...。
- 現象:ロボットが目標地点を通過後も減速せず、壁に衝突
- 心境:「このままじゃ間に合わない...」という焦りと、「自分の実装が間違っているのでは...」という不安で押しつぶされそうでした
このときは、プロジェクト全体の構成をClaudeが把握していなかったため、毎回設定ファイルの場所や構成を説明する必要があり、問題解決に時間がかかりました。
問題2:壁検出の誤判定地獄 - 「壁がないのに登ろうとする...」
壁検出プログラムを実装したものの、超音波センサーのノイズで誤判定が頻発。壁がない場所で壁上りプログラムが起動し、ロボットが転倒する事故が続きました。
- 現象:センサーの反射ノイズや多重反射を「壁」と誤認識
- 心境:何度テストしても誤検出が止まらず、「もう自分では解決できないかもしれない...」と諦めかけていました
問題3:自己位置推定プログラムの座標変換地獄 - 「何度修正しても間違える...」
姿勢制御センサーとマーカーを使った位置推定プログラムの開発は、特に困難を極めました。
-
繰り返される問題:
- 修正したはずの座標変換が、次の修正で元に戻る
- Claudeが前回の修正内容を記憶していない
- 変換式の符号や軸の向きを何度も間違える
Phase 1の限界:
- 開発効率:1倍(ベースライン)
- 心境:「AIって結局使えないのでは...?問題を一人で抱えている感覚がつらい...」
この時期は**「孤独な戦い」**でした。Claudeに聞いても期待した答えが得られず、自分だけで問題を抱え込んでいる感覚。モチベーションを維持するのが本当に大変でした。
6. Phase 2: CLAUDE.mdで仕様を明文化【ブレイクスルー🔥】
開発スタイル:「仕様書ファーストで設計を蓄積」
この段階で、開発効率が劇的に変わり始めました。 CLAUDE.mdという「AIのための仕様書」を書き始めたことで、Claudeが私の「専属エンジニア」のように振る舞い始めたのです。
そして何より、「一人で問題を抱えている感覚」が消え、「信頼できるパートナーと一緒に問題を解決している感覚」に変わりました。 この変化が、モチベーションを大きく向上させ、プロジェクトを加速させる原動力になったのです。
導入した改善:CLAUDE.mdの作成
プロジェクトのフォルダにCLAUDE.mdを配置し、システム概要、座標系の詳細、パラメータファイルの体系を記述しました。
このPhase 2の段階で、開発効率は約5倍になりました。 同じ説明を繰り返す時間がなくなり、Claudeが常にプロジェクト全体を把握した状態で提案してくれるようになったからです。
CLAUDE.mdの書き方:実例で解説
CLAUDE.mdとは?
プロジェクトのルートフォルダに置く「AIのための設計仕様書」です。Claudeが毎回このファイルを読み込むことで、プロジェクトの文脈を理解した状態で作業できます。
Phase 1(CLAUDE.mdなし)の問題:
私:「ナビゲーションが動かない」
Claude:「座標系はmap→odom→base_linkですか?」
私:「違う、d_team_map→d_team_odom→d_team_base_link」
Claude:「申し訳ございません」
(数日後、また同じやり取り...)
Phase 2(CLAUDE.md導入後)の改善:
CLAUDE.mdに以下のような内容を記述することで、Claudeがプロジェクトの文脈を常に把握できるようになりました。
# CLAUDE.md の実例(XROBOCONプロジェクト抜粋)
## プロジェクト概要
XROBOCON 2025競技用の壁登りロボット制御システム
## 座標系構成(重要!Claudeがよく間違える部分)
### TF Tree構造
d_team_map → d_team_odom → d_team_base_link
⚠️ **注意**: 一般的なROS2のmap→odom→base_linkではない!
理由:チーム命名規則に従い、プレフィックス"d_team_"を付与
## ノード仕様
### custom_nav_planner(ナビゲーション制御)
**目的**: Pure Pursuit制御で目標地点まで自律移動
**期待動作**:
- 制御周波数: 24Hz(重要!1Hzではない)
- 滑らかな経路追従
- 目標地点で確実に停止
**パラメータ**:
- `lookahead: 2.8m`
- 理由: フィールド幅3mに対する最適値(実験で決定)
- `max_velocity: 2.8m/s`
- `goal_reach_threshold: 0.2m`
- 意味: この距離以内で「到達」と判定
**既知の問題と対処法**:
- ❌ 問題: 目標地点を通り過ぎて暴走
- ✅ 対処: lookahead距離を目標接近時に動的調整
- 実装場所: `custom_nav_planner_node.cpp` 156-178行
### wall_detector(壁検出)
**目的**: 超音波センサーで壁を検出
**センサー仕様**:
- センサー: HC-SR04超音波センサー×3個
- 測定周期: 125ms(8Hz)
- 有効範囲: 2cm~400cm
**既知の問題**:
- ❌ 多重反射ノイズで誤検出頻発
- ✅ 対処: 時間的一貫性チェック
- 連続3フレーム(375ms)同じゾーン検出で確定
- 状態マシンにCONFIRMING状態を追加
**座標系の重要な注意**:
⚠️ 設定ファイルの座標は「base_linkからの相対座標」
(実装: wall_detector_simple_node.cpp 720-722行で加算)
## 開発時の注意事項
### 修正時の必須手順
1. コード修正
2. ビルド: `colcon build --packages-select パッケージ名`
3. 動作確認テスト実施
4. テスト結果を報告(必須!)
このCLAUDE.mdを書いたことで、Claudeとの会話が劇的に変わりました:
私:「ナビゲーションが動かない」
Claude:「CLAUDE.mdを確認しました。座標系はd_team_map→d_team_odom→d_team_base_linkですね。
TFツリーの接続状況を確認しましょう」
私:(心の中で)「最初から理解してくれている...!」
この書き方のポイント:
-
「よく間違える部分」を明記
- 座標系の順序、命名規則など
- ⚠️マークで強調
-
パラメータに「なぜその値?」を記載
- lookahead: 2.8m → 理由: フィールド幅3mに対する最適値
- 単なる数値だけでなく、設計判断の根拠を残す
-
既知の問題と対処法をセット記載
- 問題: 誤検出頻発
- 対処: 時間的一貫性チェック
- 実装場所: ファイル名と行数
-
期待動作を明確化
- 制御周波数: 24Hz(1Hzではない!)
- 「こうあるべき」を書くことで、異常検出が容易に
応用可能な書き方(他分野でも使える):
## Webアプリケーション開発の例
### APIエンドポイント設計
**POST /api/users**
- 期待動作: ユーザー登録、メール送信
- レスポンス時間: <200ms
- 既知の問題:
- ❌ メール送信で5秒待ち発生
- ✅ 対処: 非同期ジョブキューに移行(workers/email_job.py)
### データベーススキーマ
**usersテーブル**
- email: unique制約(重要!)
- created_at: UTC timezone(JST変換は表示層で実施)
⚠️ 注意: タイムゾーンをJSTで保存しない(過去のバグ原因)
効果:
このCLAUDE.mdを書いてから、同じ説明を繰り返す時間がゼロになりました。Claudeは毎回このファイルを参照するため、「前も言ったのに...」というストレスが完全に消えたのです。
Phase 2での技術的突破 - CLAUDE.mdの力を実感
突破1:Pure Pursuit制御の暴走問題の解決
この競技特有の課題: 一般的なPure Pursuit制御の教科書や資料は平坦な地面を想定していますが、XROBOCONでは「3段の段差を登りつつ、狭い経路を脱落しないようスピーディに制御する」という特殊な要求があります。このような状況に対応した明確な答えとなる資料が無かったため、この競技における特殊な制御を独自で作成しました。
CLAUDE.mdにcustom_nav_plannerノードの期待値を明文化したことで、問題解決が劇的に加速しました。
-
Claudeとの対話(CLAUDE.md導入後):
私:「Pure Pursuitを実装したのに暴走するんです...」 Claude:「CLAUDE.mdを確認しました。lookahead: 2.8m、max_velocity: 2.8m/sですが、 goal_reach_threshold: 0.2mに対してこれだと減速ロジックが働かない可能性があります。 目標点接近時にlookahead距離を動的に調整してみましょう」 私:(心の中で)「即座に問題を特定してくれた...!これが本当のパートナーだ!」 -
効果:ロボットが滑らかに減速し、正確に目標点で停止するように
-
感動の瞬間:「これだ...!完璧に動いている!」テスト走行でロボットが思い通りに動いたとき、思わずガッツポーズが出ました
-
心境の変化:「一人で悩んでいた問題を、Claudeと一緒に解決できた!」この成功体験が、大きな自信とモチベーションになりました
突破2:壁検出の誤判定問題の解決
CLAUDE.mdにwall_detectorノードのセンサー仕様を記載したことで、Claudeが的確な提案を出せるようになりました。
-
Claudeとの対話(CLAUDE.md導入後):
私:「超音波センサーのノイズで誤検出が止まらない。もう無理かもしれない...」 Claude:「CLAUDE.mdを確認しました。測定周期が125ms(8Hz)で、多重反射ノイズが 既知の問題とありますね。時間的一貫性チェックを実装しましょう。 連続3フレーム(約375ms)で同じゾーンに検出された場合のみ『壁』と認定する CONFIRMING状態を状態マシンに追加してはどうでしょうか?」 -
効果:誤検出が95%削減、信頼性の高い壁検出を実現
-
感動の瞬間:「10回連続で正確に壁を検出している...やった!」チームメンバーに報告したとき、みんなが喜んでくれたのが嬉しかった
-
心境の変化:「諦めかけていた問題を、Claudeと一緒に乗り越えられた!」自分一人では思いつかなかった解決策をClaudeが提案してくれたことで、「二人で問題を解決している」実感が湧きました
突破3:座標系の解釈ミス問題の解決
wall_detectorノードの壁検出円形ゾーン設定で、設定ファイルの座標値を絶対座標と誤解釈してしまい、実際のロボット位置と検出位置が1メートル以上ずれていました。
-
Claudeとの対話(CLAUDE.md導入後):
私:「wall_detectorの設定ファイルの座標を絶対座標で設定したのに位置がずれます...」 Claude:「CLAUDE.mdの座標系警告を確認しました。wall_detector_simple_node.cppの 実装を見ると、720-722行目でcircle.xとcircle.yがロボット位置に加算されています。 これは実装が相対座標系を前提としているためです。設定ファイルの値は ロボット(base_link)からの相対位置として解釈されています」 -
効果:座標系関連のバグが80%減少、設定変更が直感的に
突破4:odom_ar_fusionノードの座標変換問題の根本解決
Phase 1で苦しんだ姿勢制御センサーとARマーカ融合による位置推定の座標変換問題も、CLAUDE.mdへの明文化で解決しました。CLAUDE.mdに詳細な座標系仕様と変換ルールを記載したことで、Claudeが一貫した変換を提案できるようになりました。
突破5:制御頻度問題のデバッグ - 「これがCLAUDE.mdの力か...!」
custom_nav_plannerノードが配信する速度指令の配信頻度が期待の24Hzではなく1Hzになっている問題。この問題を解決したとき、CLAUDE.mdの真の価値を実感しました。
CLAUDE.md活用後の対応(Phase 2):
- CLAUDE.mdに記載された
control_loop_rate: 24.0を確認 - Claudeに「期待は24Hzなのに1Hzしか出ていない」と明確に報告
- Claudeが即座にソースコードの問題を特定
この問題は、CLAUDE.mdに明文化された仕様があったからこそ、期待値とのギャップを即座に特定でき、根本原因まで素早くたどり着けました。
Phase 2の成果
Claudeとの対話を通じて、ROS2システムのアーキテクチャが次々と明確になっていきました。 状態マシンの設計、制御権のハンドオフ、トピックフローの最適化――一つひとつの設計判断をCLAUDE.mdに記録していくことで、複雑なシステムが形になっていったのです。
Phase 2の到達点:
CLAUDE.mdを使った開発スタイルのおかげで、XROBOCON 2025では複雑な状態マシン制御システムを短期間で完成させることができました。メカチームの設計した機構、駆動系・昇降系制御チームのマイコン制御、ハードウェアチームの駆動回路、そして私のROS2上位制御が見事に統合され、チームで大会優勝を勝ち取ることができました。
そして大会当日、ロボットは3段目頂上まで到達しました。 24Hzの高速制御で滑らかにナビゲーションし、3段階の壁検出で確実に壁を認識し、6ステップのシーケンスで安定して壁上りする――この光景をチームメンバーと一緒に見たとき、「やり遂げた...!」という感動が込み上げてきました。
「Claudeと一緒なら、自分一人では不可能だった複雑なシステムも作れる」――この確信が、私のモチベーションを大きく高めてくれました。 Phase 1で感じていた孤独感や不安は完全に消え、「信頼できるパートナーと共に問題を解決できる」という安心感と自信に変わったのです。
Phase 2での変化:
- 開発効率:5倍
- 心境:「これだ...!Claudeが専属エンジニアになった!一人じゃない、一緒に創り上げている!」
- モチベーション:Phase 1の「孤独な戦い」から「信頼できるパートナーとの協働」へ
7. Phase 3: マルチエージェント&自動化【究極進化🚀】
開発スタイル:「専門エージェントチームと自動化で効率最大化」
XROBOCONの成功で自信を得た私は、**「Claude活用をさらに極められないか?」**と考えるようになりました。そして辿り着いたのが、「マルチエージェント」という概念です。
この段階で、開発効率は初期の5倍以上に到達しました。 もはやClaudeは単なるツールではなく、複数の専門家チームとして機能し始めたのです。
導入した高度な機能
1. 専門ROS2エージェント
メカナムホイールロボットプロジェクトでは、ROS2専門のカスタムエージェントを作成:
-
ros2-system-architect: システムアーキテクチャ設計 -
ros2-diagnostician: 診断・デバッグ -
ros2-cpp-implementer: C++実装 -
ros2-coordinator: マルチノード調整 -
ros2-validator: テスト・検証
エージェントの作り方(具体例)
.claude/agents/ディレクトリに各エージェントの役割を定義したMarkdownファイルを配置します。
例:ros2-diagnostician.md
# ros2-diagnostician
## 役割
ROS2システムの診断・デバッグ専門エージェント
## 使用タイミング
- システムが期待通り動作しない
- TF変換エラーが発生
- トピックの配信に問題がある
## 診断手順
1. TFツリーの状態を確認(`ros2 run tf2_tools view_frames`)
2. トピックの配信状況を確認(`ros2 topic list`, `ros2 topic hz`)
3. ログファイルから原因を特定
4. 修正提案と検証手順を提示
このように役割と動作を明文化することで、Claudeが適切に専門家として振る舞います。
2. オーケストレーション:指揮者エージェントの存在
Phase 3で最も重要だったのが、複数のエージェントを統括する「指揮者」の仕組みです。
💡 例えるなら:
あなたが「家を建てたい」と言ったら、建築士、大工、電気工事士、配管工を自動で呼んで、適切な順番で仕事を振り分けてくれるコーディネーターのようなものです。「何を作りたいか」だけ伝えれば、「誰に」「どの順番で」「どう依頼するか」を自動で判断してくれます。
.claude/MODE_Orchestration.mdと.claude/MODE_Task_Management.mdが、オーケストラの指揮者のように、タスクの性質を判断して最適なエージェントに仕事を振り分けます。
オーケストレーションモードの役割:
複雑なタスク受領
↓
【指揮者が判断】
↓
├─ 設計が必要? → ros2-system-architect
├─ デバッグ? → ros2-diagnostician
├─ 実装? → ros2-cpp-implementer
├─ テスト? → ros2-validator
└─ 複数エージェントの連携が必要? → 段階的に振り分け
実際の動作例:
私:「ZED2iカメラを統合して3Dマッピングしたい」
【Orchestration Mode起動】
↓
Phase 1: ros2-system-architect
→ TFツリー設計、トピック設計を担当
↓
Phase 2: ros2-cpp-implementer
→ カメラノードとマッピングノードの実装
↓
Phase 3: ros2-validator
→ 統合テスト、TF検証、性能測定
この「指揮者」の存在により、私は「何をしたいか」だけを伝えれば、適切な専門家チームが自動で編成されるようになりました。
オーケストレーションの威力:
- ✅ タスクの性質を自動判断
- ✅ 最適なエージェントを選択
- ✅ 複数エージェントを段階的に起動
- ✅ 並列実行可能な作業を自動検出
3. CLAUDE.mdの高度化
CLAUDE.mdを高度化するには、より詳細な仕様と運用ルールを記載することでした。特に重要だったのが「問題修正時の必須プロトコル」です。修正後に必ず動作確認テストを実施し、結果を報告することを義務化しました。
Phase 3での技術的突破 - マルチエージェントの威力
突破1:ZED2i + nvblox + Nav2統合の複雑なTF問題
課題:ZED2i、nvblox、Nav2の3つのシステムを統合する際、nvbloxの設定が複雑でTFの接続が動作しない
マルチエージェント活用後(Phase 3):
-
ros2-system-architectエージェントにTFツリー設計を依頼 - エージェントが独自設計を提案:ドリフト抑制のための特別な構成にする
- ZED2i側の設定を自動生成(通常と異なる独自設計)
この問題から一つのアイディアを具現化するにあたり、ros2-system-architectエージェントの専門知識を使い、本来ならば1日以上かかっていたであろう統合作業を30分で完了させました。
Phase 3での開発体験
Phase 3(メカナムホイールロボット)は、個人開発プロジェクトです。XROBOCONでの成功体験を活かし、最初からCLAUDE.mdと専門エージェントを活用しました。2,000ファイルを超える大規模プロジェクトでも、スムーズに開発を進められました。
そして何より、Phase 3では「Claudeとのチームワーク」がさらに進化しました。 複数の専門エージェントがそれぞれの得意分野で協力してくれるため、「自分一人のチーム」ではなく、「多様な専門家チームと一緒に開発している」という感覚になったのです。
Phase 3での特徴:
- 開発効率:プロジェクト開始時から5倍の水準を実現
-
Phase 3の真価:「成功パターンの再現性」を確立
- Phase 2: 試行錯誤を経て5倍に到達
- Phase 3: 最初から5倍の水準でスタート可能
- 心境:「最初から正しいアプローチで開発できる安心感」
- モチベーション:「専門家チームと一緒に開発している」感覚による高いエンゲージメント
8. Claude活用で学んだベストプラクティス
1. CLAUDE.mdは「生きたドキュメント」として育てる
ポイント:
- 過去に詰まった問題は必ず記録
- 設定値だけでなく「なぜその値か」を記述
- ハマりポイントには警告と対処法をセットで記載
2. 専門エージェントは役割を明確に定義する
ポイント:
- 1エージェント = 1専門領域
- 入力と出力の形式を明確化
- いつ使うべきかのトリガー条件を記載
3. 問題解決は「修正+検証+記録」をセットに
ポイント:
- 「修正したはず」は許さない文化
- テスト結果のログを必ず確認
- 再現手順も一緒に記録
まとめ:Claudeとの協働がもたらしたもの
最も重要な学び
「AIに正確に仕事を依頼するには、まず自分がシステムを理解して言語化する必要がある」
CLAUDE.mdを書くプロセス自体が、システム理解を深める最高の機会でした。これらを言語化することで、人間の理解も深まり、Claudeへの指示も正確になるという好循環が生まれました。
Claudeとの協働がもたらした3つの心理的変化
振り返ってみると、Claude活用の最大の価値は「効率化」だけではありませんでした。
Phase 1で感じていた「一人で問題を抱え込む孤独感」が、Phase 2以降は「信頼できるパートナーと共に問題を解決する充実感」に変わったこと――これが、プロジェクトを最後まで完遂できた最大の理由だと確信しています。
1. 「乗り越えられる」という希望
困難な技術課題に直面したとき、「自分一人では無理かもしれない」と諦めかけても、「Claudeと一緒なら乗り越えられる」という希望が持てる。この心理的な支えが、モチベーションを維持し、粘り強く問題に取り組む原動力になりました。
2. サンクコスト効果からの解放:「捨てる勇気」
Claudeとの協働がもたらしたもう一つの心理的変化――それは「捨てる勇気」でした。
開発者なら誰しも経験する葛藤があります。
「このコード、3日かけて書いたんだよな...」
「うまくいってないけど、ここまで書いたから捨てるのはもったいない...」
これが「サンクコスト効果」です。過去に費やした時間や労力への執着が、より良い解決策への移行を妨げてしまう心理的な罠。
実際の体験:壁上り制御の複雑化による行き詰まり
大会1ヶ月前、私は壁上り制御に行き詰まっていました。
Phase 1-2初期の考え:
「自己位置推定を使って、ロボットの正確な位置を把握しながら壁上りさせよう」
「複雑な状況判断を組み込んで、あらゆるケースに対応できるようにしよう」
「この実装に既に2週間以上かけている...何とか動かさなければ...」
→ 結果:複雑すぎて他の問題に手を付けられない、泥沼状態
課題:
- 自己位置推定と壁上り制御を統合したシステムが複雑すぎる
- デバッグに時間がかかり、他の重要な問題(ナビゲーション、センサー統合)に手が回らない
- 「2週間以上かけたこのコード...捨てられない...」という執着
Phase 2(Claude協働)での決断:
私:「このままでは間に合わない。一度シンプルにできないか」
Claude:「CLAUDE.mdを確認しました。壁上り制御をセンサーベースの
シンプルな実装に変更してはどうでしょう?
壁面をセンサーで認識し、決められたシーケンスで動作させる
シンプルな状態マシンを提案します」
私:(心の中で)「2週間分のコードを捨てる...?でも、Claudeと一緒なら
またゼロから書き直せる。今の複雑なコードに固執するより、
シンプルな方法で確実に動かそう」
この変化が何をもたらしたか?
-
✅ 過去への未練を断ち切れた
- 「Claudeと一緒なら、また書けばいい」という安心感
- 2週間分のコードを捨てる勇気が持てた
-
✅ 新しい手法への不安が消えた
- 「シンプルな方法で、まず動くものを作ろう」という心理的余裕
- 実験的なアプローチを気軽に試せる
-
✅ より良い解決策を選べるようになった
- サンクコストに縛られず、「今必要なもの」を客観的に判断
- 複雑さを捨て、シンプルさを選ぶ勇気
結果:シンプル化による大成功
→ Claudeと共に1日で再実装完了
- センサーベースのシンプルな壁上り制御
- 6ステップの明確な状態マシン
- デバッグ容易、動作安定
→ この成功が次の成功を生んだ
- シンプルな基盤ができたことで、他の問題(ナビゲーション、センサー統合)に時間を割けるように
- 動作が安定したため、さらなる作り込み(エラー処理、最適化)が可能に
- 大会当日、ロボットは3段目頂上まで確実に到達
この「捨てる勇気」は、エンジニアリングの本質です。
コードは「資産」ではなく「仮説の実装」に過ぎません。
より良い仮説が見つかれば、躊躇なく切り替えるべき。
でも、一人で開発していると、この判断が恐ろしく難しい。
Claudeという「一緒に書き直してくれるパートナー」がいることで、
初めて「捨てる勇気」が持てるようになりました。
💡 他分野でも同じ経験が可能
- Webアプリ:「このDB設計、1週間かけたけど...NoSQLの方が良さそう」→ 躊躇なく移行
- データ分析:「この前処理パイプライン、もっと効率的な方法がある」→ すぐ実験
- インフラ:「Docker構成を見直したい」→ 気軽に再設計
この心理的な支えが、技術的な判断を「最適化」してくれました。
3. 「一人で問題を抱え込まなくていい」という安心感
そして何より、「一人で問題を抱え込まなくていい」という安心感が、常に高いモチベーションを維持する支えになりました。
9. おわりに - AI協働開発の未来
ROS2開発におけるClaude Code活用は、単なる「コーディング補助」ではありませんでした。
それは、自分の担当領域で限界を超えて、想像以上のものを創り出す体験でした。
達成できたこと
- ソフトウェア単独では思いつかなかった複雑なアーキテクチャ
- 一人では管理できなかった2,000ファイルのプロジェクト
- チームとして勝ち取った大会での優勝
これらすべてが、Claudeとの協働によって実現しました。
AI協働開発の3つの成功要素
- CLAUDE.md:プロジェクトの「憲法」として設計思想を蓄積
- 専門エージェント:役割特化による高品質な提案
- オーケストレーション:指揮者による最適な仕事の振り分け
あなたも今日から始められる
Step 1: プロジェクトフォルダにCLAUDE.mdを作成
Step 2: 「よく説明する内容」を書き出す
Step 3: 問題が起きたら、解決方法を記録
たったこれだけで、Claudeは「専属エンジニア」に変わります。
そして、この経験を通じて確信しました。
「AIは人間を置き換えるものではない。人間を拡張し、可能性を広げるパートナーだ」と。
皆さんもぜひ、CLAUDE.mdから始めてみてください。
そして、自分の担当領域で限界を超える体験を――。
謝辞
XROBOCONプロジェクトでご一緒したチームメンバーの皆様に心から感謝します。それぞれの専門性があったからこそ、優勝という成果を掴むことができました。
ちなみに...
この記事自体も、Claudeと協働しながら作成しました(笑)
- CLAUDE.mdの具体例の整理
- 技術用語の分かりやすい説明
- ストーリーの構成と流れ
- 読者視点での改善提案
まさに本記事で紹介した「AI協働開発」を実践しながら書いています。
記事を書きながら、改めてClaudeとの協働の価値を実感しました。
これもまた、「限界を超える」体験の一つですw🤖
#AI協働開発 #ROS2 #ClaudeCode #限界を超えろ
使用環境
この記事で紹介した2つのプロジェクトで使用した環境は以下の通りです。
XROBOCON 2025プロジェクト
- ハードウェア: Intel N97搭載 NUC
- OS: Ubuntu 22.04 LTS
- ROS2: Humble Hawksbill
-
使用したClaudeのバージョン:
- 開発初期(Phase 1, 2024年6月~8月): Claude 3.5 Sonnet
- 開発後期(Phase 2, 2024年8月): Claude 3.5 Sonnet v2(2024年10月リリース版)
メカナムホイールロボットプロジェクト
- ハードウェア: NVIDIA Jetson Orin NX
- OS: Ubuntu 22.04 LTS(JetPack)
- ROS2: Humble Hawksbill
-
使用したClaudeのバージョン:
- 開発時期(Phase 3, 2024年10月~11月): Claude 3.5 Sonnet v2(2024年10月リリース版)
- 記事執筆時点(2024年12月): Claude 3.5 Sonnet v3(2025年1月リリース版)
参考リンク
10. 付録:ROS2用語集(一般の方向け)
この記事で登場したROS2関連の用語を、日常的な例えで説明します。
基本概念
- ROS2: ロボット開発用のソフトウェア基盤。レゴブロックのように部品を組み合わせてロボットを作れる仕組み
- ノード: 1つの役割を持つプログラム。例:センサー読み取り係、判断係、モーター制御係など
- トピック: ノード間で情報を送る「チャンネル」
位置・座標関係
- 座標系: 位置を測る基準点。地図、ロボット本体、センサーなど、それぞれに基準がある
- TFツリー: 複数の座標系の関係を表す構造
- オドメトリ: ロボットが車輪の回転数から計算した「移動距離」
ナビゲーション関係
- ナビゲーション: ロボットを目的地まで自動で移動させる機能
- Pure Pursuit: 経路追従アルゴリズムの一種。前方の目標点を追いかけるように曲がることで、滑らかに経路に沿って動く
センサー関係
- LiDAR: レーザー光で周囲の距離を測るセンサー
- 超音波センサー: 音波で距離を測るセンサー
- IMU: 加速度や回転を測るセンサー
- 深度カメラ: 距離も測れるカメラ
制御関係
- 状態マシン: 「待機中」「移動中」「壁上り中」など、ロボットの状態を管理する仕組み
- 制御ループ: 「センサーで測る→判断する→モーターを動かす」を高速で繰り返すこと
その他
- マルチエージェント: 複数の専門AIが協力して作業すること
- エージェント: 特定の役割を持つAI。例:設計専門、デバッグ専門、実装専門など










