2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

ハッカソン開発中、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さんの実装プロセスを詳しく聞いてみると、こんな感じでした。

  1. Claude Codeに「Azure SQLサーバーをデプロイしてください」と依頼
  2. Claude CodeがCLIコマンドを生成
  3. そのコマンドを実行
  4. 「成功しました」というメッセージを確認
  5. 完了

この間、どんな設定でデプロイされたのか全く理解していませんでした

具体的な問題点

調査の結果、以下の問題が明らかになりました。

問題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でレビューでき、変更履歴も追跡できます。

実際の修正対応

問題発覚後、私たちは以下の手順で対応しました。

  1. 即座にリソースを停止

    • まず出血を止めるため、SQLサーバーを一時停止
  2. 設定の見直し

    • SKUをBasicに変更
    • Auto-pauseを有効化
    • DTUを最小値に設定
  3. 代替案の検討

    • 開発環境ではSQLiteで十分ではないか検討
    • 本当にクラウドDBが必要か再検討
  4. チーム内での情報共有

    • 朝会で全メンバーに共有
    • クラウドリソース作成時のルールを明文化

結果として、コストを1日500円以下に抑えることができました。

チーム開発での学び

この経験から、AI駆動開発におけるチーム開発では以下が重要だと学びました。

知識レベルの差を認識する

チーム内で、誰がどの領域に詳しいのか、逆にどの領域が未経験なのかを把握しておくことが大切です。

私たちのチームでは、全員がPythonのデータ分析は得意でしたが、クラウドインフラの経験者がいませんでした。この認識があれば、事前に対策できたはずです。

「動いた」≠「正しい」

AIツールを使うと、簡単に「動くコード」が手に入ります。しかし、動くことと正しいことは別です。

特にクラウドリソースの場合、設定が不適切でも動いてしまいます。コストやセキュリティの観点でレビューする習慣をつけましょう。

失敗を共有する文化

この失敗を恥じるのではなく、チーム全体の学びとして共有できたことが良かったです。Cさんも「次は必ず設定を確認します」と前向きに受け止めてくれました。

AI時代には、このような新しいタイプの失敗が増えていくはずです。それを責めるのではなく、学びに変える文化が大切だと感じました。

まとめ

AI駆動開発は強力なツールですが、使い方を誤ると思わぬコストが発生する可能性があります。

今回の事例から得られた教訓をまとめます。

  • AIが生成したコードは、必ず内容を理解してから使う
  • コスト発生領域は、有識者によるレビューを必須にする
  • 予算アラートを細かく設定し、異常を早期発見する
  • AIに依頼する際は、具体的な制約条件を含める
  • チーム内で知識レベルの差を認識し、サポート体制を作る

Claude CodeやGitHub Copilotなどのツールは、確かにエンジニアリングの民主化を進めています。しかし、それと同時に基礎知識の重要性も増しています。

特にハッカソンなど短期間の開発では、このような失敗は致命的になりかねません。皆さんも気をつけて開発を進めてくださいね。

最後に、7000円の授業料は高くつきましたが、チーム全体が成長できる良い経験になりました。失敗を恐れず、でも同じ失敗は繰り返さないように、楽しく開発していきましょう。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?