小説「声からはじまる設計」
- 山崎行政書士事務所
- 2025年9月6日
- 読了時間: 5分

朝、ターコイズ色のロゴが窓ガラスに揺れていた。蓮斗はシャツの袖をひと折りし、ノートPCを開く。――Azureの不安、まずあなたの「声」から始めましょう。ポスターの自分が言うその一文を胸でなぞり、来客を迎えた。
相手は製造スタートアップ「青鷺メカトロ」のCFO・三咲、そして情シスの高橋。「正直、何から直せばいいのか……」三咲は深く息を吐く。「請求は跳ねる、監査は近い、でも開発は止めたくない」高橋が続ける。「GitHub Actions で develop/staging/main を分けてるんですが、TF_ENV の切り替わりがうまく行かず、stg に出すはずが prd 側の名前で作られたり、Key Vault の参照も混線して……」
蓮斗は微笑んで、A4の白紙を四つに折った。「では、まず“声”を四つの箱に分けさせてください」
したい(目的)
こわい(リスク)
ある(現状の資産)
ない(足りないもの)
三咲の言葉は「したい」に、「月次のコスト予見性」と「EU顧客向けの監査対応」。「こわい」には「本番に“違うもの”が出る」高橋の「ある」には「Terraform モジュール」「関数アプリ+OpenAI+Key Vault+VNet」「Event Hub→New Relic 連携の雛形」。「ない」は「環境ごとの共通ルール」「命名・タグ・Budget」「決定の記録」。
「ありがとうございます」蓮斗は四つの箱を一列に並べ替える。「この順番で設計に落とします。目的→ルール→構成。正確さとスピードの両立が、僕のモットーです」
1 “一枚の地図”をつくる
会議室の壁に、蓮斗は一本の縦線を引いた。左側が基準、右側が仕組み。「基準は三つだけに絞ります」
命名・タグ・Budget:<app>-<tier>-<region>-<env>、タグはOwner/CostCenter/DataClass。環境ごとに月次Budget+アラート。
権限と境界:dev/stg/prdは別サブスクリプション(最終的に分離)。当面はResource Group分離+Policy。
決定ログ:設計判断は Issue に1行で残す(Why/Option/Decision/Date)。
「仕組みは四つ」
A) CI/CD の環境マップ:develop→dev staging→stg main→prd をYAMLのマップで固定。B) Terraform の変数:TF_ENV ではなく var.env_suffix をモジュール引数で明示。C) Key Vault:環境ごとに分離、Reference は appsettings.{env}.json で束ねる。D) 観測:New Relic へのログは Event Hub 経由。共通スキーマにして検索を簡単に。
「まず、ここまでで“こわい”は半分になります」蓮斗は爽やかに笑う。「残り半分は、やってみせて消します」
律斗が隣で頷いた。「進めよう。迷う人の地図になる」
2 切り替わらない環境
その日の午後、試験デプロイ。「やっぱり stg にもかかわらず、prd 名でストレージが出ました」高橋が眉をひそめる。
蓮斗はログを三段で読む。Pipeline → Terraform → Azure。「YAML の if: github.ref == 'refs/heads/staging' はOK。次、terraform apply の引数……」画面を指す。「ここ、TF_VAR_env=prd がキャッシュされたままです。前のジョブの環境変数が残っている」
修正はシンプルだった。
env: をジョブ単位で明示
-var "env=${{ matrix.env }}" を毎回渡す
terraform workspace select ${{ matrix.env }} を追加
「では再実行」数分後、stg のリソースが、約束通りの名前とタグで並んだ。Budgetのアラート設定も自動で入っている。
三咲が小さく息を呑む。「“見分けがつく”だけで、こんなに安心なんですね」
「不安は“区別”で小さくなります」蓮斗はノートに一行、決定ログを書き加えた。
Decision#12: CIのENVをマップ化+Terraform引数を毎回明示(2025-09-06)
3 鍵の所在
次はKey Vault。「開発は動くのに、stg でOpenAIの呼び出しが落ちます」高橋が画面を示す。403。Managed Identity は付いている。
蓮斗は静かに首を傾げ、接続の“主語”を確認する。「呼んでいるのは“アプリ”か“デプロイ”か。二人の自分がいます」デプロイ時はGitHub OIDC、アプリ実行時はManaged Identity。デプロイ権限はあるのに、実行権限がない――それが穴だった。
「権限をふたつ入れます。Key Vault Secrets Officer はデプロイ用、Secrets User はアプリ用。対象は stg の Vault だけ」付与後、アプリがふっと息を吹き返す。OpenAI から応答が戻り、関数がJSONを整えて画面に並べた。
「やりましたね」叶多が親指を立てる。蓮斗は笑いながらも、さらりと続けた。「“一見同じ”を分けて考えると、速く正確になります」
4 監査という現実
「NIS2やEU顧客の監査を見据えると、証跡が要ります」三咲が遠慮がちに切り出す。悠真が静かに合図し、蓮斗が“右側”の仕組みにさらに二行足す。
E) 変更の証跡:CHANGELOG.md を自動生成。Issue の Decision を週次で集約。F) タグ=台帳:タグDataClass(Public/Confidential/Personal)で費用と保護の濃度をひも付ける。
「ここまでが“最初の一枚”です」蓮斗はA3にまとめた図を差し出した。目的 / ルール / 構成 / 証跡 が、ひと目で見渡せる。
三咲の表情がほどける。「こういう紙がほしかった。投資判断の会議で、たぶんこれ一枚で通せます」
5 本番前夜、十分の静けさ
夜。stg で最終確認。陽翔がSNSの事前告知文を用意し、奏汰は“切替前チェックリスト”を読み上げる音声を流した。
ENVの確認(dev/stg/prd) Key Vault 参照の切替 Event Hub 送信先の確認 Budget アラートの閾値 Decision ログの更新
「十分だけ、静かにしよう」律斗が言い、室内がふっと落ち着く。蓮斗は一人、ターミナルに向き合う。main にマージ、Pipeline 起動、prd へ。青い進捗バーが右へ伸び、最後のステップで止まった。
「……完了。差分はコンテナ名だけ、タグは一致、Vaultの参照はprd」New Relic のダッシュボードに、prd のログが整然と流れ始める。アラートは静かだ。
三咲が胸に手を当てた。「怖かった“本番”が、ただの“順番”になりました」
「順番にすれば、誰でも行けます」蓮斗は爽やかに笑う。「迷ったら、この一枚に戻るだけです」
エピローグ 声の設計
翌朝、三咲からメッセージが届いた。
役員会、通りました。“不安が設計に変わる瞬間”を初めて見ました。
蓮斗はデスクで深呼吸し、四つの箱を閉じる。したい/こわい/ある/ない。人の声が一番の要件定義書だ――そう思う。
窓の外で、ターコイズの空が澄んでいく。今日も誰かの声から始めよう。正確さとスピードの両立を胸に、Azureの不安は、あなたの「声」から設計に変わる。




コメント