zsh起動時のxcodebuild実行を回避するNVM遅延読み込みの実装
問題
.zshrcに以下のような初期化コードを記述することで,NVM(Node Version Manager)を設定できる
しかし,この設定方法ではシェル起動時にxcodebuildが実行されるため、起動速度が著しく低下する
code:bash
export NVM_DIR="$HOME/.nvm"
-s "$NVM_DIR/nvm.sh" && \. "$NVM_DIR/nvm.sh"
-s "$NVM_DIR/bash_completion" && \. "$NVM_DIR/bash_completion"
解決策
NVMの遅延読み込み(Lazy Loading)を実装する
実装方針
1. シェル起動時にはNVMを読み込まない
2. NVM関連コマンド(nvm, node, npm, claude)の初回実行時に自動的にNVMを初期化
3. 2回目以降は通常のコマンドとして動作
実装内容
各コマンドに対してラッパー関数を定義し,初回実行時のみNVMを読み込む仕組みを構築:
code:bash
# 共通の読み込み関数
_load_nvm() {
-s "$NVM_DIR/nvm.sh" && \. "$NVM_DIR/nvm.sh"
-s "$NVM_DIR/bash_completion" && \. "$NVM_DIR/bash_completion"
}
# 各コマンドのラッパー(例:node)
node() {
unset -f node # ラッパー関数を削除
_load_nvm # NVMを読み込み
node "$@" # 本来のコマンドを実行
}
効果
起動速度の改善: シェル起動時のxcodebuild実行を回避
透過的な動作: ユーザーは通常通りコマンドを使用可能
必要時のみ初期化: NVMを使用しない場合は一切のオーバーヘッドなし
使用方法
1. 上記コードを~/.zsh/nvm-lazy-load.zshとして保存
2. .zshrcから以下のように読み込み:
code:bash
-f ~/.zsh/nvm-lazy-load.zsh && source ~/.zsh/nvm-lazy-load.zsh
実装例
code:nvm-lazy-load.zsh
# ================================================================
# NVM 遅延読み込み設定
# ================================================================
#
# 目的: シェル起動時のxcodebuild実行を回避し、起動速度を向上させる
# 仕組み: 各コマンドが初回実行される際にnvmを読み込む
# 対象: nvm, node, npm, claude (Claude Codeもnvmで管理されているため)
#
# 使用方法:
# .zshrcから以下のように読み込む:
# -f ~/.zsh/nvm-lazy-load.zsh && source ~/.zsh/nvm-lazy-load.zsh
# NVMディレクトリの設定
export NVM_DIR="$HOME/.nvm"
# nvm読み込み関数
# nvmの実際の初期化処理を行う共通関数
_load_nvm() {
-s "$NVM_DIR/nvm.sh" && \. "$NVM_DIR/nvm.sh" # nvmメイン機能を読み込み
-s "$NVM_DIR/bash_completion" && \. "$NVM_DIR/bash_completion" # bash補完機能を読み込み
}
# nvmコマンドのラッパー関数
# 初回実行時にnvmを読み込み、以降は通常のnvmコマンドとして動作
nvm() {
unset -f nvm # この関数を削除
_load_nvm # nvmを読み込み
nvm "$@" # 本来のnvmコマンドを実行
}
# nodeコマンドのラッパー関数
# 初回実行時にnvmを読み込み、以降は通常のnodeコマンドとして動作
node() {
unset -f node # この関数を削除
_load_nvm # nvmを読み込み
node "$@" # 本来のnodeコマンドを実行
}
# npmコマンドのラッパー関数
# 初回実行時にnvmを読み込み、以降は通常のnpmコマンドとして動作
npm() {
unset -f npm # この関数を削除
_load_nvm # nvmを読み込み
npm "$@" # 本来のnpmコマンドを実行
}
# claudeコマンドのラッパー関数
# Claude Codeもnvmで管理されているため、初回実行時にnvmを読み込み
claude() {
unset -f claude # この関数を削除
_load_nvm # nvmを読み込み
claude "$@" # 本来のclaudeコマンドを実行
}
# 他のnvm管理ツールがある場合は、同様の関数を追加可能
# 例: yarn, npx, etc.
ーーー
2025/7/8 15:49
original:/tomiokario-close/zsh起動時のxcodebuild実行を回避するNVM遅延読み込みの実装