はじめに
ソフトウェア開発において、AIは「便利な道具」から「不可欠な道具」へと変化しつつあります。それを示すように、海外のテック企業ではAI活用の義務化が進んでいます。
-
Microsoft
- パフォーマンスレビューにAI活用スキルの評価を組み込む
-
Duolingo
- AIが対応可能な業務については、外部委託を段階的に廃止
- AIの活用は採用要件の一部になる
-
Shopify
- AI活用経験の共有を義務化
AIコーディングエージェントを最大限に活用するには、「コンテキスト」が重要だとされています。本記事では、AIコーディングエージェント「Cline」を効果的に使うための方法、とくにコンテキストに焦点を当てて、私が学んだ知見を共有します。
目次
Clineとは
Clineは、VS Code上で動作するAIコーディングアシスタントです。
ユーザーはClineに自然言語でタスクを指示し、Clineはそれに基づいて実現計画の策定、ファイルの読み書き、コマンドの実行などを行います。Clineは、VS CodeとLLM(大規模言語モデル)とのインターフェースとして動作し、LLMにプロンプトを送り、その応答に基づいてファイル編集やコマンド実行を行い、自然言語で応答を返します。
Clineの詳細な仕組みについては、以下の記事が非常に参考になります。
https://qiita.com/DayuanJiang/items/58e0b7f1bbef8a9f50b0
コンテキストとは
ここでのコンテキストとは、簡単に言えば「AIモデルがプロジェクトに関して知っている情報」です。
通常、AIエージェントに「〇〇を実装して」といった単純な指示をしても、期待した成果を得ることは困難です。AIコーディングエージェントは「ChatGPT や Claude などのLLMにプロンプトを投げ、その応答に基づいて操作を実行する」という仕組みのため、LLMに対して十分な情報を与える必要があります。
たとえば以下のような情報がコンテキストになります。
- プロジェクト内のファイル構成
- VS Codeでアクティブなファイルやタブで開いているファイル
- 指示されたタスクに関連するファイルの中身
- セッション内の過去のやり取り
- プロジェクトの要件
- 採用しているアーキテクチャ
- 判断基準や過去の意思決定
AIエージェントが自動で収集してLLMに渡す情報もあれば、ユーザーが明示的に指定しなければならない情報もあります。
コンテキストが少ないと...
AIは限られた情報で実装を行うことになるため、ユーザーの意図やプロジェクト方針から外れた結果になりやすくなります。
コンテキストが多すぎると...
重要な情報に集中できなくなったり、トークン上限を超えて前半の指示が無視されるなど、パフォーマンス低下や誤動作の原因になります。
コンテキスト管理
Clineを効果的に活用するには、コンテキスト管理が非常に重要です。
使用するLLMモデルにより、扱えるトークン数(=コンテキストウィンドウ)が異なります。Clineでは、このウィンドウの使用状況を視覚的に確認できます。
以下のようなタイミングで、使用率バーを確認し、必要に応じて新しいセッションの開始を検討しましょう。
- 長時間の作業中
- 複数ファイルを扱う場合
- 複雑なタスクを始める前
- Clineが指示と異なる動作をしたと感じたとき
使用率が70〜80%に達した場合は、新しいセッションの開始が推奨されています。
コンテキストの与え方
ここでは、Clineに対してコンテキストを与える5つの方法を紹介します。
方法 | 内容 | 重要度 |
---|---|---|
1 | コンテキストを直接指定 | ★★★ |
2 | clinerulesによる指定 | ★★ |
3 | clineignoreによる指定 | ★★ |
4 | メモリバンクの活用 | ★(セッションをまたぐ作業に有効) |
5 | 構造化アプローチ | ★(複雑な機能実装時に有効) |
1. コンテキストを直接指定
Clineでは、作業に関連するファイルやコミットなどを明示的にUIから指定できます。左下の「@」ボタンを押すことでコンテキストを追加できます。
Clineは必要なソースファイルを自動的に読み取るとは限りません。基本的にはすべてのセッションで明示的に指定しましょう。簡単な操作で精度が大きく向上します。
ファイル量が多くUIから指定するのが大変な場合は、タスクメッセージに重要なファイルの一覧を記載しましょう。重要なファイル一覧を記述したファイルを作成し、そのファイルを指定することもできます。
2. clinerulesによる指定
プロジェクト固有の情報を常にコンテキストとして渡す方法です。
.clinerules
ファイルをプロジェクト直下に配置することで、その内容をClineが常に参照します。たとえば以下のような内容が含まれます。
- プロジェクトの要件
- 設計方針
- 採用しているアーキテクチャ
- コーディングルール
より高度に管理したい場合は、.clinerules/
フォルダを用意し、複数ファイルに分けて記述することも可能です。
(例)
your-project/
├── .clinerules/ # Folder containing active rules
│ ├── 01-coding.md # 主要なコーディング標準
│ ├── 02-documentation.md # ドキュメントに関するルール
│ └── current-sprint.md # 現在のスプリント特有のルール
├── src/
└── ...
詳細はこちら
3. clineignoreによる指定
コンテキストに含めたくないファイルを除外する設定です。
.clineignore
ファイルを .gitignore
と同様の形式で作成し、不要なディレクトリやファイルを指定することで、LLMに渡す情報量を削減できます。これにより、パフォーマンス向上や機密情報の保護が可能になります。
.clineignore の例
# 依存関係
node_modules/
**/node_modules/
# ビルド成果物
/build/
/dist/
# テスト関連
/coverage/
# 環境変数
.env
.env.*
# 大きなデータファイル
*.csv
*.xlsx
4. メモリバンク
メモリバンクとは、セッション間でコンテキストを維持できるようにする、構造化されたドキュメンテーションシステムです。
通常、AIは1つのセッションの範囲でしか記憶を保持できませんが、メモリバンクを活用することで、あるセッションの結果を次のセッションに引き継ぎ、一貫性のある支援を受けることが可能になります。
メモリバンクは、以下のようなサイクルで動作します。
- セッション開始時にメモリバンクファイルを読み取り、コンテキストを構築する
- タスク実行後、その結果や学習内容をメモリバンクに保存する
- 次回セッションで再び読み込まれることで、知識が引き継がれる
このループを繰り返すことで、Clineはプロジェクトの長期的な記憶を保ちながら支援を行えます。
参考資料:
5. 構造化アプローチ
複雑な機能を既存のコードベースに実装する場合、1回のセッション・1つのプロンプトですべてを完結させるのは困難です。
このような場合には「構造化アプローチ」が有効です。
手順概要
-
計画フェーズ
- 実装の目的、対象ファイル、依存関係などの情報を、人間とAIの対話を通じて整理
- 計画フェーズの各プロンプトで「結果を〇〇にマークダウンとして出力して」と指示
- 計画フェーズのアウトプットとして「設計ファイル」「実装計画ファイル」などを作成
-
実装フェーズ
- 新しいセッションを開始し、作成した計画ファイルを読み込ませる
- 実装を段階的に進める
このように、情報を明示的に整理・ファイル化してからセッションを分けることで、コンテキストの混乱を避け、AIの性能を最大限に引き出すことができます。