採用サイトのContainer AppsデプロイをClaude Codeで確認する: 環境変数と公開URL
採用サイト公開前にContainer Appsの環境変数、公開URL、応募フォーム、revisionを確認します。
採用サイトの公開前夜、求人ページは見えているのに応募フォームだけ別のstaging URLへ送られていたら、候補者の応募は静かに消えます。採用担当が見ているのは、求人LP、応募フォーム、PUBLIC_SITE_URL、FORM_POST_ENDPOINT、Container Appsの公開FQDNです。今日まず直す1箇所は、環境変数と公開URLを1枚の表にして、本番へ向いていない値を見つける作業です。
この記事では、採用サイトをAzure Container Appsへ出す小さな会社向けに、Claude Codeで公開前チェック表を作る流れを書きます。狙いは、AIにdeployさせる話ではありません。求人ページ、応募フォーム、環境変数、secrets、ingress、custom domain、revision trafficを読み、人が公開可否を決められる材料へ落とします。
この記事の要点
- 採用サイトの公開確認では、ページ表示より先に応募フォーム送信先、公開URL、環境変数を見る。
- Azure Container Appsはコンテナ化したアプリを動かせるが、ingress、domain、secret、revisionの確認を飛ばすと応募率に響く。
- Claude Codeには設定表、YAML、環境変数名、releaseメモを読ませ、候補者に見える事故を表に出させる。
- 人が見る範囲は、公開URL、求人内容、個人情報、ATS連携、応募メール、traffic切替、rollbackです。
- 成果はPVではなく、フォーム到達率、応募完了率、送信エラー件数、公開前に止めたミスの件数で見ます。
採用サイト公開前の業務フロー
採用担当が公開前に持っている具体物は、求人ページURL、応募フォーム、確認用スクリーンショット、環境変数一覧、Container Appsのrevision一覧です。開発者はアプリが起動したかを見がちですが、採用側は候補者が求人を読み、応募フォームへ進み、送信後メールを受け取れるかを見ます。
公開前の流れは、求人内容の確認、公開URLの確認、応募フォームの確認、ATSやメール送信先の確認、revision trafficの確認、rollbackメモの確認です。Azure Container Appsでは、ingressで外からアクセスする入口を作り、custom domainやmanaged certificateを設定し、environment variablesやsecretsをruntimeへ渡します。revisionはアプリの版なので、新しい版がreadyでもtrafficが0%なら候補者には届きません。
参考にした一次情報は、Azure Container Apps overview、ingress overview、configure ingress、environment variables、manage secrets、managed identities、custom domains and certificates、revisionsです。前回のIaC確認はBicep安全確認にもまとめています。
Claude Codeに任せる範囲と人が見る範囲
採用サイトのrelease表では、Claude Codeに読ませるものを絞ります。渡すのは、環境変数名、値を伏せた設定表、Container AppsのYAML、公開予定URL、revision traffic、応募フォームの送信先、rollbackメモです。候補者名、メールアドレス、履歴書、ATS token、production secretは渡しません。
Claude Codeに任せる範囲は、URLの不一致、空の環境変数、secret候補、staging文字列、HTTP許可、traffic 0%、ownerなし、rollbackなしの検出です。人が見る範囲は、求人票の表現、給与、勤務地、個人情報の扱い、応募フォームの同意文、ATS連携先、公開承認、traffic切替です。ここを分けないと、AIが出した表を見て安心してしまい、候補者に見えるページだけ壊れたままになります。
特に採用サイトでは、PUBLIC_SITE_URL、FORM_POST_ENDPOINT、ATS_API_TOKEN、MAIL_FROM、THANKS_PAGE_URLの5つを先に見ます。応募完了率が落ちる原因は、コードの難しさより、staging URLの残り、送信先の空欄、no-replyメールの設定ミスにあります。
3つのUse case
Use case 1: 公開URLとcustom domainを確認する
- 入力: Container AppsのFQDN、custom domain設定、求人LPのcanonical URL、確認用スクリーンショット。
- 出力: 候補者に見えるURL、本番で使うURL、stagingが残っている箇所、証明書確認表。
- 人の確認: 会社名、求人名、勤務地、応募ボタン、スマホ表示、公開承認を見る。
採用サイトでは、アプリが動くだけでは足りません。候補者がSNS広告、求人媒体、Google検索から入ったとき、同じ本番URLへ着地するかを見ます。Claude Codeには、FQDN、custom domain、canonical、OGP URL、応募ボタンのURLを表にさせます。人は、候補者に送って恥ずかしくないURLかを決めます。
Use case 2: 環境変数とsecretを応募フローに沿って見る
- 入力: 環境変数一覧、secrets名、応募フォームの送信先、メール送信設定、ATS連携名。
- 出力: 空欄、staging文字列、plain token、secret参照漏れ、送信後ページの確認表。
- 人の確認: 個人情報、ATS契約、応募メールの宛先、同意文、保存期間を見る。
Container Appsでは環境変数をruntimeへ渡し、secret参照も使えます。採用サイトなら、FORM_POST_ENDPOINTが空のまま、ATS_API_TOKENが平文、THANKS_PAGE_URLがstagingのまま、という事故を先に止めます。Claude Codeには値そのものではなく、名前、種類、伏せた値、secret参照の有無を見せます。
Use case 3: revision trafficとrollbackを公開前に見る
- 入力: revision一覧、latest ready、traffic配分、公開予定時刻、前のrevision、rollbackメモ。
- 出力: 候補者に届くrevision、previewだけのrevision、traffic切替条件、戻し先表。
- 人の確認: 広告開始時刻、求人媒体の掲載開始、応募受付時間、問い合わせ対応者を見る。
Container Appsのrevisionは、アプリの版を追うための仕組みです。新しいrevisionがreadyでもtrafficが古い版に100%残っていれば、本番には出ません。逆に、確認前にtrafficを100%振ると、候補者が壊れたフォームへ入ります。Claude Codeにはtraffic表とrollback条件を出させ、人が公開時刻と求人媒体の動きに合わせて決めます。
コピペで使えるプロンプト
あなたは採用サイトの公開前レビュー担当です。
対象はAzure Container Appsで動く求人LPと応募フォームです。
目的は、候補者が本番URLから求人を読み、応募フォームを送信し、送信後メールまで進めるかを確認表に落とす点です。
入力:
- 公開予定URLとContainer AppsのFQDN
- custom domainと証明書の状態
- 環境変数名の一覧。secret値は消す
- secrets名とKey Vault参照の有無
- 応募フォームの送信先
- revision一覧とtraffic配分
- rollbackメモと公開承認者
確認してほしいこと:
1. staging URLやlocalhostが残っていないか
2. FORM_POST_ENDPOINT、PUBLIC_SITE_URL、THANKS_PAGE_URLが本番向きか
3. TOKEN、SECRET、PASSWORD、KEYを含む値が平文ではないか
4. ingress、custom domain、証明書、HTTPSが候補者向けに揃っているか
5. latest revisionがreadyか、trafficがどのrevisionへ向いているか
6. rollback先と止める条件が書かれているか
7. 人が承認しないと公開してはいけない項目
制約:
- 候補者情報、履歴書、ATS token、実secretは読まない
- deployやtraffic切替コマンドは実行しない
- 最後に、今日確認する5行だけを優先順で出す
動く確認コード
採用サイトのrelease表を作ったら、次の確認コードで危ない項目を拾えます。実際のAzure APIを叩くものではありません。Container Appsから写した公開URL、ingress、環境変数、revision、owner、rollbackを表に入れて、応募フォーム公開前に止める条件を見ます。
// verify-container-apps-release-sheet.mjs
// No dependencies. Run with: node verify-container-apps-release-sheet.mjs
const releaseSheet = {
industry: "recruiting",
page: "career-site",
expectedPublicUrl: "https://jobs.example.co.jp",
actualFqdn: "career-prod.red-bay.azurecontainerapps.io",
customDomainBound: false,
ingress: { enabled: true, external: true, targetPort: 3000, allowInsecure: true },
environmentVariables: [
{ name: "PUBLIC_SITE_URL", value: "https://staging-jobs.example.co.jp", secretRef: "" },
{ name: "FORM_POST_ENDPOINT", value: "", secretRef: "" },
{ name: "ATS_API_TOKEN", value: "plain-token-example", secretRef: "" }
],
secrets: [],
revision: { latestReady: true, trafficToLatest: 0, oldRevisionTraffic: 100 },
owner: "",
rollbackNote: ""
};
const problems = [];
if (!releaseSheet.customDomainBound || !releaseSheet.actualFqdn.includes("jobs.example.co.jp")) {
problems.push({ item: "public URL", fix: "confirm custom domain, managed certificate, and canonical job URL" });
}
if (!releaseSheet.ingress.enabled || !releaseSheet.ingress.external) {
problems.push({ item: "ingress", fix: "external recruiting pages need reviewed HTTP ingress before launch" });
}
if (releaseSheet.ingress.allowInsecure) {
problems.push({ item: "HTTPS", fix: "disable insecure connections before candidates open the page" });
}
for (const env of releaseSheet.environmentVariables) {
if (!env.value && !env.secretRef) {
problems.push({ item: "env: " + env.name, fix: "set the value or a secret reference before launch" });
}
if (/TOKEN|SECRET|PASSWORD|KEY/i.test(env.name) && env.value && !env.secretRef) {
problems.push({ item: "plain secret: " + env.name, fix: "move token values to Container Apps secrets or Key Vault references" });
}
}
if (releaseSheet.revision.latestReady && releaseSheet.revision.trafficToLatest === 0) {
problems.push({ item: "revision traffic", fix: "assign test traffic or switch traffic after preview approval" });
}
if (!releaseSheet.owner) {
problems.push({ item: "owner", fix: "write the human owner for public URL, form delivery, and rollback" });
}
if (!releaseSheet.rollbackNote) {
problems.push({ item: "rollback", fix: "write the previous revision or stop condition before campaign launch" });
}
if (problems.length > 0) {
console.table(problems);
process.exitCode = 1;
} else {
console.log("Container Apps recruiting release sheet passed.");
}
このコードで見ているのは、公開URL、custom domain、ingress、HTTPS、環境変数の空欄、plain secret、revision traffic、owner、rollbackです。実運用では、Azure Portal、Azure CLI、Container Appsのrevision画面、Log Analytics、応募フォームの送信テストも合わせて確認します。
Pitfall: よくある落とし穴
一つ目の落とし穴は、求人ページが表示された時点で公開OKにする点です。原因は、応募フォーム、送信後ページ、メール通知、ATS連携が別の設定に分かれているからです。直し方は、ページURLではなく、応募完了までのURLと環境変数を表にして見る形です。
二つ目は、secretを環境変数の値として平文で置く点です。原因は、動作確認を急いでATS tokenやメールAPI keyを仮で入れ、そのまま残る流れです。直し方は、値を消してClaude Codeへ渡し、Container Apps secretsやKey Vault参照へ寄せる確認行を作ります。
三つ目は、custom domainとFQDNの見間違いです。原因は、azurecontainerapps.ioのURLでは動いていても、採用広告や求人媒体に載るURLは別だからです。直し方は、公開予定URL、canonical、OGP、応募ボタン、thanks pageを1列に並べます。
四つ目は、revision trafficを見ない点です。原因は、新しいrevisionがreadyなら本番へ出ていると誤解するためです。直し方は、latest ready、traffic配分、古いrevision、戻し先を公開承認前に確認します。
よくある質問
Q. 採用サイトにContainer Appsは向いていますか。
A. 求人LPと応募フォームだけならApp Serviceや静的サイトでも足ります。Docker化したフォーム、ATS連携、バックエンドAPI、preview revisionが必要な場合に候補になります。
Q. Claude Codeに環境変数を見せても大丈夫ですか。
A. 値は見せません。名前、種類、伏せた値、secret参照の有無だけを渡します。TOKEN、SECRET、PASSWORD、KEYを含むものは実値を消します。
Q. 公開前に最低限見る項目は何ですか。
A. PUBLIC_SITE_URL、FORM_POST_ENDPOINT、THANKS_PAGE_URL、custom domain、revision trafficの5つです。この5つで応募フローの入口と出口が見えます。
Q. 成果は何で見ますか。
A. フォーム到達率、応募完了率、送信エラー件数、公開前に止めたミスの件数、公開確認にかかった分数で見ます。PVだけでは採用の売上導線が見えません。
研修・相談につなげるなら何を見るか
採用サイトのContainer Apps記事から相談へ進めるなら、PVより応募完了率を見ます。求人ページPVが増えても、フォーム到達率が低い、応募完了率が落ちる、送信エラーが増えるなら、公開前チェック、環境変数、個人情報、ATS連携、rollbackをまとめて直す価値があります。
Container Appsの公開確認、環境変数、secret、custom domain、revision、採用サイトの応募導線を社内運用に落としたい場合は、ClaudeCodeLabの研修・相談で相談できます。まずは採用サイトのPUBLIC_SITE_URL、FORM_POST_ENDPOINT、THANKS_PAGE_URLを表へ写してください。
実際に試した結果
この記事では、Microsoft LearnのContainer Apps overview、ingress、environment variables、secrets、managed identity、custom domains、revisionsを確認しました。さらに、slug、frontmatter、内部リンク、外部リンク、CTA、コードブロック、10言語ファイル、記事キューの削除対象を確認しています。今日まずやる1手は、採用サイトの公開URLと環境変数を1枚の表へ移し、staging URLと空欄をチェックする作業です。
次に読む記事
.envと.env.localを混ぜて本番が落ちた話。環境変数を型付きで守る設計
.envと.env.localの使い分け、.gitignore、zodでの起動時バリデーション、本番への注入、クライアント露出の境界まで。環境変数を事故らせない型を作る。
Azure DevOpsパイプラインをClaude Codeで点検する: 制作会社の承認付き公開フロー
制作会社向けにAzure DevOpsのPR、ManualValidation、本番承認、戻し方を分けます。
制作会社がCodex Desktopを使う前に決めること: 差分レビュー、PR、公開確認
制作会社向けにCodex Desktop利用前の差分レビュー、PR対応、公開確認を分けます。
無料PDF: Claude Code はじめてのチートシート
まずは無料PDFで基本コマンドと最初の使い方をまとめて確認してください。登録後はそのままテンプレート集や導入相談にも進めます。
スパムは送りません。登録情報は厳重に管理します。
Claude Codeを仕事で使える形にしませんか?
まず無料PDFで基本を固め、繰り返し使う作業はGumroad教材へ、チーム導入や権限設計は導入相談へ進めます。
この記事を書いた人
Masa
Claude Codeの実務活用、導入設計、収益導線改善を検証しているエンジニア。10言語の技術メディアを運営中。
関連書籍・参考図書
この記事のテーマに関連する書籍を楽天ブックスで探せます。
※ 当サイトは楽天市場のアフィリエイトプログラムに参加しています。上記リンクから商品をご購入いただくと、運営者に紹介料が支払われる場合があります。