エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

新卒エンジニアがグループ会社の臨時 CTO を務めた話、そして入社 1 年を振り返って

--- 2018-05-15 追記 ---

当初、記事のタイトルや本文中で「チームの臨時 CTO」という表現を使っていましたが、より正確な「グループ会社の CTO」という表記に改めました。 グループ会社のエンジニアリング面を私たちのチームで担当しており、チームリーダーがグループ会社の CTO を務める、という背景があります。

--- 追記終わり ---

エムスリーエンジニアの加藤です。 担当サービスでは主に Ruby, Scala, JS (Browser, Node), Swift, Java を使用しています。 今回は、昨年 2017 年 4 月に新卒入社してから 1 年間の振り返りをテーマとして記事を書きました。 ソフトウェアエンジニアとしての進路を検討している学生の方などへ参考になれば幸いです。

入社前 〜きっかけ・面接〜

私は学部 3 年の 11 月に逆求人イベントで初めてエムスリーを知りました。 その後エムスリー含めて 2 社受けましたが、モノづくりに対してより真摯に 向き合っている印象を受けたので、最終的にエムスリーへの就職を決めました。 今となってその印象は、生身の肌でそのまま感じる実感に変わっています。

なお、一次面接は実際に現場でコードを書くエンジニアが面接官でしたが、 事前に受験したオンラインコーディングテスト(私は Node で書きました)の結果や、 HTML & CSS で履歴書を組んだ時に遭遇して実際に報告したブラウザのバグ、web の未来など、 楽しくわいわい話して時間が過ぎた気がします。

入社当初 〜web アプリ開発の現場を知る〜

軽い入社式を終えた後すぐ席へ案内され、配属先のチームに挨拶、机上に置かれた MacBook のセットアップへ そのまま取り掛かり、リポジトリを clone し、チケットがアサインされ、というスピード感で入社初日はスタートしました。

最初に実装したのはファイルを D&D でアップロードする機能でした。 Docker Compose で 6 個の Service を立ち上げての開発、 フロントサイドの JS、サーバサイドの Ruby (Rails)、Amazon S3 との連携、 巨大なコードベース(現在 JS・Ruby ともに > 50k COL) から必要な箇所を特定するスキルなど、 web アプリ開発の第一歩としては好例でした。

開発をする中でひたすら D&D をしていたら腱鞘炎になりかけたので、つらい時に挙げる札を挙げてアレをソレしたら Magic Trackpad 2 が届いていました。

現場での開発に必要な知識が自分の中で圧倒的に不足していたため、ひたすらドキュメントを読み漁っては 試行錯誤を繰り返す日々でしたが、周りの同僚エンジニア・デザイナーさんからの親身なサポートなどもあり、 何とか新機能を予定通りユーザへ届けることができました。 ユーザから感謝のフィードバックが届いたときの嬉しさは忘れられません。

ただし、バグに起因するアラートが飛んできた時は寿命が 3 年ほど縮まった心地になりました…

その後も新機能開発やバグ対応などを通じて、Rails & JS での web アプリ開発の勘所、SQL や DB の肌感覚などを 徐々に養われていきました。

入社 5 ヶ月 〜Scala による JVM関数型言語へのキャリアチェンジ〜

その頃、担当サービスでは Scala による大型新機能の開発が進んでおり、私はコードレビューなどで 少しだけ状況を覗く程度でしたが、8 月下旬頃から実際に Scala での開発に参加することになりました。

RubyECMAScript に一部見られる関数型的なアプローチに慣れ親しんでいたとはいえ、 Scala における関数型の深いアプローチや、関数型プログラミング用ライブラリ Cats による新しい概念、 サービスの性質上要求される専門的なドメイン知識など、入社当初を彷彿とさせるような困難に直面しました。

しかし、同僚のスーパー Scala エンジニア冨岡や、ドメインエキスパートの方々の支えもあって、 実際に自分の書いた Scala コードを無事リリースに含めることができました。 この時の開発体験は、今振り返ってみてもかなり濃いものだったと強く実感します。

