Node.jsでファイルを直接実行した際にしか動かない処理を書く

2019.09.08

Node.jsで他のファイルから呼び出すためのファイルを書いた時に、その関数をいい感じに実行したいと思ったことはないだろうか?具体的にはテストから呼び出すほどでもない用途でnode index.jsを叩いた時だけ動く動作を実現したい。 私は昔からRubyを書いており以下のような記述で、ファイルを直接実行した際にしか動かない処理を書くことができるのを知っていた。

sample.rb
class HogeClass
  def some_method
  end
end

# `ruby sample.rb`を叩くと実行される。他ファイルからの読み込み時には動作しない。
if $0 == __FILE__
  # do someting 
end

これをNode.jsに置き換えると次のようなコードで実現できた。便利だ。

index.js
modules.exports = () => {
}

if (require.main === module) {
  console.log('`node index.js`のように実行の起点となる時だけ実行される。')
  console.log('`require("./index")`のように読み込まれると実行されない。')
}

参考: https://nodejs.org/api/modules.html#modules_accessing_the_main_module