【書き起こし】技術コミュニティとの相互作用 – 上田拓也 @tenntenn【Merpay Tech Fest 2021】

Merpay Tech Fest 2021は、事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知れるお祭りで、2021年7月26日(月)からの5日間、開催しました。セッションでは、事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介していきました。

この記事は、「技術コミュニティとの相互作用」の書き起こしです。

上田拓也氏:それでは「技術コミュニティとの相互作用」というタイトルで、メルぺイ・エキスパートチームの上田が発表させていただきます。よろしくお願いいたします。

私は、上田拓也と言います。アカウントは@tenntennというアカウントでTwitterやGitHubをやっていますので、ぜひフォローしてください。私のチームは、メルペイのエキスパートチームというところで活動を行っています。おもに対外活動を行う部署になっています。

エキスパートチームは50%以上の時間を技術コミュニティの貢献に充てているようなチームになっています。具体的には、新しい技術を社内に取り込んで、社内の技術を社外へ還元する活動をしています。例えば、社内外での技術の普及(私の場合はGo)を記事や書籍の執筆、社内外のイベントやカンファレンスでの登壇、インタビューなどを通して行っています。われわれエキスパートチームのメンバーだけが発表するわけではなくて、社内メンバーの執筆や登壇のサポートも行っています。

エキスパートチームでは「技術をアウトプットするところに技術は集まる」という表題を掲げて活動を行っています。社内で生まれた知見を技術コミュニティで発表したり、記事を書いたりして、そこに何かしらのフィードバックをいただき、それをまた社内の勉強会で話したり、プロダクト開発に生かすといった流れをつくっています。

(*GoのマスコットキャラクターのGopherの原作者はRenée Frenchさんです。)

私は、Goの普及の活動をおもにしているのですが、私の場合は「人類Gopher化計画」という、ちょっと怪しげな計画を立てていて、私の周囲、皆さんの周囲にいる人たちみんなをGopherにしていこうというような計画を立てています。名前はすごく怪しいですけれども、非常に真面目な計画で、社内外でGoのエンジニアを増やす、つまり、Gopherを増やすという活動になっています。

Gopherが増えると何がうれしいかというと、コミュニティ全体のGoの知見が増えます。いろいろな会社でGoを使って開発すると、その中から生まれる知見がたくさん出てくるかなと思います。その知見を生かしてプロダクト開発が行われ、さらにGoのエンジニアが増えると、一緒に働くGopherも増えるかも、ということで活動を行っています。

今回、技術コミュニティとの相互作用ということで、具体的にはまず、社内のメンバーのスキル向上を行い、社内から技術コミュニティへのアウトプットを増やし、そして、技術コミュニティで学ぶ場を増やして、技術コミュニティでフィードバックや他社の知見を得るといった流れをつくって、うまく技術コミュニティと相互作用しながら社内の知見を高めたり、技術コミュニティを活発化していこうという話になっています。

社内メンバーのスキル向上について少しお話をしていきます。私のチーム、私の活動としては、新卒研修や社内の勉強会なども行っています。新卒研修は、メルカリグループ全体の新卒研修を担当していて、その中でGoの研修を行っています。また、社内向けのGopher道場と呼ばれるGoを学ぶ勉強会など、また、静的解析の技術を学ぶ勉強会なども行っています。

例えば「Dev Dojo」これは新卒研修ですね。Dev Dojoでは、Gopher道場の資料を使って自主学習をしていただいて、そのあとにいくつかのチームに分かれてモブプログラミングをしてもらうといった研修を行っています。例えば、モブプログラミングの題材は、右下にスクリーンショットが貼ってありますが、Webアプリをつくりましょうと。どういったWebアプリかというと、Goのモジュールパスを入力すると、それに対して「go vet」という公式が用意している静的解析ツールを実行してくれるものをつくってくださいとお願いしています。実はこの題材は非常に考えることが多く、面白いです。、Webアプリになっているのでうまく並行処理ができるかだったり、Goのモジュールの仕組みについて勉強しているかということが問われます。

