ティドリーインストール
TiddlyInstall は 1 つの HTML ファイルだけで Windows・macOS・Linux 向けのインストーラーを組み立てる仕組み。記事は何ができるか、どう動くか、既存のインストーラーと何が違うかを順に説明する。
日本語
コピー
01 これは何か
GitHub リポジトリから、Windows・Linux・macOS 用の本物のインストーラーを直接ビルドする。
コードを凍結しないし、壊れがちなパッケージャーも使わない。プロジェクトの実際のランタイムと依存関係を独立したフォルダにまとめ、それを土台にあなたのプロジェクトをインストールする。Windows インストーラーは NSIS でビルドし、Linux と macOS では POSIX シェルスクリプトになる。フレームワークのインストールは一切不要。
インストーラーを作る アプリを書く
出力 .exe · .run · .zip
言語は13種、さらに独自のランタイムも追加できる
対応する最古のターゲット Windows XP · glibc 2.17 Linux · macOS 10.9
このページは HTML ファイル1枚。サーバーなし、ネットワークなし
02 何が違うのか
TiddlyWiki と同じく、ファイル1枚
TiddlyInstall は HTML ファイル1枚だ。このページがインストーラーとランタイムディレクトリ、そしてそれらを作り、編集し、署名するためのコードすべてを抱えている。
サーバーは一切不要 ここでコードを書けるし、パッケージも使えるし、特定の commit に固定した GitHub リポジトリも使える。未署名のインストーラーならどれでも編集でき、ネットワークのないマシン向けにランタイムを同梱し、自分の鍵で署名できる。ローカルディスクに保存したコピーは、ランタイムイメージ以外にネットワークへ何も要求しない。だから GitHub のブランチは、そのブランチ上の commit を指定する必要がある。 サーバーが提供するもの 2つある。インストールスクリプトに署名すること。これでインストーラーは、スクリプトが我々のものであり転送中に改変されていないことを検証できる。もう1つは、我々 が署名したインストーラーが将来そこでビルドされること——ただし証明書が利用可能な場合に限る。今はまだないので、この選択肢は閉じている。 それ以外はすべて、このページ自身がやる。
約 6 MB、これが製品のすべて
03 仕組み
3ステップ、驚きなし
ステップ1
リポジトリを指定する
GitHub リポジトリを、ブランチ・タグ・commit のいずれかと一緒に渡してもらう。本物のソースコードをクローンする。
ステップ2
依存関係は自動で処理
インストール時に、あなたのバージョン範囲に合い、そのマシンで動く最新のランタイムを選び、アプリ自身のフォルダにインストールする。
ステップ3
プラットフォームごとにビルド
NSIS でビルドした Windows 用の普通の .exe、それに Linux 用の .run と macOS 用の .zip——3つの本物のインストーラー。
04 隔離
アプリごとに自分のフォルダ
各アプリは依存関係のコピーを自分専用に1つ受け取り、ハッシュで短縮した名前のフォルダに置く。何も共有しないので、あるアプリが別のアプリを壊すことは決してないし、アンインストールはそのアプリのフォルダを消すだけだ。ディスク容量は安いが、壊れたインストールは安くない。
Windows C:\ti\k3m9q2x7v4p8\ the app
C:\ti\tjfq5rqwnnrx\ its Python 3.12.4
C:\ti\a7d2hx9q4mbe\ its git 2.46.0
Linux /opt/ti/tjfq5rqwnnrx/
macOS /Library/Application Support/ti/tjfq5rqwnnrx/
05 リポジトリがまだない場合
ここでアプリを書く
Python、JavaScript(Node.js)、Ruby から選び、テンプレートを1つ選ぶ——スクリプト、ウィンドウアプリ、ウィンドウ内のウェブページ、トレイアプリ——あとはブラウザでコードを書き、実行し、New installer ページで同じパイプラインを通してインストーラーにする。 アプリを書く
06 再利用
インストーラー1つを、あなたのアプリに向ける
我々はインストーラーを1つ書いた——base installer だ——ここでビルドされるインストーラーはどれも、同じプログラムにあなたの設定を加えたものになる。たとえば install_python_x.exe はそのプログラムで、設定には「Python パッケージ x をインストールする」と書かれている。どのコピーでもコードは完全に同一で、変わるのは設定だけだ。だからこのプログラム自体は、アプリごとに毎回ではなく、一度だけテストし、堅牢化し、署名すればいい。
install_python_requests.exe -> installs the "requests" package
install_python_black.exe -> installs the "black" package
install_node_prettier.exe -> installs the "prettier" package
07 署名
3つの配布方法
ここでの署名が対象とするのはインストーラー——我々が書いた、どのコピーも同一のもの——であって、それがインストールするソフトウェアでは決してない。役割はブラウザ上の署名と同じだ。ブラウザが誰の作で、このコピーが改変されていないことを示すだけで、あなたが訪れるサイトとは何の関係もない。インストール時にあなたに信頼を求めるプログラムは我々のもので、改変されていない。だからそれが見せる画面は信用していい。
モード A
我々がインストーラーに署名する
セキュリティ警告が最も少ない。設定はファイル名に書かれるので、ファイル名を変えれば別のパッケージを指せる——署名は有効なままだ。インストール内容についての宣言では元々ないからだ。
モード B
あなたがインストーラーに署名する
インストーラーにはあなたの名前とアイコンが付き、あなた自身の証明書と、あなた自身の評判を使う。
モード C
誰も署名しない
完全に編集可能。インストールする内容、名前、アイコンをブラウザ上で直接変更できる。ファイルのアップロードは不要。
08 約束
隠しごとはない
どのインストーラーも、誰が署名していようと、何かを変更する前に必ずこう示す——何を、どこからインストールするのか、何をダウンロードするのか、ファイルがどこに置かれるのか、そしてインストーラーファイルに誰が署名したのかを。 その画面——このページの上部にあるもの——は、後から書いた要約ではない。 インストーラー自身の設定ブロックを読み、インストーラーも同じブロックに従う。だからこの先起きることと食い違うことはありえない。 その画面が何を証明でき、何を証明できないかは、別に1ページ使って論じる価値がある。 どの部分が我々の署名によるもので、どれが配布者の主張で、ネットワークのないマシンでインストーラーがそのどちらをどう検証するのか。 あなたは何を、なぜ信頼しているのか