[Japanese title]
Claude Code vs Microsoft Copilot:異なる種類の支援
[Japanese translation]
私は過去2週間、実際のワークフローで両方のツールをテストしました。ベンチマークでもマーケティングデモでもなく、実際のプロジェクト、実際の締め切り、そして物事がうまくいかなかったときの実際のフラストレーションです。以下が私の見解です。
テスト内容と方法
私はフルスタック開発者で、ドキュメント作成やプロジェクトタスク管理も行っています。典型的な週には、Pythonスクリプトの作成、SQLクエリのデバッグ、技術仕様書の起草、そして時には非技術系の同僚へのExcel数式やWord書式設定の支援が含まれます。Claude Code(スタンドアロンコーディングエージェント)とMicrosoft Copilot(Microsoft 365統合)を3つのシナリオでテストしました:
- 小さなWebスクレイパーをゼロから構築
- ログが乱れた壊れたデータパイプラインのデバッグ
- チャートとサマリーを含むプロジェクトステータスレポートの作成
Claude CodeはCLIインターフェースを通じて、CopilotはWord、Excel、Edgeサイドバーを通じて使用しました。両方のツールに同じプロンプトとコンテキストを与えました。何が機能し、何が壊れ、それぞれにどれだけの手動修正が必要かを記録しました。
Claude Code:開発者のワークベンチ
Claude Codeはターミナル内に存在するAIエージェントです。プロンプトを与えると、コードを書き、その推論を説明し、1回のセッションで複数のファイル編集を行うことができます。Anthropicによって構築され、コーディングタスクに完全に焦点を当てています。
Webスクレイパーテスト
私は両方のツールに、Eコマースサイトから製品価格を取得してCSVに保存するPythonスクレイパーを構築するよう依頼しました。単純なタスクですが、サイトはJavaScriptで読み込まれるコンテンツを使用し、レート制限があります。
Claude Codeのアプローチ:
$ claude "example-shop.com用のスクレイパーを構築し、製品名、価格、在庫状況を抽出してください。JSレンダリングを処理し、robots.txtを尊重し、リクエスト間に2秒の遅延を追加し、CSVに保存してください。Playwrightを使用してください。"
Claude Codeは完全なファイル構造で応答しました:
- Playwright設定を含む
scraper.py - セレクタと遅延用の
config.py requirements.txt- 使用方法を説明する
README.md
Playwrightスクリプトを生成し、タイムアウトのエラー処理を追加し、429応答のリトライメカニズムを含めました。実行したところ、サイトのCSSセレクタがClaudeのトレーニングデータ以降に変更されていたため、最初の試行は失敗しました。エラーログをチャットに貼り付けました:
$ claude "セレクタ'.price-tag'が空を返します。以下がページのHTMLです:[貼り付け]"
HTMLを分析し、新しいクラス'.product-price'を見つけ、10秒以内にスクリプトを更新しました。コンテキストの切り替えも、タブ間のコピーペーストも不要でした。
印象的だった点: Claude Codeは複数回のやり取りにわたってプロジェクト全体のコンテキストを維持しました。後で並行スクレイピングを追加するよう依頼したとき、レート制限ルールを覚えていました。また、CSV出力に製品名の特殊文字用のUTF-8エンコーディングが必要であることにも気づきました—私が指定していなかったことです。
フラストレーションがたまった点: CLIインターフェースは最低限の機能しかありません。出力にシンタックスハイライトがなく、ファイルツリーの可視化もありません。Claude Codeが複数のモジュールへのリファクタリングを提案したとき、どのファイルが変更されたかを手動で追跡する必要がありました。また、存在しないAPIエンドポイントを幻覚することもありました—一度、非推奨のrequests-htmlを使用するよう提案しました。
デバッグテスト
両方のツールに、CSVファイルを処理する500行のPythonスクリプトと、辞書のKeyErrorに関するスタックトレースを与えました。スクリプトにはコメントがなく、data、temp、resultのような曖昧な変数名が使用されていました。
Claude Codeはファイル全体を読み取り、次のように説明しました:
「エラーは342行目で発生します。process_row()が'status'キーを期待しているのに、CSVヘッダー行がデータとして扱われているためです。ヘッダー行には'Status'(大文字S)が含まれていますが、コードは'status'(小文字)をチェックしています。さらに、89行目のclean_data()関数が辞書をインプレースで変更するため、後続のvalidate_row()が以前にクリーンアップされた行で失敗します。」
その後、3つの修正を提案しました:
- 大文字小文字を区別しないキー検索
- ヘッダー行を明示的にスキップ
- 変更前にディープコピー
私はオプション2を選びました。Claude Codeは変更を行い、修正を説明するコメントを追加し、スクリプトを再実行しました。合格しました。
ここでの重要な違い: Claude Codeはバグを見つけただけでなく、失敗の連鎖を説明しました。ヘッダー行の問題は後から見れば明らかでしたが、ミューテーションの問題は微妙でした。人間のレビュアーなら追跡に15分かかったでしょう。
Microsoft Copilot:Officeのスイスアーミーナイフ
Microsoft CopilotはWord、Excel、PowerPoint、Outlook、Teams、Edgeブラウザに埋め込まれています。コーディングエージェントではなく、生産性タスク用のAIアシスタントであり、限られたコンテキストでコード生成機能も備えています。
Webスクレイパーテスト(Copilot版)
EdgeサイドバーでCopilotを開き、同じことを依頼しました:「example-shop.com用のPythonスクレイパーを構築し、製品価格を抽出してCSVに保存してください。」
CopilotはrequestsとBeautifulSoupを使用したスクリプトを生成しました—サイトがJavaScriptを使用しているため、すぐに失敗しました。これを指摘すると、Copilotは謝罪し、Playwright版を提供しましたが、コードは不完全でした。asyncioをインポートしましたが使用されておらず、CSV書き込みロジックにヘッダーがありませんでした。
反復しようとしました:「429応答のエラー処理を追加してください。」
Copilotはtry/exceptブロックを生成しましたが、間違ったループ内に配置しました。修正すると、次の応答はPlaywrightの設定を忘れ、requestsに戻りました。やり取りのたびに最初からやり直しているように感じました。
本当の制限: Copilotにはファイル構造の永続的なメモリがありません。既存のコードベースを見ることができないため、すべての提案は新しい推測です。単一ファイルのスクリプトではうまく機能しますが、それを超えると手動のコンテキスト管理が必要です。
デバッグテスト
同じスタックトレースをEdgeサイドバーに貼り付けました。CopilotはKeyErrorを正しく識別しました—'status'キーをチェックするよう提案しました。しかし、スクリプト全体を見ることができなかったため(貼り付けた50行のみ)、ミューテーションバグを完全に見逃しました。提案された修正は応急処置でした:data.get('status', 'unknown')—これでは本当の問題を隠してしまいます。
より大きなコンテキストを説明すると、Copilotは「なるほど、問題はデータクリーニング関数に関連している可能性があります」と言いました。しかし、完全なコードがないため確認できませんでした。追加のセクションを手動で貼り付ける必要がありました。
対比は明らかでした: Claude Codeはコードベース全体で機能しました。Copilotは私が見せることを選