Node.js path モジュール
Node.js のpathモジュールは、ファイルとディレクトリのパスを処理するための組み込みのコアモジュールです。
path は、さまざまなオペレーティングシステム環境でファイルパスを安全かつ効率的に操作できるようにする、一連の実用的なメソッドを提供します。
なぜ path モジュールが必要なのか
オペレーティングシステムによって異なるパス区切り文字が使用されます:
- Windows はバックスラッシュを使用します
\ - Unix/Linux/macOS はスラッシュを使用します
/
pathモジュールがこれらの違いを自動的に処理するため、コードはさまざまなプラットフォームで正常に動作します。
path モジュールの基本的な使い方
path モジュールの導入
const path = require('path');
よく使うメソッド
1. path.join([...paths]) - パスを連結する
実例
const fullPath = path.join('/user', 'documents', 'file.txt');
console.log(fullPath);
// Unix での出力: /user/documents/file.txt
// Windows での出力: \user\documents\file.txt
console.log(fullPath);
// Unix での出力: /user/documents/file.txt
// Windows での出力: \user\documents\file.txt
2. path.resolve([...paths]) - 絶対パスを解決する
実例
const absolutePath = path.resolve('src', 'app.js');
console.log(absolutePath);
// 現在の作業ディレクトリの絶対パスを出力します。例: /home/user/project/src/app.js
console.log(absolutePath);
// 現在の作業ディレクトリの絶対パスを出力します。例: /home/user/project/src/app.js
3. path.basename(path[, ext]) - ファイル名を取得する
実例
console.log(path.basename('/user/docs/file.txt')); // file.txt
console.log(path.basename('/user/docs/file.txt', '.txt')); // file
console.log(path.basename('/user/docs/file.txt', '.txt')); // file
4. path.dirname(path) - ディレクトリ名を取得する
実例
console.log(path.dirname('/user/docs/file.txt')); // /user/docs
5. path.extname(path) - 拡張子を取得する
実例
console.log(path.extname('index.html')); // .html
console.log(path.extname('file')); // 空文字列
console.log(path.extname('file')); // 空文字列
クロスプラットフォームのパス処理
パス区切り文字
path.sep- プラットフォーム固有のパス区切り文字console.log(path.sep); // Windows 输出 '\', Unix 输出 '/'
path.delimiter- プラットフォーム固有のパス区切り文字(PATH 環境変数用)console.log(path.delimiter); // Windows 输出 ';', Unix 输出 ':'
パスの正規化
使用するとpath.normalize(path)パスを正規化し、余分な.、..や区切り文字を処理できます:
実例
console.log(path.normalize('/user//docs/../file.txt')); // /user/file.txt
パスの解析とフォーマット変換
path.parse(path) - パスをオブジェクトに解析する
実例
const pathObj = path.parse('/user/docs/file.txt');
console.log(pathObj);
/*
{
root: '/',
dir: '/user/docs',
base: 'file.txt',
ext: '.txt',
name: 'file'
}
*/
console.log(pathObj);
/*
{
root: '/',
dir: '/user/docs',
base: 'file.txt',
ext: '.txt',
name: 'file'
}
*/
path.format(pathObject) - オブジェクトからパスを構築する
実例
const pathStr = path.format({
dir: '/user/docs',
name: 'file',
ext: '.txt'
});
console.log(pathStr); // /user/docs/file.txt
dir: '/user/docs',
name: 'file',
ext: '.txt'
});
console.log(pathStr); // /user/docs/file.txt
実際の応用例
例1: クロスプラットフォームのファイルパスを構築する
実例
const configPath = path.join(__dirname, 'config', 'settings.json');
console.log(configPath);
console.log(configPath);
例2: ユーザーがアップロードしたファイルを処理する
実例
function saveUploadedFile(uploadDir, originalName) {
const ext = path.extname(originalName);
const baseName = path.basename(originalName, ext);
const timestamp = Date.now();
const newFileName = `${baseName}_${timestamp}${ext}`;
return path.join(uploadDir, newFileName);
}
const ext = path.extname(originalName);
const baseName = path.basename(originalName, ext);
const timestamp = Date.now();
const newFileName = `${baseName}_${timestamp}${ext}`;
return path.join(uploadDir, newFileName);
}
例3: ファイル拡張子を確認する
実例
function isImageFile(filename) {
const ext = path.extname(filename).toLowerCase();
return ['.jpg', '.jpeg', '.png', '.gif'].includes(ext);
}
const ext = path.extname(filename).toLowerCase();
return ['.jpg', '.jpeg', '.png', '.gif'].includes(ext);
}
メソッドとプロパティ
path モジュールのメソッドとプロパティは次の表のとおりです:
| メソッド | 説明 | 例 |
|---|---|---|
path.basename(path[, ext]) | パスの最後の部分(ファイル名)を返します。オプションのパラメータextはファイル拡張子を除去するために使用します。 | path.basename('/foo/bar/baz.txt'); // 输出: 'baz.txt' |
path.dirname(path) | パスのディレクトリ部分を返します。 | path.dirname('/foo/bar/baz.txt'); // 输出: '/foo/bar' |
path.extname(path) | パス内のファイルの拡張子を返します。 | path.extname('/foo/bar/baz.txt'); // 输出: '.txt' |
path.join([...paths]) | 複数のパスを1つのパスに結合し、パス区切り文字を自動的に処理します。 | path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); // 输出: '/foo/bar/baz/asdf' |
path.resolve([...paths]) | パスシーケンスを絶対パスに解決します。右から左へ各パスセグメントを処理し、絶対パスが構築されるまで続けます。 | path.resolve('/foo/bar', './baz'); // 输出: '/foo/bar/baz' |
path.normalize(path) | パスを正規化し、冗長な.と..を削除し、現在のオペレーティングシステムに応じてパス区切り文字を置き換えます。 | path.normalize('/foo/bar//baz/asdf/quux/..'); // 输出: '/foo/bar/baz/asdf' |
path.isAbsolute(path) | パスが絶対パスかどうかを確認します。 | path.isAbsolute('/foo/bar'); // 输出: true |
path.relative(from, to) | からfromパスへのto相対パスを返します。 | path.relative('/foo/bar/baz', '/foo/bar/qux'); // 输出: '../qux' |
path.parse(path) | パス文字列をオブジェクトに解析し、root、dir、base、extとnameプロパティを含みます。 | path.parse('/home/user/dir/file.txt');出力:{ root: '/', dir: '/home/user/dir', base: 'file.txt', ...} |
path.format(pathObject) | パスオブジェクトをパス文字列にフォーマットします。path.parseの逆です。 | path.format({ root: '/', dir: '/home/user/dir', base: 'file.txt' }); // 输出: '/home/user/dir/file.txt' |
path.sep | 現在のオペレーティングシステムのパス区切り文字を提供します(POSIXは'/'、Windowsは'\')。 | console.log(path.sep); // 输出: '\' (Windows) 或 '/' (POSIX) |
path.delimiter | パス区切り文字(環境変数内のパスの区切り文字)を提供します。POSIXは:、Windowsは;。 | console.log(path.delimiter); // 输出: ';' (Windows) 或 ':' (POSIX) |
実例
main.js ファイルを作成します。コードは次のとおりです:
実例
const path = require('path');
// ファイル名を取得
console.log('ファイル名:', path.basename('/foo/bar/baz.txt')); // 出力: 'baz.txt'
// ディレクトリ名を取得
console.log('ディレクトリ名:', path.dirname('/foo/bar/baz.txt')); // 出力: '/foo/bar'
// 拡張子を取得
console.log('拡張子:', path.extname('/foo/bar/baz.txt')); // 出力: '.txt'
// パスを連結
console.log('連結パス:', path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')); // 出力: '/foo/bar/baz/asdf'
// 絶対パスを解決
console.log('絶対パス:', path.resolve('/foo/bar', './baz')); // 出力: '/foo/bar/baz'
// パスを正規化
console.log('正規化パス:', path.normalize('/foo/bar//baz/asdf/quux/..')); // 出力: '/foo/bar/baz/asdf'
// 絶対パスかどうかを判定
console.log('絶対パスかどうか:', path.isAbsolute('/foo/bar')); // 出力: true
// 相対パス
console.log('相対パス:', path.relative('/foo/bar/baz', '/foo/bar/qux')); // 出力: '../qux'
// パスをオブジェクトに解析
const parsedPath = path.parse('/home/user/dir/file.txt');
console.log('パスをオブジェクトに解析:', parsedPath);
// 出力: { root: '/', dir: '/home/user/dir', base: 'file.txt', ext: '.txt', name: 'file' }
// オブジェクトをパスにフォーマット
const formattedPath = path.format(parsedPath);
console.log('パスのフォーマット:', formattedPath); // 出力: '/home/user/dir/file.txt'
// ファイル名を取得
console.log('ファイル名:', path.basename('/foo/bar/baz.txt')); // 出力: 'baz.txt'
// ディレクトリ名を取得
console.log('ディレクトリ名:', path.dirname('/foo/bar/baz.txt')); // 出力: '/foo/bar'
// 拡張子を取得
console.log('拡張子:', path.extname('/foo/bar/baz.txt')); // 出力: '.txt'
// パスを連結
console.log('連結パス:', path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')); // 出力: '/foo/bar/baz/asdf'
// 絶対パスを解決
console.log('絶対パス:', path.resolve('/foo/bar', './baz')); // 出力: '/foo/bar/baz'
// パスを正規化
console.log('正規化パス:', path.normalize('/foo/bar//baz/asdf/quux/..')); // 出力: '/foo/bar/baz/asdf'
// 絶対パスかどうかを判定
console.log('絶対パスかどうか:', path.isAbsolute('/foo/bar')); // 出力: true
// 相対パス
console.log('相対パス:', path.relative('/foo/bar/baz', '/foo/bar/qux')); // 出力: '../qux'
// パスをオブジェクトに解析
const parsedPath = path.parse('/home/user/dir/file.txt');
console.log('パスをオブジェクトに解析:', parsedPath);
// 出力: { root: '/', dir: '/home/user/dir', base: 'file.txt', ext: '.txt', name: 'file' }
// オブジェクトをパスにフォーマット
const formattedPath = path.format(parsedPath);
console.log('パスのフォーマット:', formattedPath); // 出力: '/home/user/dir/file.txt'
Node.js 組み込みモジュール