powered by TechFeed
表示モード
Deep Dive

ClaudeとGeminiに「Dockerコンテナ化されたToDoアプリを1発で作れ」と指示した結果 — 差がついたのはモデルの能力ではなく統合環境だった

8月30日、How-To Geekが「I asked Claude and Gemini to build a Docker app」と題した記事を公開した。この記事では、ClaudeとGeminiにDockerコンテナ化されたToDoアプリを1発で構築させ、セルフホスティングの実用性を比較した実験について詳しく紹介されている。

8月30日、How-To Geekが「I asked Claude and Gemini to build a Docker app」と題した記事を公開した。この記事では、ClaudeとGeminiにDockerコンテナ化されたToDoアプリを1発で構築させ、セルフホスティングの実用性を比較した実験について詳しく紹介されている。


なぜDockerアプリで比較するのか

「バイブコーディング」(LLMに自然言語で大まかな指示を与えてアプリを生成させる開発スタイル。Andrej Karpathyが2025年初頭に広めた言葉として知られる)で生成した小規模アプリには、ポータビリティ問題がある。依存関係がホストマシン固有の環境に依存していることが多く、別のマシンにコピーしても動かないケースが頻発する。

この問題の現実的な解決策がDockerによるコンテナ化とセルフホスティングだ。コンテナにさえなれば、同一ネットワーク内の全デバイスからアクセスできる。TailscaleのようなプライベートVPNを使えばローカルネットワーク外への公開も可能になる。

ただし、バイブコーディングにDockerという「レイヤー」を追加すると、LLMがミスをする確率も上がる。そこで今回のテストでは、最小限のプロンプト1発でどちらがより使える成果物を出せるかを検証した。対象モデルはClaudeとGeminiで、どちらにも「Dockerでセルフホスト可能なシンプルなToDoアプリを作れ」という同一の指示を与えた。加えて、意図的に使用中のポートを狙わせる指示も含め、ポートコンフリクトへの対処能力も見ている。


Claudeの結果:ほぼ完璧、障害は自分のミスだった

ClaudeはOpus 5モデル(thinkingをlow設定)、ClaudeデスクトップアプリのCoworkモードで実行した。Opus 5は2026年時点でAnthropicが提供するフラッグシップクラスのモデルであり、複雑な推論や長い文脈の処理に強みを持つとされている。CoworkモードはClaudeがMCPやツール呼び出しを介してファイルシステムを操作できる機能で、コードをコピペして手動保存する手間が省ける。

ビルドにかかった時間は約3〜4分。成果物の特徴は以下の通りだった。

  • Node.js 22ベース、npmの依存関係ゼロ
  • データはDockerボリューム上のJSONファイルで永続化
  • docker compose up一発で起動できる構成
  • 詳細なREADMEファイル付き

制限として、ClaudeはサンドボックスからWindowsのポート状況を確認できなかった。ただし、筆者が普段使っているDockerコンテナのデフォルトポートを把握していたため、ポート8420を独自に選択し、これが空いていたため問題なく動作した。

docker composeコマンドは手動実行が必要だったが、起動後はフィルタリング機能(All/Active/Done)付きのUIが正常に動作した。

唯一の失敗は筆者自身のプロンプトミスだった。「使用中のポートを狙え」という指示が意図通りに伝わらず、テストとして成立しなかった。それを除けば、Claude側のアウトプットはほぼ完璧だった。


Geminiの結果:動いたが、粗さが目立った

GeminiはGemini 2.5 ProをGoogle AI Studioで実行し、コードエディタとしてVS Codeを使用した。Google AI Studioを選んだのは、記事公開時点でGemini CLIやVertex AIといった他の実行環境がCoworkモードに相当するファイル統合機能を持たないためとみられ、比較条件として現実的な選択肢の中から選ばれている(※編集部の考察)。結果として、ClaudeのCoworkモードに相当する統合環境はGemini側には存在しない状態での比較となった。

Geminiもアプリ自体は完成させた。ただし、いくつかの点でClaudeに劣った。

  • 生成されたREADMEがClaudeのものより簡素
  • ポートコンフリクトのテストは同様に成立しなかった
  • VS Code経由での手動ファイル管理が必要で、セットアップの手間が増えた

機能面では問題なく動作したが、「プラグアンドプレイ」の度合いという観点では、Claudeのほうがユーザー側の作業を少なくできた。


総評:統合環境の差がそのまま結果に出た

今回の比較で浮き彫りになったのは、モデル単体の能力差というよりツールチェーンの統合度の差だ。ClaudeのCoworkモードはMCPを通じたファイル操作により、コード生成からREADME作成まで一気通貫で完結する。Geminiは現時点でそれに相当する環境が整っていない。なお、LLMを使ったバイブコーディングによるDockerアプリ生成については、Docker公式ドキュメントのCompose入門も合わせて参照すると、生成されたコードの妥当性を評価する際の参考になる。

「バイブコーディングでDockerアプリを作りたい」という用途では、現時点でClaudeに軍配が上がるというのが記事の結論だ。

なお、元記事の末尾には今回使用したプロンプトの全文が掲載されている。同様の実験を自分で試したいエンジニアは参照するとよい。


詳細はI asked Claude and Gemini to build a Docker appを参照していただきたい。