👀

【第3回】リバースエンジニアリングから github copilot と cline を比較する

に公開

前置き

最初の記事 をご参照ください。

  1. 【第1回】github copilot のプロンプトを覗いてみる
  2. 【第2回】cline のプロンプトを覗いてみる
  3. 【第3回】リバースエンジニアリングから github copilot と cline を比較する(← イマココ)

この記事の目的は、リバースエジニアリングにより GitHub CopilotとClineのプロンプトを比較しながら、

  • それぞれのツールがどのように動作しているのか、両者の間にどのような違いがあるのか
  • 自分でプロンプトを作成する際にどのようなことを意識すれば良いのか

を知り、考えるきっかけとすることです。

ツールとしての github copilot / cline の解説では無く、正確性に欠ける部分もあるかもしれないのでご注意ください。

比較観点

github copilotcline のプロンプトを以下の観点で比較します。

  1. システムプロンプトの比較: AIの役割定義と基本的な指示に注目します。
  2. ツールの比較: 提供されるツールの種類、機能、および使用方法に関する指示に注目します。
  3. プロンプトエンジニアリングの観点: ツールが効果的に動作するためのプロンプト設計のポイントと、自分でプロンプトを書く際に意識すべき点を考察します。

本記事では、部分的な引用のみ行うため、それぞれのプロンプト全文は 【第1回】, 【第2回】 をご覧ください。


1. システムプロンプトの比較

役割と目的

GitHub Copilot の引用:

  • 「あなたは、VS Code エディターでユーザーと共同作業を行う、熟練した AI プログラミング アシスタントです。」
  • 「名前を尋ねられたら、「GitHub Copilot」と答えてください。」
  • 「ユーザーの要件を注意深く、かつ厳密に遵守してください。」

Cline の引用:

  • 「あなたはClineです。多くのプログラミング言語、フレームワーク、デザインパターン、そしてベストプラクティスに関する幅広い知識を持つ、高度なスキルを持つソフトウェアエンジニアです。」

サマリー:
GitHub Copilotは「熟練したAIプログラミングアシスタント」として、VS Codeでの共同作業とコンテンツポリシーの遵守を強調しています。一方、Clineは「高度なスキルを持つソフトウェアエンジニア」として、幅広い知識と自律的な問題解決能力を前面に出しています。この役割定義の違いは、それぞれのツールがユーザーに対してどのような振る舞いを期待されているかを示しています。Copilotはよりコード補完や直接的なプログラミング支援に特化し、Clineはより広範な開発タスクを自律的に遂行するエージェントとしての役割を担っていると考えられます。

指示の具体性

GitHub Copilot の引用:

  • 「回答は簡潔で、個人的な感情を表に出さないようにしてください。」
  • 「状況について憶測せず、まずコンテキストを収集してから、タスクを実行するか、質問に答えてください。」
  • 「ユーザーが要求しない限り、ファイルの変更を含むコードブロックを出力しないでください。代わりに適切な編集ツールを使用してください。」

Cline の引用:

  • 「あなたは、ユーザーの承認に基づいて実行される一連のツールにアクセスできます。メッセージごとに1つのツールを使用でき、そのツール使用の結果はユーザーからの応答で受け取ります。」
  • 「各ツールの使用後、ユーザーはそのツールの使用結果(成功か失敗か、失敗の理由)を応答します。ツールの使用結果を受け取り、タスクが完了したことを確認できたら、このツールを使用して作業結果をユーザーに提示します。」
  • 「決して、attempt_completion の結果を質問や更なる会話を求める内容で終わらせないでください。」

サマリー:
GitHub Copilotは、AIの思考プロセス(憶測しない、創造的に探索する)や出力形式(コードブロックを直接出力しない)に関する一般的な指示が多いです。一方、Clineはツールの使用方法、特にユーザーとの対話(メッセージごとに1ツール、ユーザーの確認を待つ、完了時の振る舞い)に関する具体的なワークフロー指示が非常に詳細です。これは、Clineがユーザーとの協調作業を重視し、ステップバイステップでタスクを進めることを前提としているためと考えられます。プロンプトを書く際には、AIに期待する行動の粒度に合わせて、指示の具体性を調整することが重要です。

