開発環境・変更管理の準備学習記事全11節Operate

「今どこにつながっているか」を確認してから操作する

この記事で身につくこと試してよい場所と実データがある場所を分ける理由と、接続先を確認してから操作する習慣を説明できる。

記事内目次(23項目)
この記事の管理情報(該当工程・関連要件・成果物の閲覧と保存・実行記録)
記事ID
06-02
該当工程
06-02 開発・検証・本番を分ける(関連:06-01、05-04、11-01、12-04)
関連要件
REQ-008
到達目標
試してよい場所と実データがある場所を分ける理由と、接続先を確認してから操作する習慣を説明できる
主要な成果物
確認環境と検証状況
本文の演習コードは examples/06-02-environments/ を正本とし、Claude Codeが2026-09-20にローカルで実行して stdout・stderr・終了コードを記録済み(macOS 26.6.2、Node.js v24.18.0)。設定ファイルはすべて架空で、実際の検証・本番環境は存在しない。人による実読・内容確認は未実施。
未検証の範囲
実際の検証・本番環境での接続先確認、設定ファイルと実際の接続先の一致は、この記事の時点では確認していない。
実行記録

正本の原稿にある管理表(記事ID・先に読むと理解しやすい記事・成果物パス・最終更新日など)は、この下の本文冒頭に「原稿の管理表」として開閉できる形で残しています。

原稿の管理表(13項目:記事ID・カテゴリ・要件ID・先に読むと理解しやすい記事・成果物パス・対象ツール・検証状況・最終更新日など)
管理項目内容
記事ID06-02
主な中カテゴリ06-02 開発・検証・本番を分ける
関連中カテゴリ06-01、05-04、11-01、12-04
関連要件IDREQ-008
先に読むと理解しやすい記事06-01(作業場所と実行環境を整える)を読んでいると理解しやすい。未読でも本文で必要な内容は説明する
到達目標試してよい場所と実データがある場所を分ける理由と、接続先を確認してから操作する習慣を説明できる
3層の配置理解する=第3〜4節/作って確かめる=第5〜7節/設計を判断する=第8節
成果物パスtemplates/06-02-environments_template.md、templates/06-02-environments_example.md、examples/06-02-environments/(check_env.js、env-development.json、env-staging.json、env-production.json)、evidence_public/phase5b1-2026-09-20/06-02/run_log.md
出典第11節参照
対象ツール・バージョン教材演習用にNode.js v24.18.0(06-01で確認済み。node:fs・node:path のみ使用。このプロジェクトの正式な技術選定ではない)
検証状況本文の演習コードは examples/06-02-environments/ を正本とし、Claude Codeが2026-09-20にローカルで実行して stdout・stderr・終了コードを記録済み(第6〜7節、evidence_public/phase5b1-2026-09-20/06-02/run_log.md)。実際の検証・本番環境は存在せず、設定ファイルはすべて架空。人による実読・内容確認は未実施
残課題第11節参照
最終更新日2026-09-20(新規作成。同日、Phase 5B-1:Operate型のPilotとして、読む順路・第4節の判断項目・第5.3〜5.4節の再現可能な演習(目的・実行前に見るもの・コマンド・失敗したとき・元に戻せるか・誰が実施するか)・第6節の実測(正常・本番で止まる・失敗)を追加。確認コマンドを examples/ の正本(check_env.js)に置き換えた。環境一覧・完了条件・成果物は不変)

この記事の会社・人物・環境名はすべて架空の設定です。実在する会社や案件とは関係ありません。本文の演習コードは examples/06-02-environments/ の正本と同じもので、実行結果は2026-09-20にローカル環境で実際に実行して記録したものです(第6〜7節、実行記録は第9節)。3つの設定ファイルはすべて架空の設定で、実際の検証・本番環境や実データは存在しません。

この記事は何の話か。依頼・承認管理アプリを試してよい場所(開発・検証)と、実際の業務データがある場所(本番)を分け、「今どこにつながっているか」を確認してから操作する習慣を、実際に手を動かして作る話です。

