もう12月も終わりかけで今更な感じは否めませんが、途中まで書きかけて下書きのままになっていたので2018年中に出しとこうと思った記事です。
11月23日、11月24日に開催された東京Node学園祭にスタッフとして参加しました。
当日は動画撮影とCode And Learnメンターを担当しました。
動画については後日公開します。これから多少の編集を行い随時YouTubeにアップロードしていきます。
先に言い訳しておくと、素人が撮影しているので動画の品質についてはお見苦しい部分があるかと思います。ご了承ください。
無料で公開するわけだし、お許しいただきたい。
難しかったこともありましたが、良い経験になりました。
Code And Learnについては、hiroppyさん、ronkorvingさん、Lekoさん、Annaさん、Joyeeさんと一緒にメンターをしました。
Node.js CoreにPRを出す体験をしてもらうワークショップです。
PRを出すことをゴールとしているので、できるだけ簡単な修正のネタを探しました。
以下が準備したネタです。
* functionをarrow functionに変更
* assert.strictEqualの引数順番
* strictEqual(expected, actual)をstrictEqual(actual, expected)に修正
* APIドキュメント内のサンプルコード内のfunctionをarrow functionに変更
* ドキュメント内のtypo
* V8の新APIであるArray Functionへの変更
単純な修正が多いですが、せっかくなので一つずつ説明していきます。
functionをarrow functionに変更
これはそのままです。Nodeの中のJavaScriptの中のfunctionをarrow functionに変えていく作業です。
しかし、制限をかけさせていただきました。
function内でthisを使っていないこと thisの扱いを間違うとバグになるためです。
無名関数であること 例えば
process.on('exit', function onExit() {...})
をprocess.on('exit', () => {...})
と変更しちゃうとheap debugしたときに名前が表示されなくなります。これはユーザーにとって不便になるかもしれません。 このissueでそのことが書かれています。 https://github.com/nodejs/node/issues/8913prototype.fooなどに代入していないこと これもthisに関連しています。prototypeに代入しているthisは外側のthisとは違うため単純にarrow functionに書き換えることでthisの参照先が変わってしまいバグが発生するかもしれないからです。
assert.strictEqualの引数順番
これは簡単でNodeのテスト内で使われているassert.strictEqualの引数の順番を修正するものです。APIの仕様を見ていただくとわかるのですが、第一引数がactual、第二引数がexpectedです。
しかしNodeのテスト内には第一引数にexpected、第二引数にactualを設定しているコードが多数存在します。
なので、その引数の順番を修正するのが目的です。
APIドキュメント内のサンプルコード内のfunctionをarrow functionに変更
これはAPIのドキュメント内に記載されているサンプルコードの中のfunctionをarrow functionに置き換えていく作業です。
制限については前述した内容と同じです。
ドキュメント内のtypo
http2のAPIのドキュメント内にfor this this HttpStream
と余分なthisがあったので、それの修正です。
V8の新APIへの修正
Node.jsが使っているJavaScriptエンジンであるV8のAPIを使った配列の追加方法を新APIに書き換える作業です。 これはJoyeeが説明を書いてくれています。
これも修正のサンプルDiffを用意して、そのとおりに置き換えていく作業だったため作業としては単純でした。