また、社内では静的解析勉強会も行っています。これは、週1回1時間行っていて、先日、ちょうど一通り資料をやり終えました。これは『プログラミング言語Go完全入門』という、私がつくっている教材の第14章、計286ページある超巨大な資料をみんなでやっていくということをやっています。どんなことをやっているかというと、構文解析からポインタ解析まで幅広く静的解析について学んでいます。例えば右下のスクリーンショットの例を見ると、社内で使われているクラウドスパナーのセッションリークを発見するようなツールについて、これは私がつくっているものですけれども、この仕組みについて学んだりしています。座学だけでなく、手を動かしながら学ぶという機会をつくっています。

次に、社内からアウトプットを増やす方法についてお話したいと思います。ここではおもにGo Fridayと雑誌の連載、社外向けの勉強会で登壇機会をつくるといった話をしたいと思います。

Go Friday、これは私が入社する前の2016年から続く、週1回の非常に緩い社内勉強会になっています。今まで累計230回以上行われている非常に長い勉強会になっています。GoとGCP(Google Cloud Platform)を中心に、参加者が興味のある内容をおもに雑談します。雑談なので準備はあまりしなくて、こういうネタが話せるよといったものだけを持ってきて話をします。特に、毎週出てくださいとか、こういうことを調べてくださいみたいな強制は一切ありません。忙しいときは出なくてもいいし、耳だけ傾けてもいいし、おもしろそうであれば混ざって話をする、そういった気楽な勉強会になっています。気軽に学べて、気軽にアウトプットができると。準備をする必要がないので、気軽にプロダクト開発の中で生まれた知見をほかのプロジェクトチームの方にアウトプットをしてフィードバックを得るという、小さなサイクルを生み出すのに非常に役に立っている勉強会です。

続いて『Software Design』におけるGoの記事の連載です。これは、2年間続いたGoに関する連載なんですけれども、2021年の1月号で終了を迎えたんですけれども、総勢20名以上の社内メンバーが執筆を行いました。2年続いたので相当数の記事が公開されています。『Software Design』という有名な技術雑誌で連載するという機会はなかなかないことなので、執筆経験の少ないメンバーを中心に執筆のお願いを行いました。非常にうまくいろんな話題を書いていただいたので、今後『エキスパートたちのGo言語』という名前で、今年2021年の冬に書籍化される予定なので、ぜひ、書店で手に取っていただければいいかなと思います。

こういった感じでメルペイの中では、メルペイにととまらずメルカリグループの中では、社内でアウトプットを細かくする機会とか、社外へアウトプットする機会などが数多く提供されています。例えばメルペイのバックエンドエンジニアのyuki.itoさんの例を見ますと『Software Design』の連載を2回、特集記事を1回行っています。さらに、開発ライブ実況というイベントでYouTubeの動画再生回数が1万5,000回(2021年9月時点)以上という、非常に人気のあるコンテンツをやってくれたりしています。また、社外のカンファレンスで登壇をたくさんしてくれているので、こういった形のエンジニアがメルペイ社内には何人もいるということになります。

このように登壇機会をつくるようにメルペイエキスパートチームではしているんですけれども、今の状況であればオンライン勉強会を積極的に行っています。YouTubeで配信したり、Remoなどのコミュニケーションが取りやすいオンラインのサービスを使ったりして勉強会などを行っています。そういった勉強会の中で、社内の技術やメンバーを社外の人たちに知ってもらう機会を積極的につくっています。また、社外の人をゲストに呼んで一緒にお話をすることで、コラボレーションする機会なども積極的に設けています。例えば「Gophers Office Hours」という左下のイベントでは、Goのエンジニアをお呼びして、テーマを決めて座談会をする。そして、視聴者の方からいただいた質問に対して答えていくみたいなイベントになっています。右下の「開発ライブ実況」のイベントでは、事前に与えられた課題を解く様子を収録して、それを当日、私やほかのメンバーと、やんや言いながら実況していくというイベントになっています。

こういった形で、社内のメンバーのスキルを向上させていって、そして社外の技術コミュニティで発表していくということをやっています。ただ、それだけでは足りないと考えていて、その発表する場というものをさらに増やしていく必要があるかなということで、技術コミュニティでさらに学ぶ場を増やすという活動もしています。これは社内に閉じておらず、社外も含めて学ぶ場を増やせればいいかなと考えて活動しています。技術コミュニティに参加する学習者の方のスキルレベルはさまざまなので、レベルにあったコミュニティづくりをすると良いかなと思って活動しています。継続的に学習ができるコミュニティをつくって、それぞれのエンジニアがステップアップするような関係をつくるように心がけています。

