別にしんどくないブログ

技術のことや読書メモを書いています

Denoの標準テストモジュールについて。READMEをコミットした

あけましておめでとうございます。今年もよろしくお願いいたします。

2018年末からDenoのコードを読んだり、Denoについて調べたりしています。
DenoのテストモジュールのREADMEを書いてマージされました。今年最初のマージされたPRになります。

github.com

せっかくなので、Denoの標準テストモジュールについて簡単に紹介したいと思います。

Denoとは

Node.jsを最初に作ったRyan Dahl氏が開発しているTypeScriptをV8で動かすラインタイム実行環境です。

deno_stdとは

Denoにはいくつか標準モジュールが用意されています。

github.com

使うためにはhttps://deno.land/x/から始まるURLを指定してモジュールをimportする必要があります。
例えば今回紹介するテストモジュールの場合は

import { test, assert, equal, assertEqual } from 'https://deno.land/x/testing/mod.ts';

のように書きます。
実行のたびにHTTPリクエストするわけではなく、一回ダウンロードするとローカルにキャッシュされます。
ダウンロード先は $HOME/.deno/deps/ です。'https://deno.land/x/testing/mod.ts' は、 $HOME/.deno/deps/https/deno.land/x/testing/mod.ts にあります。

テストモジュールについて

今回コミットしたREADMEに書いたサンプルコードとAPIについて紹介します。

deno_std/README.md at master · denoland/deno_std · GitHub

import { test, assert, equal, assertEqual } from 'https://deno.land/x/testing/mod.ts';

test({
  name: 'testing example',
  fn() {
    assert(equal("world", "world"));
    assert(!equal("hello", "world"));
    assert(equal({ hello: "world" }, { hello: "world" }));
    assert(!equal({ world: "hello" }, { hello: "world" }));
    assertEqual("world", "world");
    assertEqual({hello: "world"}, {hello: "world"});
  },
});

Short syntax (named function instead of object):

test(function example() {
  assert(equal("world", "world"));
  assert(!equal("hello", "world"));
  assert(equal({ hello: "world" }, { hello: "world" }));
  assert(!equal({ world: "hello" }, { hello: "world" }));
  assertEqual("world", "world");
  assertEqual({hello: "world"}, {hello: "world"});
});

test

testという関数を使ってテストを実行します。
testには2パターンの使い方があります。

  • namefnを持ったオブジェクトを渡す
  • named functionを渡す

型は以下の通りです。

export type TestFunction = () => void | Promise<void>;

export interface TestDefinition {
  fn: TestFunction;
  name: string;
}

export function test(t: TestDefinition | TestFunction): void 

assert

これはbooleanを引数に取るアサーション関数です。
基本的に後述するequalと一緒に使います。

assert(expr: boolean, msg = "") 

となっていて第一引数は比較結果をbooleanで渡し、第二引数は失敗時のエラーメッセージを渡します。

equal

これは期待値と結果の値を比較してbooleanを返す関数です。
成功ならtrueを失敗ならfalseを返します。
上記のサンプルコードにもありますが、Objectも比較してくれます。また、Objectの中のObjectも判定してくれます。

equal(
  { hello: "world", hi: { there: "everyone" } },
  { hello: "world", hi: { there: "everyone else" } }
)

型は以下の通りでunknownを取るので何でも渡せます。

equal(actual: unknown, expected: unknown): boolean

assertEqual

これは前述のassertとequalを組み合わせたみたいな関数です。
実際、内部の判定は前述のequalを使っています。 型は以下の通りです。

assertEqual(actual: unknown, expected: unknown, msg?: string)

最後のmsgは失敗時に表示するエラーメッセージです。メッセージを渡さない場合はデフォルトのError: actual: ${actual} expected: ${expected}が表示されます。

デフォルトのエラーメッセージは変数をそのままテンプレートリテラルで埋め込むためObjectの比較で失敗したときのメッセージが不親切です。

f:id:Shisama:20190105141654p:plain
標準のassertEqualの失敗時のエラーメッセージ

しかし失敗したObjectの内容を表示してくれるpretty_assertという便利なライブラリを使うと以下のように表示されます。

f:id:Shisama:20190105142310p:plain
pretty_assertを使った失敗時のエラーメッセージ

github.com

あとがき

Denoの標準モジュールはNode.jsのようにCoreに内包しているのではなく、必要なときだけ外部からダウンロードして使うという方式をとっていて面白いです。
標準モジュールは他にもnetloggingなどあります。
netを使った簡易Webサーバを起動する記事をQiitaに書いたので興味あれば読んでみてください。

