1
/
5

CTO椎名×サーバーエンジニア古舘 、スタートアップに持ち込んだGo言語とイノベーション

子育て家族アプリ『Famm』 とカップル専用アプリ『Pairy』 を仕掛けるTimersに、サーバーエンジニアとして入社した古舘。サーバーエンジニアとしてTimersに新たな開発技術を持ち込み、「Famm」のイノベーションを加速させています。
TimersCTOの椎名より、Go言語での開発を得意とする古舘にインタビューしました。
「Go言語でわからないことは古舘に聞け」とメンバーから言われるほどGoのスペシャリストである古舘が、どうしてTimersにJOINすることになったのか、Timersに持ち込んだ開発手法と技術について聞きました。

Timers CTO椎名:(以下「椎名」):

Timersで働くエンジニアってどんな人がいるの?と聞かれることが続いたので、「CTO椎名×サーバーエンジニア古舘 、スタートアップに持ち込んだGo言語とイノベーション」を企画してみました。よろしくお願いします。

Timers サーバーエンジニア古舘(以下「古舘」):

なんだか緊張しますが、なんでも聞いてください。


椎名:

早速ながら、Timers前はどんなことやってたの?とか、Timersで何をやっているの?とか、簡単な自己紹介をお願いします。

古舘:

3社経験を経てTimersにJOINしたのですが、全部違う言語で開発をしてきました。

新卒で入社した会社はいわゆるSIer企業でNECに出向する形でスタートしました。その時はC言語だったのですが、出向するのではなく自社サービスがある会社で働きたいと思うようになり、おもちゃ系の通販会社でPHPでの実装をするようになりました。

徐々に、もっとエンターテイメントがやりたいと思うようになり、ゲーム会社にジョインしました。Perlでゲームのサーバーサイドを担当していました。かなり開発を任せてもらえて、Web系の開発力はここで身につけることができました。カードゲームの基盤を作った後、オセロのリアルタイム対戦ゲームのサーバを担当する中で、Go言語に出会いました。

転職は自分にとってチャレンジングな選択であるか、楽しいと思えて後悔することがないか、を考えて決めてきました。


椎名:

Go言語に関しては自分で選択して使い始めたんですか?

古舘:

ゲーム毎にプロジェクトが分かれており、自分がリードエンジニアだったため、言語選定を一任されており、自分の得意な言語を使うことができました。

今までPHPやPerlなどのLL系言語が流行ってはいましたが、それらの言語は実行しないとエラーに気づくことができません。静的型付けでビルド段階で文法エラーもキャッチできる言語の方が良いと思い、Javaと検討した結果、ビルド時間が短くシンプルに言語設計が可能なGoを採用しました。

椎名:

好きな言語は何かと聞かれたらGoだと思いますが、Goの魅力はどんなところにありますか?

古舘:

静的型付けのコンパイル言語なのでコンパイル時に文法エラー等を事前に排除できるのが良いですね。
また、並行処理が容易に記述できるのも魅力だと思います。
LL言語のように簡単なエラーも実行時にならないとチェックされないということもなく、コンパイル時にチェックできるのが嬉しいところです。
また、細かい所ですがコーディング規約が標準で決まっており、そのコーディング規約通りに整形してくれるフォーマッタもついているので楽です。
開発中にちょっと実行したいという時も go run で素早くコンパイルと実行ができるところも嬉しいです。

椎名:

Go言語をプロダクトの基盤システムに導入するにあたって苦労しているところは何ですか?

古舘:

元々のコードがPHPでできており、仕様書のような詳細ドキュメントがないので、ロジックを見つけてソースコードを読み解きながらGo言語で実装していくのが苦労しますね。
また、今までABテストを用いたり、施策を導入してきた積み重ねの歴史が大きくなって、いらない部分があったりします。
ですが、完全に同じものを作るのではなく、何を実現したいのか・どんなロジックになっているのかを理解してから、新しい仕組みで実装をさせることを考えていく上流工程が楽しみでもあり、難しさでもあります。単純な展開だけではなく、パフォーマンスの工夫も入れつつなので、品質とパフォーマンスを一石二鳥で取りに行ってる感じですね。

Go言語と向き合う上での工夫としては、もう1人のエンジニアとの分担領域で初めは悩みましたが、もう1人にDBを担ってもらい、自分はビジネスロジックを担当すると明確に役割分担をしたことで、効率的に進めることができるようになりました。

また、今回よりバッチを作り直すためDDD(ドメイン駆動設計)を採用しました。
現行のバッチはビジネスロジックと技術的なロジックが、ごちゃまぜになっているのですが、ビジネスロジックと技術的ロジックをレイヤーで分ける事ができたため、自分はビジネスロジック開発に注力できたということがよかったです。


椎名:

直近のスコープではPHPのロジック書き換えをやっていますが、今後システムをどうしていきたいですか?

古舘:

今はDBのテーブル設計がごちゃごちゃしているところがあります。DBが整っていないと、アプリが複雑化してしまうので、きちんと整備したいです。
また、今は基盤システムがモノリシックなアーキテクチャで手を入れるのが容易ではないので機能ごとに切り出してマイクロサービスアーキテクチャのような形にしていきたいですね。
そうすることで新しい施策をユーザに今よりもっと素早く提供することが可能になると思っています。
マイクロサービスになれば、それ毎に言語選定も柔軟にやりやすくなるメリットもあります。
今までは一つの大きなものを修正することでスピードが上がるため、付け足しながら開発していった結果今のアプリがあると思いますが、これからの会社のフェーズとしては素早く対応することは勿論のこと、もう少し汎用的にしてビジネスの広がりに対応できるようにしていくべきだと考えています。

