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で出来ること

- サブディレクトリを含めた ディレクトリの作成が簡単に出来る

make-dirのインストール

make-dir の入手は コマンドライン上から npm、又は yarnコマンドを使ってインストールします。

# npm
npm install make-dir --save
# yarn
yarn add make-dir


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 


Summary

以上が make-dir の紹介でした。同等の機能を持つ node.jsライブラリに「mkdirp」がありますが、make-dirはPromiseをサポートしているのが特徴です。

make-dirを使えば "日付ごとにフォルダを自動作成 & ログをファイルに書き込み" などの機能が簡単に作れそうです。

GitHub : sindresorhus/make-dir

 

この記事のカテゴリ

プログラミング

この記事のタグ

nodejs

Socialシェアボタン

スポンサーリンク