なぜ必要か。開発中に試したつもりの操作が、実は本番環境に対して行われていた場合、実際の依頼データを壊してしまう危険があります。AIに操作を頼むときも同じで、AIは「今どこにつながっているか」を自分では知りません。人が確認する手順を持っていないと、AIの速さがそのまま事故の速さになります。

この記事を読むとできるようになること。

  • 試してよい場所と実データがある場所を分ける理由を説明できる
  • 開発・検証・本番の環境一覧を作り、「今どこにつながっているか」を確認する手順を、実行して結果を読めるところまで身につける
  • 環境を3つ持つ費用・手間と、分けない場合の失敗の影響を比較できる

読む順路。この記事は3つの深さで読めます。全部を順に読む必要はありません。

  • 基本だけ理解する:第1節→第3節(環境を分ける理由)→第4節(判断すること)→第5.2節(環境一覧)→第5.3節の表(演習で何をするか)→第6節の「結果の読み方」→第9節。コードを動かさなくても、「確認してから操作する」が何を確認することかと、本番の設定を読んだら止まるという判定が分かります。
  • 作って確かめる:上に加えて第5.4節(確認コード)→第6節(3通りの実行結果)→第7節(確かめたこと・確かめていないこと)。
  • 設計判断を深める:上に加えて第8節(環境を分ける費用・手間の比較、適用限界)。

1. 今回の業務課題と完成するもの

この記事でやることは、依頼・承認管理アプリの環境を「開発」「検証」「本番」に分け、それぞれの用途とデータの種別を一覧にし、「今どの環境につながっているか」を確認する手順を作って、実際に実行することです。

06-01では作業場所と実行環境を整えましたが、その環境は「開発」のためのものでした。この記事では、開発・検証・本番という複数の環境をどう分けるかを扱います。

場面で言うと、こうです。みらい業務サービスの依頼・承認管理アプリが本番で使われ始めたあと、開発担当が「差戻し理由の文言を直したい」と考え、AIに「依頼データを1件作って試して」と頼んだとします。このとき今の接続先が本番なら、実際の依頼の一覧に試験用の依頼が1件混ざります。接続先を確認する手順は、この1件を防ぐためのものです。

この記事を読み終えると、次のものが手元にできます。

  • 環境一覧(環境名、用途、データの種別、接続先の確認手順、操作してよい人)
  • 接続先を確認するコードと、3通り(開発・本番・設定ファイルなし)の実行記録(examples/06-02-environments/)

2. 前提知識と読む順路

この記事で使う言葉を先に説明します。

環境(開発・検証・本番)

一言でいうと、同じアプリを動かす場所を、目的ごとに分けたものです。

たとえば、開発は自由に試してよい場所、検証は本番に近い条件で確かめる場所、本番は実際の利用者が使う場所です。

これがないと、開発中のつもりの操作が、実は本番の実データに対して行われてしまう危険があります。

システム開発では、これを環境(environment)と呼び、開発(development)・検証(staging)・本番(production)のように名前を付けて区別します。この記事の設定ファイルもこの名前を使います。

接続先

一言でいうと、今の操作がどの環境(開発・検証・本番)に対して行われるかを示す情報です。

たとえば、設定ファイルに "environment": "production" と書いてあれば、接続先は本番です。

これがないと、画面もコマンドも同じ見た目なので、開発と本番の区別がつきません。

配置

一言でいうと、アプリを実際に動かす場所に置くことです(11-02で扱います)。

読む順路:作業場所と実行環境は06-01が該当します。構成図は05-04が該当します。この記事の環境一覧は、11-01(公開前チェック)、12-04(復元演習の隔離環境)で使います。

3. 理解する:なぜ環境を分けるか

3.1 分けないとどうなるか

結論から言うと、分けないと「試す」と「使う」の区別がなくなり、試した結果が実際の業務に混ざります。

分けない場合分けた場合
開発中の試行錯誤が、実際の依頼データに影響する可能性がある開発・検証は架空データのみとし、実データへの影響を防げる
「今どこにつながっているか」を確認する習慣がない接続先を確認する手順があり、操作前に気づける
AIに操作を頼んだとき、AIは接続先を知らずに実行する手順の先頭に接続先の確認を置けば、AIに頼む操作にも同じ確認が入る

