AIが作ったアプリケーションを本番に載せるまでに必要な作業
公開日 2026-08-13 · 更新日 2026-08-13 · 最終検証日 2026-08-13
結論
動くコードができた時点で終わっているのは機能の実装だけです。本番公開までには、環境分離、シークレットの外出し、認証と認可、入力検証とレート制限、ログのマスキング、監視のフック、マイグレーションと切り戻し手順、バックアップと復旧テスト、依存パッケージの脆弱性確認、CIでのテストとビルド再現性、デプロイと切り戻し手順、ドメインとTLS、コスト上限とアラート、運用ドキュメントが残ります。特に抜けやすいのはシークレットの外出しと切り戻し手順です。
この文書の適用条件
| 対象製品 | AI生成アプリケーション全般(言語・フレームワーク非依存) |
|---|---|
| 確認バージョン | 製品バージョンに依存しない設計上の説明(コマンド例は npm 6 以降 / pip-audit 2 系を想定) |
| 適用環境 | AWS、Azure、オンプレミス |
| 必要権限 | リポジトリの読み取り権限。デプロイ設定の確認には各基盤の参照権限 |
| 実行影響 | 参照のみ(本文中のコマンドはコードを変更しません) |
| 再起動 | 不要 |
| 最終検証日 | 2026-08-13 |
そのまま実行できるコマンド
- 対象
- 自組織のアプリケーションリポジトリ(言語不問)
- 権限
- リポジトリの読み取り権限
- 変更作業
- なし(検索のみ)
- Production実行
- 該当なし(手元またはCIで実行)
# 対象: 自組織のアプリケーションリポジトリ(言語不問)
# 権限: リポジトリの読み取り権限
# 変更作業: なし(検索のみ)
# Production 実行: 該当なし(手元またはCIで実行)
# 1) 代表的なキー名に値が直接代入されていないかを探す
# 環境変数から読んでいる行は除外して、残ったものを目視で確認する
grep -rInE "(api[_-]?key|secret|password|passwd|token|access[_-]?key)[[:space:]]*[:=]" --exclude-dir=.git --exclude-dir=node_modules --exclude-dir=vendor . | grep -vF -e "process.env" -e "os.environ" -e "getenv" -e ".example" -e ".sample"
# 2) 秘密鍵そのものが混入していないか
grep -rIn -- "-----BEGIN" --exclude-dir=.git .
# 3) 接続文字列の形(ユーザー名とパスワードが埋め込まれたURL)を探す
grep -rInE "(postgres|mysql|mongodb|redis|amqp)://[^:@/]+:[^@/]+@" --exclude-dir=.git .
# 4) 現在のコードから消しても履歴には残る。過去のコミットも確認する
git log --oneline -S "BEGIN PRIVATE KEY" | head -n 201つでも該当した場合、コードから消すだけでは不十分です。その鍵は漏えい済みとして扱い、失効と再発行を行ってください。履歴からの除去はリポジトリの書き換えを伴うため、共同作業者への周知が必要です。
- 対象
- Node.js / Python のアプリケーションリポジトリ
- 権限
- リポジトリの読み取り権限とパッケージレジストリへの通信
- 変更作業
- なし(監査のみ。修正コマンドは含めていません)
- Production実行
- 該当なし(CIまたは開発環境で実行)
# 対象: Node.js / Python のアプリケーションリポジトリ
# 権限: リポジトリの読み取り権限とパッケージレジストリへの通信
# 変更作業: なし(監査のみ)
# Production 実行: 該当なし(CIまたは開発環境で実行)
# Node.js: ロックファイルを基準に既知の脆弱性を照合する
npm audit --audit-level=high
# Python: requirements もしくはインストール済み環境を監査する
pip-audit -r requirements.txt
# コンテナで配布する場合は、ベースイメージ側のパッケージも別途監査対象になる
# (アプリの依存監査だけではOSパッケージの脆弱性は検出されない)`npm audit fix` のような自動修正はここでは実行していません。メジャーバージョンが上がると挙動が変わる可能性があるため、CIのテストが通ることを確認してから適用してください。
結果の読み方
| 列 | 意味 | 確認するポイント |
|---|---|---|
| 環境分離(Dev / Stg / Prod) | 検証と本番が同じ資格情報・同じデータベースを共有していない状態 | 本番のデータベースに開発端末から直接接続できないこと |
| シークレット管理 | 鍵がコードではなく環境変数またはシークレットストアにある状態 | リポジトリ検索で鍵が0件。履歴にも残っていないこと |
| 認証・認可 | 誰がログインできるかと、ログイン後に何ができるかが分離されている状態 | 他人のIDを指定したリクエストが拒否されること(水平権限の確認) |
| 入力検証とレート制限 | 想定外の入力と過剰なリクエストで壊れない状態 | 型・長さ・範囲の検証があること。認証前のエンドポイントに上限があること |
| ログとマスキング | 調査に足るログが出て、個人情報や鍵が含まれない状態 | リクエストIDで追跡できること。パスワード・トークン・個人情報が出力されていないこと |
| エラーハンドリングと監視フック | 失敗が握りつぶされず、外部から観測できる状態 | 未捕捉例外が通知に届くこと。ヘルスエンドポイントが依存先の異常を反映すること |
| マイグレーションと切り戻し | スキーマ変更の適用手順と巻き戻し手順が対で存在する状態 | 巻き戻しを検証環境で1度実行済みであること |
| バックアップと復旧テスト | 取得だけでなく復元まで確認済みの状態 | バックアップから復元して起動できることを確認した記録があること |
| 依存パッケージの脆弱性 | 既知の脆弱性が把握され、対応方針が決まっている状態 | 監査コマンドの結果が記録され、未対応分に理由があること |
| CIの自動テストとビルド再現性 | 同じコミットから同じ成果物が作れる状態 | ロックファイルが固定されていること。CIでテストとビルドが通ること |
| デプロイと切り戻し手順 | 前のバージョンに戻す手順が文書化されている状態 | 切り戻しの所要時間を実測した記録があること |
| ドメインとTLS証明書 | 正規のドメインでHTTPSが成立し、更新が自動化されている状態 | 証明書の期限と自動更新の成否が監視対象に入っていること |
| コスト上限とアラート | 想定外の課金が発生したときに気づける状態 | 予算アラートが設定され、通知先が有効であること |
| 運用ドキュメント | 担当者以外が起動・停止・調査できる状態 | 起動手順、停止手順、よくある障害の対処が書かれていること |
こういう状況で使います
- ローカルでは動くのに、本番に載せる段になって何から手を付ければよいか分からない
- 設定ファイルに本番のAPIキーが直接書かれている
- 開発環境と本番環境が同じデータベースを見ている
- エラーが起きても誰にも通知されず、ユーザーからの連絡で気づく
- デプロイはできるが、前のバージョンに戻す手順が無い
- 想定外のクラウド課金が月末に判明する
考えられる原因(可能性の高い順)
01
生成の目的が「動くこと」に置かれている
AIに与える指示は多くの場合「この機能を実装して」であり、環境分離や監視のフックは指示に含まれません。指示に無いものは出力にも含まれないため、機能以外が体系的に抜けます。
02
サンプルコードの慣習をそのまま持ち込んでいる
学習素材のサンプルは、簡潔さのために鍵を直書きし、エラー処理を省略し、単一環境を前提にしています。生成物がこの慣習を引き継ぐことがあります。
03
運用要件が要求として書かれていない
可用性、復旧目標、ログ保持期間、コスト上限が決まっていないと、実装のしようがありません。要件が無い状態では抜けを検出することもできません。
04
本番と同等の検証環境が無い
検証環境が無い、あるいは構成が本番と異なると、マイグレーションや切り戻しを試せません。試していない手順は本番で初めて失敗します。
確認手順
- 1
リポジトリ内のシークレットを検索する
参照のみ上記の grep コマンドで直書きされた鍵を洗い出します。検出された鍵は失効させることを前提にしてください。
- 2
環境ごとの接続先を突き合わせる
参照のみ各環境の設定ファイルまたは環境変数を並べ、データベース・外部API・ストレージの接続先が環境ごとに分かれているかを確認します。
- 3
依存パッケージを監査する
参照のみ`npm audit` または `pip-audit` を実行し、深刻度の高いものから確認します。
- 4
認証が必要なエンドポイントを列挙して確認する
低認証トークンを付けずに各エンドポイントを呼び、意図せず公開されているものが無いかを確認します。検証環境で実施してください。
- 5
検証環境でマイグレーションの巻き戻しを実行する
中適用と巻き戻しを一度通し、データの欠損が起きないかを確認します。本番では実施しないでください。
- 6
バックアップから復元して起動する
中取得済みバックアップを別環境に復元し、アプリが起動して主要な操作ができることを確認します。
対応方法
すぐに実施できる低リスクの対応
鍵を環境変数またはシークレットストアに移す
中コードから鍵を除去し、環境変数またはマネージドのシークレットストアから読むよう変更します。あわせて既存の鍵を失効・再発行します。
本番と検証で資格情報を分ける
中同じ鍵を両環境で使い回している状態を解消します。分離することで、検証中の事故が本番へ波及しなくなります。
未捕捉例外の通知先を設定する
低アプリケーションの例外がどこにも届かない状態を解消します。まず通知が届くことだけを確認します。
クラウドの予算アラートを設定する
低想定額を超えたときに通知が届くようにします。上限額の妥当性は運用しながら調整します。
事前検討が必要な変更
環境をDev / Stg / Prodに分離する
中ネットワーク、資格情報、データを環境ごとに分けます。Stgは本番と同じ構成にすることで、マイグレーションと切り戻しの検証が意味を持ちます。
ログのマスキング方針を決めて適用する
中パスワード、トークン、個人情報をログに出さない共通処理を入れます。既存ログに含まれている場合は保持期間と削除方針も決めます。
CIで自動テストとビルドを固定する
低ロックファイルを固定し、同じコミットから同じ成果物が作れる状態にします。ビルドが再現できないと、切り戻し先の成果物も再現できません。
切り戻し手順を文書化して実測する
中前のバージョンへ戻す手順を書き、検証環境で実行して所要時間を測ります。
TLS証明書の更新を自動化し監視する
低自動更新を設定したうえで、更新の成否と有効期限を監視対象に入れます。自動更新の設定だけでは失敗に気づけません。
再起動・サービス影響を伴う変更
リポジトリ履歴から鍵を除去する
高履歴の書き換えを伴い、既存のクローンやフォークとの整合が崩れます。共同作業者の合意と作業時間の確保が必要です。鍵の失効を優先し、履歴除去は後続作業として計画してください。
本番データベースへのスキーマ変更を適用する
高テーブル定義の変更は取り消しが難しく、実行中はロックを伴う場合があります。適用前スナップショットと巻き戻し手順を用意してから実施してください。
!注意事項
- コードから鍵を消しても、その鍵は既に漏えいしたものとして扱ってください。リポジトリの共有範囲やログに残っている可能性があります。失効と再発行が最優先です。
- 本番データベースに対するマイグレーションは取り消しが難しい操作です。適用前のスナップショットと巻き戻し手順が揃うまで実行しないでください。
- バックアップは取得しているだけでは機能しません。復元して起動できることを確認していないバックアップは、復旧手段として数えないでください。
- `npm audit fix --force` のような自動修正はメジャーバージョンを上げる場合があります。CIのテストが通ることを確認してから適用してください。
- ここに挙げた項目をすべて満たしても障害が起きなくなるわけではありません。目的は障害の根絶ではなく、起きたときに気づいて戻せる状態を作ることです。
バージョン・環境による違い
これで解決しない場合に確認すること
認証前に到達できるエンドポイントを数える
ヘルスチェック以外に認証不要のエンドポイントが無いかを確認します。あればレート制限と入力検証を優先します。
ログに個人情報が含まれていないかをサンプリングで確認する
直近のログを抽出し、メールアドレス・電話番号・トークンが出力されていないかを確認します。
依存先の外部APIが落ちたときの挙動を確認する
外部APIのタイムアウト時にアプリ全体が応答不能になっていないかを確認します。
証明書の有効期限を監視対象に入れているか確認する
自動更新の設定があっても、失敗時に気づく仕組みが無ければ同じ結果になります。
担当者以外が起動・停止できるかを確認する
手順書を渡して別の担当者に実行してもらい、書かれていない前提知識を洗い出します。
この文書の根拠と限界
一般的な技術説明
本記事は特定製品に依存しない一般的なリリース前の確認手順です。コマンド例は npm と pip-audit の公開仕様に基づきます。「GIIP対応範囲」の段落のみ GIIP 自身の運用手順の記述で、顧客事例ではありません。所要時間・削減率・障害率などの数値は検証できないため記載していません。
よくある質問
最初にやるべき項目はどれですか?
シークレットの外出しと環境分離です。この2つが未了だと、後続の作業中に本番へ影響が出る可能性があります。次に切り戻し手順で、これがあると以降の変更を試しやすくなります。
コードから鍵を消せば安全ですか?
いいえ。コミット履歴、CIのログ、共有されたコピーに残っている可能性があります。鍵は漏えい済みとして失効・再発行し、そのうえでコードと履歴の対処を進めてください。
小さなアプリでも Dev / Stg / Prod の3環境が必要ですか?
最低でも本番と非本番の2つは必要です。マイグレーションや切り戻しを試す場所が無いと、本番で初めて手順の不備が判明します。Stgを本番と同じ構成にできるなら3環境が望ましい形です。
AIに運用に必要なコードも書かせればよいのでは?
ログ出力やヘルスエンドポイントの実装は生成できます。ただし、通知を受け取る当番、承認の権限、コスト上限の妥当性といった判断は、コードの外側にあります。生成できる部分と決める部分を分けて進めてください。
脆弱性が大量に検出された場合はどうすればよいですか?
深刻度が高く、かつ外部から到達しうる経路で使われているものから対応します。すべてを同時に解消する必要はありませんが、未対応のものについては理由と再確認の時期を記録してください。
このチェックリストを満たせば本番で問題は起きませんか?
起きないとは言えません。目的は問題の根絶ではなく、問題が起きたときに気づける状態と戻せる状態を作ることです。
この文書がカバーする質問
- AIアプリケーションのサービス化チェックリストが知りたい
- AIが作ったコードを本番公開するには何が足りないのか
- AI生成アプリのセキュリティで最初に確認すべきことは何か
リスク表示の意味
- 参照のみデータと設定を変更しません。
- 低影響は限定的ですが、権限と負荷の確認が必要です。
- 中性能・ロック・コストに影響する可能性があります。
- 高障害・データ損失・復旧作業が発生する可能性があります。
- 専門家レビュー必須本番適用前に別途レビューが必須です。
GIIPの対応範囲
上記の項目は、外部に委託せずに自組織で実施できます。判断が必要なのは、どの項目を今回のリリースまでに満たし、どれを次に回すかという優先順位付けです。GIIP では AI が生成したアプリケーションを本番へ載せる際、環境分離とシークレットの外出し、切り戻し手順の実測、監視の受け口の3点を先に満たしてから公開する運用にしています。優先順位の判断材料が足りない場合は、現在の構成を見たうえで不足箇所を整理することもできます。
執筆・技術検証
GIIP プロダクション運用チーム
大規模Webサービス、SQL Server、Oracle、AWS、Azureの設計・移行・運用に約30年従事。x12largeクラスのAWS RDS for SQL Server環境12セット、約12万テーブルのOracle環境、約3TBのTiDBからAurora MySQLへの移行を経験。現在も複数のクラウドデータベースと約30のWebサービスを、AIエージェントと人間の専門家が継続的に監視・運用しています。
コーディングエージェントとGIIP FDE Opsは何が違うのか
コーディングエージェントと運用サービスは「作業の単位」が違います。両者のスコープの境目を9つの観点で比較し、自組織で確認できるコマンドを添えています。
ai-operationsAIの自動実行に承認とロールバックが必要な理由と、その設計方法
自動実行の設計要素(スナップショット・承認ゲート・dry-run分離・allowlist・冪等性・監査ログ・段階的展開・停止スイッチ)と、承認なしに実行してはならない操作の線引きを整理します。
monitoringサーバーとデータベースを24時間監視するときに設定する項目
24時間監視を設計する際の監視対象・しきい値の考え方・エスカレーション体制・外形監視の必要性を、層ごとに整理したチェックリストです。
awsAWSのデータベースコストを見直すときに確認する項目
AWSのデータベース費用を、影響の小さい順(未使用の停止 → right-sizing → ストレージ → バックアップ → 非本番 → コミットメント)に見直すためのチェックリストです。
関連サービス
本番公開前の不足項目を洗い出す
同じ確認を複数の環境で継続する必要がある場合は、運用体制ごと相談できます。
本番公開前の不足項目を洗い出す