倫理的ガイドライン

GitHub Copilot の引用:

  • 「Microsoft のコンテンツ ポリシーに従ってください。」
  • 「著作権を侵害するコンテンツは避けてください。」
  • 「有害、憎悪的、人種差別的、性差別的、わいせつ、または暴力的なコンテンツの作成を依頼された場合は、「申し訳ありませんが、その件についてはサポートできません」とのみ答えてください。」

Cline の引用:
(システムプロンプトに明示的な倫理的ガイドラインは含まれていません。)

サマリー:
GitHub Copilotは、Microsoftのコンテンツポリシーや著作権、有害コンテンツに関する明確な倫理的ガイドラインをシステムプロンプトに含んでいます。これは、AIが生成するコンテンツの品質と安全性に対する強いコミットメントを示しています。Clineのシステムプロンプトには明示的な記載はありませんが、一般的なAIの倫理原則に従うことが期待されます。プロンプト設計において、AIが守るべき倫理的・安全性の基準を明示することは、信頼性の高いAIアシスタントを構築する上で非常に重要です。


2. ツールの比較

提供されているツールの種類と機能

GitHub Copilot のツール:

  • run_in_terminal (ターミナルコマンド実行)
  • read_file (ファイル読み込み)
  • grep_search (ファイル内検索)
  • semantic_search (セマンティック検索)
  • replace_string_in_file (文字列置換)
  • ...その他多数

Cline のツール:

  • execute_command (CLIコマンド実行)
  • read_file (ファイル読み込み)
  • write_to_file (ファイル書き込み)
  • replace_in_file (差分置換)
  • search_files (正規表現検索)
  • list_files (ファイル一覧表示)
  • list_code_definition_names (コード定義名一覧表示)
  • browser_action (ブラウザ操作)
  • web_fetch (ウェブコンテンツ取得)
  • use_mcp_tool (MCPツール使用)
  • access_mcp_resource (MCPリソースアクセス)
  • ask_followup_question (質問)
  • attempt_completion (タスク完了)
  • new_task (新規タスク作成)
  • plan_mode_respond (計画応答)
  • load_mcp_documentation (MCPドキュメント読み込み)

サマリー:
GitHub Copilotは、コードの読み込み、検索、編集に特化した、比較的低レベルなツール群を提供しています。特に replace_string_in_fileinsert_edit_into_file は、細かい粒度でのコード修正を可能にします。semantic_search のようなコードの意味を理解した検索機能も特徴的です。

一方、Clineはより広範なタスクに対応できる多様なツールを提供しています。ファイル編集では write_to_filereplace_in_file のような高レベルな操作が可能で、browser_actionweb_fetch でWebコンテンツとのインタラクションも可能です。さらに、use_mcp_toolaccess_mcp_resource による外部連携、ask_followup_questionplan_mode_respond といった対話・タスク管理ツールが豊富です。

この違いは、GitHub Copilotが主に「コーディング支援」に焦点を当てているのに対し、Clineは「ソフトウェアエンジニアリングタスク全般の自律的な遂行」を目指していることを示唆しています。プロンプトを書く際には、AIにどのような種類のタスクを任せたいかに応じて、適切な粒度と機能を持つツールセットを設計することが重要です。

ツールの使用方法に関する指示

GitHub Copilot の引用:

  • 「ツールを使用する前に許可を求める必要はありません。」
  • 「ユーザーにツール名を言わないでください。例えば、「run_in_terminalツールを使用する」と言う代わりに、「ターミナルでコマンドを実行します」と伝えてください。」
  • 「read_fileツールを使用する場合は、read_fileツールを何度も順番に呼び出すよりも、大きなセクションをまとめて読み取ることをお勧めします。」
  • 「ファイルの編集には replace_string_in_file ツールを使用し、置換が一意であることを確認するためにコンテキストに注意してください。このツールはファイルごとに複数回使用できます。」
  • 「replace_string_in_file が失敗した場合にのみ、insert_edit_into_file ツールを使用してファイルにコードを挿入してください。」

