4年11ヶ月勤めたドワンゴを退職しました。2019年1月17日が最終出社日で、1月中は有給休暇消化期間で、2月から新しいところで働きます。
4年11ヶ月と書きましたが、半年間育児休暇をとっていたので、その期間を引くと実際働いたのは4年5ヶ月です。
4年制の大学(の文学部書道学科)を卒業して、新卒でとある会社に就職して、いろいろあってドワンゴは4社目でしたが、それ以外の会社で最長で2年程度しか勤めたことがなかったので、そう考えると5年近くも続いたのが感慨深いですね。
このblogを読んでいる人ならばある程度の人は知っているかもしれませんが、気づいたら個人的にScalaにとても詳しくなってコミッターにもなって、ドワンゴでの仕事も、ほぼずっとScala書いていました。
もちろん、デプロイツールやちょっとした管理ツール、細かい運用上のなにかで、多少Python, ansible, shell script, Java, JavaScript, Crystal(!?)、など書くこともありましたが、大抵はScalaでした。
ドワンゴで具体的に何をやっていたかというと、それなりに色々やったわけですが、一言で言うと「ずっとScalaでバックエンドのマイクロサービス作っていた」という感じでしょうか。 約5年前に入社した当時で、すでにScalaのプロダクトはそれなりにいくつか当たり前のように存在して動いていて、すでに社内のシステム同士はそれなりにhttpのAPIなどでいろいろなシステムが相互に通信しており、部署毎に使用言語は全然違うのですが、自分が居た部署ではScalaがデファクトスタンダード感があって、それはずっと変わらなかったのでずっとScala書いていました。
マイクロサービスの文脈でいうと、自分がいる間に、kafkaやその他使って疎結合になったり、自分が関連した部署だと新しく作る部分はhttpのかわりにgRPC(かつScala)使ってシステム作ったり、などの変遷はありました。*1 あとベアメタルだったのが、ほとんど仮想化されたり、Sass、Iass 的なものがどんどん増えて、それを作ったり、それを使ったり、みたいになっていきました。
"部署毎に使用言語は全然違う"と書きましたが、社内事情たいしてくわしくないですがたとえば具体的には
- 動画や生放送の配信してるところはErlangやRustなどの多少珍しい言語使ってる(もちろん、その他の一般的な言語も使ってる?)
- 動画のエンコーダー関連などは主にC++(やアセンブリ?)
- スマフォアプリは普通に? SwiftやKotlin
- その他PHPやRubyやJava、その他いろいろな割と一般的?な言語で普通に作っている部署ももちろん多数
- 自分が所属していた部署は主にScala
など、多種多様でした。
システムの内容の点から自分がやっていたことをもう少し具体的に書くと
- OAuthやアカウントシステム関連(最初に少しだけ)
- スマフォのpush通知を送信する基盤部分(入社当初から最後までこれ結構ずっと運用と機能追加やってた)
- 最終的にブラウザに通知するために裏側でいろいろやるやつ(説明が難しい)
- protobufやgRPCの社内普及とかライブラリの整備(ScalaPB)とか、protoファイル集めておく社内リポジトリの管理
- apache kafka使ったevent bus的なもの(これも結構割合として大きい) https://xuwei-k.github.io/slides/kafka-matsuri/#1 https://www.slideshare.net/matsu_chara/kafka-part2
- 社内共有Scalaライブラリのメンテナンス
- これ https://github.com/dwango/scala_text の作成の手伝いやメンテナンス、新卒教育のScalaの部分少し手伝い
- webpush通知関連のバックエンド
- メール送信する部分のバックエンドの一部
- いろんな通知などで使う、テンプレートシステムとかフィルタリングシステム的なgRPCでのマイクロサービス(説明が難しい)
という感じです。 開発言語だとScalaですが、ミドルウェアの観点からだと、自分の部署はたとえばMySQL、RabbitMQ、Redis、などのわりと普通な?ものを普通に使っていただけな気はします。*2
多少兼務はありましたが、おおまかには最初から最後まで所属している部署やチームは変わらなかったので、(もちろん多少のやり方の変遷はあれど)、だいたい同じような感じで淡々とScalaでそういうシステムを、
- 多少細かい設計して
- 他チームのシステムと連携する必要もあるのでいろいろ調整しつつ
- ansibleなどでインフラの構築もして(自分はそんなに得意でもないから他の人に任せることのほうが多かったが)
- 作ってリリースして
- 保守や運用もして
という感じでした。
以前多少blogなどでも書いていると思うのですが、今はそれなりに経験も積んでそれなりな年齢だし*3、少なくとも普通程度以上?のエンジニアとしてやっていってますが、ドワンゴ入る以前は、Scalaは得意でもそれほど一般的なwebエンジニアやバックエンドのエンジニアとしての経験が豊富なわけでもなかったり、仕事でプロダクト作ってもすぐ使われない、みたいなのも何度かあったので、ドワンゴでは、ある程度大きな規模のものを、(少なくとも自分が関わっていたものでは)わりと計画通り期日通りに作ってリリースして、みたいなことがほぼできていたので、そういう意味で実際に使われるシステム(しかもある程度の規模)を普通にいくつも作って関われたという点においては、とてもやりがいがあり、いい経験がつめました。
いろんな意味で目立つことも多いドワンゴですが(?)、自分が関わった人は、大抵優秀だし "いい意味で" 上記のように、おそらくみんなが想像する以上に"普通に淡々と作って運用して" ということの繰り返し、という感じでした。
5年近くも居ると、私生活でもいろいろありました。 ドワンゴにいる間に3回も引越をしたし(会社の近くに引っ越し => 結婚して引っ越し => 子供できて引っ越し)、 彼女できて結婚して、子供産まれて、というのもありました。
転職理由やきっかけについてですが、そもそもこの業界で10年も20年も同じところに居ることのほうがむしろ珍しいと思うので、今まで最長2年程度だったのが逆に5年近くも続いた理由を書きたいところですが、 5年近く続いたのは、上記のとおり普通にそれなりにやりがいあって、得意なScalaで仕事できて、慣れて楽な部分もあり、べつにこれといって辞めたい大きな理由がなかったからですかね。 *4
書くのわすれてましたが、出勤時間や退勤時間もかなり自由で、(部署によるかもしれませんが自分のところは)とくに残業が多いわけではなく、そういう点においてもとても働きやすかったです。比べづらいのでよくわからないですが、給料もそれなりに上がったとは思います。
ではなぜ今回転職することになったか、というと、5年近くもいたので、(いろいろな意味で自分にとって)条件がいいところがあれば、わりといつでも転職していいかなぁー、とは前から思っていましたが、とあるきっかけで転職活動したら、いい条件のところが見つかったので転職してみることになった、という流れです。
"とあるきっかけ"というのは、社内で何かあったんですが、ひとまずここには詳細書きません。会ったときに聞いてください。
といっても最近子育て忙しいのもあって、全然勉強会など行ってませんが・・・。
その "社内で何かあった" 件については、社内で言うべき人には言ったつもりだし、今後はいい感じにしてくれるらしいなので、自分はもう直接関係ないですが、今後いい感じになってくれることを願います。
強調しておきたいこととしては、今まで書いたScalaでマイクロサービス淡々と作って働ける環境という意味では、とにかくとても居心地がよかったし、これからもScala使われ続けることは変わらないと思うので、そういう環境で働きたいという人にとっては今でもおすすめだし、自分も何らかの機会があったら出戻ってもいいかなぁ、くらいな気持ちもなくはないです。 (そうなったときに受け入れてくれるのか?はもちろん未知数ですが)
5年近くもいたので、なにかいろいろ書き忘れたことがあるというか、かなり書き足りない気持ちがありますが、きりがないのでこのくらいにしておきます。
具体的な転職先ですが、おそらく2月になったくらいのタイミングでまた別途書きます。 "(いろいろな意味で自分にとって)条件がいい" と先程書きましたが、自分が最近具体的に何を重視しているのか?を書いてませんが、気が向けばそれも後で書くかもしれないし、書かないかもしれません。
おそらく特に大きくやることは変わらずにScalaでバックエンドエンジニア的なことをやる予定です。
というわけで今後もよろしくお願いします。