プログラマーであれば単純作業をプログラムに任せると思います。今回は備忘録を兼ねてNode.jsで書き捨て前提のプログラムを書く際に、よく使っているテクニックをまとめてみました。
やっていることは同じなので他の言語を使っている方でも利用できるものです。
標準入力に対応して、ファイル内を変更しないで使えるようにしておくと便利です。
process.stdin.on('readable', () => {
let chunk
while ((chunk = process.stdin.read()) !== null) {
process.stdout.write(main(chunk))
}
})
process.stdin.on('end', () => {})
macOSに入っているpbpaste
コマンドはクリップボードのデータを出力してくれるので、次のように利用するとクリップボードからプログラムにデータを受け渡せます。
$ pbpaste | node index.js
逆に出力をクリップボードに格納したい場合にはpbcopy
コマンドを利用します。
$ node index.js | pbcopy
何らかのファイルを生成する際にはタイムスタンプをつけるとわかりやすいです。
new Date()で現在時刻のインスタンスを生成してNumberにわたすとunixtimeが得られます。
YYYY/MM/DD hh:mm:ss
形式を利用したい場合はJS標準のDateではなくmoment
やdayjs
を利用すると簡単に実現できます。
const fs = require('fs')
const timestamp = Number(new Date()) // unixtimeを生成
const content = 'something'
fs.writeFile(`results/result-${timestamp}.pptx`, content, function() {})
macOSにはopen
コマンドがあっていい感じにファイルやディレクトリを開いてくれます。
open
を利用して生成したファイルやログファイルを開くと、プログラムの動作を把握しやすくなります。
const fs = require('fs')
const timestamp = Number(new Date()) // unixtimeを生成
const content = 'something'
const execSync = require('child_process').execSync
const fileName = `results/result-${timestamp}.pptx`
fs.writeFile(fileName, content, function() {
execSync(`open ${fileName}`)
})
プログラムを実行する際にオプションを渡して、動作を変えられるようにしておくと便利です。
破壊的な操作を行わずログを出力をする--dry-run
のようなオプションや、ファイルを開く--open
オプションなどを用意することが多いです。
コマンドラインで渡した引数はプログラム中のprocess.argv
に配列で渡ってきます。配列の2番目以降を見る処理を書いておくといいでしょう。
上記のファイルを生成する処理を書く際にオプションとして用意しておくことが多いです。
// process.argv => ['/usr/bin/node', '/Users/mottox2/project', '--open']
if (process.argv.includes('--open')) {
// `node index.js --open`のようにopenを指定した場合のみ実行
}
本格的なCLIツールを開発するのであれば、commander
、yargs
などのライブラリを利用すると、キレイに記述できます。
ここ最近、Web技術を利用した画像生成に興味があります。本記事では、日本語における表現の一種である縦書きに焦点を当て、Web技術を使った縦書きを含む画像生成方法についての調査をまとめました。 > 現
追記(2022/12/29): 問い合わせに対応する窓口をTwitterに統一したいので、フォームページは削除しました。 当ブログは静的サイトホスティングサービスのNetlifyでホスティングされ
毎年10月に開催されるHacktoberfestに参加しました。このイベントはOSSへの貢献を行い、期間中に規定数(4つ)の貢献を行った人に特典がプレゼントされるものになっています。 自分はドキュメ