操作の前に、接続先を見る。開発・検証:試す場所。架空データを使う。本番:実際の業務を行う場所。共通の確認:今どこ? どのデータ? 誰の権限?。説明上の区分。本番環境の構築済みを示さない。

3.2 よくある誤解

「小規模なアプリだから環境を分けなくてよい」。規模が小さくても、実データに誤って影響する危険は変わりません。第8節で、小規模アプリで最低限分けるべき境界を判断します。

「開発環境で動いたから、本番でも同じように動く」。環境によって設定やデータの量が異なることがあり、検証環境で本番に近い条件を確かめる意味があります。

「接続先の確認は面倒なので省略してよい」。確認を省略すると、誤った環境への操作に気づけません。この記事の演習では、確認は1コマンドで、何も書き換えません。省略する理由になるほどの手間ではありません。

「設定ファイルを見ずに、思い込みで環境を判断してよい」。「さっき開発で試していたから今も開発のはず」は確認ではありません。操作の直前に、設定を読んで表示させます。

「検証環境も『試してよい場所』だから実データを入れてよい」。検証環境も架空データのみとし、実データは本番でのみ扱います。

4. 判断すること

環境を分けるときに人が判断することは、次の4つです。

4.1 この記事で判断すること

判断することなぜ判断が必要か仮置きしてよいか間違えた場合の影響
どの環境に実データを置くか(本番だけか)実データがある場所が「壊してはいけない場所」。置き場所が曖昧だと、確認の対象も曖昧になる不可。「本番だけ」に固定する検証環境に実データのコピーがあると、検証の操作で実データ相当の情報を壊す・漏らす
接続先をどう確認するか(何を読み、何が表示されれば開発か)確認手順が実行できる形でないと、習慣にならない可(この記事では設定ファイルを読む方法で仮置き。実際の配置先が決まったら11-01で見直す)確認したつもりで確認になっておらず、本番への操作を止められない
本番へ操作する条件(誰が、どんな確認を経て)「本番には触らない」だけでは運用できない。配置・設定変更は本番で行う不可。緩める方向への仮置きはしない確認なしの操作が常態化し、障害時に「誰が何をしたか」を説明できない
本番の設定を読んだとき、止めるか、警告して続けるか止めれば安全だが、正当な本番作業も止まる。警告だけなら見落とす可(この記事では「止める」で仮置き。本番作業の手順は11-02で別に作る)警告だけにすると、AIに頼んだ操作が警告を読まずに進む

4.2 勝手に決めてはいけないこと

  • 開発・検証環境で、実際の依頼データ(実データ)を扱いません。
  • 本番環境への操作条件(誰が、どんな確認を経て操作できるか)を、この記事で緩めません。
  • 実際の検証・本番環境の接続先は、この記事では決めません。設定ファイルの値はすべて架空です。

4.3 AIに任せる範囲

確認コードの下書き、設定ファイルの形式の提案、実行結果の整理はAIに任せられます。しかし、実データをどの環境に置くか、本番へ操作する条件、本番の設定を読んだときに止めるかどうかは、運用に責任を持つ人が決めます。AIに操作を頼むときは、手順の先頭に接続先の確認を置き、確認の結果(第6節の判定)を人が読んでから次の操作を頼みます。

5. 作って確かめる:環境一覧を作り、接続先の確認を演習する

5.1 準備

06-01で確認した作業フォルダとNode.js、05-04の構成図(画面・処理・保存先)を用意します。

5.2 環境一覧

環境名用途データの種別操作してよい人
開発実装・試行錯誤を行う場所架空データのみ開発担当(人・AI協働)
検証本番に近い条件で確かめる場所架空データのみ(本番相当の量・形式を仮定)開発担当、検証担当
本番実際の利用者が使う場所実データ運用管理者の確認を経た操作のみ(架空の想定)

