Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ClaudeCode_vs_GeminiCLI_Terraformで比較してみた
Search
t-kikuchi
July 16, 2025
Technology
1
170
ClaudeCode_vs_GeminiCLI_Terraformで比較してみた
ClaudeCode_vs_GeminiCLI_Terraformで比較してみた
t-kikuchi
July 16, 2025
Tweet
Share
More Decks by t-kikuchi
See All by t-kikuchi
AWSLambdaMCPServerを使ってツールとMCPサーバを分離する
tkikuchi
1
4k
ネットワークの新要素ResourceGateway&Configuration関連アップデート
tkikuchi
0
2.3k
Terraform未経験の御様に対してどの ように導⼊を進めていったか
tkikuchi
4
760
塩野義製薬様のAWS統合管理戦略:Organizations設計と運用の具体例
tkikuchi
0
830
JAWSPANKRATION2024-ECS Best Practice All on board(english)
tkikuchi
0
920
JAWSPANKRATION2024-ECS Best Practice All on board(japanese)
tkikuchi
0
690
AWSOrganizationsユースケースで学ぶAWSアカウント管理ベストプラクティス
tkikuchi
1
1.1k
AWS Organizationsありなしパターン別AWSのマルチアカウント管理Tips
tkikuchi
2
990
GuardDutyとSysdigのランタイムセキュリティ機能を比較してみる
tkikuchi
1
1.8k
Other Decks in Technology
See All in Technology
AIでテストプロセス自動化に挑戦する
sakatakazunori
1
350
60以上のプロダクトを持つ組織における開発者体験向上への取り組み - チームAPIとBackstageで構築する組織の可視化基盤 - / sre next 2025 Efforts to Improve Developer Experience in an Organization with Over 60 Products
vtryo
3
1.8k
AWS 怖い話 WAF編 @fillz_noh #AWSStartup #AWSStartup_Kansai
fillznoh
0
110
QuickSight SPICE の効果的な運用戦略~S3 + Athena 構成での実践ノウハウ~/quicksight-spice-s3-athena-best-practices
emiki
0
280
Digitization部 紹介資料
sansan33
PRO
1
4.5k
Contributing to Rails? Start with the Gems You Already Use
yahonda
2
120
サイバーエージェントグループのSRE10年の歩みとAI時代の生存戦略
shotatsuge
4
960
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
320
CDK Toolkit Libraryにおけるテストの考え方
smt7174
1
530
TROCCO と Stripeを使ったら Tenant-aware Telemetryを有効活用できそう! / Using TROCCO and Stripe, it seems possible to effectively utilize tenant-aware telemetry!
oztick139
0
100
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
18k
対話型音声AIアプリケーションの信頼性向上の取り組み
ivry_presentationmaterials
3
830
Featured
See All Featured
Docker and Python
trallard
45
3.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
The Invisible Side of Design
smashingmag
301
51k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Statistics for Hackers
jakevdp
799
220k
Embracing the Ebb and Flow
colly
86
4.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
A better future with KSS
kneath
238
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Balancing Empowerment & Direction
lara
1
450
Transcript
Claude Code vs Gemini CLI Terraformコード生成で比較してみた クラスメソッド株式会社 菊池聡規(とーち) 2025/07/16
1. 基本機能比較 2. 実際の検証結果 3. まとめ 今日の内容 2
基本的な機能(ファイル読み書き、MCP対応、会話履歴等)は同等なので、特徴的な部分のみ 比較 機能カテゴリ Claude Code Gemini CLI カスタマイズ カスタムスラッシュコマンド hooks
なし なし マルチモーダル 画像貼付 画像・PDF 検索機能 Web検索 Google Search統合 実行環境 devcontainer サンドボックス トークン数 200k 1M 基本機能比較 3
対応形式の豊富さ SVG: Base64エンコードで画像として処理(Claude Codeはテキストとして処理) SVGに関してはClaude Codeでも読み込めるが、データとして読み込んでる感じ Gemini CLIはBase64エンコードして画像として読んでいるのでスムーズに読める PDF: 高精度でMarkdown形式に変換
RAG等でPDFで大量にデータがあるというときに便利かも Gemini CLIの特徴①:マルチモーダル 4
これが 5
## 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
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
2つの実行方式 ① macOS Seatbelt方式 macOSには sandbox-exec というコマンドが備わっており、これを利用しているらしい。 gemini -s で起動でき、手軽
SEATBELT_PROFILE 環境変数にプロファイル名を指定することで、ネットワークなし、書き 込み制限など様々な制限が可能 Gemini CLIの特徴③:サンドボックス 8
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
検証内容 システム構成図と簡単な要件をインプットとしてパラメータシートとterraformコードを書いて もらう パラメータシート作成 → Terraformコード生成 実際にAWS環境へデプロイして動作確認 実際の検証:SecurityHub通知システム 10
システム構成図 11
# 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
モデルとバージョン Claude Code: Sonnet 4 Gemini CLI: gemini-2.5-pro 設定ファイルの統一 グローバル設定:
~/.claude/CLAUDE.md と ~/.gemini/GEMINI.md を統一 内容: 包括的開発標準、言語別設定、セキュリティルールなど記載 参考: Claude Code の CLAUDE.mdは設定した方がいい 比較の前提条件 13
Terraform設計ガイドライン適用 Terraform設計ガイドライン | フューチャー株式会社の内容を /initでCLAUDE.mdに落とし込ん だ MCP設定: 両ツールで統一 検証の公平性 同じ入力データ(構成図
+ 要件定義書) 同じ評価基準とテスト手順 同じ開発環境とツール設定 プロジェクト設定の統一 14
評価項目 Claude Code Gemini CLI 見た目 テキスト形式 表形式 命名規則 ほぼ準拠
無視 EventBridge設定 ProductName設定漏れ 正しい設定 Step Functions設定 動作しない定義 正しい条件分岐 パラメータ充実度 必要最低限 必要最低限 パラメータシート比較結果 15
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
命名規則 var.prefix-sechub-notification-sfn みたいな感じでかいてあり読みづらい。 本来は ${var.prefix}-sechub-notification-sfn といった感じで書いてほしいところ EventBridge設定 こちらはイベントパターンは一つでStepFunctions側で条件分岐する仕組みになっていた どんな通知でもステートマシンが動くのでコスト的には良くない StepFunctions設定
SNS送信時に通知の整形はしていない。要件として書いてないからむしろ正しい姿かも パラメータシート所感(GeminiCLI) 17
項目 Claude Code Gemini CLI terraform init 正常 正常 terraform
validate 正常 正常 tflint 3件の警告 問題なし Trivy 2件(暗号化不備) 1件(暗号化不備) terraform plan Step Functions定義エラー 正常 terraform apply 実行不可 成功 コードテスト結果 18
こんな感じで修正を依頼 以下を実行し、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
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
Gemini CLI 一発成功: 初回でterraform apply成功 しかも、何もせずともSNS送信の実行のところまでちゃんと動いていた。 コメント: 一切なし 柔軟性: 環境別設定なし
Terraformコード品質比較 21
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
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
ルールの強制力はやっぱりそれほどはない 作成したコードでCLAUDE.mdにしたがっていない部分があるか聞いたら、ファイル構成・ モジュール構造、命名規則、バックエンド設定など8つ以上の項目をあげてきた。 まだまだプロンプトの良し悪しで決まる部分は多いと思ってる プロンプトの良し悪しできまるのだとしたら、プロンプトを管理、展開できるカスタムスラッ シュコマンドがあるClaude Codeは強い またルールの補助的仕組みとしてhooksも良い。特にlinter実行やセキュリティチェック実行の 自動化が良い 一方で多彩なマルチモーダル対応やWeb検索のうまさなどGemini
CLI独自の部分もあるのでこ ういった部分は活かしていきたい まとめ 24
実はクラスメソッド、Google Cloudの支援もやってます 25
ご清聴ありがとうございました @tttkkk215