13. 隠れメニュー・システム地図
このページは「見えているメニューの外側」を地図にする — 隠れた入口・死んだ領域・どのプログラムがどのテーブルを書くか。新人が「知らない画面」に出会っても位置づけられるように。
1. 結論ファースト — もう一つのMENUR1は無かった
2. 3つの「隠れ方」
3. 未到達メニュー31本の全棚卸し表
4. MENUZ9 — 端末ID分岐の詳細
5. MENUM00死亡クラスタ — ソース自体が存在しない36本
6. 死にプログラムの風景
7. サブシステム×主要書込テーブル マップ
8. 調査方法(詳細)
9. 確認したいこと
- MENU00から未到達だった31本のメニューを全数調査した結果、丸ごと未発見の業務は無かった。
- 本当の隠しメニューはMENUZ9(自動倉庫端末専用の直接起動)1本のみ、残りは移植済みか死んだ枝。
- 13本はMENUM00死亡クラスタで、呼び出し元0件かつ末端プログラムのソース自体が存在しない。
1. 結論ファースト
docs/decisions.md D23)。これを受けて、analysis/out/menu_tree.mdが「MENU00から未到達」と報告していた残り31本のメニュー(MENUR1/R2/U1は既にD23で解決済みのため対象外)を全数調査した。結果、31本のうち14本は実際に生きた画面で、その大半(10本)は既に過去のセッションで移植済みだった(クローラーの死角に入っていただけ)。新たに見つかった本当の意味での「隠しメニュー」はMENUZ9(自動倉庫端末専用の直接起動)1本のみで、MENU00のメニューツリーを一切経由しない、端末ID分岐という全く別の隠れ方をしていた。残り13本は、旧いマスタ削除/変更/追加メニュー体系がまるごと使われなくなった「死んだ枝」で、呼び出し元がAS/400ソース全体を通じて0件、かつ末端プログラム(MNMD01〜09等36本)はソース自体が存在しない(=実装済みかどうかも検証不能)という、最も確信度の高い「死んでいる」認定だった。
| 分類 | 件数 | 意味 |
|---|---|---|
| ALIVE(既に移植済み) | 10 | F8「次頁」等で繋がる通常のページ、既に pilot/app に画面あり |
| ALIVE・非ギャップ | 3 | 生きているが中身は既存資産(masters.html等)で既にカバー済み |
| ALIVE-HIDDEN(未移植・端末直起動) | 1 | MENUZ9のみ。中身自体はMENUZ1側で移植済み |
| PROBABLY-DEAD | 13 | MENUM00クラスタ。呼び出し元0件+末端プログラムのソース不在 |
| VARIANT(旧コピー) | 4 | 現行メニューとほぼ同一内容の旧バックアップコピー、呼び出し元0件 |
| 合計 | 31 |
2. 3つの「隠れ方」
今回の調査で「未到達」と分類されたメニューは、実際には3種類の全く異なる理由で見えなくなっていた。この分類が今回の調査の核心。
| D23(MENUR1、session 34) | 今回・F8次頁チェーン(14件) | 今回・MENUZ9(1件) | |
|---|---|---|---|
| 隠れ方 | MENU00内の打鍵専用分岐(画面に表示されない&INPS=50) | 「F8=次頁」等の画面に明記されたページ送りをクローラーが辿っていなかった | サインオン初期プログラムの端末ID分岐、MENU00を一切経由しない |
| 発見の難度 | 高い(ソースを読まないと分からない) | 中程度(画面のメッセージ行を見れば人間には自明) | 高い(LL.txtという別ファイルを読む必要がある) |
| 実際に未実装だったか | Yes(真の実務ギャップ、RSBS01等を新規実装) | No(10/14件は既に移植済み、残り4件も既存資産でカバー済み) | 機能はYes(ZSBS05-08はMENUZ1側で移植済み)だが縮小ランディング画面自体は無い |
| メニューツリーとの関係 | ツリー内(MENU00の子として存在するが画面に出ない) | ツリー内(F-key辺で連結、クローラーが辺の種類を見落としただけ) | ツリー外(端末IDでMENU00をバイパスする別入口) |
analysis/out/members.csvにはソースの最終更新日時が含まれていない(AS/400のソースメンバー属性がエクスポート時に落ちている)ため、「最後にいつ使われたか」を機械的に判定する手段は無かった。生死判定は専ら呼び出しグラフと画面内容・実データから行っている。
3. 未到達メニュー31本の全棚卸し表
各メニューの分類は根拠付きで確定させた。使用停止はPROBABLY-DEAD、特殊はVARIANT/ALIVE-HIDDEN等の注意が必要な扱いを示す。
| メニュー | 名称 | 中身概要 | 分類 | 根拠 |
|---|---|---|---|---|
| MENUA2 | 支給品管理サブシステム | アイシン支給品QR/一括入力・受入確認・状況照会(ASBS31/33/34/46/52等) | ALIVE(移植済) | MENUA1のオプション2=ASBS02がCALL PGM(MENUA2)。MENUA1はMENU00 opt9から到達可能。public/menua2.htmlとsrc/menua1/supplied*.tsで既に実装済み (出典: docs/STATUS.md 1057-1077行) |
| MENUD1 | DNPT号口処理サブシステム(デンソー機工EDI) | JUDPDKアップロード→変更/オリジナル2トラック(DSBS04-06/17-19) | ALIVE(移植済) | MENUJ1→F8→MENUJ2→オプション30=JSBS30(権限チェック後にCALL PGM(*LIBL/MENUD1))。public/menud1.html実在、DSBS04/05/17/18等も既に構築済み |
| MENUJ2 | 受注管理サブシステム2 | JSBS27-52(受注残一覧・DNK号口・かんばん内示/確定 等) | ALIVE(移植済) | MENUJ1の画面上に「F3=終了 F8=次頁 F10=SPOOL」と明記された通常のページ2。public/menuj2.html実在 |
| MENUJ3 | 受注管理サブシステム3 | JSBS53-78相当 | ALIVE(移植済) | MENUJ2からさらにF8(次頁)で連結。public/menuj3.html実在 |
| MENUJZ | 受注残一覧表メニュー | 受注残一覧の各種帳票 | ALIVE(移植済) | MENUJ2のオプション27=JSBS27がCALL PGM(MENUJZ)。public/menujz.html実在 |
| MENUK2 | 技術情報管理サブシステム | KSBS27相当(構成・図面系の続き) | ALIVE(移植済) | MENUK1画面に「F8=次頁」明記。public/menuk2.html実在(全17プログラム移植済み) |
| MENUS2 | 出荷管理サブシステム | SSBS27相当 | ALIVE(移植済) | MENUS1画面に「F8=次頁」明記。public/menus2.html実在 |
| MENUS3 | 出荷管理サブシステム | SSBS53相当 | ALIVE(移植済) | MENUS2画面に「F3=前頁 F8=次頁」明記(前後ページ両対応)。public/menus3.html実在 |
| MENUT2 | 試作管理サブシステム2 | TSBS27-52(まとめ指示の出庫/完成入力等) | ALIVE(移植済) | MENUT1画面に「F8=次頁」明記。public/menut2.html実在 |
| MENUW2 | 号口管理サブシステム | WSBS27相当 | ALIVE(移植済) | MENUW1画面に「F8=次頁」明記。public/menuw2.html実在 |
| MENUM2 | マスター保守管理サブシステム2 | MSBS27型種/28名称/29号口出来高/30号口使用部品/31金型管理 | ALIVE・非ギャップ | MENUM1画面に「F8=次頁 F9=QUERY」明記。5項目のうち型種・名称・金型管理は既にmasters.html汎用CRUDに登録済み、残り2項目はanalysis/out/masters_map.mdでD9方針によりDEFER認定済み。メニュー画面自体は未構築だが中身は100%既存資産でカバー済み |
| MENUQ1 | マスター保守管理サブシステム(QUERY) | QRY001-009(Query/400、全9枠ラベル空欄) | ALIVE・空シェル | MENUM1のF9直結(QUERY)。9オプション全てWGID空欄=一度も設定されずに終わったプレースホルダの可能性が高い(推測) |
| MENUQ2 | 同上ページ2 | QRY027型種/QRY028名称(以降空欄) | ALIVE・非ギャップ | MENUM2のF9直結。型種/名称はmasters.htmlで既にCRUD提供済みのため実質重複 |
| MENUZ9 | 材料・金型管理サブシステム 自動倉庫用 | SIGNOFF(opt90) + ZSBS03/04/05-08(材質・使用品番・受注残の各種照会) | ALIVE-HIDDEN(未移植だが中身は非ギャップ) | サインオン初期プログラムLL.txtが端末ID DSP65〜DSP6599999の場合、MENU00を経由せず直接CALL PGM(MENUZ9)。ZSBS05-08は既にMENUZ1配下で移植済み。詳細は4章 |
| MENUA1X0 | 組付管理サブシステム(旧版) | MENUA1とほぼ同一、ASBS15/17のラベルのみ空欄 | VARIANT(旧コピー) | diffで2行しか差が無い。呼び出し元0件 |
| MENUJ1X0 | 受注管理サブシステム(旧版) | MENUJ1とほぼ同一、JSBS16/20/24のラベルのみ空欄 | VARIANT(旧コピー) | diffで3行しか差が無い。自身もF8→MENUJ2を持つが呼び出し元0件 |
| MENUT1X0 | 試作管理サブシステム(旧版) | MENUT1とほぼ同一、TSBS12のラベルのみ空欄 | VARIANT(旧コピー) | diffで1行差。呼び出し元0件 |
| MENUT2X0 | 試作管理サブシステム2(旧版) | MENUT2とほぼ同一、TSBS28/33のラベルのみ空欄 | VARIANT(旧コピー) | diffで2行差。呼び出し元0件 |
| MENUM00 | MASTER保守管理サブシステムメニュー00 | 変更処理(MNM001)/追加処理(MNM005)/削除処理(MNM009)の3枠だけの入口 | PROBABLY-DEAD | AS/400ソース全体で呼び出し元0件。詳細は5章 |
| MENUMD1〜3 | マスター削除管理サブシステムD1〜D3 | 部品品番/カレンダー/DNPTカレンダー/製造指示/組付部品状況/組付まとめ指示/設計Y/受注品番の削除用 | PROBABLY-DEAD | MENUM00→MNM009→MENUMD1→(F8)MD2→(F8)MD3のみが呼び出し経路で、根のMENUM00が呼ばれていない。末端プログラムMNMD01〜09はソース自体が存在しない |
| MENUMU1〜3 | マスター変更管理サブシステムU1〜U3 | 同上9マスタの変更用 | PROBABLY-DEAD | 同上(MNM001経由)。末端MNMU01〜09もソース無し |
| MENUMW1〜3 | マスター追加管理サブシステムW1〜W3 | 同上9マスタの追加用 | PROBABLY-DEAD | 同上(MNM005経由)。末端MNMW01〜09もソース無し |
| MENUMQ1〜3 | MASTER EXCEL出力サブシステムメニューQ1〜Q3 | 同上9マスタのEXCEL出力用 | PROBABLY-DEAD | MD/MU/MW各ページのF9(QUERY)からのみ到達。呼び出し元3系統は全て死んだ枝。末端MNMQ01〜09もソース無し |
3.1 F8「次頁」チェーンの全体像(10+3+1=14件のALIVE系統)
実際のソースを辿ると、以下の3本の独立したチェーンで繋がっている(矢印はF8=次頁、[F9]はF9=QUERY/照会の意味)。
いずれも該当メニューのCLソース内、CHGVAR VAR(&MSG2) VALUE(' F3=終了 F8=次頁 ...')という行で画面上に明示されている普通のページ送り機能であり、AS/400の利用者(新實さん・古橋さんら)にとっては当たり前に見えていた画面のはずである。今回「未到達」と判定されていたのは、あくまでanalysis/out/menu_tree.mdを生成したクローラーが数値オプション(&WNUM01〜26との比較)しか辿らず、ファンクションキー分岐(&IN08/&IN09との比較)を辿っていなかったためのツール側の限界であり、AS/400の実運用上は最初から「隠れて」いなかったと考えられる。
おまけ: MENUW1に残る「行き先の無い」コピペの跡
MENUW1のソース(source/as400-admin/transport-tooling/ITLIBS/MENUW1.txt)には、F8(次頁)とは別に、MENU00と全く同じパターンの打鍵専用分岐が存在する。
IF ( &INPS = 50 ) DO
CALL PGM(MENUWZ)
MONMSG MSGID(CPF0000 CPD0000) EXEC(DO)
CHGVAR VAR(&WGID) VALUE('経理管理サブシステムメニュー')
GOTO @ER010
ENDDO
GOTO @IT010
ENDDO
呼び出し先MENUWZはソースツリー全体を検索しても1件も存在しない。しかもエラー時のラベル文言が「経理管理サブシステムメニュー」=MENU00のD23分岐(MN5001/MENUR1)のラベルをそのままコピーした跡が残っている。これはMENU00のオプション50分岐をひな形にしてMENUW1に貼り付けたものの、MENUWZという実体を作らずに放置された(あるいは作る前に開発が打ち切られた)未完成のコピペ跡と判断できる(推測)。もしAS/400上で実際にこの打鍵(号口管理サブシステム画面で「50」と入力)を行うと、プログラムが見つからずCPF0000系のエラーで弾かれるはずで、実害は無い。念のため記録として残す(31メニューの集計には含めていない=MENUWZという名のメニューはそもそも存在しないため)。
4. MENUZ9 — 端末ID分岐の詳細
source/as400-admin/transport-tooling/ITLIBS/LL.txt(サインオン時の初期プログラム、ライブラリリスト設定+起動メニュー呼び出し)の中身は次の通り。
IF COND(&NOWS *GE DSP65 *AND &NOWS *LE DSP6599999) THEN(GOTO CMDLBL(@MENUZ9))
CALL PGM(MENU00)
GOTO @FIN
@MENUZ9: /*自動倉庫端末専用*/
CALL PGM(MENUZ9)
ワークステーションID(端末名)がDSP65〜DSP6599999の範囲だった場合、MENU00の画面すら一度も表示せず、直接MENUZ9に飛ぶ。これはMENUR1(MENU00の中の打鍵専用分岐)とは全く異なる隠れ方で、「特定の物理端末からログオンした場合だけ見える別の起動メニュー」という、メニューツリーの外側にある入口。おそらく自動倉庫(立体倉庫)の現場に設置された専用端末(DSP65番台)向けに、サインオン時点で業務を絞り込む設計 推測。
中身自体(ZSBS05-08=材質・使用品番・使用材料・受注残の各種照会)は、幸いMENUZ1配下で既に移植済み(material-usage-by-material.html, material-type-list.html等)。自動倉庫の入出庫トランザクション本体(ZSBS21-23、MENUZ1側にのみ存在)はMENUZ9のメニューには含まれておらず、別経路(PLC/クレーン制御と連動?)の可能性がある 推測。
pilot/appには存在しない。ただし機能はMENUZ1側で全てカバー済みなので、追加実装が必要な「機能ギャップ」ではなく、「特定端末からアクセスした時のUIの絞り込み」という体験設計の話に留まる。稼働している端末が現存するかは9章の質問1で確認する。
4.1 その他の注意点
MENUD1(デンソー機工EDI)— 生きているが実データは空。呼び出し経路自体はJSBS30経由で完全に確認でき、public/menud1.htmlも既に構築済み。ただし本番DB(itakura-pilot-db、read-only接続で確認)でjudpdk(EDI受信ステージングテーブル)の行数を見ると0件だった。これはステージングテーブルの性質上(取り込み後にクリアされる運用の可能性)不使用の証拠にはならないが、念のため9章で確認事項に入れている。
MENUQ1(QUERY、全9枠ラベル空欄)。MENUM1のF9(QUERY)から到達できる点は他と同じだが、9オプション全てがWGID空欄(一度もラベルが設定されていない)。到達経路としては生きているが、中身が最初から空だった可能性が高い(Query/400のスロットだけ用意して、結局誰も定義を割り当てなかった) 推測。実害・実務的重要性は低いと判断。
5. MENUM00死亡クラスタ — ソース自体が存在しない36本
MENUM00の中身は3オプションのみ。
MENUMD1/MU1/MW1が挙げるマスタ一覧(部品品番・カレンダー・DNPTカレンダー・製造指示・組付部品状況・組付まとめ指示・設計Y・受注品番)は、現行の到達可能なMENUM1(MENU00 opt5経由)が挙げるマスタ一覧と完全に同一。つまりこれは「削除/変更/追加をそれぞれ別メニューに分けていた旧設計」であり、現行のMENUM1(1画面でCRUDをまとめて扱うMSBSnn系プログラム)に統合された結果、丸ごと使われなくなったと考えるのが自然 推測(ただし状況証拠は強い)。
docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
根拠を積み上げると次の通り(呼び出し元が皆無であるという事実自体はヒアリング後も変わらない)。
- MENUM00自体、AS/400ソース全体(CLもRPGも)を通じて呼び出し元が1件も無い。
- MENUM00の子(MNM001/005/009)も、MENUM00以外から呼ばれていない。
- その先のMENUMD1/MU1/MW1も、対応するMNM00xからしか呼ばれていない。
- さらにその先のMD2/3、MU2/3、MW2/3(F8連結)、MQ1/2/3(F9連結)も、この閉じたツリーの中だけで完結している。
- 決定打:各メニューが指す末端プログラム(MNMD01〜09、MNMU01〜09、MNMW01〜09、MNMQ01〜09、計36本)は、
analysis/out/members.csv(AS/400ソース全1477メンバーの一覧)に1件も存在しない。つまりメニュー階層は残っているが、実際に処理を行うプログラム本体はとうの昔に削除/未実装のまま。
analysis/out/dead_candidates.csv(呼び出しグラフから見た死んでいるメンバー一覧)にはMENUM00もMD/MU/MW/MQ系列も登場しない。これは同ツールの仕様上の死角で、「MENU*」という名前のプログラムは無条件に到達可能な起点(エントリポイント)として扱われるため(analysis/out/REPORT.md「Entry points: 172 (MENU*, ...)」)、実際には誰からも呼ばれないMENUM00でも、名前がMENU*である限り「自分自身は生きている」という前提でグラフ探索が始まってしまう。今回の手作業調査で初めて、この矛盾(名前的には入口だが実際には誰も入ってこない)が明らかになった。
| クラスタ | 末端プログラム名パターン | 件数 |
|---|---|---|
| MENUMD1/2/3(削除) | MNMD01〜MNMD09 | 9 |
| MENUMU1/2/3(変更) | MNMU01〜MNMU09 | 9 |
| MENUMW1/2/3(追加) | MNMW01〜MNMW09 | 9 |
| MENUMQ1/2/3(EXCEL出力) | MNMQ01〜MNMQ09 | 9 |
| 計 | 36(全てソース不在) |
一方でMENUM00直下の3本の中継プログラム(MNM001/005/009)自体はソースが存在する(source/as400-admin/transport-tooling/ITLIBS/MNM001.txt等、各64行、単純にITSQ01R権限チェック→CALL PGM(*LIBL/MENUMUx)するだけの薄いラッパー)。つまり「メニューの骨組み」と「中継の薄いラッパー」だけが残り、「実際にマスタを削除/変更/追加する本体プログラム」だけがきれいに失われている——最後の統合作業で本体プログラムをただし上のヒアリング結果の通り、これは「本体を移植して旧側を消し忘れた」のではなく、「本体(MNMD0x/MNMU0x/MNMW0x等)を最初から作らずMENUM1側の実装だけで済ませた」と読む方が新實さんの証言と整合する。骨組みと薄いラッパーだけが先に用意され、本体の実装がMENUM1側の完成をもって不要になった(あるいは最初から本体着手前にMENUM1へ一本化する方針に切り替わった)、というのが現時点で最も無理のない理解。MSBSnn側に移植し、旧側は消し忘れた、という経緯が透けて見える 推測。
参考: MENUMD1/MU1/MW1が挙げるマスタ一覧(9項目、3メニューとも完全に同一)
部品品番マスタ / カレンダーマスタ / DNPTカレンダーマスタ / (空欄)/ 製造指示データ / 組付部品状況ファイル / 組付品まとめ指示データ / 設計Yマスタ / 受注品番マスタ
これは現行MENUM1(MENU00 opt5から到達可能)が挙げるMSBS01〜08の一覧(部品品番マスター/カレンダーマスター/DNPTカレンダーマスター/製造指示データ/組付部品状況ファイル/…)と項目名・並び順とも一致しており、単純な言い換えではなく元々同じマスタ集合を指している。旧設計(削除/変更/追加を別画面に分ける)→新設計(1画面でCRUDをまとめる、MSBSnn各プログラムが内部で分岐)という統合が行われ、旧メニュー階層だけがソースツリーに残った、という説明が最も無理がない。
6. 死にプログラムの風景(新規参入者向けサマリ)
analysis/out/REPORT.mdの静的解析(到達点172=MENU*全部・BAT*全部・DTF参照ファイル全部から出発したグラフ探索)によると次の通り。
| 指標 | 件数 |
|---|---|
| ソース総数 | 1,477メンバー(228,719行) |
| 到達可能 | 1,125メンバー(76%) |
| 死にコード候補(dead_candidates.csv) | 352メンバー(74,915行 = 全体の33%) |
| type | 件数 | 意味 |
|---|---|---|
| RPG | 159 | 実処理プログラム |
| PF | 58 | 物理ファイル(テーブル定義) |
| DSPF | 37 | 画面定義 |
| PRTF | 27 | 帳票定義 |
| CL | 49 | CL制御プログラム |
| LF | 22 | 論理ファイル(インデックス/ビュー相当) |
352件のうち244件(69%)はreferenced_anywhereが空欄=同ソース内のどこからも参照されない完全孤立、残り108件は他の死んでいるプログラム同士が互いに呼び合っている(=孤立した死のクラスタ全体)。
dead_candidates.csv自体に死角(MENU*命名の偽エントリポイント問題)がある。「MENU*で始まる名前だから安全」と早合点せず、5章のMENUM00クラスタのように実際の呼び出し元をたどって確認する姿勢が必要。逆に、dead_candidates.csvに載っていて本当に孤立している244件は、比較的安心して読み飛ばせる(今回の31メニュー調査でも、本当に死んでいると分かった13メニューの末端36プログラムはそもそもソースが存在しなかった=dead_candidates.csvにすら載りようがない、という一段階深い死に方だった)。
7. サブシステム×主要書込テーブル マップ
analysis/out/edges.csvのcall/menu辺で各サブシステム根(MENUJ1等11本)からグラフ探索し、到達した全プログラムのwrites-file辺を集計。表定義ファイル(末尾D、画面record format書き込み)とQPRINT(汎用スプール出力)を除いた、実データテーブルへの書き込み上位を示す。このテーブルはそのまま「どのサブシステムがどのデータを持っているか」の参照表としても使える。
| サブシステム | 到達プログラム数 | 主要書込テーブル(上位) |
|---|---|---|
| MENUJ1 受注管理 | 284 | JUDP(27) 受注データ, BJDP(11) 号口, JKMP(11) 受注管理マスタ, JUDPR1(9), JUDL00(7) |
| MENUW1 号口管理 | 114 | BHMP(8) 部品品番マスタ, JHMP(8) 受注品番マスタ, SJDP(8) 出荷, JKMP(4) |
| MENUT1 試作管理 | 115 | SJDP(7) 出荷, JUDP(6) 受注, SJDPQ2(4), BJDPQ2(4), ZKDP(3) 試作品在庫, ZLGP(3) |
| MENUS1 出荷管理 | 138 | TK1P(3) 得意先従属, JUDPS6(2), JUDP(2) |
| MENUK1 技術情報管理 | 95 | KSMP(3) 構成マスタ, JHMP(2), BHMP(2) |
| MENUA1 組付管理 | 73 | SKDP(3) 支給品, JUDP(2) |
| MENUZ1 材料・金型管理 | 46 | MDMP(4) 金型管理マスタ, TBMP(1) 棚番管理 |
| MENUG1 外製管理 | 49 | SFDP(5) 仕入ファイル, SFDPP3(1) |
| MENUM1 マスター保守管理 | 97 | TKMP(2) 得意先マスタ, SQUP/SQDP(各1) CL実行許可 |
| MENUB1 工機管理 | 39 | KFDP(3) 工機作業指示, NKMP(3) ナンバー管理マスタ |
| MENUX1 システム管理保守 | 31 | CLMP(1) カレンダーマスタ |
全体として、JUDP(受注データ)とBJDP/SJDP(号口・出荷データ)が複数サブシステムを横断する中核テーブル、JHMP/BHMP(受注品番・部品品番マスタ)がマスタ側の中核であることが定量的に裏付けられた。3章のMENUM2クラスタが指すTYMP/NMMP/MDMPは、MENUZ1のMDMP(4件書込)を除けば書込頻度は低く(照会・保守中心のマスタ)、実データ行数(tymp:121, nmmp:188, mdmp:9,527)と合わせても運用中の実マスタと判断できる。
| テーブル | 行数 | 対応するメニュー/オプション | 判定への寄与 |
|---|---|---|---|
| judp(受注データ) | 45,545 | MENUJ1系全体 | 中核テーブル、稼働中 |
| mdmp(金型管理マスタ) | 9,527 | MENUM2 opt31 / MENUZ1 | MENUM2の中身が実データとして生きていることを裏付け |
| shdp(支払費用データ) | 5,738 | MENUR1(D23で既出) | 参考値(D23の裏付けデータと同一) |
| nmmp(名称マスタ) | 188 | MENUM2 opt28 | 稼働中の小規模マスタ |
| tymp(型種マスタ) | 121 | MENUM2 opt27 | 稼働中の小規模マスタ |
| judpdk(デンソーEDIステージング) | 0 | MENUD1 | 空=ステージング特性上不使用の証拠にはならないが要確認(9章-3) |
この読み取り専用クエリはdocker exec -e PGOPTIONS='-c default_transaction_read_only=on'で本番トランザクションに一切影響を与えない形で実行した(更新系コマンドは発行していない)。
8. 調査方法(詳細)
詳細: 生死判定の根拠と4段階の調査手順
D23はMENU00のCLソース内にIF (&INPS = 50) DO CALL PGM(MN5001)という、画面には一切表示されない「打鍵専用」の分岐を発見したことで、MENUR1の生存を突き止めた。これに倣い、今回は以下の4段階で31メニュー全てを再調査した。
- MENU00自体の再点検 —
IF ( &INPS = <数字> )パターンを全数grepし、画面外の打鍵専用分岐が「50」「70」以外に存在しないことを確認(存在しない=MENUR1/R2/U1がMENU00直下では唯一の隠し分岐だった)。 - 全メニュー・全CLソースを横断した呼び出し元探索 —
PGM(MENUxxx)およびPGM(*LIBL/MENUxxx)(ライブラリ修飾あり)の両方の記法でgrep(後者を見落とすとMENUD1のような実在する呼び出しを取りこぼす — 実際に一度取りこぼした)。 - ファンクションキー分岐の追跡 — メニュー同士は
&INPSの数字選択だけでなく、IF ( &IN08 = '1' ) THEN(CALL PGM(MENUxx))という「次頁(F8)」「照会(F9)」のファンクションキーでも連結されている。analysis/out/menu_tree.mdのクローラーはこのF-key辺を辿っていないため、F8/F9で繋がる「ページ2」メニューが軒並み「未到達」に誤分類されていた。 - メニュー以外からの起動経路 — 個別プログラム(JSBS27, JSBS30, ASBS02等)がメニューを呼び出すケース、およびサインオン初期プログラム
LL.txtが端末ID(ワークステーション名)によって起動メニューを直接切り替えるケースを発見。後者はMENU00を一切経由しない、メニューツリー外の完全に独立した入口。 - 裏付けデータ —
analysis/out/dead_candidates.csv(呼び出し元0件の352メンバー)、analysis/out/masters_map.md(MNMマスタ登録簿、CRUD/DEFER分類)、pilot/app/public/*.htmlの実在確認(既に移植済みかどうか)、および実データ(itakura-pilot-db、read-only接続)でのテーブル行数確認を組み合わせた。
iconv単体だと途中で打ち切られる(例:MENUJ1.txtは3931バイト目で壊れる)。iconv -f SHIFT-JIS -t UTF-8//IGNOREで不正バイトを読み飛ばし、また一部ファイルはgrepがバイナリ判定して中身を返さないためgrep -a必須、という2つの罠があった。
付録: 調査で使ったコマンド例(再現用)
# メニュー間のCALL PGM辺を洗い出す(*LIBL/修飾を含める)
grep -anlE "PGM\(\*?(LIBL/)?MENUXXX\)" source/as400-admin/transport-tooling/ITLIBS/*.txt
# ファンクションキー分岐(F8=次頁 等)
grep -an "IF ( &IN0[0-9] = '1' ) THEN(CALL PGM" source/as400-admin/transport-tooling/ITLIBS/*.txt
# 打鍵専用の隠し分岐(D23と同じパターン)
grep -anE "IF \( ?&INPS ?= ?[0-9]" source/as400-admin/transport-tooling/ITLIBS/*.txt
# Shift-JIS + 不正バイト混在ファイルの安全な変換
iconv -f SHIFT-JIS -t UTF-8//IGNORE MENUJ1.txt
# 本番DB読み取り専用チェック(例)
docker exec -e PGOPTIONS='-c default_transaction_read_only=on' \
itakura-pilot-db psql -U pilot -d itakura -c "SELECT count(*) FROM tymp;"
9. 確認したいこと
以下は「事実として確認したこと」と「まだ確証が取れず新實さん/古橋さんの記憶に頼りたいこと」を分けて列挙する。推測マークの無い項目はソース・データからの事実、マーク付きは状況証拠からの推測。この節は 14. ヒアリングシート にそのまま引き継がれる。
LL.txtが、ワークステーションID DSP65〜DSP6599999の端末に限り、MENU00を経由せず直接MENUZ9(自動倉庫用サブシステム、材質・使用品番等の照会4項目+サインオフ)を起動する分岐を持つ。新實さん: 「今も稼働している。機能を限定するために別のスタートメニューをデフォルトにしている。」——DSP65番台の専用端末は現役で、MENUZ9への自動振り分けは意図的・現行の設計であることが確認された。単なる死んだ遺物ではないため、4章末尾で触れた「この端末向けの縮小ランディング画面」の移植版での再現は、実際に検討すべき項目として引き続き有効。(出典: 新實さん、2026-07-21ヒアリングシート回答、
docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
新實さん: 「こちらが正」——現行のMENUM1/MENUM2が正しいバージョンであることが確認された。同じ回答の中で、この13メニュー自体は「作りかけで実際には使っていません」とも述べており(5章参照)、「かつて実際に使われていた3分割版がMENUM1に置き換わった」のではなく、「3分割版は未完成のまま一度も現役運用されなかった」が正しい経緯。詳細は5. MENUM00死亡クラスタのヒアリング反映箇所を参照。(出典: 新實さん、2026-07-21ヒアリングシート回答、
docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
新實さん: 「毎日実行。今現在も」——デンソー機工とのEDIデータ交換は今日時点でも日次で現役稼働している。judpdkテーブルが読み取り時点で0件だったのは、ステージングテーブルとしての性質(取り込み後クリアされる運用)通りで、不使用の証拠ではなかったことが裏付けられた。(出典: 新實さん、2026-07-21ヒアリングシート回答、
docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
「F9を押した記憶があるか」という個人の記憶そのものへの直接回答はなかったが、関連する運用実態は判明した。新實さん: 個別・アドホックなデータファイル単位の照会はQUERY submenuではなくDFU(Data File Utility)で行う(「DFUで対応」)。また、旧QUERYベースの「一覧表を印刷」機能そのものについては「データの件数が多いものは意味がない。今はExcelで出せるので、不要。」と明言しており、この印刷機能は不要(廃止して差し支えない)と確認できた。残る疑問は「F9キー自体を過去に押した記憶があるか」という狭い一点のみで、MENUQ1/Q2の存在意義への実務的な懸念は解消したと考えてよい。(出典: 新實さん、2026-07-21ヒアリングシート回答、
docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
【質問】この判定に異論はありませんか?(特に号口組付品出来高/使用部品データの2つを、今後もWeb版で扱う予定が無いことの最終確認)