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' などの共通変数設定 fileciteturn3file15
さらに 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 実行に置き換えられている。 fileciteturn3file17turn3file19
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' を設定し、ツールチップやコンテキストメニューを追加している。 fileciteturn3file9turn3file3
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' でダイアログへ反映している。 fileciteturn3file9
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 関連パラメータでも確認できる。 fileciteturn3file12turn3file9
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' を使っている。 fileciteturn3file15
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 実行に対応する。 fileciteturn3file17turn3file19
8.2 shell / editor / filer 呼び出し
右ボタンの定義から、Launcher には「標準シェル・ファイラ・エディタ」を呼ぶ共通操作があることが分かる。
'RButton1' : shell
'RButton2' : filer
'RButton3' : editor
これらは 'section_root_dir' やカレントディレクトリに対して起動される。 fileciteturn3file13
8.3 URL 起動
'$(start) https://...' のように Web URL も直接開ける。
VASP やヘルプ関連で多数使われている。 fileciteturn3file7turn3file16
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' では、かなり大規模なタブ付きダイアログが構築されている。 fileciteturn3file3turn3file4turn3file11
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」などを切り替える構造が作られている。 fileciteturn3file12turn3file5
9.5 複数アクション付きウィジェット
'choose_file' や 'combobox' には追加ボタンや追加コマンドを持たせられる。
例:
'button1_text=media info'
'button1_command=call [media_inf_execute]'
また VASP のファイル選択UIでは、edit / start / XML viewer / file list / VESTA など複数のボタン操作を同一ウィジェットに持たせている。 fileciteturn3file3turn3file14
9.6 行継続
長い 'add_dialog' は行末の '' で継続できる。
10. メニューとボタン
10.1 左リストボックスメニュー
例:
'''ini [VASP].select [textbook].select '''
これらはメニュー選択時の初期化を担う。
'section_root_dir' の設定、ツールチップ追加、コンテキストメニュー作成などが行われる。 fileciteturn3file9turn3file3
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 一覧起動などが行える。 fileciteturn3file2turn3file10
10.4 右ボタン
'[RButton].onload' で右側ボタンのツールチップが定義され、'[RButton1]' 〜 で実処理が割り当てられる。
cmd.exe
Explorer
Editor
Edit script
Edit system files
help
などの枠組みがここで定義されている。 fileciteturn3file13turn3file16
11. コンテキストメニューとツールチップ
11.1 add_tooltip
'''ini add_tooltip 1 "Convert movie file to audio file" #dcfbfe #0000ff '''
左ボタン、右ボタン、ツールバーボタンなどに説明を付ける用途で使われる。
色も指定可能。
'textbook' や 'VASP' の '.select'、'TButton.onload'、'RButton.onload' で広く使われている。 fileciteturn3file3turn3file9turn3file13
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 キー設定へつなげている。 fileciteturn3file12
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' はメニュー再読み込みに使われている。 fileciteturn3file17turn3file10
14. 制御・確認・表示系コマンド
確認できたもの:
'debug on / off'
'confirm on / off'
'show_window NoTopMost'
'ask_yesno_dialog ...'
'echo ...'
'Bye'
右ボタン側では debug / confirm / topmost の説明ダイアログも定義されている。
VASP では削除処理の前に 'ask_yesno_dialog' を使っている。 fileciteturn3file16turn3file9
15. 大規模スクリプトから見える設計パターン
15.1 VASP.ini に見られるパターン
'.select' でツールチップやコンテキストメニューを付与
大きなタブ付きダイアログ
'remove_comment' を使った選択値の正規化
実行前に 'work_dir' を 'write_ini'
Python / Perl / 外部GUI(VESTA, VASPKIT など) を連携起動
'set_dialog_var' で後からダイアログへ値を戻す
VASP 用途では、Launcher が「複雑なワークフローをまとめる前面 GUI」として使われていることがはっきり分かる。 fileciteturn3file9turn3file14turn3file11
15.2 textbook.ini に見られるパターン
音声変換、文字起こし、翻訳、AI API 利用、TTS などを統合
'tab' による多段設定UI
'.env' / APIキーの読込
説明付き combobox 値 + 'remove_comment'
'button1_command' などの補助アクション付き choose_file
OpenAI/Gemini など複数バックエンドの切替
ここでは Launcher が、AI・教材作成系の統合フロントエンドとして使われている。 fileciteturn3file3turn3file4turn3file12
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 別共通変数設定 fileciteturn3file15turn3file17
'3-001-RButton.ini' : 右ボタン・ツールバー・Launcher 自体の制御UI fileciteturn3file2turn3file13turn3file16
'6-041-VASP.ini' : 大規模な実務用ワークフロー統合例 fileciteturn3file9turn3file14turn3file11
'9-200-textbook.ini' : タブ付きGUI、APIキー管理、AI/TTS 連携例 fileciteturn3file3turn3file4turn3file12