Node.jsでファイルを読み込む3つの方法!__dirnameとrequire()を使いこなそう!
Node.jsにおける__dirnameと./の違い
__dirname
__dirname
は、現在実行中のモジュールのディレクトリパスを表す変数です。つまり、この変数を参照することで、モジュール自身が置かれている場所を取得することができます。
例:
// index.js
const path = require('path');
console.log(__dirname); // 現在のディレクトリパスを出力
// 出力例: /home/user/project/app
./
.
は、現在のモジュールを基準とした相対パスを表します。つまり、.
から始まるパスは、現在のモジュールと同じディレクトリ内にあるファイルを指します。
// index.js
const path = require('path');
const file = require('./file.js'); // 現在のディレクトリ内のfile.jsを読み込む
console.log(file.content); // file.jsの内容を出力
それぞれの使い分け
用途 | __dirname | ./ |
---|---|---|
現在のモジュールのディレクトリパスを取得 | 〇 | × |
現在のモジュールと同じディレクトリ内のファイルを読み込む | × | 〇 |
絶対パスを取得 | path.resolve(__dirname, 'path') | path.resolve('./path') |
上位ディレクトリへのアクセス | path.join(__dirname, '..') | path.join('.', '..') |
__dirname
は、現在実行中のモジュールのディレクトリパスを取得する。.
は、現在のモジュールを基準とした相対パスを表す。- それぞれの用途に合わせて使い分ける。
補足
index.js
// index.js
const path = require('path');
console.log(__dirname); // 現在のディレクトリパスを出力
// 出力例: /home/user/project/app
const file = require('./file.js'); // 現在のディレクトリ内のfile.jsを読み込む
console.log(file.content); // file.jsの内容を出力
file.js
// file.js
const content = 'Hello, world!';
module.exports = {
content,
};
実行結果:
/home/user/project/app
Hello, world!
解説:
index.js
では、__dirname
を使用して現在のモジュールのディレクトリパスを取得し、./file.js
を使用して現在のモジュールと同じディレクトリ内のfile.js
を読み込んでいます。file.js
では、content
という変数に文字列 "Hello, world!" を代入し、モジュールとしてエクスポートしています。
このサンプルコードを実行することで、__dirname
と.
がそれぞれどのような役割を果たしているのかを確認することができます。
- 上記のサンプルコードは、Node.js v14.0.0以降で実行する必要があります。
Node.jsでファイルパスを取得するその他の方法
path
モジュールは、Node.js標準ライブラリに含まれるモジュールで、さまざまなパス操作を行うことができます。
const path = require('path');
const absolutePath = path.resolve(__dirname, 'file.js');
console.log(absolutePath); // 絶対パスを出力
上記のように、path.resolve()
関数を使用して、相対パスを絶対パスに変換することができます。
const fs = require('fs');
const stats = fs.statSync('file.js');
console.log(stats.isFile()); // ファイルかどうかを出力
上記のように、fs.statSync()
関数を使用して、ファイルの情報を取得することができます。
const url = require('url');
const parsedUrl = url.parse('file:///home/user/project/app/file.js');
console.log(parsedUrl.pathname); // ファイルパスを出力
サードパーティライブラリ
path-extra
やresolve-path
などのサードパーティライブラリを使用することで、より高度なパス操作を行うことができます。
Node.jsでファイルパスを取得するには、さまざまな方法があります。それぞれの方法の特徴を理解し、状況に合わせて使い分けることが重要です。
node.js