qiita.com

最後までお読みいただきありがとうございました。質問や不備があればTwitter(@shisama_)までお願いします。

2018年の活動

2018年は様々なことを経験させていただきました。
今回は2018年の技術的な活動を振り返っていきたいと思います。
前半がプライベートな活動で後半が仕事でやったことです。

アウトプット

勉強会・カンファレンスでの登壇は大小含めて9回
Presentations by Masashi Hirano - Speaker Deck

JavaScriptに関する内容を中心にQiitaに20本
shisama - Qiita

dev.toに1本
Masashi Hirano - DEV Community 👩‍💻👨‍💻

このブログ10本(この記事含む)

登壇も記事も昨年より増えましたが、もうちょっと書けたんじゃないかなと思っています。
1つアウトプットするのに時間かかりすぎているのをなんとかしたいと考えていたり、
ネタを溜めても消化不良のまま鮮度が落ちて捌けなかったものもありもっとシュッと出せるようにしたいと思っています。

Node.js Core Collaboratorになった

思うところが色々あって春から半年ほどかけてNode.jsにコミットし続けた結果、11月にNode.jsのCollaboratorになりました。

shisama.hatenablog.com

関西Node学園を主催

同僚と一緒に関西Node学園という勉強会を運営することになりました。
運営を手伝ってくれている方々、会場を貸していただいている企業様、スポンサーをしていただいた企業様、登壇してくださっているスピーカーの方々、参加してくださっている方々には感謝の気持ちでいっぱいです。
僕たちはまだまだ未熟ですが、これからも皆様と一緒にコミュニティを活発にできればと感じています。

東京Node学園祭のスタッフ

東京Node学園祭2018にスタッフとして参加しました
当日は動画撮影とCode And Learnのメンターを行いました。
Code And LearnはNode.jsにPRを作ってみようというハンズオンです。
結果として10名以上の方がPRを作りmasterにマージされました。

shisama.hatenablog.com

Node.jsのWebアプリケーションの本格運用

仕事ではNode.jsで開発したWebアプリケーションの本格運用が始まりました。
Node.jsにすることで他の言語では発生しないようなエラーにハマったりして知見をためることができたと感じています。
例えば、こういうのとか(同僚の登壇資料ですが・・・)

speakerdeck.com

あと、Babel→TypeScriptに移行したり、設計を見直してRepositoryパターンやフレームワークをアプリケーションから分離していったりしていきました。
設計もっと強くなりたいと毎日感じています。

PMを務めた

