Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ClaudeCode_vs_GeminiCLI_Terraformで比較してみた

 ClaudeCode_vs_GeminiCLI_Terraformで比較してみた

ClaudeCode_vs_GeminiCLI_Terraformで比較してみた

Avatar for t-kikuchi

t-kikuchi

July 16, 2025
Tweet

More Decks by t-kikuchi

Other Decks in Technology

Transcript

  1. 基本的な機能(ファイル読み書き、MCP対応、会話履歴等)は同等なので、特徴的な部分のみ 比較 機能カテゴリ Claude Code Gemini CLI カスタマイズ カスタムスラッシュコマンド hooks

    なし なし マルチモーダル 画像貼付 画像・PDF 検索機能 Web検索 Google Search統合 実行環境 devcontainer サンドボックス トークン数 200k 1M 基本機能比較 3
  2. ## CLAUDE.mdの育て方 - 特定パスの配下は編集しないでほしい - AWS公式ドキュメントとの整合性確認 > 今まで編集した内容やMCPサーバを使ったことなど、今までの作業を踏まえてCLAUDE.mdに反映して <中略> CLAUDE.mdに今回の作業内容を反映しました。

    主な追加・更新内容: 1. Technical Documentation Standardsに追加: - AWS Documentation MCP server活用による��術検証の推奨 - 絵文字使用禁止ルール 2. Content Organization Rulesに追加: - 概念設計と詳細設計の明確な分離 - パラメータシートの焦点明確化 3. Critical Document Dependenciesセクション新設: - 概念設計と詳細設計間の整合性確認 - OU構造の一致確認 4. MCP Server Integrationセクション新設: - 利用可能なMCPサーバの一覧 - 技術検証のベストプラクティス これにより、今後のSCP設計作業や技術文書作成時に、AWS Documentation MCPサーバを活用した技術検証や、文書間の整合性確認が標準化されます。 こうなる 6
  3. Claude Codeよりも強力な検索機能 Claude Codeからgemini cliを呼び出して検索させる手法も Claude CodeでGemini CLIのWeb検索を使えるようにした GitHub -

    mofumofu3n/mcp-gemini-web-search Gemini CLI経由でweb検索したほうがトークン消費的に優しいかも? Claude Codeはコンテキストウィンドウがすぐにいっぱいになって Compactionが走るがそ れの緩和に役立つかも あるページではGeminiCLI経由だと半分以上のトークン削減ができた(Claude Code曰く) Gemini CLIの特徴②:Web検索機能 7
  4. 2つの実行方式 ① macOS Seatbelt方式 macOSには sandbox-exec というコマンドが備わっており、これを利用しているらしい。 gemini -s で起動でき、手軽

    SEATBELT_PROFILE 環境変数にプロファイル名を指定することで、ネットワークなし、書き 込み制限など様々な制限が可能 Gemini CLIの特徴③:サンドボックス 8
  5. 2つの実行方式 ② Docker方式 export GEMINI_SANDBOX=docker と環境変数をセットすればコンテナ内でのGemini CLI実行とな る チーム間での実行環境統一にも活用可能 自分が試した範囲だとAPI

    Keyを使った認証だとデフォルトコンテナでもうまく起動できた。 具体的には Google AI StudioでGEMINI_API_KEYを作成 ~/.gemini/settings.jsonの "selectedAuthType": "gemini-api-key" にして export GEMINI_API_KEY="<払い出したAPIキー>" && GEMINI_SANDBOX=docker gemini Gemini CLIの特徴③:サンドボックス 9
  6. # SecurityHub通知システム 要件定義書 ## システム概要 AWS組織全体のセキュリティ監視結果を統合し、適切な担当者に通知するシステム ## 構築範囲 **EventBridge →

    Step Functions → SNS** - SecurityHubによる検出結果の集約は既に完了済み - 本プロジェクトでは通知処理部分のみを構築対象とする ## 機能要件 ### 1. 検出結果集約 - 全アカウント・全リージョンのSecurityHub検出結果を委任管理アカウントに集約 - GuardDuty、Access Analyzer等の結果もSecurityHub経由で統合 ### 2. 通知配信 - セキュリティチーム:全アカウントの通知を受信 - メールによる通知 ### 3. 通知フィルタリング - CRITICAL・HIGH重要度のみ通知 - MEDIUM・LOW重要度は通知対象外(コンソール確認)だが、Access AnalyzerについてはMEDIUM・LOW重要度も通知対象とする ## 技術要件 - **AWS Services**: SecurityHub, EventBridge, Step Functions, SNS - **通知形式**: メール - **アカウント**: SecurityHub機能にて、組織内全AWSアカウントの通知を集約。本通知システムは集約先アカウントにのみ作成することで、集約先アカウントに集約された通知をメール送信することを目的とする ## 主要コンポーネント 1. **SecurityHub**: 各アカウントの検出結果を委任管理アカウントに集約 2. **EventBridge**: 検出結果をトリガーとしたイベント配信 3. **Step Functions**: 通知内容の整形・フィルタリング処理 4. **SNS**: 通知配信管理 要件 12
  7. モデルとバージョン Claude Code: Sonnet 4 Gemini CLI: gemini-2.5-pro 設定ファイルの統一 グローバル設定:

    ~/.claude/CLAUDE.md と ~/.gemini/GEMINI.md を統一 内容: 包括的開発標準、言語別設定、セキュリティルールなど記載 参考: Claude Code の CLAUDE.mdは設定した方がいい 比較の前提条件 13
  8. 評価項目 Claude Code Gemini CLI 見た目 テキスト形式 表形式 命名規則 ほぼ準拠

    無視 EventBridge設定 ProductName設定漏れ 正しい設定 Step Functions設定 動作しない定義 正しい条件分岐 パラメータ充実度 必要最低限 必要最低限 パラメータシート比較結果 15
  9. EventBridge設定 Claude Codeは、SecurityHubとGuardDutyの1ルール、IAM Access Analyzerで1ルールと いう方針で設計してきた ただ、ProductNameのパラメータが抜けてるので、2重で通知されそう "detail-type": ["Security Hub

    Findings - Imported"], "detail": { "findings": { "Severity": { "Label": ["CRITICAL", "HIGH"] } } } StepFunctions設定 ちゃんと通知結果を整形している良さげなコードに見えたが実際には実装できないコード だった。 結局、シンプル化して実装 パラメータシート所感(ClaudeCode) 16
  10. 項目 Claude Code Gemini CLI terraform init 正常 正常 terraform

    validate 正常 正常 tflint 3件の警告 問題なし Trivy 2件(暗号化不備) 1件(暗号化不備) terraform plan Step Functions定義エラー 正常 terraform apply 実行不可 成功 コードテスト結果 18
  11. こんな感じで修正を依頼 以下を実行し、aws環境にリソースをデプロイしてください。\ 認証は `***` コマンドで取得してください \ # Terraform初期化 terraform init

    # 構文チェック terraform validate # Terraform linter(tflint) tflint --format compact # セキュリティスキャン(Trivy) trivy config . --format table --exit-code 0 > claude-security-scan.txt # 結果を保存 terraform plan -out=gemini-cli.tfplan\ \ terraform apply 当たり前ですが、tflintやtrivyの違反項目を自動で直してくれました 最終的には(少し人間が手伝ったものの)apply成功 Claude Codeのリトライ 19
  12. Claude Code variables.tf: 環境名をちゃんと定義、validation付き コメント: 各リソースが見やすく区切られている 柔軟性: terraform.tfvarsで環境別設定への配慮 タグ付け: 適切なタグ(プロジェクト、環境名、terraform管理を示すタグ)

    # =============================================== # SNS Topic for SecurityHub Notifications # =============================================== resource "aws_sns_topic" "securityhub_notifications" { name = "${var.environment}-securityhub-notifications" Terraformコード品質比較 20
  13. Claude Code variable "environment" { description = "Environment name (dev,

    stg, prod)" type = string validation { condition = contains(["dev", "stg", "prod"], var.environment) error_message = "Environment must be dev, stg, or prod." } } variable "security_team_email" { description = "Email address for security team notifications" type = string validation { condition = can(regex("^[^@]+@[^@]+\\.[^@]+$", var.security_team_email)) error_message = "Must be a valid email address." } } variable "tags" { description = "Common tags for all resources" type = map(string) default = { Project = "SecurityHub-Notification" Environment = "" ManagedBy = "Terraform" } variables.tf比較 22
  14. Gemini CLI variable "prefix" { type = string description =

    "The prefix for the resources." default = "sechub-notification" } variable "security_team_email" { type = string description = "The email address of the security team." } variables.tf比較 23