0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ClaudeCode × AWS ― SIer出身エンジニアが自社環境で使って気づいた「やっていいこと・悪いこと」全部まとめ

0
Last updated at Posted at 2026-03-03

こんにちは!DirbatoのBackbeatに所属している柴田です!

最近、社内でも「ClaudeCode使ってみた!」という声が増えてきましたね。そんなみなさんが大好き(なはず!)のClaudeCode、私もAWSインフラの実務でバリバリ使い始めて数ヶ月が経ちました。

使ってみてわかったんですが、ClaudeCodeって 「とりあえず動かせる」のと「業務で責任を持って使える」のは全然違う んですよね。特にSIer界隈(公共・金融・製造系)は、「便利だからって何でもやっていいわけじゃない」文化が染み付いているので、その視点でまとめてみました。

「AWS実務 × ClaudeCode」の記事がまだほとんどないので、ちょっと気合い入れて書きます。長いです、ごめんなさい。


🎯 こんな人に読んでほしい

  • ClaudeCodeを「なんとなく」使っていて、業務適用に踏み出せていない人
  • AWSインフラを触るエンジニアで、AI活用の判断基準が欲しい人
  • SIer出身でガバナンス・セキュリティを気にしがちな人(仲間!)
  • 「AIに本番触らせていいの?」と上司に聞かれて困っている人

💡 要点サマリー(忙しい人向け)

  • ✅ ClaudeCodeが得意なのは「読んで・整理して・たたき台を出す」
  • ✅ AWS CLIコマンドの生成・IaCのレビュー・ドキュメント整備は爆速になる
  • ❌ 本番へのaws cliコマンド直実行は絶対に任せてはいけない
  • ❌ アクセスキーや秘密情報をコンテキストに含めてはいけない
  • 🔑 「提案させて人間がレビューして実行」の三段構えが最強
  • 🔑 プロンプトの設計がそのまま品質に直結する

1. ClaudeCodeとAWS、何が嬉しいのか

正直に言いますね。ClaudeCodeを初めてAWS業務で使ったとき、私は 「CLIコマンドを教えてもらう便利なGoogle」 くらいにしか思っていませんでした。

それが甘かったです。
ClaudeCodeはAWS関連作業において、以下の役割を同時にこなせます。

役割 具体的な仕事 活用度
コマンド生成係 aws ec2 describe-instances --filters ... を正確に出してくれる ⭐⭐⭐⭐⭐
IaCレビュアー TerraformやCFnのセキュリティ・命名規則チェック ⭐⭐⭐⭐⭐
ドキュメント職人 アーキテクチャ図の説明文・Runbook草稿 ⭐⭐⭐⭐
トラブル整理屋 CloudWatchログの読解と原因候補の列挙 ⭐⭐⭐⭐
コスト分析助手 Cost Explorerの数字を読んで削減案を提案 ⭐⭐⭐
自動化スクリプト作家 Python/Bashでのリソース棚卸スクリプト ⭐⭐⭐⭐

「調べる・整理する・たたき台を出す」ところが異様に強いです。ここを理解するだけで使い方が変わります。


2. やっていいこと:ここは積極的に任せよう

2-1. AWS CLIコマンドの生成

「あ〜このフィルタオプション何だっけ」が瞬殺されます。

# ✅ こういうプロンプトを投げると...
# 「ap-northeast-1の、タグにEnv=productionがついている、
#  停止中のEC2インスタンス一覧をIDとNameタグ付きで取得したい」

aws ec2 describe-instances \
  --region ap-northeast-1 \
  --filters \
    "Name=tag:Env,Values=production" \
    "Name=instance-state-name,Values=stopped" \
  --query 'Reservations[*].Instances[*].{ID:InstanceId,Name:Tags[?Key==`Name`]|[0].Value,State:State.Name}' \
  --output table

※実行環境: AWS CLI v2、適切なIAM権限(ec2:DescribeInstances)が必要

こういうクエリ構文、毎回ドキュメント引いてたんですよね……。ClaudeCodeなら日本語の要件から一発で出ます。ただし実行前に必ず自分の目でレビューすること。これは絶対。お兄さんとの約束だぞ!


2-2. Terraformコードのレビューと修正提案

# ❌ こんなセキュリティグループ、レビューしてもらうと...
resource "aws_security_group" "bad_example" {
  name = "web-sg"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]  # ← ClaudeCodeが即指摘してくれる
  }
}

プロンプト例:

