node.jsでディレクトリを作成する時に便利なライブラリ「make-dir」の紹介です。
node.jsで ディレクトリを作成するのは ' fs.mkdirSync
' メソッドを使えば簡単に出来ます。
ですが、既に存在するフォルダの中に新規に作成したり、サブディレクトリを含むディレクトリの作成となると フォルダの存在チェック、コールバック関数のネストなどで コードが長くなる傾向があります。
// ディレクトリを作成
const fs = require("fs");
// 'tmp'が存在するかチェック
if (!fs.existsSync('tmp')) {
// 'tmp'ディレクトリを作成
fs.mkdirSync('tmp', (err, folder) => {
if (err) throw err;
console.log(folder);
});
}
// 'tmp/sub' *こういう使い方は出来ません
fs.mkdirSync('tmp/sub', (err, folder) => {
if (err) throw err;
console.log(folder);
});
そのようなディレクトリの処理を気にせず 気軽に使えるライブラリが「make-dir」です。
- サブディレクトリを含めた ディレクトリの作成が簡単に出来る
make-dir の入手は コマンドライン上から npm
、又は yarn
コマンドを使ってインストールします。
# npm
npm install make-dir --save
# yarn
yarn add make-dir
make-dirの使い方は簡単で、" require
" メソッドなどで書くパスの通し方と同じ文法で 処理を書くことができます。
また、「フォルダが存在すれば 処理を行う」「存在しなければ何もしない」 というような exist チェックの処理も書く必要がありません。

// mkdir.js
const makeDir = require("make-dir");
makeDir("dir/sub-dir2/sub-dir3").then(path => {
console.log(path);
// 作成されたディレクトリのパスが表示されます
});
Promise APIもサポートしているので、一度に複数のサブディレクトリを作成したり、ディレクトリ内でファイル作成 & 書き込みも 比較的 簡単にできます。

// mkdir.js
const makeDir = require("make-dir");
Promise.all([
makeDir('myDir'),
makeDir('myDir/dir1').then(path => {
fs.appendFileSync(path + "/" + "file.text",
"write something\n"
);
}),
makeDir('myDir/dir2').then(path => {
fs.appendFileSync(path + "/" + "file.text",
"write something\n"
);
}),
]).then(path => {
console.log("success");
}).catch(err => {
console.log(err);
})
番外編として make-dir を使って、csvファイルにデータを書き込むモジュールを作ってみました。' フォルダ名/年/月/日付 ' のディレクトリを動的に作成する処理がスッキリ書けました。
const fs = require("fs");
const dateFormat = require("dateformat");
const makeDir = require("make-dir");
// requirements
// npm i make-dir dataformat
/**
* @param { String } dirName [ディレクトリ名]
* @param { String } fileName [ファイル名]
* @param { Array } data [格納するデータ]
*/
module.exports = (dirName, fileName, data) => {
const date = new Date();
const today = dateFormat(date, "yyyy-mm-d");
return makeDir(
dirName + "/" + dateFormat(date, "yyyy/m") + "/" + today
)
.then(path => {
// csvに書き込み
fs.appendFileSync(
path + "/" + fileName,
data.toString() + "," + dateFormat(date, "yyyy-mm-d HH:MM:ss \n")
); // ! fs.appendFileSync
}); // ! then()
}; // ! module.exports
// usage
const writeCsv = require("./logcsv");
/* testDir/年/月/日付/my.csv が作成、実行ごとにcsvにデータ追加されていきます */
// testDIr/2017/7/2017-07-30/my.csv
writeCsv("testDir", "my.csv", ["banana", "orange", "柿"]);
// CSVに書き込まれるデータ banana,orange,柿,2017-07-30 20:56:45
以上が make-dir の紹介でした。同等の機能を持つ node.jsライブラリに「mkdirp」がありますが、make-dirはPromiseをサポートしているのが特徴です。
make-dirを使えば "日付ごとにフォルダを自動作成 & ログをファイルに書き込み" などの機能が簡単に作れそうです。
GitHub : sindresorhus/make-dir