linotice

linotice

2017.10.13

Node.jsのコミッターを迎え、炎の特訓—Node.js社内勉強会はこうして始まった

言語サポートチームの5名が並んで座っている様子の写真
インターネット技術の進化のスピードは速く、エンジニアたちは常に新しいテクノロジーの吸収に追われています。ヤフーのエンジニアもまたしかり。
Node.jsを社内に普及させ、それを全力でサポートするためには自らがコア技術を理解しなければならないと考え活動している人たちがいます。今回は、毎週定例で勉強会を開催し、普及に努める「言語サポートチーム」の皆さんに話を聞いてきました。

エンジニア有志で言語サポートチームを結成

ヤフーのサービス開発では、さまざまなプログラム言語が使われています。最新の言語やそのバージョンアップを追いかけ、それぞれのエンジニアが独自にそれを使ってみる、ということもよく行われており、それはエンジニアの技術スキルを高める上では重要な役割を果たします。
しかし、技術を全体で共有し、かつ技術の信頼性を高めるためには、組織としてその言語を使うことを公認し、その学習をサポートすることが欠かせません。それがなければ、エンジニアが書くコードはバラバラになり、チーム内での共有も、メンテナンスも不可能になるからです。
こうした個々のエンジニアの技術進化とその知識の共有化を同時に進めるために、エンジニアを支援する組織として「言語サポートチーム」があります。それぞれ主務を持つエンジニア有志が集い、新しい言語の導入やプログラミング技術について、求められればアドバイスを行います。
一種のボランティア的なバーチャル組織として機能していますが、ボランティアとはいえ、言語サポートチームで活動するためには、所属する組織の上長許可が必要とされます。
今回は、このNode.jsサポートチームにスポットを当て、メンバーたちがどのように日々技術を磨き、それを組織全体に還元しようとしているか、チーム内外で行われる勉強会やセミナーがどのように運営されているのか、その裏側をご紹介します。


――言語サポートチームは、そもそもどういうきっかけからNode.jsのサポートを行うようになったのですか。

(栗山)
もともと言語サポートチームの活動は、社内で使われる技術のスタンダードを作り、それぞれの言語を使う人をサポートする環境作りがミッションです。
社内でも、徐々にNode.jsでの開発や、PHPからの移行プロジェクトが生まれるようになり、そのサポートをしようということで動き出してはいたんですが、大津さんがヤフーにジョインする前はあまり目立った活動はしていませんでした。そこにNode.jsで著名な大津さんが入社したので、これがチャンスとばかりに活動を強化するようになったんです。
Node.jsがライアン・ダール氏によって開発されたのが2009年。2011年に初めて日本でNode.jsのカンファレンスが開かれたときはまだ小さなコミュニティーだったんですが、その頃から大津さんは活躍していて、前職時代からコミュニティー内でよく知られる存在。僕らは「おお!ヤフーに神が降臨した」って感じで受け止めたんです(笑)。


▲システム統括本部プラットフォーム開発本部 栗山 太希

(大津)
最初に会ったときから、期待に満ちたキラキラした目で私を見てましたからね(笑)。私としてもやる気のある若手がいるんだったら、徹底的にしごいて、ヤフー全体のNode.jsに関するスキルの底上げが図れるのではないかと思いました。
それで2016年10月から栗山君にお願いして、メンバーを集めてもらい、勉強会を開催するようになりました。私自身、転職したばかりだったので、自分がヤフーにまず貢献できることといったら、これまでの知見を惜しみなく開陳することだけでしたから。
彼らは入社後4~5年たって、ひと通り自分の仕事を覚えた頃。そろそろ自分の技術をより広い視点で捉えてみようかなという関心が芽生える時期です。そういうタイミングも良かったんだと思いますね。

▲システム統括本部 サイトオペレーション本部  大津 繁樹

(伊藤)
僕は2013年に新卒入社後は社内システムの開発が主務で、社内チャットツールなどを開発していたんですが、そこでオープンソース版のNode.jsをバージョン4.0の頃から使っていたんです。
ただその頃はまだオープンソース版Node.jsは社内スタンダードの技術としては認められていなかった。社内システムで使うならまだしも、外にリリースするサービスを開発するときはこれではまずいだろうなと思ってはいました。
そこでまずはNode.jsサポートチームを作って、この活動を通してスタンダードとして認めさせていこうと。いわば、それまで草の根でやっていたのを、オフィシャルに認めてほしいという動機があったんですね。

▲システム統括本部 プラットフォーム開発本部  伊藤 康太

(大津)
そうなんだ。Node.jsサポートチームの創始者は伊藤くんなんだ。