以下のTerraformコードをAWSセキュリティのベストプラクティス視点でレビューしてください。
問題点を重要度(Critical/High/Medium/Low)付きで列挙し、修正案のコードも示してください。

[コードをここに貼る]

このように、CloudeCodeでのレビューをチーム内のPRレビューの前工程として使うとレビュー品質が底上げされます。SIerあるあるの「レビューが形骸化してる」問題に効きます。


2-3. CloudWatchログの読解

長大なエラーログをそのまま貼り付けて「このエラーの原因候補と調査手順を教えて」は普通に使えます。

# ✅ プロンプトパターン
以下はECSタスクのCloudWatchログです(本番環境のため、IPアドレスはマスクしています)。
エラーの根本原因の候補を3つ、それぞれの確認方法と合わせて教えてください。

[ログをここに貼る(※機密情報は必ず除去・マスク!)]

ログを貼る前の機密情報マスク、絶対に忘れずに。


2-4. リソース棚卸スクリプトの生成

# ✅ ClaudeCodeに生成させたスクリプト(実行環境: Python 3.11, boto3)
# 「全リージョンのEC2インスタンスをCSVで出力するスクリプト」

import boto3
import csv
import sys

def get_all_regions():
    ec2 = boto3.client('ec2', region_name='us-east-1')
    response = ec2.describe_regions(AllRegions=False)
    return [r['RegionName'] for r in response['Regions']]

def get_instances(region):
    ec2 = boto3.client('ec2', region_name=region)
    instances = []
    paginator = ec2.get_paginator('describe_instances')
    for page in paginator.paginate():
        for reservation in page['Reservations']:
            for instance in reservation['Instances']:
                name = next(
                    (tag['Value'] for tag in instance.get('Tags', []) if tag['Key'] == 'Name'),
                    'N/A'
                )
                instances.append({
                    'Region': region,
                    'InstanceId': instance['InstanceId'],
                    'Name': name,
                    'Type': instance['InstanceType'],
                    'State': instance['State']['Name'],
                    'LaunchTime': str(instance['LaunchTime']),
                })
    return instances

def main():
    writer = csv.DictWriter(
        sys.stdout,
        fieldnames=['Region', 'InstanceId', 'Name', 'Type', 'State', 'LaunchTime']
    )
    writer.writeheader()
    for region in get_all_regions():
        for instance in get_instances(region):
            writer.writerow(instance)

if __name__ == '__main__':
    main()
# 実行方法(読み取り権限のIAMロール/プロファイルで)
pip install boto3
python ec2_inventory.py > ec2_list.csv

こういうボイラープレート、ClaudeCodeに「こんな感じのスクリプト作って」で出してもらって、レビューして使うことも可能です。これだけで棚卸作業の工数が体感3分の1になりました。


3. やっていけないこと:ここだけは死守する

さて、ここが本番。SIer出身の本領発揮です。

3-1. 🚫 本番環境への直接操作を任せる

ClaudeCode(特にエージェントモード)は、設定次第でAWS CLIを自律実行できてしまいます。

❌ 絶対にやってはいけないプロンプト例

「本番のRDSのスナップショットを全部削除して、古いものから20個まで残して整理して」

→ ClaudeCodeが aws rds delete-db-snapshot を連打する可能性があります

「提案させる」と「実行させる」は別物です。本番環境への変更操作は、ClaudeCodeにコマンドを生成させて、人間が内容を確認してから実行する、というフローを必ず守ってください。

金融・公共系の現場では特に、変更管理台帳への記録や承認フローが求められます。AIが自律実行した変更はそのプロセスをすっ飛ばすことになるので、ガバナンス的にアウトです。


3-2. 🚫 秘密情報をコンテキストに含める

# ❌ 絶対やってはいけない例

# こんな内容をClaudeCodeのチャットに貼らない!
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

# DBの接続情報をプロンプトに含めない
# DATABASE_URL=postgresql://admin:P@ssw0rd!@prod-db.xxxx.ap-northeast-1.rds.amazonaws.com/mydb

これ、やりがちなんですよね。「エラーの原因調べてほしくて、接続文字列ごと貼っちゃった」みたいな。

ClaudeCodeに投げるコンテキストは、Anthropicのサーバーに送信されるという認識を常に持ってください。機密情報は仮の値に置き換えるか、変数名だけ見せて中身は伏せる。


3-3. 🚫 生成されたIAMポリシーをノーレビューで使う