本番へ操作する条件:本番環境への操作(配置・設定変更など)は、運用管理者の確認を経てから行うこととします。これは11-01(公開前チェック)で具体化します。

5.3 演習の設計:接続先を確認してから操作する

教材演習では、今どの環境につながっているかを、環境ごとの設定ファイルを読み込んで確認します。実際の配置先が決まっていないので、設定ファイルは3つとも架空です。演習でやること・見ること・失敗したときを先に決めます。

項目内容
何のための操作か操作の直前に接続先を表示させ、本番なら止める。試験用の依頼を本番に混ぜる事故を防ぐ
実行前に見るもの今いる場所(pwd)が examples/06-02-environments/ であること。設定ファイル3つがあること
コマンドnode check_env.js(開発)、node check_env.js env-production.json(本番)、node check_env.js env-missing.json(設定ファイルが無い場合)
期待結果開発:接続先が表示され「操作してよい環境です」、終了コード0。本番:接続先が表示され「ここで止めます」、終了コード2。設定ファイルなし:エラーが表示され、終了コード1
結果の読み方environment= の値と「判定」行を読む。終了コードが0以外なら、次の操作に進まない
失敗したとき設定ファイルが読めない(終了コード1)なら、pwd で場所を確認し、ファイル名を見直す。本番と表示された(終了コード2)なら、操作を止めて運用管理者に確認する
元に戻せるかこの確認は設定ファイルを読むだけで、何も書き換えない。戻す操作は不要
業務運用では誰が実施するか本番へ操作する人(配置・設定変更を行う開発担当)が、操作のたびに実施する。AIに操作を頼むときは、人が先にこの確認を実行して結果を読む

5.4 確認コードと設定ファイル

開発環境の設定ファイルです(examples/06-02-environments/env-development.json)。検証用 env-staging.json、本番用 env-production.json も同じ形式で、environment の値だけが違います。本番用の dataType と connection は「架空の想定」と明記してあり、実際の接続先はありません。

{ "environment": "development", "dataType": "架空データのみ", "connection": "ローカルの練習用フォルダ" }

確認コードです(examples/06-02-environments/check_env.js)。

// 教材演習用:今どの環境につながっているかを、環境ごとの設定ファイルから確認してから操作する。
// 使い方: node check_env.js                       (env-development.json を読む)
//         node check_env.js env-staging.json      (検証環境の設定を読む)
//         node check_env.js env-production.json   (本番の設定を読む → 操作を止める)
// 終了コード: 0=架空データの環境(操作してよい)、2=本番(運用管理者の確認が要るため止める)、1=設定ファイルが読めない
// この確認は設定ファイルを読むだけで、何も書き換えない(元に戻す操作は不要)。
const fs = require("node:fs");
const path = require("node:path");

const file = process.argv[2] || "env-development.json";
let config;
try {
  config = JSON.parse(fs.readFileSync(path.resolve(__dirname, file), "utf8"));
} catch (e) {
  console.error(`設定ファイルが読めません: ${file}(${e.code || e.name})。今いる場所を pwd で確認し、ファイル名を見直してください`);
  process.exit(1);
}

console.log(`接続先確認: environment=${config.environment} / dataType=${config.dataType} / connection=${config.connection}`);

if (config.environment === "production") {
  console.log("判定: 本番環境です。運用管理者の確認を経ていない操作はここで止めます(記事 第5.2節の「本番へ操作する条件」)");
  process.exit(2);
}
console.log("判定: 架空データの環境です。操作してよい環境です");
process.exit(0);

「入力→判断・処理→出力→失敗時」の対応:

段階内容
入力設定ファイル名(引数。省略時は env-development.json)
判断・処理ファイルを読んで environment を見る。production なら止める
出力接続先の3項目と「判定」行。終了コード0(操作してよい)または2(止める)
失敗時ファイルが読めなければ、原因(ENOENT など)と対処を stderr に出し、終了コード1

6. 実行結果(演習)

examples/06-02-environments/ で実行した stdout・stderr と終了コードです(整形・省略なし)。

開発の設定を読んだ場合(正常):

