Node.jsでプロジェクトルートのディレクトリを取得する方法

Node.jsでプロジェクトのルートディレクトリを取得する方法はいくつかありますが、一般的な手法を解説いたします。
__dirname
の利用
__dirname
は、スクリプトが配置されているディレクトリの絶対パスを返します。
しかし、プロジェクトのルートディレクトリを取得するには、スクリプトの場所によっては適切でない場合があります。
javascriptconsole.log(__dirname);
この方法では、実行するスクリプトのディレクトリが返るため、プロジェクトルートを確実に取得するには、
追加の処理が必要です。
process.cwd()
を利用する方法
process.cwd()
を使用すると、現在の作業ディレクトリ(カレントワーキングディレクトリ)を取得できます。
通常、プロジェクトのルートで node
コマンドを実行するため、こちらの方法が適しています。
javascriptconsole.log(process.cwd());
この方法では、Node.js を実行した場所がルートディレクトリとみなされるため、
一般的なプロジェクト構成では process.cwd()
のほうが __dirname
より便利です。
import.meta.url
を使う方法(ES Module)
ES Module (.mjs
ファイルや package.json
に "type": "module"
を設定した場合) では、 __dirname
は利用できません。
そのため、 import.meta.url
を利用し、プロジェクトのルートを求める方法があります。
javascriptimport { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
console.log(__dirname);
ただし、これはスクリプトの配置されたディレクトリを取得する方法であり、
プロジェクトルートを求めるには、さらに process.cwd()
を利用するほうが適しています。
find-up
を利用したルートディレクトリの特定
より確実にプロジェクトのルートを特定したい場合は、 find-up
パッケージを使用すると便利です。
例えば、プロジェクトルートには通常 package.json
があるため、それを基準に探索できます。
find-up
のインストール
shyarn add find-up
find-up
を利用したプロジェクトルートの取得
javascriptimport { fileURLToPath } from 'url';
import { dirname } from 'path';
import findUp from 'find-up';
const projectRoot = await findUp('package.json').then(file => file ? dirname(file) : null);
console.log(projectRoot);
この方法では、 package.json
を基準にプロジェクトルートを見つけられるため、
より正確にルートディレクトリを取得できます。
まとめ
方法 | 特徴 |
---|---|
__dirname | スクリプトが配置されているディレクトリを取得 |
process.cwd() | Node.js を実行したディレクトリ(一般的にはプロジェクトルート)を取得 |
import.meta.url | ES Module 環境でスクリプトディレクトリを取得 |
find-up | package.json などを基準にプロジェクトルートを検索 |
一般的には process.cwd()
を使うのが簡単で便利ですが、
プロジェクトの構成によって find-up
を用いるとより確実にルートを特定できます。
適切な方法を選択し、Node.js のプロジェクト管理をより効率的に進めてください。
- review
もう朝起きるのが辛くない!『スタンフォード式 最高の睡眠』西野精治著で学んだ、たった 90 分で人生が変わる睡眠革命
- review
もう「なんとなく」で決めない!『解像度を上げる』馬田隆明著で身につけた、曖昧思考を一瞬で明晰にする技術
- review
もう疲れ知らず!『最高の体調』鈴木祐著で手に入れた、一生モノの健康習慣術
- review
人生が激変!『苦しかったときの話をしようか』森岡毅著で発見した、本当に幸せなキャリアの築き方
- review
もう「何言ってるの?」とは言わせない!『バナナの魅力を 100 文字で伝えてください』柿内尚文著 で今日からあなたも伝え方の達人!
- review
もう時間に追われない!『エッセンシャル思考』グレッグ・マキューンで本当に重要なことを見抜く!