//  ClaudeCodeが出したポリシーをそのまま適用しない

// 「S3にアクセスしたい」と言ったら、こういうの出してくる可能性がある
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",       //  ワイルドカード!
      "Resource": "*"          //  全バケット!
    }
  ]
}

ClaudeCodeは「動くポリシー」は出してくれますが、「最小権限のポリシー」を自動で考慮してくれるとは限りません。プロンプトで明示的に「最小権限原則に従って」と指定しても、レビューは必須です。


3-4. 🚫 出力結果を「正しい」と思い込む

これが一番問題となる部分です。ClaudeCodeは自信満々に間違えます

私がやらかしかけた例:

私:「この CloudFormation テンプレートの Fn::GetAtt の書き方合ってる?」

ClaudeCode:「はい、問題ありません!` Fn::GetAtt: [MyBucket, WebsiteURL]` は正しい構文です」

実際:そのリソースタイプではWebsiteURLというAttributeは存在しない
      (S3バケットのWebsiteURL取得はバケットのプロパティ設定が別途必要)

※このやりとりは説明用のフィクションです。類似の事象は業界全体でよく報告されています

AWSのリソース仕様は細かいので、公式ドキュメントと照合する習慣は崩さないでください。ClaudeCodeはたたき台を出す係、最終確認は人間です。
特に、AWS公式のMCPサーバと連携させたとしても、極力実機(テスト環境等)で実際に試すことを推奨します。


4. SIer視点で考える「導入判断フレームワーク」

「うちの現場でClaudeCode使っていいの?」を判断するための簡易フレームワークを作りました。

ClaudeCode適用可否チェックリスト

【前提条件】
□ 利用規約・データ取扱いポリシーを確認済み
□ 社内のAI利用ガイドラインに抵触しない
□ 顧客との契約上、ツール利用の制限がない

【用途判定】
□ 操作対象は本番環境か?
  → YES: コマンド生成のみ。実行は人間が行う
  → NO: 開発・検証環境であればより自由に使える

□ コンテキストに機密情報は含まれるか?
  → YES: マスク・除去してから使用。含められないなら用途を変える
  → NO: 問題なし

□ 生成物を無確認で本番適用するか?
  → YES: NG。必ずレビューフローを挟む
  → NO: 問題なし

これをチーム内のAI活用ガイドラインに組み込む形で使っています。


5. 実際の業務フロー:「提案 → レビュー → 実行」の三段構え

私が今使っているフローを図解(テキスト版)すると、こんな感じです:

[要件・課題]
    ↓
[ClaudeCode に「提案させる」]
  - コマンド生成
  - コードのたたき台
  - 調査候補の列挙
    ↓
[人間がレビュー]
  - 公式ドキュメントと照合
  - セキュリティチェック
  - ビジネスロジックの妥当性確認
    ↓
[人間が実行 or 承認フローへ]
  - 変更管理記録
  - 本番適用

このフローを守れば、ClaudeCodeは「作業を爆速にする道具」として機能します。守らないと、 「責任の所在が不明なまま本番に謎の変更が入る道具」 になります。

どっちで使うかは、エンジニアの判断次第です。


まとめ

  • コマンド生成・IaCレビュー・ログ読解・スクリプト生成 は積極的に活用する
  • ✅ プロンプトに「最小権限で」「セキュリティベストプラクティス視点で」を明示すると品質が上がる
  • ❌ 本番環境への自律実行・秘密情報の入力・生成物のノーレビュー適用は絶対NG
  • 🔑 「提案させて・人間がレビューして・人間が実行する」三段構えが業務適用の基本
  • 🔑 SIer現場はガバナンス・変更管理との整合性が必須。AIが変更管理をすっ飛ばさない設計を

ClaudeCodeは魔法ではなく、使い方次第で業務を変えられる道具です。SIer出身の慎重さ(時に過剰な慎重さ)は、AI活用においては強みになります。「本当に大丈夫?」と確認する習慣、大事にしていきましょう。

次回は「ClaudeCode × Terraform ― IaCレビューを自動化してPRレビューの品質を3倍にした話」を書く予定です。お楽しみに!


参考リンク


最後まで読んでいただきありがとうございます!「保存しておきたい」「参考になった」と思ったらLGTMとストックをお願いします!

コメントでの質問や「うちの現場ではこう使ってる」という情報共有も大歓迎です。SIer × AIの実践知を一緒に積み上げていきましょう 🙌

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?