Launcherスクリプト暫定仕様書(拡張版)

1. 概要

Launcherスクリプトは、'.ini' 風の独自DSLであり、以下を1つのスクリプト内で扱える。

  • メニュー/ボタン定義

  • 右側ボタン・ツールバーボタン定義

  • ダイアログGUI定義

  • 設定値の読み書き

  • パス操作

  • 環境変数や共通変数の初期化

  • 外部プログラム起動

  • セクション間ジャンプ

  • Webやローカルヘルプへのリンク

  • コンテキストメニュー生成

この言語は一般的な関数呼び出し型ではなく、グローバル変数 + セクション + goto 型実行 を基本としている。


2. 起動シーケンス

Launcher 起動時には、まず 'Boot.ini' の '[Boot]' セクションが実行される。
ここでは、共通変数の初期化、検索パス追加、OS依存パラメータの設定準備、タイトル設定、古いスクリプトの削除などが行われる。

例として、'[Boot]' では次のような処理が行われている。

  • 古い '.ini' スクリプトの削除

  • ウィンドウタイトル設定

  • デバッグ/確認モードの初期設定

  • 'tklib_path', 'tkdb_path', 'TkPlotDir' などの共通パス設定

  • 'PATH', 'PYTHONPATH', 'PERL5LIB' などの環境変数拡張

  • 'python3_path', 'python_path', 'start', 'web_root', 'sphinx_url_base' などの共通変数設定 fileciteturn3file15

さらに OS ごとのセクションがあり、Windows / Darwin / Linux / GNOME ごとに以下が上書き・追加される。

  • 'batch_ext', 'exe_ext', 'dll_ext'

  • 'tkapp_path', 'tkapp2_path'

  • 'start_cmd', 'start_cmd_C', 'start_cmd_K'

  • 'vesta_path'

  • 一部外部アプリの探索や 'PATH' 追加

特に Windows では、'start cmd /C' / 'start cmd /K' 系の起動変数が定義され、Linux 系では 'xterm -e' や shell 実行に置き換えられている。 fileciteturn3file17turn3file19


3. 実行モデル

3.1 セクション

スクリプトはセクションの集合からなる。

例:

'''ini [Button5.Diode] Caption=pvfit ... End '''

  • セクションは '[SectionName]' で始まる

  • 'End' が見つかるまで順次実行される

3.2 call の意味

'''ini call [pvfit_execute] '''

  • 'call' はサブルーチン呼び出しではない

  • 実体は goto

  • 戻り値はない

  • ローカル変数もない

  • コールスタックもない

したがって、Launcher全体は グローバル変数だけで動く手続き型DSL とみなせる。

3.3 onload / select 系セクション

通常の '[Section]' に加え、次のようなイベント的セクションがある。

  • '[Boot]' : 起動時

  • '[MenuName].select' : 左リストボックスでそのメニューを選択したとき

  • '[TButton].onload' : ツールバーボタン読み込み時

  • '[RButton].onload' : 右ボタン読み込み時

例として、'[VASP].select' や '[textbook].select' では、選択時に 'section_root_dir' を設定し、ツールチップやコンテキストメニューを追加している。 fileciteturn3file9turn3file3


4. 変数

4.1 特殊変数

1文字の特殊変数がある。

  • '$o' : 直前の取得系コマンドの出力値
    例: 'get_open_file_name' の選択ファイルパス

  • '$i' : 'Launcher.ini' のパス

このほか、実行環境由来の特殊変数がある可能性が高い。

4.2 通常変数

'set' 系コマンドや環境変数で定義した変数は、次の形式で参照する。

'''ini $(varname) '''

例:

'''ini set outprefix=test \((start) "\)(editor_path)" "$(outprefix).txt" '''

4.3 スコープ

  • すべての変数は Launcher全体でグローバル

  • セクションをまたいで値を保持する

4.4 ダイアログ変数

'add_dialog' で作成したウィジェットの値は、指定した変数名に入る。
必要に応じて 'set_dialog_var' でダイアログ側へ値を戻すこともできる。

例として VASP 関連では、要約ファイルを 'read_ini' で読み、その結果を 'set_dialog_var' でダイアログへ反映している。 fileciteturn3file9


5. コメント付き値と remove_comment

変数値には、人間向けの '#コメント' を含められる。

例:

'''ini "nelder-mead # Downhill simplex" "lecture_VOICEVOX_jp #日本語対談で講義の説明" '''