$ node check_env.js
接続先確認: environment=development / dataType=架空データのみ / connection=ローカルの練習用フォルダ
判定: 架空データの環境です。操作してよい環境です
終了コード: 0

本番の設定を読んだ場合(止まる):

$ node check_env.js env-production.json
接続先確認: environment=production / dataType=実データ(架空の想定。この演習に実データは存在しない) / connection=(架空の設定。演習では接続先は存在しない)
判定: 本番環境です。運用管理者の確認を経ていない操作はここで止めます(記事 第5.2節の「本番へ操作する条件」)
終了コード: 2

設定ファイルが無い場合(失敗)。stdout への出力はなく、stderr に次が出ます:

$ node check_env.js env-missing.json
設定ファイルが読めません: env-missing.json(ENOENT)。今いる場所を pwd で確認し、ファイル名を見直してください
終了コード: 1

結果の読み方:

見るところ開発本番設定ファイルなし
environment= の値developmentproduction(表示されない)
「判定」行操作してよい環境ここで止めます(表示されない)
終了コード0 → 次の操作へ進んでよい2 → 進まない。運用管理者に確認1 → 場所とファイル名を見直して再実行

検証の設定(env-staging.json)も実行し、開発と同じく終了コード0で「操作してよい環境」と判定されました(第9節の実行記録)。

7. 確認結果

実行環境:macOS 26.6.2、Node.js v24.18.0(node:fs・node:path のみ使用)、2026-09-20に実行。教材演習用のフォルダ(examples/06-02-environments/)の中だけで行い、何も書き換えていません。stdout・stderr・終了コードをそのまま記録した実行記録は第9節の run_log.md にあります。

手順期待結果実際の結果一致
node check_env.js(開発)接続先が表示され「操作してよい環境」、終了コード0environment=development、操作してよい環境、終了コード0一致
node check_env.js env-staging.json(検証)同上、終了コード0environment=staging、操作してよい環境、終了コード0一致
node check_env.js env-production.json(本番)接続先が表示され「ここで止めます」、終了コード2environment=production、ここで止めます、終了コード2一致
node check_env.js env-missing.json(設定なし)エラーと対処が表示され、終了コード1stderr に ENOENT と対処、終了コード1一致

完了条件との照合:

完了条件確認結果
各環境にデータの種別(架空/実)がある第5.2節の表に記載
接続先の確認手順が実行可能な形で書かれている第5.3〜5.4節にコマンド・コード・期待結果を記載し、第6節で実際に実行して確認
本番へ操作する条件が書かれている第5.2節に記載。第6節で、本番の設定を読むと止まることを確認

この演習で確かめたこと:架空の設定ファイル3つに対して、確認コードが接続先を表示し、本番なら止まり、ファイルが無ければエラーで止まること。

この演習で確かめていないこと:

範囲理由どこで確かめるか
実際の検証・本番環境での接続先確認環境が存在しない。設定ファイルはすべて架空配置先が決まった段階(11-01・11-02)
設定ファイルの内容が実際の接続先と一致しているかこの演習では設定ファイルを読むだけで、その先に接続していない配置先が決まった段階で、設定と実際の接続先を突き合わせる
確認を飛ばして操作した場合に止まるかこの確認は「操作の前に人が実行する」手順であり、操作の側に組み込んでいない操作の側に確認を組み込む設計は08-04・11-02で検討

残る制限:この環境一覧は架空の設定です。この記事の本文はClaude Codeが作成したもので、業務担当者による内容確認は行っていません。

8. 設計を判断する

8.1 環境を3つ持つ費用・手間と、分けない場合の影響を比較する

選択肢費用・手間分けない場合の影響
環境を分けない低い開発中の操作が実データに影響する危険がある
開発・本番の2つに分ける中程度本番に近い条件での確認ができない
開発・検証・本番の3つに分ける(採用)やや高い(環境の維持に手間がかかる)開発・検証は架空データのみとし、実データへの影響を防げる

小規模な社内アプリであっても、実データへの影響を防ぐという理由から、最低限「実データを扱う本番」と「架空データのみの開発・検証」を分けることを採用します。検証環境を開発環境と完全に分けるかどうかは、規模や体制によって調整の余地があります。

