top of page

小説「声からはじまる設計」

朝、ターコイズ色のロゴが窓ガラスに揺れていた。蓮斗はシャツの袖をひと折りし、ノート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 “一枚の地図”をつくる

会議室の壁に、蓮斗は一本の縦線を引いた。左側が基準、右側が仕組み。「基準は三つだけに絞ります」

  1. 命名・タグ・Budget:<app>-<tier>-<region>-<env>、タグはOwner/CostCenter/DataClass。環境ごとに月次Budget+アラート。

  2. 権限と境界:dev/stg/prdは別サブスクリプション(最終的に分離)。当面はResource Group分離+Policy。

  3. 決定ログ:設計判断は 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の不安は、あなたの「声」から設計に変わる。

 
 
 

コメント


Instagram​​

Microsoft、Azure、Microsoft 365、Entra は米国 Microsoft Corporation の商標または登録商標です。
本ページは一般的な情報提供を目的とし、個別案件は状況に応じて整理手順が異なります。

※本ページに登場するイラストはイメージです。
Microsoft および Azure 公式キャラクターではありません。

Microsoft, Azure, and Microsoft 365 are trademarks of Microsoft Corporation.
We are an independent service provider.

​所在地:静岡市

©2024 山崎行政書士事務所。Wix.com で作成されました。

bottom of page