13. 隠れメニュー・システム地図

このページは「見えているメニューの外側」を地図にする — 隠れた入口・死んだ領域・どのプログラムがどのテーブルを書くか。新人が「知らない画面」に出会っても位置づけられるように。

このページの要点
  • MENU00から未到達だった31本のメニューを全数調査した結果、丸ごと未発見の業務は無かった。
  • 本当の隠しメニューはMENUZ9(自動倉庫端末専用の直接起動)1本のみ、残りは移植済みか死んだ枝。
  • 13本はMENUM00死亡クラスタで、呼び出し元0件かつ末端プログラムのソース自体が存在しない。
古い城を上から見た見取り図風のイラスト。片側の棟は明かりが灯り大勢の人が働いているが、反対側の棟は蔦に覆われ暗く使われていない。城壁の中には草に埋もれた小さな隠し扉が一つだけ、かすかな小道とともにひっそりと存在している
使われている棟、使われなくなった棟、そして壁の奥に隠された扉——それがこのシステムの見取り図

1. 結論ファースト

もう一つのMENUR1(=丸ごと未発見の実務サブシステム)は無かった
session 34でMENUR1(経理管理サブシステム)が「MENU00からは辿れないが実は生きている」ことが発覚した(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(既に移植済み)10F8「次頁」等で繋がる通常のページ、既に pilot/app に画面あり
ALIVE・非ギャップ3生きているが中身は既存資産(masters.html等)で既にカバー済み
ALIVE-HIDDEN(未移植・端末直起動)1MENUZ9のみ。中身自体はMENUZ1側で移植済み
PROBABLY-DEAD13MENUM00クラスタ。呼び出し元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.htmlsrc/menua1/supplied*.tsで既に実装済み (出典: docs/STATUS.md 1057-1077行)
MENUD1DNPT号口処理サブシステム(デンソー機工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受注管理サブシステム2JSBS27-52(受注残一覧・DNK号口・かんばん内示/確定 等)ALIVE(移植済)MENUJ1の画面上に「F3=終了 F8=次頁 F10=SPOOL」と明記された通常のページ2。public/menuj2.html実在
MENUJ3受注管理サブシステム3JSBS53-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試作管理サブシステム2TSBS27-52(まとめ指示の出庫/完成入力等)ALIVE(移植済)MENUT1画面に「F8=次頁」明記。public/menut2.html実在
MENUW2号口管理サブシステムWSBS27相当ALIVE(移植済)MENUW1画面に「F8=次頁」明記。public/menuw2.html実在
MENUM2マスター保守管理サブシステム2MSBS27型種/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同上ページ2QRY027型種/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件
MENUM00MASTER保守管理サブシステムメニュー00変更処理(MNM001)/追加処理(MNM005)/削除処理(MNM009)の3枠だけの入口PROBABLY-DEADAS/400ソース全体で呼び出し元0件。詳細は5章
MENUMD1〜3マスター削除管理サブシステムD1〜D3部品品番/カレンダー/DNPTカレンダー/製造指示/組付部品状況/組付まとめ指示/設計Y/受注品番の削除用PROBABLY-DEADMENUM00→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〜3MASTER EXCEL出力サブシステムメニューQ1〜Q3同上9マスタのEXCEL出力用PROBABLY-DEADMD/MU/MW各ページのF9(QUERY)からのみ到達。呼び出し元3系統は全て死んだ枝。末端MNMQ01〜09もソース無し

3.1 F8「次頁」チェーンの全体像(10+3+1=14件のALIVE系統)

実際のソースを辿ると、以下の3本の独立したチェーンで繋がっている(矢印はF8=次頁、[F9]はF9=QUERY/照会の意味)。

MENU00 opt1
MENUJ1
MENUJ2F8
MENUJ3F8
MENUJ2 opt27JSBS27
MENUJZ
MENUJ2 opt30JSBS30, ITSQ01R権限チェック後
MENUD1
MENU00 opt3
MENUS1
MENUS2F8
MENUS3F8
MENU00 opt4
MENUK1
MENUK2F8
MENU00 opt5
MENUM1
MENUM2F8
MENUQ2F9
MENUM1
MENUQ1F9
MENU00 opt8
MENUW1
MENUW2F8
MENU00 opt9
MENUA1
MENUA2opt2, ASBS02
MENU00 opt10
MENUT1
MENUT2F8

いずれも該当メニューのCLソース内、CHGVAR VAR(&MSG2) VALUE(' F3=終了 F8=次頁 ...')という行で画面上に明示されている普通のページ送り機能であり、AS/400の利用者(新實さん・古橋さんら)にとっては当たり前に見えていた画面のはずである。今回「未到達」と判定されていたのは、あくまでanalysis/out/menu_tree.mdを生成したクローラーが数値オプション(&WNUM0126との比較)しか辿らず、ファンクションキー分岐(&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という名のメニューはそもそも存在しないため)。

今回唯一の「本当の意味で隠れていた」メニュー
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(端末名)がDSP65DSP6599999の範囲だった場合、MENU00の画面すら一度も表示せず、直接MENUZ9に飛ぶ。これはMENUR1(MENU00の中の打鍵専用分岐)とは全く異なる隠れ方で、「特定の物理端末からログオンした場合だけ見える別の起動メニュー」という、メニューツリーの外側にある入口。おそらく自動倉庫(立体倉庫)の現場に設置された専用端末(DSP65番台)向けに、サインオン時点で業務を絞り込む設計 推測

中身自体(ZSBS05-08=材質・使用品番・使用材料・受注残の各種照会)は、幸いMENUZ1配下で既に移植済み(material-usage-by-material.html, material-type-list.html等)。自動倉庫の入出庫トランザクション本体(ZSBS21-23、MENUZ1側にのみ存在)はMENUZ9のメニューには含まれておらず、別経路(PLC/クレーン制御と連動?)の可能性がある 推測

移植上の実務的な意味
この端末専用メニュー自体(4項目+サインオフだけの縮小版ランディング画面)は現行の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のスロットだけ用意して、結局誰も定義を割り当てなかった) 推測。実害・実務的重要性は低いと判断。

MENUM00の中身は3オプションのみ。

MENUM00 opt1 変更処理MNM001
MENUMU1
MENUM00 opt5 追加処理MNM005
MENUMW1
MENUM00 opt9 削除処理MNM009
MENUMD1

MENUMD1/MU1/MW1が挙げるマスタ一覧(部品品番・カレンダー・DNPTカレンダー・製造指示・組付部品状況・組付まとめ指示・設計Y・受注品番)は、現行の到達可能なMENUM1(MENU00 opt5経由)が挙げるマスタ一覧と完全に同一つまりこれは「削除/変更/追加をそれぞれ別メニューに分けていた旧設計」であり、現行のMENUM1(1画面でCRUDをまとめて扱うMSBSnn系プログラム)に統合された結果、丸ごと使われなくなったと考えるのが自然 推測(ただし状況証拠は強い)。

【ヒアリングで判明】 「統合されて使われなくなった」ではなく「作りかけで一度も使われなかった」
新實さんにこの13メニュー(MENUMD1/2/3、MENUMQ1/2/3、MENUMU1/2/3、MENUMW1/2/3、MENUM00)をそのまま提示したところ、「これらのメニューは作りかけで実際には使っていません」との回答だった。これは本節がここまで組み立ててきた「旧設計が現行MENUM1に統合された結果、使われなくなって放置された」という推測を訂正するもの——マスタ一覧が現行MENUM1と完全一致するのは、統合の結果ではなく、そもそも同じマスタ集合を対象にした画面を作りかけていた(そして完成させずMENUM1側に一本化した)ためと考える方が実態に近い。「呼び出し元0件・末端36本のソース不在」というソースコード上の証拠自体は変わらず正しいが、その解釈は「使われていた機能が統合されて消えた」ではなく「最初から未完成のまま一度も稼働しなかった」に修正する必要がある。(出典: 新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)

根拠を積み上げると次の通り(呼び出し元が皆無であるという事実自体はヒアリング後も変わらない)。

  1. MENUM00自体、AS/400ソース全体(CLもRPGも)を通じて呼び出し元が1件も無い
  2. MENUM00の子(MNM001/005/009)も、MENUM00以外から呼ばれていない。
  3. その先のMENUMD1/MU1/MW1も、対応するMNM00xからしか呼ばれていない。
  4. さらにその先のMD2/3、MU2/3、MW2/3(F8連結)、MQ1/2/3(F9連結)も、この閉じたツリーの中だけで完結している。
  5. 決定打:各メニューが指す末端プログラム(MNMD01〜09、MNMU01〜09、MNMW01〜09、MNMQ01〜09、計36本)は、analysis/out/members.csv(AS/400ソース全1477メンバーの一覧)に1件も存在しない。つまりメニュー階層は残っているが、実際に処理を行うプログラム本体はとうの昔に削除/未実装のまま。
dead_candidates.csvの死角 — 「MENU*」は無条件にエントリポイント扱い
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〜MNMD099
MENUMU1/2/3(変更)MNMU01〜MNMU099
MENUMW1/2/3(追加)MNMW01〜MNMW099
MENUMQ1/2/3(EXCEL出力)MNMQ01〜MNMQ099
36(全てソース不在)

一方でMENUM00直下の3本の中継プログラム(MNM001/005/009)自体はソースが存在する(source/as400-admin/transport-tooling/ITLIBS/MNM001.txt等、各64行、単純にITSQ01R権限チェック→CALL PGM(*LIBL/MENUMUx)するだけの薄いラッパー)。つまり「メニューの骨組み」と「中継の薄いラッパー」だけが残り、「実際にマスタを削除/変更/追加する本体プログラム」だけがきれいに失われている——最後の統合作業で本体プログラムをMSBSnn側に移植し、旧側は消し忘れた、という経緯が透けて見える 推測ただし上のヒアリング結果の通り、これは「本体を移植して旧側を消し忘れた」のではなく、「本体(MNMD0x/MNMU0x/MNMW0x等)を最初から作らずMENUM1側の実装だけで済ませた」と読む方が新實さんの証言と整合する。骨組みと薄いラッパーだけが先に用意され、本体の実装がMENUM1側の完成をもって不要になった(あるいは最初から本体着手前にMENUM1へ一本化する方針に切り替わった)、というのが現時点で最も無理のない理解。

参考: 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件数意味
RPG159実処理プログラム
PF58物理ファイル(テーブル定義)
DSPF37画面定義
PRTF27帳票定義
CL49CL制御プログラム
LF22論理ファイル(インデックス/ビュー相当)

352件のうち244件(69%)はreferenced_anywhereが空欄=同ソース内のどこからも参照されない完全孤立、残り108件は他の死んでいるプログラム同士が互いに呼び合っている(=孤立した死のクラスタ全体)。

新規参入者への実務的アドバイス
全ソースの1/3は無視してよい可能性が高いが、上記の通り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 受注管理284JUDP(27) 受注データ, BJDP(11) 号口, JKMP(11) 受注管理マスタ, JUDPR1(9), JUDL00(7)
MENUW1 号口管理114BHMP(8) 部品品番マスタ, JHMP(8) 受注品番マスタ, SJDP(8) 出荷, JKMP(4)
MENUT1 試作管理115SJDP(7) 出荷, JUDP(6) 受注, SJDPQ2(4), BJDPQ2(4), ZKDP(3) 試作品在庫, ZLGP(3)
MENUS1 出荷管理138TK1P(3) 得意先従属, JUDPS6(2), JUDP(2)
MENUK1 技術情報管理95KSMP(3) 構成マスタ, JHMP(2), BHMP(2)
MENUA1 組付管理73SKDP(3) 支給品, JUDP(2)
MENUZ1 材料・金型管理46MDMP(4) 金型管理マスタ, TBMP(1) 棚番管理
MENUG1 外製管理49SFDP(5) 仕入ファイル, SFDPP3(1)
MENUM1 マスター保守管理97TKMP(2) 得意先マスタ, SQUP/SQDP(各1) CL実行許可
MENUB1 工機管理39KFDP(3) 工機作業指示, NKMP(3) ナンバー管理マスタ
MENUX1 システム管理保守31CLMP(1) カレンダーマスタ

全体として、JUDP(受注データ)とBJDP/SJDP(号口・出荷データ)が複数サブシステムを横断する中核テーブル、JHMP/BHMP(受注品番・部品品番マスタ)がマスタ側の中核であることが定量的に裏付けられた。3章のMENUM2クラスタが指すTYMP/NMMP/MDMPは、MENUZ1のMDMP(4件書込)を除けば書込頻度は低く(照会・保守中心のマスタ)、実データ行数(tymp:121, nmmp:188, mdmp:9,527)と合わせても運用中の実マスタと判断できる。

テーブル行数対応するメニュー/オプション判定への寄与
judp(受注データ)45,545MENUJ1系全体中核テーブル、稼働中
mdmp(金型管理マスタ)9,527MENUM2 opt31 / MENUZ1MENUM2の中身が実データとして生きていることを裏付け
shdp(支払費用データ)5,738MENUR1(D23で既出)参考値(D23の裏付けデータと同一)
nmmp(名称マスタ)188MENUM2 opt28稼働中の小規模マスタ
tymp(型種マスタ)121MENUM2 opt27稼働中の小規模マスタ
judpdk(デンソーEDIステージング)0MENUD1空=ステージング特性上不使用の証拠にはならないが要確認(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メニュー全てを再調査した。

  1. MENU00自体の再点検IF ( &INPS = <数字> )パターンを全数grepし、画面外の打鍵専用分岐が「50」「70」以外に存在しないことを確認(存在しない=MENUR1/R2/U1がMENU00直下では唯一の隠し分岐だった)。
  2. 全メニュー・全CLソースを横断した呼び出し元探索PGM(MENUxxx)およびPGM(*LIBL/MENUxxx)(ライブラリ修飾あり)の両方の記法でgrep(後者を見落とすとMENUD1のような実在する呼び出しを取りこぼす — 実際に一度取りこぼした)。
  3. ファンクションキー分岐の追跡 — メニュー同士は&INPSの数字選択だけでなく、IF ( &IN08 = '1' ) THEN(CALL PGM(MENUxx))という「次頁(F8)」「照会(F9)」のファンクションキーでも連結されている。analysis/out/menu_tree.mdのクローラーはこのF-key辺を辿っていないため、F8/F9で繋がる「ページ2」メニューが軒並み「未到達」に誤分類されていた。
  4. メニュー以外からの起動経路 — 個別プログラム(JSBS27, JSBS30, ASBS02等)がメニューを呼び出すケース、およびサインオン初期プログラムLL.txtが端末ID(ワークステーション名)によって起動メニューを直接切り替えるケースを発見。後者はMENU00を一切経由しない、メニューツリー外の完全に独立した入口。
  5. 裏付けデータanalysis/out/dead_candidates.csv(呼び出し元0件の352メンバー)、analysis/out/masters_map.md(MNMマスタ登録簿、CRUD/DEFER分類)、pilot/app/public/*.htmlの実在確認(既に移植済みかどうか)、および実データ(itakura-pilot-db、read-only接続)でのテーブル行数確認を組み合わせた。
2つの罠(Shift-JISソースの落とし穴)
ソースファイルはShift-JISで、しかも一部に不正バイト列が混在しており、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. ヒアリングシート にそのまま引き継がれる。

質問1 【ヒアリングで判明】
【証拠】サインオン初期プログラムLL.txtが、ワークステーションID DSP65〜DSP6599999の端末に限り、MENU00を経由せず直接MENUZ9(自動倉庫用サブシステム、材質・使用品番等の照会4項目+サインオフ)を起動する分岐を持つ。
【質問】自動倉庫(立体倉庫)にDSP65番台の専用端末は現在も稼働していますか?稼働している場合、その端末から実際にログオンして使う機会は最近ありましたか?(もし稼働していれば、その端末向けの縮小ランディング画面を移植版にも用意すべきか検討したい)
新實さん: 「今も稼働している。機能を限定するために別のスタートメニューをデフォルトにしている。」——DSP65番台の専用端末は現役で、MENUZ9への自動振り分けは意図的・現行の設計であることが確認された。単なる死んだ遺物ではないため、4章末尾で触れた「この端末向けの縮小ランディング画面」の移植版での再現は、実際に検討すべき項目として引き続き有効。(出典: 新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
質問2 【ヒアリングで判明】
【証拠】MENUM00(変更/追加/削除の3系統に分かれた旧マスタ保守メニュー)とその配下13メニューは、AS/400ソース全体を通じて呼び出し元が0件、かつ末端の実処理プログラム36本(MNMD01〜09等)はソース自体が存在しない。
【質問】昔、マスタの変更・追加・削除がそれぞれ別々のメニューに分かれていた時期を覚えていますか?(現在のMENUM1は1画面でまとめて扱える形)もし記憶になければ、現行の統合型に置き換わってから相当年数が経っていると考えて良いでしょうか。
新實さん: 「こちらが正」——現行のMENUM1/MENUM2が正しいバージョンであることが確認された。同じ回答の中で、この13メニュー自体は「作りかけで実際には使っていません」とも述べており(5章参照)、「かつて実際に使われていた3分割版がMENUM1に置き換わった」のではなく、「3分割版は未完成のまま一度も現役運用されなかった」が正しい経緯。詳細は5. MENUM00死亡クラスタのヒアリング反映箇所を参照。(出典: 新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
質問3 【ヒアリングで判明】
【証拠】MENUD1(デンソー機工EDI、JUDPDKアップロード+変更/オリジナル2トラック)は呼び出し経路が確認でき既に移植済みだが、本番DBのjudpdkテーブルは現在0件。
【質問】デンソー機工とのEDIデータ交換(DSBS04-06/17-19の処理)は今も定期的に行っていますか?最後に使ったのはいつ頃ですか?
新實さん: 「毎日実行。今現在も」——デンソー機工とのEDIデータ交換は今日時点でも日次で現役稼働している。judpdkテーブルが読み取り時点で0件だったのは、ステージングテーブルとしての性質(取り込み後クリアされる運用)通りで、不使用の証拠ではなかったことが裏付けられた。(出典: 新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
質問4 【ヒアリングで一部判明】
【証拠】MENUQ1(Query/400への直結メニュー、F9=QUERY)は9オプション全てラベルが空欄で、一度も設定が入力されていないように見える。MENUQ2も2項目のみ(型種・名称、いずれもmasters.htmlで既にカバー済み)。
【質問】MENUM1の画面でF9(QUERY)を押した記憶はありますか?あるいは「マスターの内容を独自にクエリーで見る」といった使い方をしたことは?
「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参照)
質問5
【証拠】MENUM2(マスター保守管理サブシステム2)の5項目のうち3つ(型種マスタ・名称マスタ・金型管理マスタ)は既にmasters.html汎用画面でカバー済み、残り2つ(号口組付品出来高/使用部品データ)はD9方針で「生トランザクションエディタにつき対象外」と既に判定済み。
【質問】この判定に異論はありませんか?(特に号口組付品出来高/使用部品データの2つを、今後もWeb版で扱う予定が無いことの最終確認)
質問6(参考、確認不要)
【証拠】MENUA1X0/MENUJ1X0/MENUT1X0/MENUT2X0の4本は、現行のMENUA1/J1/T1/T2とほぼ同一内容(数項目のラベルが空欄なだけ)で、呼び出し元も0件のため、旧バージョンのバックアップコピーと判断し、これ以上の追加調査は不要と考えている。異論があれば教えてください。
板倉製作所 業務フロー資料 — 出典: AS/400 ソース・翻訳仕様・Excel/VBA 資産(itakura-sys リポジトリ) ← 12. ケーススタディ・特殊ケース / 14. ヒアリングシート →