📘

miseを使ってzsh環境を整えて、ついでにチートシートを仕込む

に公開

はじめに

miseというツールが面白そうだと知ったきっかけは、この記事でした:dotfiles管理、miseに全部任せてみた
これを見て、自分の環境にもmiseを入れて、ついでにzsh環境も手入れしました。その記録です。

miseのドキュメント

手入れの方針

  • 環境変数はzshのまま
    • ディレクトリ毎に設定したくなったら、今後その部分だけ分離する
  • バージョン管理
    • node, deno, python はmiseに移動
    • rustはまだよくわかっていないので、rustupのままにする
  • タスクランナーもmiseに移動
    • 今まではRakefileでやってるのを、miseに移動する
    • ついでにチートシートも作成してみる

miseでバージョン管理

node(fnm)、deno(dvm)、python(pyenv)

これらはhomebrewからも削除して、miseに寄せた

# ========================================
# ツールのバージョン管理
# mise ls deno
# mise use -g deno@2.6
# mise use deno@x.x
# ========================================
[tools]
deno = "2.6"
node = "24.13"
python = "3.12"

rust(rustup, cargo)

これらはまだよくわかっていないので、現状のままとした

miseでチートシートを作る

今回追加したmiseや最近使ってるjj、よく忘れるgitなどのチートシートを仕込んでみた。
チートシートの内容はClaude Codeで生成しました。

設定方法

タスク定義を別ファイルに分離する:

~/.config/mise/config.toml
# ========================================
# グローバルタスク
# ========================================
[task_config]
includes = ["cheat/tasks.toml"]

チートシート用のタスクを定義:

~/.config/mise/cheat/tasks.toml
[cheat-mise]
description = "チートシート(mise)"
run = "cat ~/.config/mise/cheat/mise.txt"

[cheat-jj]
description = "チートシート(jj)"
run = "cat ~/.config/mise/cheat/jj.txt"

[cheat-git]
description = "チートシート(git)"
run = "cat ~/.config/mise/cheat/git.txt"

使い方

% mise task
Name         Description
cheat-git    チートシート(git)
cheat-jj     チートシート(jj)
cheat-mise   チートシート(mise)
...
%
% mise r cheat-jj
[cheat-jj] $ cat ~/.config/mise/cheat/jj.txt
=== jj (Jujutsu) チートシート ===

# リポジトリ
jj init                        新規作成
jj git clone <url>             Gitリポジトリをクローン
jj git init --colocate         既存Gitリポジトリでjj有効化

# 基本操作
jj status                      状態確認(jj st)
jj diff                        差分表示
jj log                         履歴表示
...

ただ、チートシートを見るcliコマンドはすでにありそうなので、そっちに移行するかもしれません。

zsh 設定を XDG 準拠にする

miseのバイナリファイルやグローバル設定は、~/.local/や ~/.config/ に配置されています。
これらのディレクトリ指定は、XDG Base Directory という仕様で決められてるもののようです。

- XDG_CONFIG_HOME
  - ユーザー個別の設定が書き込まれるディレクトリ (/etc と類似)。
  - デフォルトは $HOME/.config
- XDG_CACHE_HOME
  - ユーザー個別の重要でない (キャッシュ) データが書き込まれるディレクトリ (/var/cache と類似)。
  - デフォルトは $HOME/.cache です。
- XDG_DATA_HOME
  - ユーザー個別のデータファイルが書き込まれるディレクトリ (/usr/share と類似)。
  - デフォルトは $HOME/.local/share です。
- XDG_STATE_HOME
  - ユーザー個別の状態ファイルが書き込まれるディレクトリ (/var/lib と類似)。
  - デフォルトは $HOME/.local/state です。

この~/.config/ディレクトリはjjやzed、raycastといった、最近のプロダクトの設定が入ってました。

~
% ls ~/.config
configstore	github-copilot	mise		tod0
gh		iterm2		raycast		zed
git		jj		swi-prolog
~
%

せっかくなので、zshの設定ファイルもこれに合わせて~/.config/zsh/に配置しました。

% tree ~/.config/zsh
zsh
├── 00_env.zsh
├── 10_zinit.zsh
├── 20_compinit.zsh
├── 30_fzf-tab.zsh
├── 40_fzf.zsh
├── 50_date-insert.zsh
├── 50_kiro.zsh
├── 50_mise.zsh
├── 50_obsidian-mcp-server.zsh
├── 50_rust.zsh
├── 60_prompt.zsh
├── 90_secret.local.zsh
├── 90_secret.zsh
├── README.md
└── zshrc.local

1 directory, 15 files
~/.config

~/.zshrcは、~/.config/zsh/zshrc.local にシンボリックリンクしています。

% ls -la ~/.zshrc
lrwxr-xr-x@ 1 tak  staff  34  1 25 15:26 /Users/tak/.zshrc -> /Users/tak/.config/zsh/zshrc.local
~
% cat ~/.config/zsh/zshrc.local
setopt extended_glob
for config_file in $HOME/.config/zsh/*.zsh(.N:on); do
  source $config_file
done
~
%

おわりに

手元の環境の手入れは楽しいです。
バージョン管理がmiseだけでできれば御の字です。
思いつきでmiseの中でのチートシート管理もやってみたのですが、これはどうなるかはこれからの話です。

Discussion