皆さんこんにちは!
ZEALSのVPoE兼エンジニア福本です!
今回は、テクノロジーお師匠さんとしてZEALSにジョインして頂いている元ドリコム技術執行役員/現メルカリの白石さんを聞き手としてお招きし、プロダクト開発で用いているコア技術やエンジニア組織について、対談形式で語って頂きました!
どんな技術を用いてどうプロダクトを開発したか、どんなエンジニアがどんな思いで開発しているかetc...
今まであまりお伝えすることのなかった内容ですが、皆さんにZEALSのことをもっと知っていただきたかったため、今回の対談を行うに至りました!
その対談の様子を、テックブログの記事で皆さまにお伝えさせていただきます!
関係者
株式会社ZEALS CTO 島田想
東京都出身。株式会社ZEALS CTO。同社創業時よりプロダクト開発に携わり、世界初の会話広告サービスfanpを開発。LINEやFacebook社の提供するMessaging API Platformを公開当初より叩き続けており、Facebook MessengerについてはMessaging APIを国内で最も多く叩いているであろう人間の一人。チャットボット以外にも、会話インターフェースであるVUIのアプリ開発にも知見がある。
株式会社ZEALS リードエンジニア 小寺京祐
東京都出身。日本大学理工学部卒。前職の渋谷ICT教育ベンチャーではコース責任者 兼 Railsエンジニアとしてカリキュラム設計・講義運用・オンライン学習プラットフォームの開発など幅広く担当。2017年9月からZEALSへJOIN。開発チームの文化醸成・制度整備などに尽力。現在、チームリーダーとしてプロダクト「fanp」のプロジェクト管理・エンジニアチームのマネジメント、採用まで幅広い業務を管掌している。
(聞き手)元ドリコム技術執行役員/現メルカリ 白石 久彦
大学卒業後、さまざまなBtoB、BtoCのサービスやインターネットインフラ構築のプロジェクトに携わる。ソフトバンクグループ、 株式会社レコチョク等を経て、2012年ドリコムに入社、2014年には技術担当執行役員に就任。2018年より株式会社メルカリに参画、テックカンパニーを目指す同社のエンジニア組織の強化を担当。並行して株式会社スライストーンを創業、株式会社ZEALSを始めスタートアップから上場企業まで複数社の技術アドバイザーを務めている。
なぜZEALSにジョインしたのか?
CTO島田とCEO清水との出会い
白石:今日はよろしくお願いします。2人がどんな役割を担っているのか、簡単に紹介してもらえると。まず島田さんから。
島田:僕は創業当初からCTOをやっていて、去年一昨年は採用周りや組織のビルディングをやっていました。その頃、白石さんにお会いしました。
白石:確か1年以上前だよね。「ドリコムに遊びに来てよ」という感じで、コミュニケーション取り始めたのが最初で。
島田:はい、そうでしたね。
白石:島田さんは創業時からCTOだけど、マサさん(注:代表の清水)と会ったきっかけは?
島田:大学が一緒で出席番号順で前と後ろになったんです。当時から「コイツ(清水)むちゃくちゃだな」と思っていて(笑)、気がついたら手伝うことになってました。
小寺「ZEALSは楽しい」と聞いてジョインしました
白石:なるほど。コディ(注:小寺)はどんな感じでZEALSに携わったんだっけ?
小寺:僕は以前はプログラミング教育の講師でした。そこの先輩エンジニアが元々ZEALSでやっていて...
白石:紹介された?
小寺:そうです。僕が前職でくすぶり始めたときに、相談して「ZEALS来なよ、楽しいから」っていう話で。
白石:じゃあ、マサさんもコディもくすぶるとこから始まってるんだね。
小寺:そういえば、僕は島田さんがCTOになった経緯を知らないんですけど...
島田:ZEALSがWebの受託開発を始めて、そこから徐々に中心的に開発をやるようになったのがきっかけでしたね。
白石:最初は何で開発してたの?Rubyとか?
島田:最初はPHPです。Wordpressとかですね。
ZEALS開発組織の”良さ”とは?
「守るべきライン」を守る
白石:コディは最初からエンジニアとしてジョインしたけど、今は役割的にはどんなことをやってるの?
小寺:僕は今、開発部全体のマネジメントをしています。一般的な言い方だと、プロジェクト管理に近いですね。メンバーにタスクを渡す見積りなどは僕がやっています。
白石:なるほど。島田さんが技術選定で、コディがプロジェクトという感じに役割が分かれているんだね。
島田:そうですね。そこはしっかり分けています。
白石:コディは、ZEALSにジョインした当初の技術レベルはどうだったの?
島田:小寺が入ってきた時はRuby、正確に言うとRailsが書ける人とは聞いてたんですけど、期待値よりは書けていた印象ですね。
白石:なるほど、一方コディはジョインしてZEALSに対してどう感じたの?
小寺:コードレビューをすごいしっかりやってる、と感じました。自分たちだけで完結しないところは、業務委託の方にも協力を仰ぎながら。
白石:開発チームは既にそれなりの人数のエンジニアが居たんだよね?
小寺:はい。そんな中でも構文とかはもちろん、守るべきクオリティをしっかりと保つんだという意識がすごい見えました。
自ら課題を解決する姿勢を
白石:それで今、コディは組織のマネジメントをジョインして1年位でやるようになったけど、どういう経緯でそうなったの?
小寺:細かい話なんですけど、Slackの使い方やDocbaseの使い方とか、整備されてない部分が多かったんです。そこに勝手に課題感を持って、ゴリゴリと整備しました。
白石:環境を整えることを考えて進めた、という感じ。
小寺:主体的に自分で動き続けた結果、という感じですね。
白石:そういうのを見て、島田さんは何か思った?
島田:「ありがてえ...」と(笑)
白石:「めんどくさい人が入ってきた」とは思わず?(笑)
島田:はい(笑)
白石:全然整備されていない状況に対して、コディはどう考えて進めていったの?
小寺:僕が前職でそういった部分をしっかりと教えられていたので、そういった部分で貢献できればいいなと...
白石:なるほど、コディは教えたり整えたりと面倒見のいい感じなんだね。
小寺:そうですね、お節介な所はあります。
ZEALSには”良い人”が多い
白石:じゃあ、島田さんはそういう細かい部分は気にならないタイプなの?
島田:どちらかと言えば、プロダクトに集中したいタイプですね。
白石:良く言えば、役割がそこでいい感じに分かれているんだね。
小寺:僕はそこも含めて、会社をよくできる余地がたくさんあると感じる方の人ですね。
白石:そもそも、コディはZEALSのどこに惹かれたの?
小寺:人が良いところです。本当に良い人が集まってて、偏屈な人がいないので...
島田:それはそうですね、素直な人が多いですね。
白石:なるほど、なるほど。
小寺:社長の人柄もあるかもしれませんが、すごく良い人が集まっている組織だと感じました。
過去の開発からの学び
DjangoからRailsにリプレース
白石:ちなみだけど、『fanp』プロダクトの技術は今も昔と同じものを使ってるの?今は会話を作る管理画面がReact + Railsで、会話の送受信がPython、インフラがMicrosoft Azureだよね。
小寺:いや、昔は違いました。
島田:昔はすべてPythonだけで、フレームワークはDjangoを使ってましたね。
白石:DjangoからRailsに変えた経緯は何だったの?
島田:スキーマが最適化されていなかったりとか、アーキテクチャ周りでアンチパターンな部分が多くなっていたので...
白石:プロトタイプでサービスインして、その後すぐ作り替えようと。
島田:そうです。
小寺:僕がそのリプレースが始まって4ヶ月あたりでジョインしたんです。
白石:そのリプレースでRails化するのに携わったと。
小寺:そうです。設計は決まっていたので、タスク量だけは膨大でした(笑)
反省をプロダクト開発に活かす
白石:なるほど(笑)フロントエンドは最初からReactで開発する方針だったの?
小寺:はい、リプレースのタイミングからReactで開発することを既に決めていました。
島田:管理画面とボットが密結合じゃないようにしたい、という思いがありました。管理画面が落ちたと同時にボットも停止するとなれば、それは最悪じゃないですか。
白石:確かにね。Djangoで作った時は、全部一枚岩だったんですね。
島田:はい。その時の反省を活かして、疎結合に各パーツがモジュールとして動くようなイメージにしています。ゆくゆくはマイクロサービス化したいなと。
白石:今もメッセージの送受信機能をPythonで書いているけど、そういった経緯もあってRailsと共存している珍しいアーキテクチャになっているんだね。
島田:そうですね、何でもかんでもリプレースするのではなく、既存のPython資産を活用したほうが効率が良いと判断しました。
ZEALSチームの技術的な”強み”とは?
「テストをしっかり書く」を当たり前に
白石:その頃と比較して、技術的に良くなったと感じる部分はありますか?
島田:当たり前の話かもしれないんですけど、「テストをしっかり書くようになった」というのはすごく大事だと思ってます。
白石:そうなんだ。それは雰囲気的に?
島田:はい。明文化しなくても「テスト書いてね」という雰囲気があったんですよ。
小寺:明らかにバグが多い時期があって、リグレッションしてる時間が基準値を越えたとわかったので、そこからはテストを書こう、テストケースをきちんと決めようと意識づけました。
島田:「コメント入れましょう」とかも、細かいですけどちゃんとやってますね。
意識して「自然とフルスタックになる」組織を
白石:さっきPythonからReact/Railsまで話が広がったけど、チームの中でいわゆるフルスタックというか、PythonとReactとRailsを複数書けるエンジニアは結構いるの?
島田:基本は各技術スタックで分かれてるメンバーが多いですが、React/Rails書けるメンバーも2,3人居ますね。
小寺:RailsとPython書けるパターンは僕が最初ですね。そのうちReactも書けるようになりました。
白石:最初がコディだったんだね。だんだんそういう人が増えてって...
小寺:そうです。今度はAaronがPythonも書いて...
白石:結構意識して技術の幅を広げてけるようにしているんだね。
小寺:そうですね。「やったことないけどやろう」みたいな...
白石:その方が会社にとっても層が分厚くなるもんね。
技術的負債への取り組み
白石:ところで、リファクタ要員みたいな役割のエンジニアは居るの?
小寺:居ますね。リファクタリング好きな人は結構多いので。
島田:ZEALSでは、インターンの子でもリファクタリングをゴリゴリ進めてたりします。
白石:リファクタリングする時も、当然コードレビューするんだよね?
小寺:もちろんします。コードオーナー制を採用していて、各リポジトリごとに設定しています。
白石:なるほど。メインでコードを見る人、つまりオーナーがいるんだね。
小寺:そうです。オーナーがいて、その人からのApproveは確実に貰うということをやっています。ただ、一部のリポジトリやファイルに関しては、コードオーナーが忙しくなるとレビューが止まるということが起きてしまって。
白石:うんうん、リアルな話だね。
小寺:そういう声が多い箇所だけは、「リポジトリに関連する開発スキルを持つエンジニアから2人以上Approve貰えればマージできる」というルールにしました。その辺りは柔軟にやっています。
島田:一般的な正論から良いものを取り入れて、合わない・悪いものは使わないという工夫をしっかりやっています。
前編はここまで
話が盛り上がってきましたが、ここから先は後編に続きます。
後編では、今回お話できなかった「ZEALSの文化」や「組織の雰囲気」といった部分にをお届けします!
後編は以下からご覧いただけますので、引き続きお読み頂けると嬉しいです!