表示速度の改善のためにWeblio英和和英辞書( https://ejje.weblio.jp )など主要な辞書サービスをAMPページに対応させました。
小さなチームでしたがプロジェクトマネージャーをさせていただきました。
AMPの実装自体は簡単なのですが、広告収入やユーザー数などビジネスサイドへの影響を考えながらGoogle Analyticsで計測しながら開発を進めたり他の部署のメンバーの進捗管理を行ったことは良い経験になりました。

ちなみにその一部をHTML5 Conference 2018で話しました。
ポジティブなFBも多くいただき嬉しかったです。

speakerdeck.com

技術的負債と戦う

15年もののレガシーシステムと絶賛戦っています。
JSPサーブレットで書かれていて環境構築も困難極まりないので、とりあえずDockerにしてイメージをPrivateレジストリに置くまでしました。

ちなみにDockerやPrivateレジストリについても登壇したので、興味あれば御覧ください

来年はコードやアーキテクチャリファクタリングしていきたい。
ちなみにこのリファクタリングプロジェクトのスローガンは「面白くないものを面白くする」なので、自分も楽しみながらやっていきたいと思います。

あとがき

振り返ってみると今年はNode.jsやJavaScriptばかりやっていました。
来年はもう少し幅を広げていきたいと考えています。
Web以外のこともやりたいとぼんやり思っているのですが、なかなかできずにいます・・・
来年は今年よりコード書きたいです。

あとNode学園祭のときに海外から来たスピーカーやNode.jsのTSCメンバーと会話がうまくできなかったので、英語にも力を入れていきたい。

では、来年も@shisama_をよろしくお願いいたします。
🎍良いお年を🐗

2018年買ってよかったもの

今年の買い物の履歴を残しておこうと思います。
買って良かったものを紹介していきます。

掲載順は購入して順番です。

完全ワイヤレスイヤホン

AppleAirPodsが出たときに「これはすごい!欲しい!!」となったのですが、AirPodsカナル型ではないのでなかなか購入に踏み切れずにいました。
そんな中rebuild.fmで宮川さんがAnkerのZoloが良いって言っていたのを聞いて調べたところ8000円ほどだったので即購入しました。
初期不良で左耳から音が出なかったのですが、18ヶ月保証があるのですぐ交換してもらえました。Anker Japanのサポートも迅速かつ丁寧で好印象でした。

音質も結構良いと思います。あと全然耳から落ちませんし、つけ心地も良いです。
一番驚いたことは防水性です。誤ってポケットに入れたまま洗濯してしまったのですが、今の所全く問題なく使えています。

初めての完全ワイヤレスイヤホンにオススメです。
今だと同じAnkerから出ているSoundcore Liberty Liteも良さそうです。

浄水器

浄水器を買うまでは飲料水を買ったり、スーパーのRO水(濾過水)を利用していました。
しかし、数リットルの水をスーパーから自宅まで運ぶのはかなりの労力が必要です。
年間5000円でこの労力を消費しなくても済むようになったので、もっと早く買っていれば良かったと感じました。
また、この商品はカートリッジ交換が1年に1回なので面倒くさくないのが決め手でした。

スマートスピーカー

Amazon Echo DotとGoogle Home Miniを買いました。

生活をスタイルを変えたモノです。
Amazon Echo Dotはリビング用、Google Home Miniは自室用に使い分けています。
毎朝、天気やニュースを聞くだけでなく、家で音楽を聞くためにも使っています。
元々Amazonプライム会員でしたが、Amazon Music Unlimitedもサブスクリプションするようになりました。
後述の商品でも紹介しますが、家電もアレクサに指示して操作しています。

あと、Alexaスキルも開発しました。Linuxのコマンドをランダムで紹介してくれるアプリです。  かなりニッチですが、興味があれば使ってフィードバックもらえると嬉しいです。

Linuxコマンド

プレステ4

アメリカ国籍の同僚がアメリカに帰国することになり、持って帰ることができないので格安で売りますよって言ってくれたので15,000円で買い取りました。
元々ゲームはしない方なのですが、格ゲーだけは好きでMARVEL vs CAPCOMの最新作はやりたいなと思っていました。

あとAmazonプライムビデオやYouTubeなどのメディアプレーヤーとしても使っています。 最近はもっぱらプライムビデオの観賞用として使っています。
15,000円で買えたのはかなり良いお買い物でした。

食洗機

我が家は共働きのため、なるべく家事は自動化したいと考えています。
食器洗いはそんなに時間がかかるものでもないですし、食洗機を置くためのスペースが必要ですし、頑固な汚れが洗えるのか疑問に感じていたので、なかなか購入に踏み切れませんでした。
しかし次期モデルが出るということで価格が急落し購入に至りました。

懸念していた置く場所についてはキッチンの横にラックを置くことでスペースを拡張しました。
汚れに関しては頑固な汚れもしっかり落ちています。

もっと早く買っていれば良かったと後悔した商品No.1は食洗機です。

2人以上で生活しているのであれば、50Lの食洗機を強くオススメします。

スマートフォン

store.google.com

5年間使ってきたiPhone5sからついに乗り換えました。
決め手となったのは大きさとカメラです。
最近のスマホは6インチを超えるものが多く片手操作が困難な機種が多かったのですが、
このPixel3は片手でも操作できます。
写真の画質は評判通り良かったです。また子供と一緒にインカメラで写真撮ったりするのですが、シャッターを押したときに子供が笑顔になっていなかったりカメラ目線ではないことが多かったのですがトップショット機能によりシャッターの前後で最も良い写真をAIが判定してレコメンドしてくれます。
この機能により全員がカメラ目線の笑顔の写真が残せるようになりました。

jp.techcrunch.com

iOSからAndroidに変えてよかったこと悪かったことはありますが、Androidもかなり進化していて使い勝手は全然問題無いレベルになった印象です。
ただUIはやっぱりiOSがわかりやすい感じがします。(慣れの問題?)
あとWebエンジニアとしては普通のChromeが動いたり、デフォルトブラウザを選択できたりするのは良いです。

こたつ

もうこの冬は家にいるときはずっとこたつに定着しています。
もはや多くを語る必要はないでしょう。
この記事もこたつに入りながら書いています。
この山善のこたつは2〜3人までの人数ならちょうど良い大きさで手頃な価格です。また天面は黒と白のリバーシブルになっているので好みによって変えることができます。

スマート家電コントローラー

PayPayで買いました。全額返金されませんでしたが・・・

これはスマホスマートスピーカーで家電を操作するリモコンです。
家電の赤外線リモコンを学習してスマホスマートスピーカーからWifi経由で赤外線操作を行います。
前述したスマートスピーカーと組み合わせて、家電を声で操作しています。
例えば「アレクサ、電気をつけて」というと電気をつけてくれます。
便利なのはいくつかの家電の操作を一つの命令で同時に実行してくれる機能です。
我が家では「アレクサ、おやすみ」というと電気・エアコン・こたつを同時に電源OFFにしてくれるようにしています。
また、外出先からでも操作できるので帰宅前にエアコンの電源をONにするといったこともできます。

あとがき

他にもビデオカメラやポータブルBluetoothスピーカーなど買ってよかったものは色々あるのですが、特に良かったものを紹介しました。
こう振り返ってみると結構散財したかもなーと感じています。

来年は自宅のMacbook Pro 2013を買い替えたいと考えているのですが、AirクアッドコアもしくはTouchBarなしProのクアッドコアを待っています。
iPad mini5がでるかもしれないと噂されているので、iPad mini2から買い換えたいなとも考えています。
スマートウォッチも欲しくてFitbitにしようかAmazfitにしようかとか考えています。
スマブラもやりたいな・・・

来年も散財の予感・・・

東京Node学園2018でスタッフをした

もう12月も終わりかけで今更な感じは否めませんが、途中まで書きかけて下書きのままになっていたので2018年中に出しとこうと思った記事です。

11月23日、11月24日に開催された東京Node学園祭にスタッフとして参加しました。

https://nodefest.jp/2018/

当日は動画撮影と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/8913

  • prototype.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が説明を書いてくれています。

github.com

これも修正のサンプルDiffを用意して、そのとおりに置き換えていく作業だったため作業としては単純でした。

npm xmas!

f:id:Shisama:20181225025036g:plain
Happy Xmas, JavaScripters!

クリスマスですが、QiitaにWorkerDOMに関する記事を書きました。 記事ではworker-domの使い方の解説を中心にしているためHello, Worldしているだけですが、他にもreactを動かしたりして遊んでみてるのでもう少し色々触ってみてworker-domでreact動かす記事も書きたいと思います。

qiita.com

Qiitaで紹介しているコードはGistにも置いているので興味があればコピペして実行してみてください。

Hello, WorkerDOM! - create element to show 'Hello, ...

『ロケット・ササキ―ジョブズが憧れた伝説のエンジニア・佐々木正』を読んだ

今年の1月に逝去された元シャープの副社長であり技術者の佐々木正さんの生涯を記した本だ。

ジョブズが憧れた伝説のエンジニア」というキャッチーなサブタイトルが付いた本だが、この本はシャープの全盛期を支えたある日本人技術者の一生を綴った物語である。

スティーブ・ジョブズ孫正義と出会うエピソードから始まっていて、元々彼らが好きな人であればエンジニアでなくても最初から最後まで飽くことなく読み切れると思う。

ロケット・ササキ:ジョブズが憧れた伝説のエンジニア・佐々木正

ロケット・ササキ:ジョブズが憧れた伝説のエンジニア・佐々木正

電卓の父

この佐々木正さんは今日の電卓の生みの親でもある。電卓なんて持っていない人も最近は増えてきたと思うが、現在の電卓のようにポケットサイズにまで小型化したのもこの佐々木さんだ。
小型電卓の開発は今から50年ほど前になるが、そのときの技術が現在でも使われている。例えば、スマートフォンだ。
電卓の小型化のために佐々木さんは当時量産できないと考えられていたMOS LSIという半導体を量産させるためにアメリカの企業と提携して量産に成功させた。このMOS LSIは今でもスマートフォンに使われている技術である。
また、電卓の開発からMOS LSIだけでなく液晶パネルや太陽電池を広めたのも佐々木さんの功績である。

共創という考え方

佐々木さんの功績は数多くあるが、佐々木さんは「共創」という考え方を大切にされた方である。「共創」という言葉はこの本でも何回か出てくる。
前述したアメリカの企業とともにMOS LSIを作り、アップルを追い出されたときのスティーブ・ジョブズに助言してその後iPodが作られ、無名だった孫正義に資金提供をし、「国賊」と呼ばれてもサムスンに技術供与したり、企業や国を超えて技術の進歩や繁栄に貢献した。佐々木さんが「共創」や「技術は企業や国のものではなく、人類のものである」という考えを大切にされていたためだということがこの本にも記述されている。

教科書には登場しないかもしれないが、人類に大きく貢献した方だ。
あなたの生活を支えているものはもしかすると佐々木さんがいないと違ったものになっていたかもしれない。
享年102歳、偉大な方が旅立たれてしまった。

参考記事

追悼、佐々木正──孫正義もジョブズも憧れたイノヴェイター、その「偶然と必然」に満ちた102年の生涯|WIRED.jp

故・佐々木正氏が1年前に語った日本の未来:日経ビジネスオンライン

Node.js Core Collaboratorになった 〜なるまでを振り返った〜

表題のとおりNode.jsのCollaboratorになりました。
f:id:Shisama:20181108193251p:plain

最初のPull Requestが2018-05-03なので約半年かけてなりました。
この半年を振り返りたいと思います。
Node.jsのCollaboratorになりたい方やContributeしたい方の役に立てれば幸いです。

ContributeするきっかけになったのがLekoさんがNode学園 29時限目で発表された以下のスライドでした。
(参加していないのですが・・・。すみません。。)

speakerdeck.com

このスライドをきっかけに#node-contribution のslackチャンネルでのやりとりを見たり、実際のPull Requestを拝見させていただきました。
Slackはhttps://iojs-jp.slack.com/から参加できます。

このあと、同僚のid:taminifと主催している関西Node学園 1時限目でNode.jsをビルドして最新版を使ってみようという発表をしました。ちょうどNode.js v10がリリースされるタイミングでした。

ちょっと変更してビルドして動かしてって遊んでいて、ソースコード読むのにも慣れてきたので何かコントリビュートできないかなと思い、OpenになっているIssuePull RequestWatchしていました。

僕はC++が得意なわけではないのでドキュメントの修正やテストの追加ならできそうと感じました。しかし、この時はどのテストが不足しているかもわかりませんでした。

First Pull Request

その後、同僚がLTするということもあってNode学園 30時限目に参加しました。
そこで古川さん id:yosuke_furukawaにお会いし、どこから始めたらいいか相談したところ「fsがPromiseになったところはテストのカバレッジが低いんじゃないかな」と教えてもらいました。
実際root/internal/fs/promises.jsカバレッジは80%を満たしていませんでした。

テストのカバレッジレポートはNode.js Code Coverageで見ることができます。

そこでfsのPromiseのテストのカバレッジを上げるためにできそうなところを初Pull Requestを出したのが以下です。

github.com

初めてのnodejs/nodeへのPull Requestは「これでいいんだろうか」と不安でした。ドキュメントと他のPull Requestを何回も見て問題ないか確認しました。
ちなみにIssueやPull Requestの作り方やコミットメッセージの書き方はnode/CONTRIBUTING.md at master · nodejs/node · GitHubに記載されています。

node/doc/guides/contributing at master · nodejs/node · GitHub にも詳しい手順は記載されています。

CODE_OF_CONDUCTという行動規範も必読です。

Coverage Driven

そこからはずっとカバレッジを上げていました。テストを書いているとバグやドキュメントの不備を見つけることがあります。そういったものを修正することでテストだけではなくユーザーが使うものに貢献することができます。
世界中の多くの人に使われているプロダクトなのでバグの修正は遠く離れた国の誰かの助けになっているかもしれないし、ドキュメントに載せたサンプルコードや説明は公式ドキュメントとして世界中の人のリファレンスになっていると思うとやりがいあると思います。

僕のNode.jsへのContributeの方法はカバレッジ駆動でした。
Node.jsへのContributeはテストから初めてみるのはお勧めです。
慣れてくるとソースコードが結構読めるようになります。
あと、カバレッジが低いところのテストを書いていると知らなかったAPIを見つけることができるのでユーザーとしても学習できると思います。

マルチプラットフォーム

ご存知の通り、Node.jsはWindowsmacOSLinuxで実行できるようになっています。
それら複数OSでも問題なく動作することを保証するためにCIを使って検証しています。
Pull Requestを作るとまずTravis CIでlintとtestが実行されます。
Pull RequestがApproveされていくとCollaboratorの方がCIを実行してくれます。Jenkinsで動いています。
このCIがすごくて、様々なOSでビルドやテストを同時に並列で行います。様々なLinuxディストリビューションmacOSWindowsで実行されます。

f:id:Shisama:20181106021044p:plain

僕は普段macで開発しているのですが、環境によってテストが失敗することもあります。
また、OS依存の機能もあるので可能であれば複数のOSでテストをPull Requestを作る前に実行されることをお勧めします。
僕は普段はmacOSを使っていますが、LinuxWindowsのマシンで確認することもあります。
Windowsmacしか手元にないという方もいるかと思います。
僕もmac上で書いたコードをLinuxで動かしたいときがあります。そのときのためにDockerfileを作りました。
Node.jsの開発環境を作るのが手間って人もこのDocker上で開発していただけると思います。

github.com

あと、npmのパッケージに影響がないかどうかを調べるテストもあります。

github.com

Nominating

コミット数を増やしていくとContributorsに表示されるようになりました。
しかし、Collaboratorになるには他のCollaboratorの方からの推薦が無いとなれません。

node/GOVERNANCE.md at c774dc31988d8a3205a08968c1794f6589b9af06 · nodejs/node · GitHub

「もうそろそろCollaboratorの推薦があるころかな」と思っていたあたりから結構時間がかかりました。
このとき内心では「なれないのでは・・・」と不安を感じました。
ですが、とにかくここでは終われないし、Contributeすることは楽しかったので諦めずに少しずつコミットしていきました。

ある日、TSCメンバーのAnnaさんからTwitterでフォローされて何事かと思ったら「メール送ったよ」ってツイートに対する返信があり、メールをチェックすると"Would you be interested in becoming a collaborator on the Node.js core repository?"とのことだったので、もちろんYesと答えてしばらくするとNominatingのIssueが作られました。

github.com

その後、JoyeeからメールがあってCollaboratorに追加する作業を行うonboarding sessionを行いました。

onboarding sessionはCollaboratorに追加する作業です。Collaboratorとリアルタイムでやりとりします。

onboarding sessionの前に以下のonboardingに関するドキュメントを必ず読んでおいてください。僕は読まずにonboarding sessionをやってしまい、かなり時間がかかりました。
Joyeeには本当に申し訳ないことをしてしまった・・・
node/onboarding.md at master · nodejs/node · GitHub

以下はonboarding sessionで作ったCollaboratorに追加するPull Requestです。

github.com

そして今に至る。といった流れです。

Collaboratorになると

コードレビューを行うことができます。
masterにマージすることができます。
CI(Jenkins)のジョブを実行することができます。
Collaborator Summitに参加することができます。
Node.jsのチームメンバーになります。

英語

Node.jsに限らずOSSにContributeすることで多くのことが学べますし、世の中の役に立つ実感を感じますしやりがいがあります。 みんなもっと使っているOSSへのContributeすればいいのにと思います。
僕の周りでOSS活動をしない人はやはり英語に抵抗があるみたいです。しかし、そこは自動翻訳やオンライン辞書などのサービスにどんどん頼ればいいと思います。
元々英語を扱う仕事をしていたこともあって英語自体に抵抗がなかったですが、Google翻訳を多用しました。(僕はWeblioの中の人ですがWeblio翻訳は使ってな・・・)
まず自分で英文を書いてみて、それをGoogle翻訳で日本語にして意味がわかれば多くの場合通じます。
それでもやっぱり英語は勉強した方がいいです。
onboarding sessionのときは英語でリアルタイムなやりとりをします。
僕はGoogle Hangoutで音声通話で行ったのですが、英語力無さすぎてJoyeeには大変迷惑をかけてしまいました

最後に

ここまで長い文章に付き合ってくれたあなたに素敵な耳寄り情報です。
11/23、11/24に開催される東京Node学園祭にはNode.jsのTSCのメンバーやCollaboratorの方々が海外からも多数来日します!日本ではここでしか聞けない話をしてくれます!
2日目の11/24に学園祭内で開催されるCode And LearnはNode.jsに初めてContributeするまでをCollaboratorがサポートしてくれるハンズオンです。Node.jsにContributeしてみたい方はぜひご参加ください!他にも面白いハンズオン企画があります!
現地で会いましょう!

nodefest.jp

これからもNode.jsにContributeしてもっと良くしていくので、Node.jsをみんな使ってくれると嬉しいです!

あと関西でもNode.jsのコミュニティをもっと活発化したいので関西の皆さん一緒にやっていきましょう!!