はじめに
ハッカソン開発中、Azureのコストアラートが鳴りました。見ると1日で7000円のコストが発生しています。
原因を調べてみると、チームメンバーがClaude Codeを使ってデプロイしたSQLサーバーが原因でした。これは、AI駆動開発時代における典型的な失敗事例だと思います。
この記事では、AI時代にエンジニアになった人がハマりやすい罠と、その対策について実体験を交えて解説します。
事件の発覚
ある朝、Azureポータルを開いてコスト管理の画面を確認していました。するとグラフが急激に上昇しているではありませんか。
前日まで1日500円程度だったコストが、突然7000円に跳ね上がっていました。ハッカソンの開発期間は1ヶ月。このペースで行くと20万円以上のコストになってしまいます。
急いでコスト分析の詳細を確認すると、SQL Databaseのリソースが大半を占めていました。
原因究明:何が起きていたのか
私はすぐにSQLサーバーを実装した新人エンジニアのCさんに連絡を取りました。
私:「SQLサーバーのデプロイ、どうやって実装しました?」
Cさん:「Claude CodeからCLIでデプロイしました」
私:「デプロイしたときの細かい設定、覚えてますか?」
Cさん:「......知らんす」
この会話で、何が起きたのか理解しました。Cさんは以下のような流れで実装していたのです。
Cさんの実装プロセスを詳しく聞いてみると、こんな感じでした。
- Claude Codeに「Azure SQLサーバーをデプロイしてください」と依頼
- Claude CodeがCLIコマンドを生成
- そのコマンドを実行
- 「成功しました」というメッセージを確認
- 完了
この間、どんな設定でデプロイされたのか全く理解していませんでした。
具体的な問題点
調査の結果、以下の問題が明らかになりました。
問題1:高額なSKUを選択していた
Claude Codeが生成したコマンドでは、開発環境には不要な高性能SKUが選択されていました。具体的には、本番環境向けのGeneral Purposeプランが使用されていたのです。
ハッカソンのプロトタイプには、Basic SKUで十分でした。
| プラン | 月額コスト | 用途 |
|---|---|---|
| Basic | 約500円 | 開発・テスト環境 |
| General Purpose | 約20,000円〜 | 本番環境 |
問題2:Auto-pauseが無効になっていた
Azure SQL Databaseには、使用していない時間帯に自動で一時停止する「Auto-pause」という機能があります。しかし、この設定が無効になっていました。
これにより、誰もアクセスしていない深夜や早朝も課金され続けていたのです。
問題3:DTU(Database Transaction Unit)が過剰
開発段階では最小限のDTUで問題ありませんでしたが、デフォルトの高い値が設定されていました。
なぜこのようなことが起きたのか
この問題の根本原因は、AIツールへの過度な信頼とクラウドコストに対する知識不足でした。
AIツールは最適解を提案するわけではない
Claude CodeなどのAIアシスタントは、動作するコードを生成してくれます。しかし、そのコードがコスト最適化されているかどうかは別の話です。
AIは以下のような判断が苦手です。
- 開発環境なのか本番環境なのか
- 予算の制約
- 実際のトラフィック予測
- 組織のポリシー
これらの文脈を理解せずに、「動けばいい」という視点でコードを生成してしまいがちなのです。
AI時代のエンジニアが陥りがちな罠
Cさんは、AIツールの力を借りてエンジニアになった新世代のエンジニアです。従来のエンジニアと異なり、基礎から積み上げるのではなく、AIの力で一気に実装できてしまいます。
これは素晴らしい能力ですが、同時に危険でもあります。
特に以下の領域では注意が必要です。
- コストが発生するリソース(データベース、VM、ストレージなど)
- セキュリティに関わる設定(認証、アクセス制御など)
- パフォーマンスに影響する設定(スケーリング、キャッシュなど)
対策:どうすれば防げたのか
この問題を防ぐために、私たちが実施すべきだった対策を紹介します。
対策1:コスト発生領域はレビュー必須にする
チームメンバーがクラウドリソースをデプロイする際は、必ず有識者がレビューするルールを設けるべきでした。
特に以下のリソースは要注意です。
- データベース
- 仮想マシン
- ストレージアカウント
- App Service(上位プラン)
レビュー時のチェックポイントとしては、下記のようなものが挙げられます。
- 選択しているSKU/プランは適切か
- Auto-scaleやAuto-pauseの設定は適切か
- 開発環境として過剰なスペックになっていないか
対策2:予算アラートを細かく設定する
Azureには予算アラート機能があります。これを細かく設定しておくべきでした。
私たちが設定すべきだったアラートは下記です。
- 日次予算:1000円
- 週次予算:5000円
- 月次予算:20000円
こうしておけば、異常なコストが発生した当日に気づけたはずです。
対策3:AIが生成したコマンドは必ず確認する
AIが生成したコマンドを実行する前に、最低限以下を確認するようにしましょう。
- どんなリソースが作成されるのか
- どんなオプションが指定されているのか
- コストに影響する設定はないか
特にCLIコマンドの場合、--sku、--tier、--capacityなどのパラメータに注目します。
対策4:開発環境用のテンプレートを用意する
AIに依頼する際は、具体的な制約条件を含めて依頼するのが効果的です。
悪い例
SQLサーバーをAzureにデプロイしてください
良い例
開発環境用のAzure SQLサーバーをデプロイしてください。
以下の条件で設定してください:
- SKU: Basic
- 容量: 最小
- Auto-pause: 有効(1時間)
- リージョン: Japan East
- 予算: 月1000円以内
このように具体的に指示することで、AIはより適切な設定を提案してくれます。
対策5:Infrastructure as Codeを活用する
可能であれば、TerraformやBicepなどのIaCツールを使用することをお勧めします。これにより設定がコードとして残り、レビューもしやすくなりますね。
# Terraformの例
resource "azurerm_sql_server" "dev" {
name = "dev-sql-server"
resource_group_name = azurerm_resource_group.dev.name
location = "Japan East"
version = "12.0"
administrator_login = "sqladmin"
administrator_login_password = var.sql_password
# 開発環境用の設定
tags = {
environment = "development"
cost-center = "hackathon"
}
}
resource "azurerm_sql_database" "dev" {
name = "dev-database"
resource_group_name = azurerm_resource_group.dev.name
location = "Japan East"
server_name = azurerm_sql_server.dev.name
# コスト最適化: Basicプラン
edition = "Basic"
requested_service_objective_name = "Basic"
}
このようにコード化しておけば、GitHubでレビューでき、変更履歴も追跡できます。
実際の修正対応
問題発覚後、私たちは以下の手順で対応しました。
-
即座にリソースを停止
- まず出血を止めるため、SQLサーバーを一時停止
-
設定の見直し
- SKUをBasicに変更
- Auto-pauseを有効化
- DTUを最小値に設定
-
代替案の検討
- 開発環境ではSQLiteで十分ではないか検討
- 本当にクラウドDBが必要か再検討
-
チーム内での情報共有
- 朝会で全メンバーに共有
- クラウドリソース作成時のルールを明文化
結果として、コストを1日500円以下に抑えることができました。
チーム開発での学び
この経験から、AI駆動開発におけるチーム開発では以下が重要だと学びました。
知識レベルの差を認識する
チーム内で、誰がどの領域に詳しいのか、逆にどの領域が未経験なのかを把握しておくことが大切です。
私たちのチームでは、全員がPythonのデータ分析は得意でしたが、クラウドインフラの経験者がいませんでした。この認識があれば、事前に対策できたはずです。
「動いた」≠「正しい」
AIツールを使うと、簡単に「動くコード」が手に入ります。しかし、動くことと正しいことは別です。
特にクラウドリソースの場合、設定が不適切でも動いてしまいます。コストやセキュリティの観点でレビューする習慣をつけましょう。
失敗を共有する文化
この失敗を恥じるのではなく、チーム全体の学びとして共有できたことが良かったです。Cさんも「次は必ず設定を確認します」と前向きに受け止めてくれました。
AI時代には、このような新しいタイプの失敗が増えていくはずです。それを責めるのではなく、学びに変える文化が大切だと感じました。
まとめ
AI駆動開発は強力なツールですが、使い方を誤ると思わぬコストが発生する可能性があります。
今回の事例から得られた教訓をまとめます。
- AIが生成したコードは、必ず内容を理解してから使う
- コスト発生領域は、有識者によるレビューを必須にする
- 予算アラートを細かく設定し、異常を早期発見する
- AIに依頼する際は、具体的な制約条件を含める
- チーム内で知識レベルの差を認識し、サポート体制を作る
Claude CodeやGitHub Copilotなどのツールは、確かにエンジニアリングの民主化を進めています。しかし、それと同時に基礎知識の重要性も増しています。
特にハッカソンなど短期間の開発では、このような失敗は致命的になりかねません。皆さんも気をつけて開発を進めてくださいね。
最後に、7000円の授業料は高くつきましたが、チーム全体が成長できる良い経験になりました。失敗を恐れず、でも同じ失敗は繰り返さないように、楽しく開発していきましょう。