Come On!! Go Fan!!(前編)~各社のエキスパートが語る、Go言語活用の最前線とは?~

2018年10月30日、Go言語の発展と推進を目的に、Goファンを対象として開催された「golang fan meetup」。Go言語の有識者を招き、パネルディスカッションを行いました。Goを選定したきっかけに始まり、どのようにGoを組織に浸透させていったのか、Goの好きなところ、さらにはGoの未来まで、Goファンが気になる話題が目白押し。充実のイベント内容を、前編・後編にわたってレポートいたします。

<パネラー>
●株式会社エウレカ 取締役CTO 金子 慎太郎 氏
●株式会社メルカリ/メルペイ 上田 拓也 氏
●株式会社はてな チーフエンジニア兼Mackerelプロダクトマネージャー 松木 雅幸 氏

<ファシリテーター>
●株式会社サーキュレーション CTO 大谷 祐司 氏

登壇者のご紹介

現在、各企業がおかれているGo言語活用のフェーズとは?

大谷:福岡を拠点にサーキュレーションのCTOを務めている大谷と申します。本日はファシリテーターをさせていただきますので、どうぞよろしくお願いします。さっそくですが、登壇者の方は順に自己紹介をお願いします。

金子:株式会社エウレカのCTO金子です。エウレカにはWebエンジニアとして入社し、iOSやAndroidアプリ、インフラ系に携わってきました。その後、デーティングサービスのPairsをPHPからGo言語へ書き直すことになり、実際にGo言語をプロダクション環境で使用した経験があります。
CTOとして事業戦略に関わる技術戦略の策定やエンジニア組織のマネジメント業務が主ではありますが、コーポレート部門のプロセスについてGoを活用して改善に取り組んでいる状況です。
Pairs自体はデーティングサービスで、実はかなり複雑なシステムです。ECサービスはヒトとモノのマッチングサービスですが、デーティングサービスはヒトとヒトとをマッチングさせるサービスで更新性が高く、技術的な挑戦があります。現在は日本と台湾、そして韓国に展開しています。ユーザーは全世界に800万人。先程触れた通り、2014年末にPHPからGoにフルスクラッチしました。決済システムや投稿監視システムはマイクロサービスとしてすべてGoで書かれています。複雑性の高いサービスに対して、Goのシンプルさがチーム開発やコードの読みやすさ、書きやすさに貢献してくれています。

上田:株式会社メルカリの上田です。私はGoのコミュニティやGoビギナーズ、あとはGoogle Cloud PlatformのユーザーグループのGCPUGのスタッフもやっています。 メルペイのエキスパートチームに所属していて、稼働の50%以上を技術コミュニティへの貢献にあてています。活動内容としては、イベントへの登壇やカンファレンスへの参加ですね。あとはGopher道場というGoの初学者を集めた社外向けのイベントも主催していて、講義を行っています。

松木:株式会社はてなの松木と申します。僕はアプリケーション側のチーフエンジニアということで、主に採用や技術ブランディングに関わっています。事業としてはMackerelというサーバー監視サービスのプロダクトマネージャーとしてプロダクトの仕様や方向性を決めたり、技術選定や技術戦略も行っていますね。Mackerelの中ではScalaやGoを活用しています。
個人的な活動としてはGoでいろんなツールを製作したり、『みんなのGo言語』という書籍の執筆にも関わるなどしました。あとはインフラ領域を含めたアプリケーション開発を得意としているので、ISUCONで何度か優勝した経験もあります。今日はGoに興味を持っている方、そして実際に使っている方がいらっしゃっているので、良いお話ができればと思います。よろしくお願いします。

大谷:ありがとうございます。では早速、パネルディスカッションを開始したいと思います。

Goを選定した基準と導入の経緯

新たな技術的チャレンジングとして選ばれるGo言語

goevent