実行時にコメント部分を除いて値だけを使いたい場合は、'remove_comment' を用いる。

'''ini remove_comment method_pvfit remove_comment prompt_ini '''

この方式により、

  • GUI上では説明付き選択肢を見せる

  • 実引数では純粋な値だけを渡す

ことができる。
この使い方は 'prompt_ini' や VASP 関連パラメータでも確認できる。 fileciteturn3file12turn3file9


6. 文字列とクオート

ファイルパスには空白が含まれることがあるため、外部プログラムへ渡すパスは基本的に '"' でクオートする。

例:

'''ini "\((input_path)" "\)(script)" "$(output_path)" '''

推奨方針:

  • 外部コマンドへ渡すパスや文字列は基本的にクオートする

  • 特に Windows パスではほぼ必須


7. パス操作

7.1 join_path

'join_path' は、パス構成要素を OS 依存セパレータで連結する。

例:

'''ini join_path script "$(tkprog_X_path)" electrical pvfit.py '''

概念的には 'os.path.join(...)' 相当である。

7.2 use_os_path_sep

変数内のパス区切りを OS 依存形式へ変換する用途に使われる。

例として Boot では 'perllib_path' を 'PERL5LIB' へ追加する前に 'use_os_path_sep ppath' を使っている。 fileciteturn3file15

7.3 関連コマンド

  • 'get_directory'

  • 'get_filebody'

  • 'get_filename'

  • 'get_drive'

  • 'get_last_word'

  • 'get_cur_dir'

  • 'chdir'


8. 外部コマンド実行

Launcherは外部ツール実行を主要用途とする。

8.1 start / start_cmd 系

'''ini \((start) "\)(excel_path)" \((start_cmd_C) "\)(python3_path)" "\((script)" ... \)(start_cmd_K) vaspkit '''

  • '$(start)' : 単純な start

  • '$(start_cmd_C)' : 実行して終了

  • '$(start_cmd_K)' : 実行後も端末を残す

Boot で OS ごとに実体が設定される。Windows では 'cmd /C', 'cmd /K' に、Linux では 'xterm -e' や shell 実行に対応する。 fileciteturn3file17turn3file19

8.2 shell / editor / filer 呼び出し

右ボタンの定義から、Launcher には「標準シェル・ファイラ・エディタ」を呼ぶ共通操作があることが分かる。

  • 'RButton1' : shell

  • 'RButton2' : filer

  • 'RButton3' : editor

これらは 'section_root_dir' やカレントディレクトリに対して起動される。 fileciteturn3file13

8.3 URL 起動

'$(start) https://...' のように Web URL も直接開ける。

VASP やヘルプ関連で多数使われている。 fileciteturn3file7turn3file16


9. GUIダイアログ

9.1 基本の流れ

ダイアログは概ね次の流れで構築する。

'''ini new_dialog add_dialog ... add_dialog ... custom_dialog "title" close '''

9.2 add_dialog の主要サブタイプ

確認できたサブタイプ:

  • 'choose_file'

  • 'entry'

  • 'combobox'

  • 'spinbox'

  • 'button'

  • 'frame'

  • 'message'

  • 'label'

  • 'checkbox'

  • 'tab'

  • 'reset_tab'

  • 'pack_frame'

'textbook.ini' や 'VASP.ini' では、かなり大規模なタブ付きダイアログが構築されている。 fileciteturn3file3turn3file4turn3file11

9.3 ウィジェット値の受け取り

ダイアログ部品定義の 2行目の変数名 が、そのウィジェットの値を受け取る変数になる。

例:

'''ini add_dialog entry
outprefix
"label_head=outfile prefix:"
width=80
"def_val=$(outprefix)" '''

この場合、入力値は 'outprefix' に入る。

9.4 タブ

'textbook.ini' から、'add_dialog tab ...' と 'add_dialog reset_tab dummy' により、タブ付きUIを構築できることがわかる。
たとえば「main」「AI configuration」「OpenAI API Key」などを切り替える構造が作られている。 fileciteturn3file12turn3file5

9.5 複数アクション付きウィジェット

'choose_file' や 'combobox' には追加ボタンや追加コマンドを持たせられる。

例:

  • 'button1_text=media info'

  • 'button1_command=call [media_inf_execute]'

