AI

副業開発者のターミナル環境2026【mise + direnv + starship + atuin で複数プロジェクトを完全自動化】

副業開発者のターミナル環境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

次に、misedirenvの設定ファイルを作成します。

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 -vecho $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のみで十分です。misemise.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でプロジェクト環境を自動化

まず、misedirenvを導入し、プロジェクト固有の環境管理を自動化します。

  • 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で履歴の同期を設定します。

これにより、過去のコマンドを素早く見つけ出し、開発速度を向上させることができます。

これらのツールを組み合わせることで、あなたの開発環境は未来の標準へと進化します。複数のプロジェクトやマシンを跨いだ開発も、もはや苦ではありません。

関連ページ

参考文献

広告

-AI