単純なWebアプリに比べて、ユーザーの個人情報や思い出をちゃんとモノにしてお届けして家族を繋ぐということが、大切になっています。より品質もシビアに求められてくると思うので、品質を担保しながら、きちんと届けていきたいですね。

椎名:

マイクロサービス同士の通信で、たまにgRPCのような話題もでますがどう思いますか?

古舘:

gRPCはAPIにさえしておけば、PHPにしてもGo言語にしても、全ての設定ができるという実装の効率化に役立つと思います。
特にマイクロサービス化していくとそもそも綺麗なAPIインターフェースを考えなければいけないのですが、そういったところもgRPCを使うと設計が簡単になると思います。
技術選定していく上で、良いものはどんどん取り入れていきたいですね。


椎名:

世間一般でGo言語が普及しているイメージってありますか?

古舘:

Wab系の会社でもかなり普及していると思います。Goカンファレンスなんか抽選率3倍くらいで行けないくらいです。突破するためには登壇するしかないですね。笑
Go言語はとっつきにくさもないですし、独自の概念も少ないので、初心者でも全然使える言語だと思っています。
弊社でも、ゼロからキャッチアップするメンバーもいましたが、そこの敷居の低さは一つありますよね。

シンプルな言語である一方で、例えばGenericsは無いのかなどという話も出てきますが、なくても不便は感じないと思います。それによって型が抽象化され実装が複雑になるケースもあると思うので、きっちり型が固まっているほうが品質が高くなると思います。

椎名:

逆に、例えば新しいサービスを作る際にRubyやPythonなどGo言語以外の言語を選択する理由があるとしたら、どんなところにありますか?

古舘:

正直選択する理由はありませんね。
エンジニア視点で知的好奇心を満たすにはGo言語だと思います。
今はコアが複数あることが前提で、並列処理を使ってCPUの効率化を測っていくと思いますが、そこでやはり並列に強いGo言語が今後どんどん使われていくと思います。
ただGo言語はまだ重厚なフルスタックWebフレームワークはスタンダードがないという課題はあります。Revelなどはありますが... どちらかというと薄いフレームワークを使おうというのがGo言語の思想だと思います。
今だとGinやEchoなどの軽量フレームワークでWebアプリケーションを実装する事の方が多いですよね。


椎名:

そもそも入社当時はTimersではGo言語採用の検討段階だったにも関わらず、なんでTimersに入社を決めたんですか?

古舘:

面談で話を聞いていて、会社が現状に満足していないなと感じました。
現状の技術でも別に大丈夫と甘んじているのは、自分は好きではなくて、もっともっと技術的にもアプリを進化させていきたいと考えているところに魅力を感じました。

技術以外の面でも、地方から東京に出てきて親孝行てなかなかできない中でもカレンダーを送付するだけで親孝行になるというサービスも素晴らしいと思いました。
今のライフスタイルにもマッチしていますし、なかなか帰省できない課題を解決しようとしているサービスに、非常に興味を持ちました。

椎名:

転職を考える上で、会社の業態へのこだわりはありましたか?

古舘:

Slerは新卒で入社しましたが、やはり自分の会社としてサービスを作って運用したいという思いがあったので、そこは譲れなかったです。
また、沢山サービスを出して当たらなければ潰していくスタイルよりも、アプリを出したらきちんとそれを育てて成長させていく会社が良いと思っています。

アプリをどんどん出して引っ込めるやり方は、必ずしも間違いではないですし一つの形だと思います。どこまでグロースさせても全くポテンシャルがない事業も存在しますが、何が大事かというと、サービスをローンチする際に、ユーザーに何の価値を提供したいのかという作り手のこだわりなしに世に出すのは違うかなと思っています。

やるからにはプロダクトに対して本気でやりたいです。
自分が情熱もってやることも大事だし、そうすることで成功しても失敗しても学びがでてくるし、学びがないと改善していけないですよね。


椎名:

ありがとうございます!最後に、Timersでエンジニアとして働く魅力と、「こんな仲間と一緒に、最高のチームを作っていきたい」というのを、ご覧頂いている方へのメッセージとしてお願いします。

古舘:

良い技術を取り入れて素敵な開発の環境を作り、いいプロダクトを作っていきたい人にはいい環境だと思います。

自分の技術力を使ってユーザに価値を届けたいと思っている人におすすめです。
技術力だけあってやりたいことが頭でっかちでもダメですし、思いだけ強くて技術力が乏しくてもダメですし、バランスが大事だと思います。

椎名:

ありがとうございました。

会社として新しい言語を取り入れていくことは初の取り組みでリスクもありました。
ですが、Go言語であれば皆で向き合っていけるという信念も持てた技術選定であったと思っています。その結果、きちんと導入も順調に進んでいますし、社内勉強会なども通じてノウハウも蓄積しており、非常によかったと思っています。
今後も大きな技術選定をする機会はあると思いますし、当然リスクは伴うと思いますが、成功しようが失敗しようが、その度に何か学ぶ事ができれば強い技術基盤を作っていけると思っています。

さらにプロダクトを成長させていけば、他社を圧倒できるサービスが確実に作れると思っています。今はそれがある程度見えてきているので、とてもワクワクしています。


[積極採用中!!!詳しくはこちらから]

TIMERS inc.では一緒に働く仲間を募集しています
7 いいね!
7 いいね!
今週のランキング