(加藤)
僕は伊藤くんと入社が同期なので、彼が草の根で始めていることは知っていたし、名古屋オフィスで地図のサービスを開発していた頃、サービスリニューアルのタイミングでNode.jsを使おうとはしていました。
ただ、当時PHPでの開発がメインだった社内でNode.jsで開発をするとなると、OSSのライブラリを一つ使おうとしても、いろいろと社内的に確認が必要だったりして…(笑)。サービスの開発で利用したいけど利用しづらいと感じていました。そういった不便だと感じるところを伊藤くんと話していたら、「だったらおまえもサポートチームに入って、一緒に社内スタンダード化に立ちあがれ」とけしかけられ…そんな経緯で入ることになりました。

▲パーソナルサービスカンパニー 電子書籍本部 加藤 佑典

(栗山)
私は伊藤くんよりも前から社内システムの開発ではNode.jsに触れていました。ただ、ヤフーではかつてはCが、その後はPHPが主流であったため、Node.jsに関するノウハウはそんなに蓄積されていたわけじゃなかったんです。
例えば、CからPHPへの移行に比べると、PHPからNode.jsへの移行はなかなか大変。サポートチームができて、勉強会が開かれるのはチャンスだと思いました。自分にとってNode.jsが最速でシステムをつくれる言語です。それが社内で一般的に使われるようになれば、自分にとっても有利になる、というひそかな打算もありまして(笑)。

(新井)
僕はNode.jsサポートチームでは一番新しいメンバーです。主務は広告のシステム開発なんですが、新しい技術選定の時にNode.jsを使いましょうと提案したんです。その過程で以前からNode.jsを使っていた栗山さんに技術顧問みたいな感じでついてもらってはいました。
勉強会のことは知らなかったのですが、2016年秋の「東京Node学園祭2016」に行ったとき、たまたま同期の伊藤くん、加藤くんと出会って、あの大津さんを迎えて勉強会を開いているんだよという話を聞いて、だったら僕も参加したい、ということになりました。

▲マーケティングソリューションズカンパニー データ事業推進本部 新井 大輝

課題をクリアするまで、前に進めない

Node.jsサポートチームはまだ他にもメンバーがいますが、まずは大津をチューターにして、この4人の若手で勉強会を開くことになりました。勉強会の名前は「Node.js Core API勉強会」です。毎週月曜の14時から2時間みっちり。サポートチームの活動は会社からも公認されているので、業務時間内に社内で勉強会を開くことができます。

勉強会は、以下のようにAPIをカテゴリー分けし、基礎的なAPIであるカテゴリー1のものから順に学習を進めています。

カテゴリー1: 基本的で他に依存性のないモジュール群
Events / Modules / Buffer / Stream / Errors / Assertion Testing
カテゴリー2: Node固有のもので本体の動作に関連するモジュール群
Globals /Timers / Process / Console / Command Line Options / Debugger
カテゴリー3: OSの機能や他のライブラリと関連するモジュール群
File System / Net / UDP/Datagram / TLS/SSL / Crypto / DNS / ZLIB / Child Processes

モジュールごとに担当を決め、サンプルコードを書いて全員の前で発表。大津が「ここはなんでこう書いたの?」と質問を浴びせ、わからないところはその場で調べます。その場でコードを書き替えるという、いわゆるハンズオン型の勉強会です。
ただ、毎週定例で開き、10カ月たった現在も、進捗はようやくカテゴリー1を消化したところ。一つの課題をクリアするまではずっと同じ課題に取り組み続けるという、この勉強会ならではの厳しいルールがあるからです。

――Node.js勉強会はどんな感じでやっているんですか?

(伊藤)
もう毎週泣きそうですよ(笑)。大津さんが「なんで、なんで、なんで?」とどんどん突っ込んでくるから。自分でもよくわからず、モヤモヤしたままで書いたコードは必ず突っ込まれますね。めちゃ厳しい指導教官のゼミに入ったみたいな感じです。

(大津)
最初は面食らったと思いますよ、みんな。私は用語の定義とかにも厳しいし、調べが足りないと叱りますから。口をすっぱくしていつも言っているのは、「ソースコードや言語仕様という一次資料にまずは当たれ。その辺のブログあたりから引用してごまかすんじゃない」ということ。
それでも、この10カ月で彼らはずいぶん成長したと思います。私の質問にすぐ答えられなくても、少なくともどこをどういう風に探せばいいかはわかってきたようですから。

