こんにちは、ナナオです。

今回は巷で話題のmiseを使っていこうと思います。

Home | mise-en-place

GitHub - jdx/mise: dev tools, env vars, task runner

miseとは

miseはThe front-end to your dev envという公式の説明がありますが、要は開発環境のための主要ツールになることを目指して作られたツールです。

できることは主に以下の三つです。

  • 開発ツールの管理
  • 環境変数の管理
  • タスクの管理

開発ツールの管理とは、node.js、Python、Terraformなどのバージョン管理を行えるという意味です。

環境変数の管理はそのままの意味で、環境変数の管理を行えます。

タスクの管理とは、例えばビルドやテストといった作業の管理を行えます。

miseのインストール

brewが入っていれば以下のコマンドで入ります。

brew install mise

miseでインストールした開発ツールを使用できるようにアクティベートしておきましょう。

.zshrcに以下のコマンドを追加します。

# miseのアクティベート
eval "$(mise activate zsh)"

これで準備が整いました。

タスクを定義する

普段よく使っているブログの公開コマンドを定義します。

[tasks.blog-deploy]
description = 'ブログのビルドおよび公開'
run = [
    'hugo',
    'hugo deploy',
]
dir = "/mnt/c/Users/Nanao/Project/tools/hugo-blog"

実行するとブログの公開ができました。楽ちん~

anyenvから移行する

ということで本題です。anyenvは遅いし移行しようと思います。

長い間!!!!!!!クソお世話になりました!!!!!(ドン)

anyenvのアンインストール

まずanyenvでインストールしている~~envを削除します。

anyenv versionsでインストールされている環境を確認します。

❯ anyenv versions
goenv:
* 1.20.6 (set by /home/nanao/.anyenv/envs/goenv/version)
  1.22.9
  1.23.3
nodenv:
  system
* 22.7.0 (set by /home/nanao/.anyenv/envs/nodenv/version)
pyenv:
  system
  3.12.0
* 3.12.1 (set by /home/nanao/.anyenv/envs/pyenv/version)
  3.12.2
  3.12.3
  3.12.4
  3.12.5
  3.13.2
rbenv:
* 3.2.2 (set by /home/nanao/.anyenv/envs/rbenv/version)

結構いろいろインストールしていました。

これらを削除します。

❯ anyenv uninstall goenv
anyenv: remove /home/nanao/.anyenv/envs/goenv? yes

~ 7s
❯ anyenv uninstall pyenv
anyenv: remove /home/nanao/.anyenv/envs/pyenv? yes

~
❯ anyenv uninstall nodenv
anyenv: remove /home/nanao/.anyenv/envs/nodenv? yes

~
❯ anyenv uninstall rbenv
anyenv: remove /home/nanao/.anyenv/envs/rbenv? yes

再度anyenv versionsを確認してみます。

❯ anyenv versions

何も出力されなくなりました。

次に自動で作成されていたanyenv関連のファイルを削除します。

rm -rf ~/.anyenv
rm -rf .config/anyenv

次にanyenv自体を削除しましょう。

私の環境ではbrewでインストールしていたので、以下のコマンドでアンインストールします。

brew uninstall anyenv

anyenvコマンドが使えなくなっているか確認します。

❯ anyenv
zsh: command not found: anyenv

無事アンインストールできたようです。

.zshrcに定義したanyenvのアクティベートに使用していたコマンドも削除します。

# 以下の行を削除
export PATH=${PATH}:${HOME}/.anyenv/bin
eval "$(anyenv init -)"

shellを再起動して問題なければアンインストール作業は完了です!

exec $SHELL -l

miseによるバージョン管理

miseによるバージョン管理に置き換えます。

まずはGo、お前だ

ということで、以下のようなディレクトリ構成のGoプロジェクトで実験します。

❯ ls -al
total 36
drwxr-xr-x  2 nanao nanao 4096 Jan 15 00:07 .
drwxr-xr-x 16 nanao nanao 4096 Dec 23 23:35 ..
-rw-r--r--  1 nanao nanao    5 Jan 15 00:07 .go-version
-rw-r--r--  1 nanao nanao  878 Nov 20  2024 free_1.go
-rw-r--r--  1 nanao nanao 1373 Nov 17  2024 go.mod
-rw-r--r--  1 nanao nanao 7653 Nov 17  2024 go.sum
-rw-r--r--  1 nanao nanao  651 Nov 17  2024 hello.go
-rw-r--r--  1 nanao nanao  395 Nov 16  2024 typical90_001.go

.go-versionファイルは以下のように定義されています。

❯ cat .go-version
1.20

このGoプロジェクトではバージョン1.20を使用するようです。

早速ダウンロードしていきたいんですが、せっかくならmiseに自動でバージョンを判別させたいですよね。

以下のコマンドを実行します。

❯ mise install
mise all tools are installed

ただ、このコマンドでは何も実行されません。

実行速度の観点から、通常は.~-verisonファイルなどが参照できないようになっているためです。

Configuration | mise-en-place

idiomatic versions default disabled · jdx/mise · Discussion #4345 · GitHub

以下のコマンドを実行して.go-versionファイルを認識できるようにしてあげましょう。

mise settings add idiomatic_version_file_enable_tools go

インストールします。

❯ mise install

❯ which go
/home/nanao/.local/share/mise/installs/go/1.20/bin/go

ということで、.go-versionから指定したバージョンのgoをインストールすることができました!

感想

mise、とにかくはやい。

今後miseを活用してどんどん開発していきたいですね。

参考

Discord

nodeの環境構築を簡単に!miseとは - なんでも書く

mise activateとshimsの違い - なんでも書く

https://zenn.dev/_hyme_/articles/2023-01-migrate-to-mise