Ruby・JS に加えて Scala へ触れたことで、静的型言語・動的型言語の pros/cons、JVM の特性(特に GC など) を知るきっかけとなり、ソフトウェアエンジニアとしてのキャリア形成に大きく寄与したと思います。

また、ちょうどこの時期 RubyKaigi 2017 に参加させてもらう機会 があり、普段使っている gem のメンテナさんや Ruby の「いま」を作っている方々と同じ時間・空間を共有するという貴重な経験をしました。

入社 8 ヶ月 〜グループ会社の臨時 CTO に〜

私が入社してから約半年経つと、SRE の id:progrhyme や、M3 UK office Front-side eng. の Chris が join したりと、 チームの環境も変わりましたが、チームでエンジニアリングを担当しているグループ会社 CTO の冨岡が 3 ヶ月間の育休に入った ことを受けて、 結果的にサービスへの累積関与率が最も大きかった私が、エンジニア 4 人ほどのチームを率いるグループ会社の臨時 CTO になりました。

それ以前と比較して、自分でも分かるほど明らかにチームへの当事者意識が変わりました。 それ以前は自分のタスクに専念した上でメンバーのタスクを気にかける、それ以降はスプリント設計に一定の責任を持ってメンバーのタスクからまず考えるように。 それ以前はミーティングの議題のうち自分に関係するものに一生懸命考えて答える、それ以降はすべての議題に関して自分の中で一定以上の理由付けを持って考えるように。 などなど。

開発を担当する領域も増え、Node (Socket.IO), Java, Swift に触れたことで、担当サービスで使用されている言語全てを一通り 経験するという実績を解除しました。

新機能を同僚と一緒に英語で議論しながら設計して実装のサポートをする機会もありました。やはり言語よりもホワイトボードで図を描いた方が速かったり、 英語に翻訳しづらいドメイン知識を伝えるには、類義語を 3 つぐらい言うと伝わる確度が上がるというハックも身に付きました。 実際にリリースしてユーザから高評価のフィードバックを得た時は、互いにガッツポーズで喜びました。

経営会議にも出席させてもらいました。一番印象に残っているのは、新しく開発するサービス案を議論している際の 「一番需要があるからこれを作ります、で論理が終わるなら『トイレのスリッパを売ります』になるはず。でもそういうことじゃない。」 という言葉です。

育休を取得するエンジニアの事例がこれほど身近にいたことで、自分が今後エンジニアとして人生を歩む上で非常に参考となるロールモデルとなりました。

また、この期間に id:progrhyme から誘いを受けて Microservices Meetup での LT という貴重な経験をしました。 100 人規模のイベントで話すのは久し振りでしたが、Twitter などでそこそこ反響もあり良い体験でした。

また、臨時 CTO という役割を担ったため、規模は小さくあれどエンジニアのマネジメントに関わる経験もいくつかしました。 人前で指揮する立場・役回りは昔から苦手で、今振り返るともっと良い立ち回り方はあったはずと反省点が多い 3 ヶ月間でしたが、 ありがたいことに良いフィードバックを後日いただきました。

まとめと今後

同じチームの冨岡は ScalaMatsuri 2018 に登壇していたり、同期の id:oboenikui は社内セキュリティコンテストを開いたり DroidKaigi 2018 に登壇していたり、ありとあらゆるインフラ事案を片っ端から捌く人、BigQuery を含めたデータ分析基盤の設計・運用まで 丸ごとこなせる人、機械学習のタスクで世界トップレベルの性能を出す人、本当にすごい人が多い環境だと常日頃感じています。

また、勉強会やイベントで知り合う他社の同年代エンジニアでも目が眩むほどすごい人が数多くいてすごい。

自分も負けないようにやっていく所存です。

エムスリーでインターンしてみませんか?

エムスリーではインターンを随時受付中です。私は入社前にインターンした経験が(エムスリー以外でも)ありませんでしたが、 攻めの技術スタックやビジネス領域の特殊性による相乗効果で、面白いネタがそこらじゅうに転がっているので、 一度現場の空気感を感じてみるのも一興かと思います。

応募はこちらから https://jobs.m3.com/engineer/