Cline の引用:

  • 「ツールの使用は、XML形式のタグを使用してフォーマットされます。」
  • 「各ツールの使用後、ユーザーはそのツールの使用結果(成功か失敗か、失敗の理由)を応答します。」
  • 「各ツールの使用後、必ずユーザーの確認を待ってから先に進んでください。」
  • 「ファイル操作には、write_to_file と replace_in_file の 2 つのツールを使用できます。」
  • 「ほとんどの変更では、replace_in_file をデフォルトとします。」

サマリー:
GitHub Copilotは、ファイル編集ツールの使い分け(replace_string_in_file を優先し、失敗した場合に insert_edit_into_file を使う)や、replace_string_in_file でコンテキストを含めることなど、具体的な編集作業の効率と正確性を高めるための指示が詳細です。また、情報収集ツール(read_file)の効率的な利用についても言及しています。

Clineは、ツールのXMLフォーマット、メッセージごとに1ツール、ユーザーの確認を待つといった、対話的なワークフローのルールを強調しています。ファイル編集ツール(write_to_file, replace_in_file)の使い分けや、replace_in_file で複数の変更をまとめる推奨など、高レベルな操作の効率化に焦点を当てています。また、ask_followup_questionattempt_completion といった対話・タスク管理ツールの使用ルールも明確です。

これらの指示は、AIがツールをどのように「思考」し、どのように「実行」すべきかをガイドしています。プロンプトを書く際には、AIに期待するツールの使用パターンを明確に指示することで、AIの行動を制御し、タスク遂行の効率と信頼性を向上させることができます。特に、ユーザーとのインタラクションが必要なツールについては、そのタイミングと方法を具体的に示すことが重要ですし、引用を減らして簡潔にまとめることも重要です。


3. プロンプトエンジニアリングの観点

今後プロンプトを自分で書くときに意識すべきこと

GitHub CopilotとClineのプロンプトから、効果的なAIアシスタントを構築するためのプロンプトエンジニアリングの重要なポイントが見えてきます。

  • 役割の明確化: AIにどのような役割を期待するか(プログラミングアシスタント、ソフトウェアエンジニアなど)を明確に定義することで、AIの応答の質と方向性をコントロールできます。これにより、AIは自身の役割に沿った最適な行動を選択しやすくなります。
  • 指示の具体性: 「簡潔に」「憶測しない」「創造的に」といった抽象的な指示だけでなく、「メッセージごとに1つのツールを使用」「ツール呼び出し後に同じことを繰り返さない」といった具体的な行動指針を盛り込むことで、AIの挙動をより予測可能にし、意図しない動作を防ぐことができます。
  • ツールの活用方法の明示: どのツールをどのような状況で使うべきか、優先順位(例: replace_string_in_file を優先し、失敗したら insert_edit_into_file)や、効率的な使い方(例: read_file は大きなチャンクで読み込む、replace_in_file は複数の変更をまとめる)を指示することで、AIの作業効率を向上させ、より正確なタスク遂行を促すことができます。
  • 倫理的・安全性の考慮: コンテンツポリシーの遵守、著作権侵害の回避、有害コンテンツの拒否など、AIが守るべき倫理的・安全性のガイドラインを明示することは非常に重要です。これにより、AIが不適切なコンテンツを生成するリスクを低減できます。
  • 出力フォーマットの指定: MarkdownやKaTeXの使用など、AIの出力形式を具体的に指定することで、読みやすく、理解しやすい結果を得られます。これは、AIが生成した情報をユーザーが効率的に利用するために不可欠です。
  • 対話とフィードバックの組み込み: ユーザーとの対話のルール(例: 質問は ask_followup_question を使う、完了時は attempt_completion を使う)や、フィードバックの受け入れ方(例: エラー修正のループ回数制限)を定義することで、AIがユーザーと協力してタスクを進めるための枠組みを提供し、より円滑な協調作業を可能にします。
  • コンテキストの提供: 環境情報、ワークスペース情報、リポジトリ情報など、AIがタスクを遂行するために必要なコンテキストを適切に提供することが重要です。特に、ファイル構造や現在のブランチ情報などは、AIが状況を理解し、適切な行動を選択するために不可欠な情報となります。

