開発機のセットアップをmise.tomlにまとめたい
新しい開発機をセットアップするたびに、ツールのインストールや設定ファイルの配置を手作業でやり直すのは手間がかかる。mise bootstrapは、mise.tomlの[bootstrap.*]セクションに書いた内容を基に、開発機のセットアップを一括で実行するコマンドである。
このコマンドは検証用のDockerコンテナで実際に動作を確認した内容である。[bootstrap.*]にはユーザー作成やfirewall設定など特権操作を伴う項目もあるため、本記事では比較的安全な[tools]と[bootstrap.files]を例に基本的な使い方を解説する。
mise bootstrapの基本
mise.tomlに[tools]と[bootstrap.files]を定義しておく。
[tools]
jq = "1.7.1"
[bootstrap.files]
"/tmp/hello.txt" = { content = "hello from mise bootstrap\n" }
mise bootstrapを実行すると、ファイルの配置とツールのインストールがまとめて実行される。
$ mise bootstrap -y
mise bootstrap: system files
mise system files: applied 1 change(s)
mise bootstrap: tools
mise jq@1.7.1 [1/2] install
mise jq@1.7.1 ✓ installed
mise bootstrapは、ファイル配置・パッケージインストール・タスク実行など多数のステップから成り、それぞれ対応する[bootstrap.*]セクションが定義されていれば実行される。今回の例のように[bootstrap.files]と[tools]だけを定義した場合は、その2ステップだけが実行される。
何度実行しても安全(冪等性)
mise bootstrapの各ステップは、既に目的の状態であれば何もしない冪等な設計になっている。同じ内容で再実行すると、何も変更されないことが分かる。
$ mise bootstrap -y
mise bootstrap: system files
mise system files: already converged
mise bootstrap: tools
mise all tools are installed
ファイルの状態はalready converged(既に収束済み)、ツールの状態はall tools are installed(全てインストール済み)と表示され、実際には何も変更されない。開発機の再セットアップ時や、CI上で繰り返し実行する場合にも安心して使える。
mise bootstrap statusで現在の状態を確認する
mise bootstrap status(エイリアスls)で、各[bootstrap.*]項目が現在どういう状態にあるかを一覧できる。
$ mise bootstrap status
file /tmp/hello.txt file mode 0644 uid 0 gid 0 unchanged
tools jq@1.7.1 1.7.1 installed
–dry-runで事前に変更内容を確認する
--dry-runを付けると、実際には何も変更せず、実行した場合に何が起こるかだけを表示できる。
$ mise bootstrap --dry-run
mise bootstrap: system files
would write file /tmp/hello.txt
mise bootstrap: tools
mise jq@1.7.1 ⇢ would install
初めてmise bootstrapを実行する前や、mise.tomlを変更した後の影響範囲を確認したい場合に使える。
–only/–skipで特定のステップだけ実行する
--onlyを付けると、指定したステップだけを実行する。
$ mise bootstrap --only tools -y
mise bootstrap: tools
mise jq@1.7.1 [1/2] install
mise jq@1.7.1 ✓ installed
--only toolsを指定した場合、[bootstrap.files]のファイル配置は実行されない。逆に--skipを付けると、指定したステップだけを除外して残りを実行する。
$ mise bootstrap --skip tools -y
mise bootstrap: system files
mise system files: applied 1 change(s)
--onlyと--skipは同時に指定できず、どちらか一方を選ぶ。カンマ区切りや複数回の指定で、複数のステップをまとめて対象にできる。