(栗山)
社内の勉強会はたくさんあるけれど、大抵この言語はこういうところが面白いと部分的に触るものが多い。その点、CoreAPI勉強会は違う。
まずAPIのツリーを作って、一番重要なAPIは何かを示しながら、サブのカテゴリーを展開していく。全体がとても体系化されているので、いま自分がどこにいるか、自分がやっている機能は今後どこにつながっていくのかというのがよく見えます。

(大津)
技術の学習というのは、どうしても自分が使うところだけはわかるけれど、ふだん使わないところはよくわからないと、虫食い状態になっていることが多いんです。これでは当座の業務には使えるかもしれないけれど、40歳、50歳になっても最前線のエンジニアとして力を発揮するためには不十分です。
技術の土地勘をもってそれを頭の中で体系化し、どういう風に深掘りしていき、かつ一つのまとまりとして理解するのか。他の言語や他の技術の学習でも同じことですけれど、大きなマップを示しながら、自分はここが足りていないとか、足りているとかのポートフォリオを描くことが大切なんです。

(新井)
自分は、OSレベルの知識が抜けているところが多かったんですが、CoreAPI勉強会は文字通りコアをたたくわけですから、OSの機能まで勉強しなければならない。その重要性がわかっただけでも大きな収穫でしたね。

(加藤)
コアコミッターと一緒に勉強会をする機会は社内でも少ないと思います。普段勉強する時、調べてもなかなかわからない部分はどうしてもおざなりにして進んでしまうんですが、この勉強会では大津さんから鋭いツッコミを受けたり、サポートしてもらったりしながら進めていけています。こういった部分は普段よりすごい勉強になってますね。

(大津)
OSレベルまで掘り下げると、逆に上部の構造もよく見えるようになります。でも、私がなんでも全部知っているわけじゃない。勉強会に臨む前日は、それこそまる1日かけて下調べしたりしているんだよ。

Node.js勉強会プロジェクトの成果は実務に反映

――大津さんもかなり苦労されているんですね!ところで、この勉強会での成果は、みなさんの実務にはどう反映されているのでしょうか。

(新井)
設計力は上がったように思います。ネットワークやOSなど低レイヤーの知識も身につくので。

(加藤)
普段はYahoo!ブックストアの開発をしています。勉強会を通じてNode.jsのよりコアな部分を知ることで、その裏付けを元に技術提案することができるようになってきました。実際にブックストアでもNode.jsを採用したプロジェクトも動き始めています。

(栗山)
勉強会に参加する以前の私は、Node.jsについては、あくまでも自分はユーザーという立場。「Node.jsのここイケてないな」と思っても、それを直すというまでの意識はなかった。
ところが、勉強会でソースコードに触れて、なぜこういう設計になっているかを知るようになり、コアにコミットしていくのも面白いかもと思うようになった。ちょうど最近、ヤフー社内でもOSSコミッターになることを推奨する制度ができたということもあって、今後はコミッターを目指したいと思うようになりました。

(大津)
コードベースではまだないけれど、ドキュメントの修正については本家にフィードバックして直してもらうという経験をここの全員がすでに積んでいます。ちゃんと英語でやりとりしながらね。たまにウラのチャットで私がサポートすることもあるけれど(笑)。今後は、Node.jsのバグを直すところもぜひやってほしいです。

(新井)
CoreAPI勉強会の成果は、部署内で開く勉強会にもできるだけ還元するようにしています。僕の部署では、ふだんはJavaScriptで仕事をしているデザイナーが興味を持ってくれました。WebブラウザーもNode.jsも同じJavaScriptのAPIを使うことがあるんですが、Webとサーバーでは挙動が異なることが多い。そういうこともあるから、コードを共有する時は気をつけようねと言うと、納得してもらえる。

(大津)
そういうことが言えるのも、技術全体を体系的に学んでいることの成果の一つだと思いますね。

――大津さんは10カ月、勉強会を主催してきて、ヤフーの若手エンジニアたちの成長可能性をどうご覧になっていますか。

(大津)
その成長には目を見張るものがありますよ。勉強会でのコメント自体が変わってきたし、ソースコードをちゃんと調べる癖もついてきました。そもそもヤフーって、20年以上続く他のインターネット企業に比べても現場で働いている人が若いなあ、という印象があります。
だからなのか、レガシーな技術への妙なこだわりが少ない。新しい技術、この場合はNode.jsですけれど、それへの関心や取り組み方も熱っぽいものを感じます。
それに、ヤフー全体に言えることですが、地頭の良い人が多い。何かのきっかけがあればすごく伸びるだろうと感じています。

インとアウトのバランスがエンジニアを成長させる