例えばすごく雑なプロットになるんですけれども、横軸にGoのスキル、縦軸にその他の開発スキルという軸をつくって、コミュニティに参加する人たちのスキルレベルをプロットしたものを表示しています。Aが、Goのスキルも初級で、その他の開発スキルとしてLinuxのコマンドやシェル、コンピュータサイエンスなどもまだ学びはじめたばかりの方だったりとか、逆に、Goも知っているし、その他の開発についても精通しているといった方など、さまざまといらっしゃるかと思いますが、それぞれのレベルに合わせてコミュニティづくりをしていく必要があると思って活動しています。

このようなことを考えてコミュニティづくりをしています。例えばGoコミュニティでGoを学びたいという方には、Aの初めて学ぶ言語はGoだったり、ほかの言語をやっているけれども、Goはまだ学んだことがないみたいな方もいて、両方を考慮する必要があります。例えば図のAからの流入については、Progateのレッスンを監修していたりとか、大学での集中講義をしていたり、Step up Goといわれる学生向けのイベントなんかをしています。ここから徐々にレベルアップしていって、最終的にはGoのカンファレンスである「Go Conference」で発表していただくといった流れをつくっています。図のCからの流入に関しては、すでにその他の開発スキルを持っている方が多いので、ある一定の難易度の高い学習する場を提供しています。例えば「Gopher道場」と呼ばれるGoを体系的に一気に学ぶイベントなんかをやっています。

もう少し詳しく見ていきますと、学生向けの学習の場を提供している例について話していきます。1つ目は、大学におけるGoの集中講義です。これは毎年2月ぐらいに集中講義を大学で行っています。講義自体はとある大学で行っているんですけれども、同じ内容をメルカリのほうで「Step up Go」という名前で、ほかの大学の学生も参加できる形で行っています。これは、1年間を通して1ヶ月に1回ちょっとずつGoを学んでいくイベントになっています。内容としましては、ハンズオン形式で、ちょっと見づらいですけれどもここに書いてあるような、基本から並行処理までを学べるような形を取っています。また、去年と今年は設けられてないんですけれども、毎年、海外のカンファレンスへのスカラーシップなどを設けており、学生と一緒に海外カンファレンスに参加して学ぶ機会というものをつくっています。

続いて、Gopher道場について説明します。Gopher道場は、Goを体系的に学ぶ場になっていて、全4回の講義と、LT大会を行っています。最初は、Goの基本中の基本の基本構文、ifとかforとか、そういったところから徐々にやっていって、ウェブアプリをつくる技術とか、あとはデータベースの話なんかも行います。一通り終わったら、何かしらつくったりしてLT大会を行ってアウトプットして、知識の定着に結びつけています。Gopher道場は、Slackによるコミュニティもつくっていて、互いにレビューし合ったり、コミュニケーションを取ったりしています。また、課題による選考を行っているので、ある一定以上のスキルレベルの方が参加するという形になっているので、同じレベル感の人と学ぶという機会を提供しています。

ただ、Gopher道場自体は、申し込み課題があって全員が参加できるというものではないので、Gopher道場の中に自習室という形で誰でも参加できる場所をつくっています。これは、Gopher道場の講義動画を公開していて、講義動画を見たり、参加者同士でコミュニケーションを取ったりする場を設けています。こちらは無料で公開されていて誰でも参加できますので、興味のある方は、ぜひ参加してみてください。2021年9月時点で,000人以上参加されているのではないかなと思います。

また、Gopher道場では、強化合宿という形で、Gopher道場の卒業生、または同等レベルのエンジニアに限定して、新しい技術や高度な技術について学ぶ場も用意しています。例えばGo1.18で導入される予定の型パラメータのような、2021年9月時点ではまだリリースされていない技術について講義を行ったりもしています。

