Node.jsでファイルを読み込む3つの方法!__dirnameとrequire()を使いこなそう!

2024-04-02

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-extraresolve-pathなどのサードパーティライブラリを使用することで、より高度なパス操作を行うことができます。

Node.jsでファイルパスを取得するには、さまざまな方法があります。それぞれの方法の特徴を理解し、状況に合わせて使い分けることが重要です。


node.js


Node.jsでクラッシュをデバッグする:問題を特定し、解決するためのステップバイステップガイド

この問題を解決するには、いくつかのアプローチがあります。エラーの種類を特定する:まず、どのようなエラーが発生しているのかを特定することが重要です。エラーメッセージとスタックトレースを仔细に確認することで、問題の原因を突き止めることができます。...


JavaScript エンジニアの登竜門!ES6 モジュールの NPM 公開をマスターしよう

前提知識このチュートリアルを始める前に、以下の点について理解していることを確認してください。JavaScript: 基本的な構文と、ES6の新機能であるクラス、モジュール、アロー関数などの使用方法Node. js: インストールと基本的なコマンド操作...


Node.js pathモジュール完全ガイド:path.resolveとpath.joinを使いこなしてファイルパス操作をマスターしよう

出力されるパスの種類path. resolve: 常に絶対パスを出力します。path. join: 最初のパラメータが絶対パスの場合は絶対パス、そうでなければ相対パスを出力します。現在の作業ディレクトリの影響path. resolve: 最初のパラメータが相対パスの場合、現在の作業ディレクトリを基準に絶対パスを生成します。...


Node.js で大容量ファイルを効率的にアップロード | s3-upload-stream を活用

Node. js と AWS SDK を使って、ストリームを直接 Amazon S3 バケットへアップロードする方法について解説します。この方法は、大容量ファイルのアップロードに特に有効で、メモリ使用量を抑え、処理を効率化することができます。...


MongoDB v3.0以降でMongoClient v3.0を使用する際の"db.collection is not a function"エラーを解決する方法

Node. js で MongoDB v3. 0 以降と MongoClient v3. 0 を使用する場合、db. collection メソッドを使用すると "db. collection is not a function" エラーが発生することがあります。これは、MongoDB v3...