大谷:今回のイベントの大テーマは「あなたの会社のGo言語」となっています。みなさんも各社でGo言語を使われていると思いますが、まずはどういった経緯でGo言語を選定するに至ったのかお聞かせいただければと思います。金子さん、いかがでしょうか。

金子:エウレカがGo言語を使い始めたのは、先程も少しご説明した通り2014年末からです。PHPからGo言語に移行したわけですが、そもそものきっかけはデータベースのスキーマを書き換えるとコードベースがほぼ使えなくなってしまうので、それならフルスクラッチをしてコードベースも改善したほうが良いだろうという判断です。
PHPのナレッジが社内には蓄積されてたので、そのままPHPを使うか、あるいはRubyにするか、Scalaか、Goかという選択肢がありました。その中でチーム開発の観点からシンプルさやビルドの速さ、処理の速さを踏まえてGoを選択しました。

上田:メルカリのサービス自体はPHPで書かれているのですが、最近はマイクロサービスに移行するにあたってGoを中心に採用していっています。

松木:はてなの場合、あまり言語の統一はしていません。いろんな言語を使っていこうという方向にシフトしている最中です。その中でGoも使っていこう、という流れになっていますね。Goの採用にあたって他社さんと異なるのは、インフラ系のエンジニアから「Goっていいよね」という話題が盛り上がってきた部分です。DockerやConsulなど、筋の良いツールがみんなGoで書かれていたため、2013年頃からGoを評価する動きがはじまったのです。その中で社内のオペレーティングツールを作る際にGoが活用されてきた、という経緯があります。Perl、Python、Rubyなどのスクリプト言語と比べると、Goならサーバーにバイナリを置いてしまえば動作するという利点があり、徐々にGoの活用が浸透していきましたね。
Mackerelにおいてはmackerel-agentと呼ばれるユーザーさんのサーバーにインストールしてもらうプログラムをGoで書いたのですが、パフォーマンスが良くメモリーも食わず、とてもマッチする要件だったという実績もあります。そういった諸々の背景があり、現在はマイクロサービスの部分でもGoの活用が進んでいます。

goevent

Goへの切り替えはスムーズにできたか?

社内でGo言語をしっかり活用するため、丁寧な指導からスタートしていく

大谷:各社、それぞれのサービス状況や新技術への挑戦として、もともと別の言語で製作を進めていたところからGo言語への切り替えを行っていることがわかりましたが、切り替えそのものはスムーズに進んだのでしょうか?

金子:当時、弊社はインターンを経て入社した人が多く、静的型付け言語にそこまで経験がない人が多かったです。そのため、知見を社内で蓄積するのは苦労しました。毎週勉強会を開催し、初歩的な部分からPHPやC言語との違いを丁寧に教えていきました。

上田:メルカリはPHPからGoへの移行している部分がありますが、メルカリでPHPをやっていた人も社内勉強会や実務を通じてGoを勉強していってます。PHPも書くしGoも書く、という人が増えている感じですね。

金子:フルスクラッチを決めてから書き始めて少し経ってから、変更点がビルドできなくなっていたりと、困った話もありました。フルスクラッチ当初は複数のリポジトリで開発を進めていたため、発生した問題でした。

大谷:なるほど。松木さんはどのように切り替えていったのでしょう?

松木:はてなだと、Perlで書かれているはてなブックマークのコア部分をScalaに置き換えていくプロジェクトが現在走っているのですが、Go言語での大きな書き換えは実はあまりやったことがありません。書き換えというよりは、サービスの隙間を埋めるようなツールや新しい仕組みを作る際にGoを使ってみたいという現場の声があり、それに僕やCTOなど知見のあるメンバーが応えることで、「Goは使えるぞ」という空気を社内に醸成していった部分が大きいです。 goevent

Go言語をどのように組織に浸透させているのか

会社としてGoを盛り上げていく気持ちで、勉強会やイベントを積極的に実施

