•12 min read

開発作業でChatGPT、Claude、Geminiを実際にどう使っているか

開発作業でChatGPT、Claude、Geminiを実際にどう使っているか

数ヶ月に一度、「一番良いAIツールはどれか」と聞かれます。その答えは、何をするかによって全く異なります。私は3つすべてを異なる目的で使っていますし、どれも思考の代わりにはなりません。

開発作業で毎日1年間使ってみた正直な感想です。

Audio Briefing
0:00 / 0:00

それぞれの得意なこと

ChatGPT: ちょっとしたスクリプトやボイラープレートが必要な、自由形式のコーディングタスクに最適です。GPT-5のコード出力は、ワンショット生成(「XをするPythonスクリプトを書いて」)には堅実です。何をしたいか正確に分かっていて、それをただ打ち込んでもらいたいときに使います。

Claude: 複雑な問題を推論するのに優れています。まだアイデアが固まっていない状態で、コードを書く前に設計について話し合いたいとき、Claudeの長いコンテキストウィンドウのおかげで、関連ファイルを貼り付けて一貫した分析を得ることができます。アーキテクチャの議論、コードレビュー、リファクタリングに使っています。

Gemini: Googleエコシステムとの統合が本当に便利です。リアルタイムの情報が必要なときに使います。ドキュメントの検索、APIリファレンスの確認、現在の価格などです。他のツールがまだ苦戦しているウェブページの読み込みをネイティブに行います。

私のデフォルトのワークフロー

素早いコード生成 → ChatGPT。設計/リファクタリング → Claude。APIドキュメントとウェブ検索 → Gemini。それぞれが他のツールでは埋められないギャップを埋めてくれます。

Advertisement

すべてのツールが不十分な点

3つすべてに共通する限界です。

  • APIを幻覚する(ハルシネーションする)。どのモデルも自信満々に存在しない関数シグネチャを発明します。ChatGPTに、存在しないメソッドを使ったStripeコードを書かれたことがあります。常にドキュメントを確認しましょう。
  • 思考を画一化する。解決策を求めると、あなたの特定の状況にとって最適なものではなく、統計的に最も一般的な答えが返ってきます。代替案を明示的に促す必要があります。
  • 実際のコードベースにはコンテキストがまだ短すぎる。20万トークンあっても、意味のあるプロジェクト全体を収めることはできません。常に含めるファイルを選び出すことになり、AIは全体像の半分を見逃しています。

実際に良い結果を得る方法

最も重要なスキルは、良いプロンプトを書くことです。「プロンプトエンジニアリング」という儀式的な意味ではなく、ただ具体的にすることです。

「ログインフォームを書いて」ではなく、 「メールアドレスとパスワードフィールドを持つReactログインフォームを、react-hook-formでバリデーションし、shadcn/uiコンポーネントを使用し、/api/auth/loginにPOSTする形で書いてください。ローディング、エラー、成功の状態を処理してください。」

この違いは歴然です。最初のプロンプトでは一般的なフォームしか得られません。2番目のプロンプトでは、実際に使えるものが得られます。

本当のスキル

良いプロンプトを書くスキルは、テンプレートを覚えることではありません。具体的に指定することを学ぶことです。制約を多く与えれば与えるほど、出力は良くなります。これはどのモデルにも等しく当てはまります。

AIを使わないこと

  • 競合状態(race conditions)のデバッグ。モデルは時間や非同期実行のメンタルモデルを持っていません。推測するだけで、しばしば間違っています。
  • セキュリティに敏感なコード。AIがeval()のようなパターンを提案するのを何度も見てきました。
  • 新しい問題。これまで見たことのないことをしている場合、AIのトレーニングデータは役に立ちません。自信ありげに間違った答えを返してくるでしょう。

タスクに合ったツールを選び、期待値を現実的に保ち、常に出力を検証しましょう。ジュニア開発者と働くのと同じですが、こちらはコードレビューに飽きることはありません。

Advertisement

こちらもおすすめ

詳細解説:コアメカニクス

表面の下を見ると、根底にあるメカニクスはシステムの複雑な相互作用を明らかにします。現代の開発において、これらのメカニクスを理解することが、初心者と専門家を分けるものです。

この実用的な例を考えてみましょう。

// A comprehensive example demonstrating advanced patterns
class ServiceManager {
  constructor() {
    this.services = new Map();
    this.initialized = false;
  }

  register(name, service) {
    if (this.services.has(name)) {
      throw new Error(`Service ${name} already registered`);
    }
    this.services.set(name, service);
  }

  async initializeAll() {
    this.initialized = true;
    for (const [name, service] of this.services) {
      if (typeof service.init === 'function') {
        await service.init();
      }
    }
  }

  get(name) {
    if (!this.initialized) {
      console.warn('Accessing services before initialization');
    }
    return this.services.get(name);
  }
}

このパターンにより、ビジネス要件が変化しても、アーキテクチャはスケーラブルで堅牢な状態を保つことができます。これは、大規模なアプリケーションで大きな利益をもたらす基本的なアプローチです。

実世界での応用とスケーリング

これを本番環境で実装すると、新たな課題が生じます。並行処理、状態管理、メモリリークを考慮する必要があります。

例えば、高スループットシステムを扱う場合、あらゆるマイクロ最適化が重要になります。ローカル開発では明らかにならないボトルネックを特定するために、プロファイリングツールに頼ることがよくあります。

上記の図は、アプリケーションが水平にスケールする典型的なデプロイ戦略を示しています。

理解度チェック

よくある質問

Claude 3.7 SonnetとClaude 3.5 Sonnetは、複数ファイルのリファクタリング、アーキテクチャの依存関係の理解、非推奨API呼び出しの回避において優れたパフォーマンスを発揮します。OpenAIモデルは単一プロンプトの自律スクリプトに優れており、Google Gemini 2.0 Flash/Proは大規模なマルチモーダルファイルの取り込みとドキュメント抽出においてリードしています。
プロンプトでライブラリのメジャーバージョンを明示的に指定する(例:「Next.js 15 App RouterとReact 19 APIを使用してください」)、プロンプトにTypeScriptのインターフェースシグネチャを提供する、またはModel Context Protocol (MCP)や検索ツールを使用してモデルをライブドキュメントに接続します。
巨大なモノリシックディレクトリをコンテキストウィンドウにダンプすることは、注意を希薄にするため避けてください。代わりに、焦点を絞ったルールファイル(.cursorrulesまたはCLAUDE.md)を使用し、関連する依存関係インターフェースのみを提供し、リファクタリングタスクを単一モジュールの増分に分離します。
非同期の競合状態のデバッグ、マルチスレッドのタイミングバグ、暗号化や機密トークンの処理、ゼロデイフレームワークの統合です。LLMは既存の履歴パターンから推測するため、一時的な並行性問題を誤診することが頻繁にあります。
生成されたコードの行数ではなく、プルリクエストのターンアラウンドタイム、サイクルタイム、テストスイートのカバレッジ深度、プロトタイプ完成までの時間に着目してください。真の利益は、テスト作成、足場固め、ボイラープレートの排除の高速化からもたらされます。
Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement