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 セクション

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

例:

[Button5.Diode]
Caption=pvfit
...
End
  • セクションは [SectionName] で始まる

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

3.2 call の意味

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 系コマンドや環境変数で定義した変数は、次の形式で参照する。

$(varname)

例:

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

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

例:

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

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

remove_comment method_pvfit
remove_comment prompt_ini

この方式により、

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

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

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


6. 文字列とクオート

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

例:

"$(input_path)"
"$(script)"
"$(output_path)"

推奨方針:

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

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


7. パス操作

7.1 join_path

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

例:

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

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

7.2 use_os_path_sep

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

例として Boot では perllib_pathPERL5LIB へ追加する前に 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 系

$(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 基本の流れ

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

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.iniVASP.ini では、かなり大規模なタブ付きダイアログが構築されている。 fileciteturn3file3turn3file4turn3file11

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

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

例:

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_filecombobox には追加ボタンや追加コマンドを持たせられる。

例:

  • 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 左リストボックスメニュー

例:

[VASP].select
[textbook].select

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

10.2 サブメニューボタン

例:

[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

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

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

11.2 create_menu / add_context_menu

VASP.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

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_dirwrite_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