1. 概要
内容は以下の通りです。
・date-utilsを使った日付、時刻の取得
・fsを使ったファイルの作成、書き込み
・mkdirpを使ったフォルダの作成
昔の自分の記事をみるとEdisonでNode.jsを使っていたようなのですが、それすらも忘れており現在勉強中です。
2. 環境
- Macbook Pro(Retina 13-inch, Mid 2014)
- macOS Sierra 10.12.4
- node v7.7.4
3. 参考サイト
- Node.jsで現在時刻を取得 - Qiita
- pxt | node.jsに入門してみる。3 ~ファイルの読み書き編~
- node.jsのいろいろなモジュール21 – mkdirpでディレクトリ作成 | Developers.IO
3. npmでのモジュールのインストール
3.1 date-utilsのインストール
参考サイト1を参考にしました。
インストールは非常に簡単でした。
$ npm install date-utils
3.2 mkdirpのインストール
参考サイト3を参考にしました。
インストールはこちらも簡単です。
$ npm install mkdirp
4. プログラムの作成
4.1 日時の表示(date-utils)
まずは日時を取得して表示するプログラムを作成します。
参考サイト1に書かれているものを動かしてみます。
app.js
require('date-utils');
var dt = new Date();
var formatted = dt.toFormat("YYYYMMDDHH24MISS");
console.log(formatted);
実行はnode app.js
です。
4.2 ファイルの作成(fs)
4.1で取得した日時を名前にしたファイルを作成します。
参考サイト2をベースに参考サイト1を付け加えてみました。
fs_test.js
require('date-utils');
var fs = require('fs');
var dt = new Date();
var formattedDate = dt.toFormat('YYYYMMDDHH24MISS');
var filename = './' + formattedDate + '.txt'
function fileSaveContents( filename, str ){
var fd = fs.openSync(filename, 'w');
fs.writeSync(fd, str, 0, 'ascii');
fs.closeSync(fd);
return true;
};
console.log( fileSaveContents(filename, formattedDate) );
実行すると同じフォルダに20170416111140.txtのようなファイルが生成されており、中にもファイル名と同じ日付と時刻が書き込まれています。
4.3 ファイルをLogフォルダの中に作成(mkdirp)
参考サイト3を参考にしました。
mkdirp_test.js
require('date-utils');
var fs = require('fs');
var mkdirp = require('mkdirp');
var dt = new Date();
var formattedDate = dt.toFormat('YYYYMMDDHH24MISS');
var filename = './log/' + formattedDate + '.txt'
function fileSaveContents( filename, str ){
mkdirp.sync('./log', function (err) {
if (err){
console.error(err);
} else {
console.log('success');
}
});
var fd = fs.openSync(filename, 'w');
fs.writeSync(fd, str, 0, 'ascii');
fs.closeSync(fd);
return true;
};
console.log( fileSaveContents(filename, formattedDate) );
4.4 ファイルに複数のデータを追加する
現状ではファイルには日時データしか書き込まれていません。実際にはログとなるデータを複数書き込みたいと思っています。そこで参考サイト2を見ながら複数のデータを書き込めるようにしました。
機能ごとに分けようと思いました。
とりあえず動きましたが、どういった書き方がいいのかまだ分かっていません。
ファイルにデータを追記する場合の変更点は以下の通りです。
-
fd = fs.openSync(filename, 'a');
について書き込み専用モードの'w'から'a'としました。 -
fs.writeSync
からfs.appendFileSync(fd, str + '\n', 'ascii');
に変更しました。
test.js
require('date-utils');
var fs = require('fs');
var mkdirp = require('mkdirp');
var filename;
var formattedDate;
var fd;
function setup(){
var dt = new Date();
formattedDate = dt.toFormat('YYYYMMDDHH24MISS');
filename = './log/' + formattedDate + '.txt'
}
function open(){
mkdirp.sync('./log', function (err) {
if (err){
console.error(err);
} else {
console.log('success');
}
});
fd = fs.openSync(filename, 'a');
}
function write(str){
fs.appendFileSync(fd, str + '\n', 'ascii');
}
function close(){
fs.closeSync(fd);
return true;
}
function fileSaveContents( filename, str ){
mkdirp.sync('./log', function (err) {
if (err){
console.error(err);
} else {
console.log('success');
}
});
var fd = fs.openSync(filename, 'w');
fs.writeSync(fd, str, 0, 'ascii');
fs.closeSync(fd);
return true;
};
setup();
open();
write(formattedDate);
write('test');
close();
node test.js
で実行すると、logフォルダの日時ファイルが生成され、1行目に日時、2行目に「test」の文字が書かれています。