n

Node.jsバージョン管理JavaScriptnpm軽量シンプル

GitHub概要

tj/n

Node version management

リポジトリ:https://github.com/tj/n
スター19,311
ウォッチ203
フォーク756
作成日:2011年1月5日
言語:Shell
ライセンス:MIT License

トピックス

なし

スター履歴

tj/n Star History
データ取得日時: 2025/7/20 02:18

言語バージョン管理ツール

n

概要

nは、TJ Holowaychuk(Express.jsの作者)によって作成されたシンプルで軽量なNode.jsバージョンマネージャーです。最小限のAPIと高速な動作を特徴とし、複雑な設定やシェル統合を必要とせずにNode.jsバージョンを管理できます。nvmよりもシンプルで直感的なインターフェースを提供し、開発者が素早くNode.jsバージョンを切り替えることを可能にします。

詳細

主な特徴

  • 極めてシンプルなAPI: 学習コストの低い最小限のコマンド
  • 高速な操作: 軽量設計による高速なバージョン切り替え
  • グローバルインストール: システム全体でのNode.js管理
  • シェル非依存: .bashrcや.zshrcの変更不要
  • 対話的インターフェース: ビジュアルなバージョン選択UI
  • キャッシュ機能: ダウンロード済みバージョンの再利用
  • クロスプラットフォーム: macOSとLinuxをサポート

アーキテクチャ

nは事前ビルドされたNode.jsバイナリを/usr/local/n/versions/nodeにダウンロード・キャッシュし、/usr/local/binにシンボリックリンクを作成します。グローバルなNode.jsバージョンを管理し、システム全体で共通のバージョンを使用します。

nvmとの比較

  • 簡潔性: より簡潔で直感的なコマンド体系
  • 速度: シェルスクリプトの読み込みが不要で高速起動
  • 管理方式: グローバル管理(nvm: プロジェクト別)
  • npmパッケージ: npmでインストール可能(nvm: シェルスクリプト)
  • アーキテクチャ: よりシンプルな設計

メリット・デメリット

メリット

  • 学習コストが低い: 数分で習得可能なシンプルAPI
  • 高速な起動: シェル設定の読み込み不要
  • 直感的な操作: 対話的なバージョン選択UI
  • 軽量設計: 最小限のシステムリソース使用
  • インストールが簡単: npm経由の標準インストール
  • メンテナンスが容易: 設定ファイルの管理不要
  • 安定性: 枯れた技術による高い安定性

デメリット

  • グローバル管理: プロジェクト別の自動切り替えなし
  • プラットフォーム制限: WindowsネイティブサポートなしでMacOSとLinuxのみ
  • 機能の少なさ: 高度な機能やカスタマイゼーション限定
  • プロジェクト管理: .nvmrcファイルなどの自動読み込み非対応
  • チーム開発: プロジェクト固有の環境管理が困難
  • 権限問題: システムディレクトリへの書き込み権限が必要

参考ページ

書き方の例

インストール

# 既存のNode.jsが必要(npmを使用するため)
npm install -g n

# macOSの場合、Homebrewでもインストール可能
brew install n

# 権限エラーが発生する場合
sudo npm install -g n

# インストール確認
n --version

基本的な使い方

# 利用可能なバージョンの確認と対話的選択
n

# 最新のLTSバージョンをインストール
n lts

# 最新の安定版をインストール
n latest

# 特定のバージョンをインストール
n 18.19.0
n 20.11.0
n v21.6.0

# 最新のメジャーバージョンをインストール
n 18
n 20

バージョンの管理

# インストール済みバージョンの一覧表示
n ls

# 特定のバージョンに切り替え
n 18.19.0

# 対話的にバージョンを選択(上下キーで選択)
n

# インストール済みの最新バージョンを使用
n latest

# 現在のバージョンを確認
node --version

バージョンの削除

# 特定のバージョンを削除
n rm 18.19.0
n - 20.11.0

# 現在使用中以外のすべてのバージョンを削除
n prune

# 特定のバージョン以外をすべて削除
n --latest prune
n --stable prune

高度な使い方

# プリリリースバージョンのインストール
n pre

# 特定のバージョンを一時的に使用
n use 18.19.0 app.js
n use 20.11.0 --version

# バイナリのダウンロードディレクトリを表示
n bin 18.19.0

# 使用可能なリモートバージョンの表示
n list
n ls-remote