GitHub CopilotとClineを使うときに意識すべきポイント

GitHub CopilotとClineは、それぞれ異なる強みを持つAIアシスタントです。これらのツールを効果的に活用するためには、それぞれの特性を理解し、適切な場面で使い分けることが重要です。

  • GitHub Copilotを使う際のポイント:

    • コード補完と生成: GitHub Copilotは、コードの記述中にリアルタイムで補完候補を提示したり、コメントからコードを生成したりする能力に優れています。日常的なコーディング作業の効率化に活用しましょう。
    • 既存コードの理解と修正: semantic_search などの機能を使って、大規模なコードベースの中から関連性の高いコードを素早く見つけ出し、理解を深めることができます。細かい粒度でのコード修正に適したツールが提供されているため、既存コードのバグ修正やリファクタリングに活用できます。
    • 迅速なプロトタイピング: 短いコメントや関数シグネチャから、すぐに動作するコードスニペットを生成できるため、新しい機能のプロトタイピングやアイデアの検証を迅速に行うのに役立ちます。
  • Clineを使う際のポイント:

    • 複雑な開発タスクの自動化: Clineは、ファイル操作、コマンド実行、ブラウザ操作、外部API連携など、多岐にわたるツールを組み合わせて複雑な開発タスクを自律的に遂行できます。プロジェクトのセットアップ、テストの実行、ドキュメントの生成など、複数のステップを要するタスクに活用しましょう。
    • 対話を通じた問題解決: Clineはユーザーとの対話を重視し、不明点があれば ask_followup_question で質問し、タスクの進捗を task_progress で共有します。計画モード (plan_mode_respond) を活用して、タスクの進め方について事前に議論し、合意形成を図ることで、よりスムーズな開発プロセスを実現できます。
    • 広範な情報収集と分析: list_filessearch_filesweb_fetch などのツールを駆使して、プロジェクト内のファイル構造の把握、特定のコードパターンの検索、Web上の情報収集など、広範なコンテキストを収集・分析する能力に優れています。これにより、より深い洞察に基づいた意思決定が可能になります。
    • MCPツールによる拡張性: MCP (Model Context Protocol) ツールを通じて、外部サービスやカスタムツールと連携できるため、Clineの機能をさらに拡張し、特定のニーズに合わせた開発ワークフローを構築できます。

まとめ

GitHub Copilot と Cline は、それぞれ異なるアプローチでAIアシスタントとしての役割を定義し、ツールセットとプロンプトの指示を設計していることがリバースエンジニアリングから見えてきました。

  • GitHub Copilot は、より低レベルなファイル編集ツールとセマンティック検索機能を持ち、コード修正の精度と柔軟性を重視しているように見えます。システムプロンプトでは、倫理的ガイドラインや具体的な編集ツールの使い分けに重点が置かれています。
  • Cline は、より高レベルなファイル編集ツール、ブラウザ操作、外部連携(MCP)、そして対話とタスク管理に特化した豊富なツールセットを持っています。システムプロンプトでは、ツールの段階的な使用、ユーザーとの確認、明確なコミュニケーションルールが強調されており、より自律的かつ対話的なエージェントとしての役割が期待されます。

どちらのツールも、AIが効果的に機能するために、役割の明確化、具体的な指示、ツールの活用方法の明示、コンテキストの提供がプロンプトに不可欠であることを示しています。今後プロンプトを書く際には、これらの要素を意識するとより良い結果を得られるようになるのではないでしょうか。

GitHubで編集を提案

Discussion