また VASP のファイル選択UIでは、edit / start / XML viewer / file list / VESTA など複数のボタン操作を同一ウィジェットに持たせている。 fileciteturn3file3turn3file14

9.6 行継続

長い 'add_dialog' は行末の '' で継続できる。


10. メニューとボタン

10.1 左リストボックスメニュー

例:

'''ini [VASP].select [textbook].select '''

これらはメニュー選択時の初期化を担う。
'section_root_dir' の設定、ツールチップ追加、コンテキストメニュー作成などが行われる。 fileciteturn3file9turn3file3

10.2 サブメニューボタン

例:

'''ini [Button1.textbook] Caption=Convert/Split audio ... End '''

意味:

  • 'Button1' : ボタン識別子

  • 'textbook' : 対象メニュー

  • 'Caption=...' : GUI上の表示名

10.3 ツールバーボタン

'RButton.ini' には上部のツールバーボタン定義が含まれている。

  • '[TButton].onload' : ツールチップ設定

  • '[TButton1]' : Setup details

  • '[TButton2]' : Edit ini file

  • '[TButton3]' : log

  • '[TButton4]' : Restart

  • '[TButton5]' : Boot ダイアログ

Boot ダイアログからは Launcher の再起動や他の Launcher 一覧起動などが行える。 fileciteturn3file2turn3file10

10.4 右ボタン

'[RButton].onload' で右側ボタンのツールチップが定義され、'[RButton1]' 〜 で実処理が割り当てられる。

  • cmd.exe

  • Explorer

  • Editor

  • Edit script

  • Edit system files

  • help

などの枠組みがここで定義されている。 fileciteturn3file13turn3file16


11. コンテキストメニューとツールチップ

11.1 add_tooltip

'''ini add_tooltip 1 "Convert movie file to audio file" #dcfbfe #0000ff '''

左ボタン、右ボタン、ツールバーボタンなどに説明を付ける用途で使われる。
色も指定可能。
'textbook' や 'VASP' の '.select'、'TButton.onload'、'RButton.onload' で広く使われている。 fileciteturn3file3turn3file9turn3file13

11.2 create_menu / add_context_menu

'VASP.ini' ではコンテキストメニューが作られている。

'''ini create_menu hmenu "title=examples"
"label=BoltzTraP2: show dialog" "command=call [Button10.VASP]"
"label=show example dir" "command=call [VASP_BoltzTraP_show_examples]" add_context_menu hmenu 10 '''

これは、対象ボタンに右クリック的な追加メニューを結び付ける仕組みと考えられる。 fileciteturn3file9


12. 設定ファイル読み書き

12.1 read_ini / write_ini

'''ini read_ini \(i "textbook" "work_dir" last_dir "." write_ini \)i "textbook" "work_dir" "$(dir_name)" '''

用途:

  • 前回開いたフォルダの記憶

  • ダイアログ初期値の復元

  • 結果ファイルから値の再読み込み

12.2 外部設定ファイルの読み込み

'textbook.ini' では '.env' やアカウント情報ファイルを読み込んで API キーを取り込んでいる。

  • 'read_ini'

  • 'load_dotenv'

  • 'set_if_not_blank'

などを組み合わせ、OpenAI / Google API キー設定へつなげている。 fileciteturn3file12


13. 環境・システム関連コマンド

Boot から、Launcher が単なる GUI スクリプトではなく「環境初期化も担う」ことが分かる。

確認できたもの:

  • 'add_path PATH ...'

  • 'add_path PYTHONPATH ...'

  • 'add_path PERL5LIB ...'

  • 'search_latest_file ...'

  • 'use_os_path_sep ...'

  • 'check_exist ...'

  • 'exit_if_not_exist ...'

  • 'del ...'

  • 'load_menu'

'search_latest_file' は Windows で 'csc.exe' を探す用途に使われている。
'load_menu' はメニュー再読み込みに使われている。 fileciteturn3file17turn3file10


14. 制御・確認・表示系コマンド

確認できたもの:

  • 'debug on / off'

  • 'confirm on / off'

  • 'show_window NoTopMost'

  • 'ask_yesno_dialog ...'

  • 'echo ...'

  • 'Bye'

右ボタン側では debug / confirm / topmost の説明ダイアログも定義されている。
VASP では削除処理の前に 'ask_yesno_dialog' を使っている。 fileciteturn3file16turn3file9


15. 大規模スクリプトから見える設計パターン

