副業開発者のターミナル環境2026【mise + direnv + starship + atuin で複数プロジェクトを完全自動化】
副業開発者のあなたは、こんな悩みを抱えていませんか。本業と副業、複数のプロジェクトを掛け持ちする中で、開発環境の管理は常に頭を悩ませる問題です。
プロジェクトAではNode.js v18、プロジェクトBではv20が必要です。さらに、プロジェクトCではPythonの特定のバージョンを使います。環境変数の設定もプロジェクトごとに異なり、切り替えは手動で行うしかありません。
本業のPCと副業のPCで環境が違うこともあります。設定の差異から、思いがけないトラブルに遭遇するかもしれません。手動でのバージョン切り替えや環境変数設定は、時間と集中力を奪います。
このワークフローは、これらの悩みを解決します。ディレクトリを移動するだけで、言語バージョンや環境変数が自動で切り替わります。本業PCと副業PCの環境差異もゼロになります。複雑な環境管理から解放され、開発に集中できる環境を手に入れましょう。
全体像:自動化を支える4つのツール
私たちが目指すのは、究極の自動化された開発環境です。この目標を達成するために、以下の4つのツールを連携させます。それぞれの役割と連携方法を理解しましょう。
- mise: 開発ツールのバージョン管理と、プロジェクト固有の環境変数を定義します。Node.jsやPythonなど、様々な言語のバージョンをプロジェクトごとに自動で切り替えます。
.envファイルからの読み込みも可能です。 - direnv: ディレクトリ移動時にmiseをトリガーします。プロジェクトディレクトリに入ると、自動的にmiseが設定した環境を読み込みます。ディレクトリから出ると、環境は元に戻ります。
- starship: シェルのプロンプトをカスタマイズします。現在のディレクトリで有効な言語バージョンやGitブランチなど、重要な情報を一目で確認できます。環境の自動切り替えを視覚的にサポートします。
- atuin: シェルのコマンド履歴を強化します。SQLiteデータベースに履歴を保存し、プロジェクトを跨いだ強力な検索機能を提供します。終了コードや作業ディレクトリなどの詳細情報も記録します。
これらのツールは密接に連携し、あなたの開発体験を劇的に向上させます。
セットアップ手順
それでは、各ツールを順番にセットアップしていきましょう。以下の手順はmacOSとLinuxを想定しています。コマンドはコピペで実行可能です。
1. miseのインストール
まず、開発ツールのバージョン管理を担うmiseを導入します。
macOSの場合(Homebrew)
brew install mise
Linuxの場合(curl)
curl https://mise.run | sh
インストール後、miseをシェルにフックさせます。これにより、miseがシェルの起動時に有効になります。
シェルへのフック設定(zshの場合)
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
source ~/.zshrc
シェルへのフック設定(bashの場合)
echo 'eval "$(mise activate bash)"' >> ~/.bashrc
source ~/.bashrc
シェルへのフック設定(fishの場合)
mise activate fish | source
mise --versionを実行し、バージョンが表示されれば成功です。
mise --version
2. direnvのインストール
次に、ディレクトリ移動に応じて環境変数を自動で切り替えるdirenvを導入します。
macOSの場合(Homebrew)
brew install direnv
Linuxの場合(パッケージマネージャー)
多くのLinuxディストリビューションでdirenvはパッケージとして提供されています。
# Debian/Ubuntuの場合
sudo apt install direnv
# Fedoraの場合
sudo dnf install direnv
# Arch Linuxの場合
sudo pacman -S direnv
direnvをシェルにフックさせます。
シェルへのフック設定(zshの場合)
echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
source ~/.zshrc
シェルへのフック設定(bashの場合)
echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
source ~/.bashrc
シェルへのフック設定(fishの場合)
direnv hook fish | source
direnv statusを実行し、direnvが有効になっていることを確認します。
direnv status
3. starshipのインストール
プロンプトをカスタマイズし、環境情報を視覚的に表示するstarshipを導入します。
macOSの場合(Homebrew)
brew install starship
Linuxの場合(curl)
curl -sS https://starship.rs/install.sh | sh
starshipをシェルにフックさせます。
シェルへのフック設定(zshの場合)
echo 'eval "$(starship init zsh)"' >> ~/.zshrc
source ~/.zshrc
シェルへのフック設定(bashの場合)
echo 'eval "$(starship init bash)"' >> ~/.bashrc
source ~/.bashrc
シェルへのフック設定(fishの場合)
starship init fish | source
新しいシェルを開くと、プロンプトがstarshipによって変更されているはずです。
4. atuinのインストール
最後に、強力なシェル履歴管理と検索機能を提供するatuinを導入します。
macOSの場合(Homebrew)
brew install atuin
Linuxの場合(パッケージマネージャー)
# Debian/Ubuntuの場合
sudo apt install atuin
# Fedoraの場合
sudo dnf install atuin
# Arch Linuxの場合
sudo pacman -S atuin
atuinをシェルにフックさせます。
シェルへのフック設定(zshの場合)
echo 'eval "$(atuin init zsh)"' >> ~/.zshrc
source ~/.zshrc
シェルへのフック設定(bashの場合)
echo 'eval "$(atuin init bash)"' >> ~/.bashrc
source ~/.bashrc
シェルへのフック設定(fishの場合)
atuin init fish | source
atuinの初期設定を行います。これにより、履歴がデータベースに保存され始めます。
atuin import auto
atuin login # オプション:履歴の同期機能を使いたい場合
これで、すべてのツールのセットアップが完了しました。
実際の使い方
ここからは、セットアップしたツールをどのように活用するかを具体的に見ていきましょう。
シナリオ1: 新規プロジェクトの開始
新しいNode.jsプロジェクトを始める場合を想定します。Node.js v20と、特定の環境変数を設定します。
まず、プロジェクトディレクトリを作成し、移動します。
mkdir my-new-project
cd my-new-project
次に、miseとdirenvの設定ファイルを作成します。
mise.tomlファイルを作成し、Node.jsのバージョンを指定します。
# my-new-project/mise.toml
[tools]
nodejs = "20"
[env]
MY_PROJECT_ENV = "development"
mise.tomlはプロジェクトのルートに配置します。これにより、miseがNode.js v20をインストールし、MY_PROJECT_ENV環境変数を設定します。
次に、.envrcファイルを作成します。このファイルはdirenvが読み込みます。
# my-new-project/.envrc
use mise
.envrcは、direnvに対してmiseの環境を読み込むよう指示します。
ディレクトリを移動すると、direnvが.envrcを検出します。初回は承認が必要です。
direnv allow .
direnv allow .を実行すると、miseがNode.js v20をインストールし、環境変数を設定します。
node -vやecho $MY_PROJECT_ENVで確認してみましょう。
node -v
# v20.x.x と表示される
echo $MY_PROJECT_ENV
# development と表示される
starshipのプロンプトにも、Node.jsのバージョンが表示されているはずです。
シナリオ2: 既存プロジェクトへの参加
チームの既存プロジェクトに参加する場合を想定します。プロジェクトにはすでにmise.tomlと.envrcが用意されています。
プロジェクトのリポジトリをクローンします。
git clone https://github.com/example/existing-project.git
cd existing-project
ディレクトリに移動すると、direnvが.envrcを検出します。
direnv allow .
このコマンドを実行すると、miseがプロジェクトに必要なツールを自動でインストールし、環境変数を設定します。例えば、Node.js v18とPython 3.10が必要な場合、これらが自動でセットアップされます。
node -v
# v18.x.x と表示される
python --version
# Python 3.10.x と表示される
これで、すぐに開発を開始できます。手動でのバージョン切り替えは不要です。
シナリオ3: 複数のプロジェクトを行き来する
複数のプロジェクトを並行して開発する場合、環境の切り替えは頻繁に発生します。
プロジェクトA(Node.js v20)とプロジェクトB(Node.js v18)があるとします。
まず、プロジェクトAのディレクトリに移動します。
cd ~/projects/my-new-project # シナリオ1で作成したプロジェクト
プロンプトにNode.js v20が表示され、node -vもv20を示します。
次に、プロジェクトBのディレクトリに移動します。
cd ~/projects/existing-project # シナリオ2でクローンしたプロジェクト
ディレクトリ移動の瞬間、direnvが環境を切り替えます。プロンプトはNode.js v18に変わります。node -vもv18を示します。
node -v
# v18.x.x と表示される
このように、ディレクトリを移動するだけで、それぞれのプロジェクトに合った環境が自動で適用されます。
また、atuinを使えば、プロジェクトを跨いだコマンド履歴検索が可能です。例えば、特定のコマンドを過去にどこで実行したか検索できます。
atuin search make # 過去の全ての `make` コマンドを検索
Ctrl-r(または↑キー)を押すと、フルスクリーンで履歴を検索できます。これは、開発中のコマンドを素早く見つけるのに非常に役立ちます。
カスタマイズ例
各ツールの設定ファイルを調整し、あなたの開発環境をさらに最適化しましょう。
1. miseの設定ファイル (mise.toml)
mise.tomlはプロジェクトのルートディレクトリに配置します。
# プロジェクトルート/mise.toml
[tools]
# Node.jsの特定バージョンを指定
nodejs = "20.11.0"
# Pythonの特定バージョンを指定
python = "3.10.12"
# Go言語の最新安定版を指定
go = "latest"
# Terraformの最新安定版を指定
terraform = "latest"
[env]
# プロジェクト固有の環境変数を定義
DATABASE_URL = "postgres://user:password@host:port/dbname"
API_KEY = "your_api_key_here"
# .envファイルからの環境変数読み込みを有効にする
DOTENV_PATH = ".env"
これにより、Node.js、Python、Go、Terraformが自動でインストール・設定されます。さらに、DATABASE_URLなどの環境変数も自動で読み込まれます。.envファイルも活用し、機密情報を管理できます。
2. direnvの設定ファイル (.envrc)
.envrcもプロジェクトのルートディレクトリに配置します。
# プロジェクトルート/.envrc
# miseの環境を読み込む
use mise
# .envrc内でさらに環境変数を定義することも可能
# export MY_CUSTOM_VAR="custom_value"
通常はuse miseのみで十分です。miseがmise.tomlや.envファイルの内容を処理します。
3. starshipの設定ファイル (~/.config/starship.toml)
starshipの設定ファイルは、ユーザーのホームディレクトリ配下に配置します。
# ~/.config/starship.toml
# プロンプトの表示順序を定義
format = """$directory$git_branch$nodejs$python$cmd_duration$character"""
# ディレクトリ表示モジュール
[directory]
truncation_length = 3
truncate_to_repo = true
format = "[$path]($style) "
# Gitブランチ表示モジュール
[git_branch]
symbol = "🌱 "
format = "on [$symbol$branch]($style) "
# Node.jsバージョン表示モジュール
[nodejs]
symbol = "⬢ "
format = "via [$symbol($version)]($style) "
# miseによって管理されているNode.jsバージョンを優先的に表示
detect_extensions = ["js", "mjs", "cjs", "ts", "mts", "cts", "json"]
# Pythonバージョン表示モジュール
[python]
symbol = "🐍 "
format = "via [$symbol($version)]($style) "
# miseによって管理されているPythonバージョンを優先的に表示
detect_extensions = ["py"]
# コマンド実行時間表示モジュール
[cmd_duration]
min_time = 1_000 # 1秒以上かかったコマンドのみ表示
format = " took [$duration]($style) "
# 最後の文字($や#など)
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"
この設定例では、プロンプトに現在のディレクトリ、Gitブランチ、Node.jsとPythonのバージョン、コマンド実行時間が表示されます。miseが切り替えたバージョンが自動的にプロンプトに反映されます。
4. atuinの設定ファイル (~/.config/atuin/config.toml)
atuinの設定ファイルも、ユーザーのホームディレクトリ配下に配置します。
# ~/.config/atuin/config.toml
# 同期機能の有効化(atuin login済みの場合)
sync_address = "https://api.atuin.sh" # 公式サーバー
auto_sync = true
# 履歴表示の書式設定
history_format = "{timestamp} {duration} {command}"
# 検索UIのキーバインド設定
# ctrl-r で検索を起動
key_bindings = { search = "control-r" }
# 検索結果の表示件数
max_history_entries = 10000
# 検索時のフィルタリングモードを切り替えるキー
# ctrl-s でセッション/ディレクトリ/グローバルを切り替え
toggle_filter_mode_key = "control-s"
この設定により、履歴が自動で同期され、Ctrl-rで強力な検索UIが利用可能になります。history_formatで表示形式をカスタマイズできます。
今日からできる実行プラン
この強力なワークフローを、今日からあなたの開発環境に導入しましょう。以下の3ステップで進めます。
ステップ1: miseとdirenvでプロジェクト環境を自動化
まず、miseとdirenvを導入し、プロジェクト固有の環境管理を自動化します。
miseをインストールし、シェルにフック設定します。direnvをインストールし、シェルにフック設定します。- 既存または新規プロジェクトのディレクトリで
mise.tomlと.envrcを作成します。 direnv allow .を実行し、自動切り替えを体験してください。
このステップだけでも、環境管理の負担は大幅に軽減されます。
ステップ2: starshipでプロンプトを視覚化
次に、starshipを導入し、現在の環境を一目で把握できるようにします。
starshipをインストールし、シェルにフック設定します。~/.config/starship.tomlをカスタマイズし、プロンプトに表示したい情報を設定します。- プロジェクトディレクトリを移動し、プロンプトが言語バージョンや環境に応じて変化することを確認します。
視覚的なフィードバックは、環境が正しく切り替わっていることを確認する上で重要です。
ステップ3: atuinでシェル履歴を強化
最後に、atuinを導入し、コマンド履歴の検索と管理を効率化します。
atuinをインストールし、シェルにフック設定します。atuin import autoで既存の履歴をインポートします。Ctrl-rを押して、強力な履歴検索UIを試してみてください。- 必要であれば
atuin loginで履歴の同期を設定します。
これにより、過去のコマンドを素早く見つけ出し、開発速度を向上させることができます。
これらのツールを組み合わせることで、あなたの開発環境は未来の標準へと進化します。複数のプロジェクトやマシンを跨いだ開発も、もはや苦ではありません。
関連ページ
参考文献
- mise-en-place Documentation
- direnv Documentation
- starship.rs Documentation
- Atuin Documentation
- The Twelve-Factor App