大谷:みなさんなかなかご苦労されている状況ですね。そんなGo言語のエンジニアが少ない状況で、開発組織にどのようにGoを浸透させていったのでしょうか?

金子:Goに限らずの話ではあるのですが、会社としてエンジニアリング組織を盛り上げるための勉強会は大切なので、iOSやAndroid、Webフロント、サーバーサイド、インフラ、デザインチームそれぞれで勉強会を開いています。Go言語に関しては先程もご説明したようにエンジニアチームで勉強会を行って僕が教えていますが、インターン入社の社員以外にもまだまだミドルレベル、新卒1年目レベルの社員もいるので、そういう人たちが最初の段階で躓かないように、僕が直接教えて勉強会でサポートしている形ですね。
それから、今回のようなイベントもそうですが、会社としてGoのコミュニテイに参加することもかなり重要だと思っています。個人ではなく会社としてGoを盛り上げていきたいので、こういった機会があれば積極的に参加したいです。

上田:うちもさっき言ったような、週に1回の勉強会を100回以上開催していますが、なるべく止めないように、どんな小さなことでも共有して必ず開催する、というスタンスで続けています。 あとは私が社外向けに行っているGoの講義を社内向けにも開催したり、PHPやWeb、QAエンジニアに向けても講義しています。

松木:うちはエウレカさんやメルカリさんと違って、あまり戦略的に浸透を狙ってはいません。個人の草の根活動で頑張っているところが大きいですね。イベントがあれば参加や登壇を後押しすることは頻繁にありますし、社内のslackやwikiに定期的に「こんなの作ったよ」とツールをあげています。本当は自社でイベントも開催できればと思っているのですが、なかなか手が回っていない状況です。

活用のノウハウ・工夫しているポイント

Go言語で活用できるポイントを指摘し合い、疑問点を議論する風土を作る

大谷:勉強会の開催や丁寧な指導によってエンジニアを育てていくのがGo言語を浸透させるポイントですね。その他に、社内でGo言語を活用する上でのノウハウや、工夫しているポイントを教えていただけますでしょうか。

金子:当たり前ですが、社内で「よりGo言語の利用を盛んにしていくこと」ですね。例えば、時々Pairsのプロダクションコードをレビューして、「Goではこういう風に記述するといいよ」といった話を懇切丁寧にします。そのときに「標準パッケージはこういうふうに書いてあるよ」などの参考事例とともに説明するのがポイントです。自分の考えではなく、どちらかというとGo言語の設計思想を伝えることを重視しています。
思想を伝えるという視点で言うと、Goはシンプルであることが大事なので、下手に手厚い機能を増やしてほしくないと考えています。それがなぜなのかを踏まえてレビューを書いたりすることもあります。

上田:うちも金子さんがおっしゃった例と似ていますね。社内にGoに関する話題を話すSlackのチャンネルがあるのですが、最近は「テスティングフレームワークを使うかどうか」といった話題を議論したりしています。例えばGoはテスティングフレームワークを使わず、標準のtestingパッケージを使うことが多いですが、テスティングフレームワークを使うことの利点や問題点などを議論しています。他にも「スライスの要素はポインタにすべきか」など、誰かが議題をチャンネルに上げたらみんながそれに自分の考えを述べて議論していくといった流れが、私が入社した2016年頃から盛んに行われています。

松木:僕はもうGitHubに「こういうの作ってみたけどどうかな」と上げてしまうことが一つの手かなと思っています。GoはGitHub等にパッケージを置くことを前提としている言語でもあるので、ある程度パッケージを切ってGitHub上にアップした方が議論や再利用もしやすいですし、「ここの部分はライブラリにできそう」という点があれば切り出してしまうこともありますね。
あと、Goの場合はきちんと使用上の決まりを作るのは大事ですね。mackerel-agentの場合はプラグイン機構があるのですが、「プラグインを書く際はこのインターフェースを実装してください」「このライブラリを使ってこういうふうに呼び出してください」といったことを決めています。使う人の規約を意識すると、上手くまわるのかなと思います。