Node.jsサポートチームはチーム内での勉強会をするだけでなく、その成果をいかして子会社も含むヤフーグループの他社員に向けたセミナーも開催しています。
これまで東京で2回、名古屋、大阪で1回ずつ開催。あくまでも初心者向けということを前提に、CoreAPI勉強会で学んだ知識をカテゴリーの低いところから徐々に上のレイヤーへと移行しながら伝えています。
登壇して発表するのは、CoreAPI勉強会のメンバーで、それぞれ持ち時間が40分。全体で3時間におよぶロングセミナーです。初回は30人の参加でしたが、2回目以降は100人規模の参加者を集めるまでになりました。

――自分たち内輪で勉強するのと、その成果を外に向けて発表するのとではまた緊張感が違いますよね。

(伊藤)
そんなに大人数の前で話すことが普段の業務ではないのでいい経験ができています。

(加藤)
僕はヤフーが主催するHack Dayというハッカソンイベントで司会を兼ねた技術コメンテーターをしたこともあって、大人数の前での発表は慣れているつもりでしたが、Node.jsセミナーではまた別の緊張感や刺激がありますね。どんな質問が来るかわからないので、常にAPI勉強会をやったことを復習している感じがあります。

(栗山)
セミナーの発表資料を作るのがもう大変なんですよ。勉強会は深いところまでやりますが、セミナーは受講者の全員に理解してもらえるような資料を作らなくちゃいけない。その資料も全員で検討しながら、「こういう風にしたほうがより伝わるんじゃないか」みたいな議論をしながら、練り上げています。

(大津)
これまでセミナーは4回やっていますが、毎回、資料の内容は変えています。前回の成果をレビューして、ストーリーを変えたり、配置を換えたり。セミナーで使うサンプルコードも最初は4人バラバラだったのが、次第に共通サンプルコードを一つ書いて、担当ごとに解説するというような形ができるようになりました。
参加者のレベルもさまざまなので、何を伝えるかと同じくらい、何を伝えないかも大切です。

(加藤)
セミナーでは毎回参加者からアンケートを採っているんですが、「初心者」といってもさまざま。どういうレベルをターゲットにしていくか、毎回悩みますね。

(新井)
セミナーを通して、人に伝える技術を学んでいます。自分たちがAPI勉強会で調べたことを全部広げちゃうんではなく、その1割ぐらいを出す感じのほうがいいと、大津さんにはアドバイスをいただいています。

(大津)
100調べてたことをそのまま全部出しちゃうと、どうしても内容が浅くなってしまうんです。100調べたことを10に絞れば、全体のエッセンスが際立つ。たとえ発表しなくても、残り90は自分の資産になって残りますから。

――大津さんはセミナーではファシリテーターに徹しています。あえてこの4人を登壇させる狙いは?

(大津)
インプットばかりやっていると、知識がいびつになっちゃうんですよ。同時にアウトプットすることを考えることで、バランスが取れるんです。アウトプットを意識すると、自分が足りないものも見えてくるから、さらなるインプットにも精が出る。この好循環に期待しているんです。インとアウトのバランスは、技術者が成長するためには不可欠のものだと思います。
もちろん、より効果的な伝え方を習得してほしいというのもあります。セミナーでの発表にしても、ブログの記事にしても、同じ内容でも構成を一つ変えるだけで伝わり方が違いますから。

(加藤)
昨年、 Yahoo! JAPAN Tech BlogにNode.js APIの記事を投稿したんですが、最初の原稿は大津さんには徹底的にダメ出しを食らいました。構成を考えろとか、図を入れたほうがわかりやすくなるとか。で、その記事がはてなブックマークで100を越えるかどうかを指標にしていたんですが、なんとかそれを達成できました(笑)。

――今後、CoreAPI勉強会やNode.jsセミナーをどう発展させていきますか。

(大津)
CoreAPIの勉強会のほうは、掘り下げる部分が増えて、だんだんついていけなくなっている感じもちょっとしますので、これをどうしようかなと。セミナーも、登壇者の担当部分を固定化してしまったので、技術領域の粗密が出てきてしまった。これらをバランスよく是正する必要があります。セミナー対象も初心者向けというのが一通り終わったら、中級にレベルをアップするかもしれません。いつかは現在のコアメンバーが、それぞれ勉強会を主催して、次の世代を育てていけるようになるはずです。
技術についても、個人的には何もNode.jsだけにこだわっているわけではないんです。常に新しいテクノロジーが出てきますから、それを自分たちのものにするためには、同じやり方で取り組めばいい。そのひな型になるような勉強会・セミナーのスタイルを広めることができればいいなと思います。

採用情報 公式SNSアカウント

このページの先頭へ