kitak blog

Kみたいなエンジニアになりたいブログ

Node.js v4 のちょっとした疑問の調査

先週、東京Node学園 18時限目に参加してきました。

「Node.js v4 の話」を聞いて、個人的に便利だと思ったところと疑問に思ったことをまとめています。
以下、@yosuke_furukawa さんのスライドです。

個人的にうれしいと感じたところ

  • Buffer#indexOf の追加
  • Streamコンストラクタが使いやすくなった
  • REPLのhistoryセーブ
  • requireの高速化

REPLはhistoryをどこにセーブしているか

v4からnodeコマンドで起動するREPLのhistoryをセーブしてくれるようになった。普通に便利 ( なんでいままでなかったんだ! )。

どこにセーブしているか気になって、Macでlsof -pしてみたら、ホームディレクトリの .node_repl_history という名前のファイルにセーブしていた。
ドキュメントを読んだら、デフォルトは.node_repl_historyで、環境変数 NODE_REPL_HISTORY で変更できるということ。

refs: REPL Node.js v4.2.0 Manual & Documentation

os.homeDir

v4からosモジュールにhomeDir関数が追加されて、ホームディレクトリを取得できるようになった。
こういうのが追加されるとどうやって内部で取得しているのか気になるのが人の性。

ソースコードを読んでみたら、livuvが定義している関数を呼び出しているようだった。node/node_os.cc at 64beab0fc55f750bae648e9b69e027f2dbf3b18a · nodejs/node · GitHub

さらにlivuvが定義している関数を読むとUnix系のOSでは、
環境変数HOMEが設定されている場合はそれを返して( node/core.c at a1615949a591fc523048a09540a2d340ff1b3da8 · nodejs/node · GitHub )、 設定されていなければ、getpwuid_rというlibcの関数を呼び出して、passwd構造体のpw_dirフィールドを返すようにしていた( node/core.c at a1615949a591fc523048a09540a2d340ff1b3da8 · nodejs/node · GitHub )。