15.1 VASP.ini に見られるパターン

  • '.select' でツールチップやコンテキストメニューを付与

  • 大きなタブ付きダイアログ

  • 'remove_comment' を使った選択値の正規化

  • 実行前に 'work_dir' を 'write_ini'

  • Python / Perl / 外部GUI(VESTA, VASPKIT など) を連携起動

  • 'set_dialog_var' で後からダイアログへ値を戻す

VASP 用途では、Launcher が「複雑なワークフローをまとめる前面 GUI」として使われていることがはっきり分かる。 fileciteturn3file9turn3file14turn3file11

15.2 textbook.ini に見られるパターン

  • 音声変換、文字起こし、翻訳、AI API 利用、TTS などを統合

  • 'tab' による多段設定UI

  • '.env' / APIキーの読込

  • 説明付き combobox 値 + 'remove_comment'

  • 'button1_command' などの補助アクション付き choose_file

  • OpenAI/Gemini など複数バックエンドの切替

ここでは Launcher が、AI・教材作成系の統合フロントエンドとして使われている。 fileciteturn3file3turn3file4turn3file12

15.3 RButton.ini に見られるパターン

  • Launcher 自体の制御UIを別スクリプト化

  • 右側ボタンやツールバーを独立定義

  • 再起動、再読み込み、システムファイル編集などのメタ操作を提供

つまり、Launcher 自身の UI もまた Launcher スクリプトで定義されている。 fileciteturn3file2turn3file13


16. 代表的な命令一覧(今回確認できたもの)

制御

  • 'call [Section]'

  • 'End'

  • 'Bye'

変数

  • 'set'

  • 'set_if_blank'

  • 'set_if_not_blank'

  • 'remove_comment'

  • 'set_dialog_var'

パス・ファイル

  • 'join_path'

  • 'get_directory'

  • 'get_filebody'

  • 'get_filename'

  • 'get_drive'

  • 'get_last_word'

  • 'get_cur_dir'

  • 'get_open_file_name'

  • 'get_save_file_name'

  • 'chdir'

  • 'copy'

  • 'del'

ini / 環境

  • 'read_ini'

  • 'write_ini'

  • 'load_dotenv'

  • 'add_path'

  • 'use_os_path_sep'

  • 'search_latest_file'

GUI

  • 'set_title'

  • 'new_dialog'

  • 'add_dialog ...'

  • 'custom_dialog ...'

  • 'add_tooltip'

  • 'create_menu'

  • 'add_context_menu'

確認・表示

  • 'echo'

  • 'debug on/off'

  • 'confirm on/off'

  • 'ask_yesno_dialog'

  • 'show_window'

起動

  • 'start'

  • '$(start)'

  • '$(start_cmd)'

  • '$(start_cmd_C)'

  • '$(start_cmd_K)'


17. 実装思想の要約

Launcherスクリプトは、単純なメニュー定義ファイルではない。
実際には次の役割を同時に担う。

  • 起動時環境設定

  • OS依存差異の吸収

  • GUIフォーム構築

  • 永続設定管理

  • ワークフローの状態受け渡し

  • 外部プログラム実行

  • Launcher自身のメタ制御

この意味で、Launcherスクリプトは

「グローバル変数を共有する goto 型DSLで、GUI定義・環境初期化・外部ツール実行を統合したランチャー言語」

と表現するのが最も近い。


18. 現時点で未確定の点

今回の資料だけでは、以下は未確定である。

  • 一般的な 'if / else / for / while' の有無

  • すべての特殊変数一覧

  • 'call' の厳密な実装詳細

  • 'custom_dialog' の全オプション

  • 'add_dialog' サブタイプごとの完全パラメータ仕様

  • ':' で始まる命令(例 ':debug on')と通常命令の厳密な違い


19. 参考例ファイル

今回の仕様整理では、少なくとも以下のファイルを参考にした。

  • '3-000-Boot.ini' : 起動時処理と OS 別共通変数設定 fileciteturn3file15turn3file17

  • '3-001-RButton.ini' : 右ボタン・ツールバー・Launcher 自体の制御UI fileciteturn3file2turn3file13turn3file16

  • '6-041-VASP.ini' : 大規模な実務用ワークフロー統合例 fileciteturn3file9turn3file14turn3file11

  • '9-200-textbook.ini' : タブ付きGUI、APIキー管理、AI/TTS 連携例 fileciteturn3file3turn3file4turn3file12