# キャッシュディレクトリの表示
n which 18.19.0

環境設定

# nのホームディレクトリを設定(デフォルト: /usr/local/n)
export N_PREFIX=$HOME/.n

# PATHに追加(カスタムプレフィックス使用時)
export PATH=$N_PREFIX/bin:$PATH

# ミラーサーバーの設定
export N_NODE_MIRROR=https://npm.taobao.org/mirrors/node/

# プロキシ設定
export N_NODE_DOWNLOAD_PROXY=http://proxy.company.com:8080

# デバッグモードの有効化
export DEBUG=n

プロジェクトでの活用

# プロジェクトのセットアップスクリプト例
#!/bin/bash
# setup.sh

# 推奨Node.jsバージョンをインストール
echo "Installing Node.js 18.19.0..."
n 18.19.0

# 依存関係のインストール
echo "Installing dependencies..."
npm install

echo "Setup complete!"
echo "Current Node.js version: $(node --version)"

package.jsonでの管理

{
  "name": "my-project",
  "engines": {
    "node": "18.19.0"
  },
  "scripts": {
    "setup": "n $(cat .nvmrc || echo 18.19.0) && npm install",
    "dev": "node app.js",
    "check-node": "node --version"
  }
}

CI/CDでの使用

# GitHub Actions例
name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18.x, 20.x, 21.x]
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Setup Node.js
      run: |
        sudo npm install -g n
        sudo n ${{ matrix.node-version }}
        node --version
        npm --version
    
    - name: Install dependencies
      run: npm ci
    
    - name: Run tests
      run: npm test

Docker統合

# Dockerfile例
FROM node:18-alpine

# nをインストール
RUN npm install -g n

# 特定のNode.jsバージョンを使用
RUN n 18.19.0

# アプリケーションディレクトリの作成
WORKDIR /app

# package.jsonとpackage-lock.jsonをコピー
COPY package*.json ./

# 依存関係のインストール
RUN npm ci --only=production

# アプリケーションのコピー
COPY . .

# ポートの公開
EXPOSE 3000

# アプリケーションの起動
CMD ["node", "app.js"]

nとnvmの併用

# .bashrcまたは.zshrcでの設定例
# nvmとnの環境を分離

# nvm用の設定
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

# n用の設定
export N_PREFIX="$HOME/.n"
export PATH="$N_PREFIX/bin:$PATH"

# 使い分けのエイリアス
alias use-nvm='export PATH="$NVM_DIR/versions/node/$(nvm current)/bin:$PATH"'
alias use-n='export PATH="$N_PREFIX/bin:$PATH"'

トラブルシューティング

# 権限エラーの解決
sudo chown -R $(whoami) /usr/local/n
sudo chown -R $(whoami) /usr/local/bin/node
sudo chown -R $(whoami) /usr/local/bin/npm

# nのキャッシュをクリア
rm -rf /usr/local/n/versions/node/*

# 完全なアンインストール
npm uninstall -g n
sudo rm -rf /usr/local/n
sudo rm /usr/local/bin/node
sudo rm /usr/local/bin/npm

# 現在のNode.jsがnで管理されているか確認
which node
ls -la $(which node)

# デバッグ情報の表示
DEBUG=n n 18.19.0

ベストプラクティス

# プロジェクト開始時のセットアップ
echo "18.19.0" > .node-version
n $(cat .node-version)

# チーム開発でのREADME記述例
# ## Node.js Setup
# This project requires Node.js 18.19.0
# 
# Install using n:
# ```
# npm install -g n
# n 18.19.0
# ```

# 本番環境デプロイ前のチェック
node --version  # 期待するバージョンか確認
npm --version   # 対応するnpmバージョンか確認
npm audit       # セキュリティ監査

自動化スクリプト例

#!/bin/bash
# auto-node-setup.sh
# プロジェクトディレクトリでのNode.js自動セットアップ

if [ -f ".node-version" ]; then
    NODE_VERSION=$(cat .node-version)
    echo "Setting up Node.js $NODE_VERSION..."
    n $NODE_VERSION
elif [ -f ".nvmrc" ]; then
    NODE_VERSION=$(cat .nvmrc)
    echo "Found .nvmrc, setting up Node.js $NODE_VERSION..."
    n $NODE_VERSION
else
    echo "No version file found, using latest LTS..."
    n lts
fi

echo "Current Node.js version: $(node --version)"