n
GitHub概要
スター19,311
ウォッチ203
フォーク756
作成日:2011年1月5日
言語:Shell
ライセンス:MIT License
トピックス
なし
スター履歴
データ取得日時: 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)"