はじめに
みなさん、こんにちは
AIコーディングエージェントを活用していますか?
私はようやく諸々のタスクがひと段落したためGemini CLIを触り始めました。
リリースされてから1週間以上経ってしまいました…
Gemini CLIについては色々な方がブログを投稿しており色々と参考にさせていただきました。
今回はGemini CLIを触るに際して、せっかくならClaude Codeと比較してみようと考えました。
今回の検証では同じタスクを実施してどのような違いがあるのかをみてみようと思います。
検証内容
概要
- Issueに記載されている課題を対応する。
- 修正差分をPRに出す。
簡単なこの2ステップをそれぞれで実施してみました。
事前準備
今回は以前Claude Codeにセキュリティ診断をさせた際に作成したIssueの1つを対応してもらおうと思います。
以前の記事はこちら
該当のIssueはこちらです。
内容を簡単に書くと
現在のファイルアップロード機能は拡張子のみで検証しており、悪意のあるファイルを偽装してアップロードされる脆弱性があります。
解決策として、python-magicライブラリを使用してファイルの実際のコンテンツ(マジックバイト)を検証し、許可されたMIMEタイプのみを受け入れる実装をしてください。
といった感じです。
これらのissueを実際に読んでもらい対応差分の作成を行なってもらいました。
実践
Claude Code
作成されたPRはこちら
指示内容はGemini CLIと同様に
issue
修正が完了したらPRを出すところまで実施してください。
これだけの指示でPRを出すところまで一気に進めてくれました。
⏺ issue
実装内容
- マジックバイト検証:ファイル拡張子だけでなく、実際のファイル内容を検証
- python-magic依存関係:MIME型検出のためのライブラリを追加
- 強化されたセキュリティ:悪意のあるファイルアップロードを防止
- 包括的なテスト:11の新しいテストケースを追加
- ユーザーエクスペリエンス:不正なファイルに対する明確なエラーメッセージ
セキュリティ改善
- OWASP Top 10
- 正当な拡張子を持つ偽装された悪意のあるファイルをブロック
- 全92テストが通過し、後方互換性を維持
全ての作業が完了し、PRが正常に作成されました。
claude codeは使い慣れているお陰もありほぼ何も迷うことなくPRを出すまで完了しました。
Gemini CLI
最初の指示はこちらです。
issue
修正が完了したらPRを出すところまで実施してください。
作成されたPRはこちら
Gemini CLIについては、何とかPRを作成するところまで持っていったという印象です。
issueの内容を確認するためにghコマンドを使用せずに GoogleSearchをしたり…
✦ CLAUDE.mdにはissue
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✔ GoogleSearch Searching the web for: "chatbot-created-by-claude-code issue 12" │
│ │
│ Search results for "chatbot-created-by-claude-code issue 12" returned. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ Web検索でもうまく見つけられませんでした。おそらくプライベートなリポジトリのissueだと思われます。
プライベートリポジトリではないんですけどね…
ちゃんとghコマンドを使用してくださいと途中で止めて指示を出し直すと問題なく進めることはできています。
╭──────────────────────────────╮
│ > ghコマンドを使いましょう │
╰──────────────────────────────╯
✦ なるほど、ghコマンドですね。承知いたしました。
では、gh issue view 12 を実行して、issueの内容を確認します。
issueを確認すると実際の修正作業を進めてくれます。
ここは大きな問題もなく順調に進んでいる様子です。
✦ ファイルアップロードの検証を、拡張子ベースからコンテンツベース(マジックバイト)に強化する、という内容ですね。承知いたしました。
まず、提案されている通り python-magic ライブラリをプロジェクトに追加します。
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✔ Shell uv add python-magic (python-magicライブラリをプロジェクトに追加します。) │
│ │
│ Resolved 94 packages in 191ms │
│ Building chatbot-created-by-claude-code @ file:///Users/yusuke.shirakawa/dev/chatbot-created-by-claude-code │
│ Built chatbot-created-by-claude-code @ file:///Users/yusuke.shirakawa/dev/chatbot-created-by-claude-code │
│ Prepared 1 package in 492ms │
│ Uninstalled 1 package in 3ms │
│ Installed 1 package in 4ms │
│ ~ chatbot-created-by-claude-code==0.1.0 (from file:///Users/yusuke.shirakawa/dev/chatbot-created-by-claude-code) │
│ │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ python-magic のインストールが完了しました。
✦ ファイルの内容を確認しました。
修正方針
1. src/utils/file_processing.py に validate_file_content 関数を追加します。
2. src/app.py のファイルアップロード処理部分で、validate_file_content を呼び出すように変更します。
3. get_file_type は拡張子ベースの判定として残しつつ、コンテンツベースの検証を優先させます。
まずは src/utils/file_processing.py に validate_file_content 関数を追加します。
ここまでは何とか順調に進めたのですが…
なぜか突然権限がないので git commitができないよとエラーになったりしました。
gh pr createが実行でいないよとも…
この辺りはまだまだ改良の余地がありそうなツールですね。
結果
あくまでも個人的な感想です。
Claude Codeを使い慣れているというバイアスも少し入っている可能性もあります。
Gemini CLIはリリースされてわずか1週間のツールという点を考えてもよくできているツールだなと感じた。一方で、日頃利用してるClaude Codeはより成熟したツールとして、一貫した実行能力を持っていると感じた。
大きな違い
今回の検証で特に感じた点は
Claude Codeは1つの指示で最後までタスクを完遂できるのに対して、Gemini CLIでは同様の指示でも途中でエラーが発生し、追加指示が必要になる場面が多かったです。
最も問題となるケースとしては「実行できないので手動で実行してください」と指示される状況が何度か出てきたことです。
せっかくのコーディングエージェントなのにこれはもったいないなと感じました。
総括
Claude Codeを日頃から使っていると、Gemini CLIは少し違うな、ここもっとこうしてほしいなと思った点もありますが、ちゃんと指示し直すと実施してくれるため、こちら側の指示をGemini CLI用に適切に行う必要があるかもしれません。
Claude CodeではすでにClaude.mdやsettings.jsonでカスタマイズされている方も多いと思います。
Gemini CLIでもClaude.mdを読んでくれるみたいですがGemini.mdを用意してGemini CLIに向けてカスタマイズした設定も必要になるかもですね。
実際に使ってみるとClaude Codeをインスパイアしているなという点も随所にありました。
後発のツールとして今後どのような差別化を図っていくのかというのがとても楽しみです。
Views: 0