金子:スクリプト言語など、違う言語から入ってきた人は一つのパッケージにいろいろな責務を持たせているので、機能が多くなりすぎて「この人はこの機能を使って、別の人が違う機能を使って…」という状況になりがちです。しかし、その機能の違いや優位性は別のパッケージで実現できるんじゃないのか?という疑問が正直あります。本当に必要な責務だけをパッケージとして持たせて使っていってほしいです。

後編に続きます

Coming up Event

2018年12月のCTO meet up

イベント告知12/4開催【CTO meetup】データドリブン×オープンイノベーション

CTOmeetup201812
ご登壇者
●THECOO株式会社 執行役員 Product Manager 星川 隼一 氏
●株式会社Hacobu 執行役員 高橋 道幸 氏
●株式会社マクアケ 執行役員 CTO 生内 洋平 氏 【モデレーター】
●株式会社リブセンス 不動産ユニット IESHILディベロップメントグループリーダー 竹馬 力 氏
●弊社flexyご登録専門家 本間美香 氏
詳細ページを見る

イベント告知12/14開催【CTO meet up】CTOに求められる能力と限界

12月開催イベント
ご登壇者
●株式会社 LITALICO /執行役員CTO 岸田 崇志 氏
●BizteX株式会社 /取締役CTO 袖山 剛 氏
●Sansan株式会社 /CTO 藤倉 成太 氏 【ファシリテーター】
●株式会社FABRIC TOKYO /執行役員CTO 中筋 丈人 氏
詳細ページを見る

イベント告知12/18開催「Container X mas Party」

マイクロソフトイベント
※本イベントはMicrosoft社主催のイベントになります。
※flexyにて本イベントのスポンサー及び、懇親会コンテンツの提供をさせていただいております。
詳細ページを見る


この記事を書いた人
flexy編集部
flexy編集部
ハイスキルIT人材への案件紹介サービス
サーキュレーションが運営するフリーランスのエンジニアを中心としたIT人材の案件紹介サービスflexy。エンジニアに役立つコンテンツも提供しています。【flexyのサービス詳細】★求人を募集している法人様向けお仕事をしたいご登録希望の個人様向け

週1日~/リモートの案件に興味はありませんか?

週1日~/リモートの関わり方で、「開発案件」や「企業のIT化や設計のアドバザリーなどの技術顧問案件」を受けてみませんか?副業をしたい、独立して個人で仕事を受けたエンジニア・デザイナー・PM・技術顧問の皆様のお仕事探し支援サービスがあります。

flexyでご案内できる業務委託案件

React

テーマ クラウド入居者管理システムのフロントエンド開発(リモート可)
勤務日数 2-3日/週
報酬 4万円/日
必要スキル React
勤務地 東京
リモート

外部CTO、技術顧問

テーマ 技術アドバイザリーとして知見と経験を生かす
勤務日数 1日/週
報酬 10万円/日
必要スキル エンジニア組織立ち上げや統括のご経験、コードレビュー経験、技術的なアドバイスが出来る方
勤務地 東京
リモート 相談可

Go

テーマ 家族型ロボットのサーバサイド開発
勤務日数 3-4日/週
報酬 5万円/日
必要スキル Go GCP
勤務地 東京
リモート 相談可

AI

テーマ AIを活用した新規事業立ち上げの技術顧問
勤務日数 週1日〜
報酬 5万/日
必要スキル Python、AIの知見、新規事業立ち上げの経験
勤務地 東京
リモート リモートと常駐のMIX

PMポジション

テーマ 複数のプロダクトごとにPMを必要としているため急募
勤務日数 2-3日/週
報酬 5万円/日
必要スキル PMとしての経験、PHP、JavaScript
勤務地 東京
リモート リモートと常駐のMIX
個人登録

お仕事をお探しの方(無料登録)
法人の方(IT課題の相談)