言語別テンプレート
骨組みを一から作らずに始めたい場合は、6 言語分のテンプレートリポジトリにマニフェスト・入口・ ホスト SDK・パッケージ用スクリプトが揃っています。clone して id を変えればすぐ書けます。 各リポジトリには README-CN.md(中文)と README.md(英語)があります。
| 言語 | テンプレート | 出力 | 必要なもの |
|---|---|---|---|
| Java | template-tml-extension-java | com.tywstudio.example.java.jar | JDK(javac / jar) |
| Python | template-tml-extension-python | *.tmlext | Python 3 |
| Node.js | template-tml-extension-node | *.tmlext | Node.js 18 以降 |
| C | template-tml-extension-c | *.tmlext(ネイティブ実行ファイル入り) | C コンパイラ(gcc / clang / MSVC cl)+ Python 3 |
| Rust | template-tml-extension-rust | *.tmlext(ネイティブ実行ファイル入り) | Rust ツールチェーン(Cargo)+ Python 3 |
| Go | template-tml-extension-go | *.tmlext(ネイティブ実行ファイル入り) | Go 1.21 以降 + Python 3 |
Zig のテンプレートは未用意
C か Go の構成をそのまま真似してください。runtime は zig、entry は zig build-exe の出力、 それ以外(マニフェストの項目・stdio プロトコル・zip 化)は同じです。
始め方 3 通り
1. GitHub テンプレート(おすすめ)
6 つのリポジトリはすべて template repository です。リポジトリを開いて右上の Use this template → Create a new repository を押すと、自分のリポジトリとして作られます (親子関係なし、テンプレートの更新も自動では入りません)。
2. git clone
git clone https://github.com/TYWStudio/template-tml-extension-go.git my-ext
cd my-ext最新のコードだけ欲しいときは --depth 1 を付けます。
git clone --depth 1 https://github.com/TYWStudio/template-tml-extension-go.git my-ext3. zip を落とす
git が無い環境では、リポジトリページの Code → Download ZIP を展開すればそのまま作業できます。
最初に変える 3 か所
id—manifest.json(Java はMETA-INF/tml-extension.json)。インストール後は変更できないのでyourname.featureのような名前に。name/version/authorも一緒に変えます。- 入口の処理 —
src/main.*/main.py/main.js。テンプレートはログ 1 行とhost.info呼び出しだけなので、 自分の処理に置き換えます。 permissions— 使う能力だけ宣言します。余分に宣言すると導入時に見えるので敬遠されます。
言語ごとの手順
Java
JDK が必要です(java -version が通ること)。ホストは java -cp "<jar>" com.tywstudio.example.Main で起動するので、入口クラス名をマニフェストと合わせます。
git clone https://github.com/TYWStudio/template-tml-extension-java.git my-ext
cd my-ext
bash build.sh # Windows: build.bat
# 出力: com.tywstudio.example.java.jarJava 版は .jar を直接出力します(.tmlext ではありません)。インポートでは jar を選んでください。
Python
Python 3 だけで動きます。外部パッケージ不要。
git clone https://github.com/TYWStudio/template-tml-extension-python.git my-ext
cd my-ext
python3 build.py # Windows: python build.py
# 出力: com.tywstudio.example.python.tmlextpython3 main.py を単体で実行すると握手待ちで止まりますが正常です(起動はランチャーが行います)。
Node.js
git clone https://github.com/TYWStudio/template-tml-extension-node.git my-ext
cd my-ext
node build.js # または npm run pack
# 出力: com.tywstudio.example.node.tmlextpackage.json に実行時依存はないので npm install は不要です。
C
任意の C コンパイラ(gcc / clang / MSVC cl)と、パッケージ用の Python 3 が必要です。
git clone https://github.com/TYWStudio/template-tml-extension-c.git my-ext
cd my-ext
./build.sh # Windows: build.bat
# 出力: template-tml-extension-c.tmlextbuild.sh がコンパイル、build.py がマニフェスト・ソース・実行ファイルを .tmlext にまとめます。
Rust
SDK は git 依存(tml-ext、tag sdk-rust-v1.0.0)なので、初回ビルド時に TML リポジトリを一度 clone します。 以降は Cargo キャッシュから取得します。SDK の lib.rs をコピーしないでください。
git clone https://github.com/TYWStudio/template-tml-extension-rust.git my-ext
cd my-ext
./build.sh # Windows: build.bat
# 出力: template-tml-extension-rust.tmlext内部では cargo build --release → bin/tml_ext にコピー → build.py で梱包、という流れです。
Go
SDK は TML リポジトリの extensions/sdk/go にあり、build.sh が最初に go mod tidy で取得します (初回のみネットワークが必要)。
git clone https://github.com/TYWStudio/template-tml-extension-go.git my-ext
cd my-ext
./build.sh # Windows: build.bat
# 出力: template-tml-extension-go.tmlext実行されるコマンドは CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o bin/tml_ext ./src です。 CGO_ENABLED=0 で静的リンクになり、クロスコンパイルも簡単になります。
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o bin/tml_ext.exe ./src
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o bin/tml_ext ./src
GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o bin/tml_ext ./srcビルド後の導入
- 上のスクリプトを実行して
.jarか.tmlextを得る。 - ランチャー → 設定 → 拡張機能 → インポート で選ぶか、ウィンドウに直接ドロップ(複数可)。
- 権限一覧を確認して有効化。一度確認したパッケージは記憶され、再有効化時の確認は出ません(別のパッケージでは再確認)。
- コードを変えたら再ビルドして再インポート。ファイルを差し替えただけなら「更新」でも可。
「詳細 / 有効化 / アンインストール」や状態表示は インポートと管理 を参照してください。
初回読み込み時にパッケージの SHA-256 が extensions/trusted.json に記録され、内容が変わると 「拡張機能が変更されています」と表示されます。該当項目を消して再承認してください。
つまずきやすい点
| 症状 | 原因 |
|---|---|
| インポートしても一覧に出ない | マニフェストの JSON 構文エラー、または id の重複 |
| 「ランタイムが利用できません」 | インタプリタが PATH に無い(Java/Python/Node)、アーキテクチャ違い、実行権限なし |
| 起動直後に終了する | 入口が stdin を読んでいない、または {"ready": true} を返していない |
| Rust / Go の初回ビルドが止まって見える | GitHub の TML リポジトリから SDK を取得中。以降はキャッシュ |
| 別の PC で動かない | ネイティブ(C / Rust / Go)はビルド時のプラットフォーム依存。対象ごとに再ビルド |
| macOS で開けない | 同梱バイナリに署名が必要。ローカルは xattr -cr、配布は署名 |
関連
- ランタイムとパッケージ —
manifest.jsonの全項目、extensions/pack.py - ホスト API — 呼べるメソッドと権限の対応
- 拡張機能の概要 — 読み込み・信頼・ライフサイクル