Gopher道場の資料をさらに詳しくGenericsだったり、テキスト処理を追加したものを『プログラミング言語Go完全入門』という形で社外に公開しています。15章からなるGoを体系的に学べる教材となっているので、Goを学んでいる方はぜひ一度、目を通していただければいいかなと思います。少しずつアップデートしているので、2021年9月時点で最新版のGo1.17の話題とか、次のリリースされるGo1.18の話題とかも盛り込んでいますので、ぜひご覧ください。

このように、技術コミュニティとの相互作用は、社内メンバーのスキルを向上して、社外へアウトプットを増やして、技術コミュニティの学ぶ場を増やして、その中で生まれた知見やフィードバックを得るというような一連のぐるぐるとした構造を生み出すことによって、技術コミュニティも、社内メンバーのスキルも向上していって、プロダクト開発に生かしていくというような流れを目標に活動しています。

このような流れは、直近のエンジニアの採用に本当に意味があるのかとたまに聞かれることがあるんですけれども、実は、非常に効果的な活動になっています。当然、技術コミュニティへの貢献というのは、自社の採用活動だけの目的でやっているわけではないんですけれども、当然、われわれもエンジニアの採用を行っているので、その採用活動と両立できるということは非常に大事なことだと思っています。

私の活動は、長期的な戦略で将来のGoのエンジニアが増えるという活動をしているんですけれども、短期的にも採用へ非常に効果のある活動になっています。大事にしていることは、社内のエンジニアたちがおもしろいと思うことをやるようにしています。なので、社内のエンジニアが楽しめないようなことはあまりしないようにしています。あと、2016年から少しずついろんなことを継続してやっていますが、ずっと継続していくということが大事じゃないかなと思います。単発でやっていくような活動というのは、やはり効果が見えにくいかなと思います。

「長期的に考えた戦略は短期的に活きるかもしれない」という話をします。Goエンジニアが少ないと言われていますが、どうすればGoエンジニアが採用できるかということは、メルペイにおいても非常に難しい問題ではあります。当然、採用活動は頑張っているんですけれども、それだけでは足りないので、Goエンジニアの総数を底上げするような活動をしています。業界に増えれば自社の採用にもつながります。自社の採用だけにとどまらず、他社の採用にもつながっていくような活動をしていけば、業界にどんどん知見がたまっていくのかなと思います。これは非常に長期的な活動になっていますけれども、実際には、Gopher道場の卒業生から入社するパターンということも多くて、短期的な採用活動にもつながっているかなと思います。

社内のエンジニアがおもしろいことをする。これも非常に大事な話になっています。目的をしっかり持って、間口をあまり広くし過ぎないということも大事です。ある一定のハードルを設けて、このハードルを越えた人たちだけがイベントに参加できるみたいな形を取ることも重要です。自分たちが知りたいことが学べるイベントというのも大事で、自分が知りたいと思っていることを題材にイベントを開くと、同じような興味を持つエンジニアが集まってくれるので、非常に有意義な活動になります。分かりやすさと技術的に「かっけー」と言われるような、そういった部分を両立するように心がけています。

例えば、これは学生向けの活動になりますけれども、2020年のサマーインターンシップについて紹介させていただきます。この年のサマーインターンシップは、静的解析という、コンピュータ・サイエンスを学んでいる学生にとっては割と馴染みやすいテーマを5日間で一気に学んで、実用性の高いツールをつくってもらおうといったものでした。構文解析からポインタ解析まで、幅広いGoの静的解析の話を行いました。この活動はは新卒採用に大きく貢献したという話を聞いています。一般的に新卒採用というと、ハードルを低くしていろんな人に聞いてもらうというイベントのほうが多いんじゃないかと思うんですけれども、逆に、興味の幅を絞って難しい課題を提供するということしても、割とうまくいく例だなと思います。

ここで、まとめです。技術コミュニティとの相互作用は非常に大事であるという話をさせていただきました。自社の採用だけに限らず、他社の採用、技術コミュニティの発達みたいなことを考えて活動すると、自社のエンジニアのスキルも向上するし、技術コミュニティも活発になるし、長期的な採用活動だけにとどまらず、短期的な採用活動にも効果があったという話でした。

私の発表はここで終わりたいと思います。ご清聴ありがとうございました。