8.2 本番の設定を読んだとき「止める」か「警告して続ける」か

選択肢利点負担・限界適する場面
止める(この記事で採用)見落としが起きない。AIに頼んだ操作も止まる正当な本番作業でも止まるため、本番作業用の別手順(運用管理者の確認を経たもの)が要る本番作業の頻度が低く、1件の事故の影響が大きい小規模アプリ
警告して続ける本番作業の手順を分けなくてよい警告を読まずに進める余地が残る。AIに頼んだ操作では特に見落としやすい本番作業が頻繁で、操作者が全員手順に習熟している場合

この教材の題材では、本番作業は11-02の配置手順に限られるため、「止める」を採用しています。

8.3 適用限界

この環境一覧は、架空企業「みらい業務サービス」の小規模な利用を前提にした一例です。実際の検証環境の構築方法や、本番環境への具体的な接続方法は、この記事の範囲外です。

9. 持ち帰る成果物

成果物空欄版記入例
環境一覧・接続先確認方法ひな形(環境名、用途、データの種別、接続先の確認手順、操作してよい人)templates/06-02-environments_template.mdtemplates/06-02-environments_example.md
接続先確認の演習コード一式examples/06-02-environments/(check_env.js、env-development.json、env-staging.json、env-production.json)同上
実行記録(stdout・stderr・終了コード、整形なし)—evidence_public/phase5b1-2026-09-20/06-02/run_log.md

自分の業務に使うときの手順は次のとおりです。

  1. 前工程(06-01の作業フォルダ、05-04の構成図)を用意する
  2. 開発・検証・本番の環境を挙げ、それぞれの用途とデータの種別を書く
  3. 今どの環境につながっているかを確認する手順を作り、正常・本番・失敗の3通りを実際に実行して記録する(第5.3〜6節)
  4. 本番へ操作する条件と、本番の設定を読んだときの扱い(止める/警告)を明記する

10. 次工程への受渡し

次へ渡すもの:環境一覧、接続先の確認手順とコード、実行記録。

次工程での使われ方:11-01(公開前チェック)では、この環境一覧を前提に公開前の確認項目を作り、本番へ操作する条件を具体化します。11-02(配置手順)では、配置の直前にこの確認を置きます。12-04(バックアップから復元を確かめる)では、この環境一覧の考え方を隔離環境の定義に使います。

前工程へ戻る条件:環境一覧が05-04の構成図と食い違う場合は、05-04に戻って確認します。

11. 根拠と更新情報

  • この記事の会社・人物・環境名はすべて架空の設定です。3つの設定ファイルの値も架空で、実際の接続先はありません。
  • 実データを本番以外で扱わないという考え方は、教材設計書AI_SYSTEM_DEV_BLUEPRINT_v0.1.md第5.1節(架空データの原則)に基づきます。
  • 制作の来歴:本文はClaude Codeが作成しました。第5.4〜7節の演習コードは examples/06-02-environments/ を正本とし、2026-09-20にmacOS 26.6.2・Node.js v24.18.0の環境で実際に実行して、stdout・stderr・終了コードを evidence_public/phase5b1-2026-09-20/06-02/run_log.md に記録しています。人(ユーザー)による実読・内容確認は未実施です。
  • 2026-09-20(Phase 5B-1):Operate型のPilotとして、読む順路(3つの深さ)、第4節の判断項目、第5.3節の演習の設計(目的・実行前に見るもの・コマンド・期待結果・結果の読み方・失敗したとき・元に戻せるか・誰が実施するか)、第5.4節の確認コード(正本 check_env.js。初版の node -e による1行コマンドは、正本ファイルが無く再現できなかったため置き換えた)、第6節の実測3通り(正常・本番で止まる・失敗)、第7節の確かめていないことの表、第8.2節、記事間の参照を追加した。環境一覧・完了条件は変えていない。
  • 未確認事項:実際の検証・本番環境での接続先確認は、この記事の時点では行っていません(第7節)。