エンジニアHubPowered by エン転職

若手Webエンジニアのための情報メディア

新卒3年目のHaskell好きのScala使いが、はてなでテックリードになるまでの道

「若手エンジニア、どんな活躍してますか?」の第7回目は、はてなが手がける、サーバー監視サービス「Mackerel」の開発エンジニアにお話を聞きました。リモートでありながら、抜群の存在感を発揮する先輩の背中を、超優秀な後輩はいかにして追いかけたのでしょうか。

はてなといえば、ブログサービス、ソーシャルブックマークサービスを展開する企業として知られていますが、サーバー監視サービス「Mackerel」も主力プロダクトのひとつ。今回お話を伺ったお2人も、Mackerelの開発メンバーです。そのうちの一人、2017年4月にMackerelのテックリードになったばかりの濵田さんは2015年入社の若手。愛知からリモートで働く、前テックリードの辻川さんの背中を、ディスプレイ越しに見ながら実績を積み上げてきました。

はてなの開発拠点である、京都と東京。さらには、辻川さんが居を構える愛知がリモートでつながり、開発が進んだMackerelのビハインドストーリーを新旧テックリードのお2人に聞きました。

──それぞれ、自己紹介をお願いします。

辻川 インターンを経て、2011年にアプリケーションエンジニアとしてはてなに入社した辻川貴哉(つじかわ・たかや)です。Mackerel立ち上げ時のテックリードを担当しました。現在は、愛知県の自宅からリモートで仕事をしています。

辻川貴哉さん。2014年10月より、愛知からのリモート勤務を開始した

濵田 2015年に新卒で入社して、すぐMackerelのチームに配属されました、濵田健(はまだ・けん)です。現在はテックリードとして次世代Mackerelの開発などを担当しています。

濵田健さん。京都にあるはてな本社で開発にあたっている

──辻川さんは、サーバー監視サービスMackerelの最初の1行目を書いたプログラマだったのですね。Mackerelの開発言語を決めるときに、Scalaをプッシュしたとか?

辻川 もともとPerlプログラマだったのですが、静的型付け言語を使いたいと以前から考えていて、新規に開発を始めるMackerelではScalaを使うことを提案しました。本当はHaskellを採用したかったのですが、他の人でも使える言語ということでScalaになりました。

濵田 学生時代は、Haskellが得意で、入社の時には結構それをアピールしていました。自分では覚えてないのですが、たぶん「(Haskellと関数型言語という点で共通点がある)Scalaでプログラムを書きたい」と面接の時に言っていたような気がします(笑)。

辻川 いきなり「すごい新人が来た」みたいなイメージを持っています。

──Scalaには魅力を感じていましたか?

濵田 学生時代にちょっと調べていて、いい言語だと思っていました。抵抗感はありませんでした。プログラムでは型を書きたい立場の人なので。

辻川 Haskellっぽい部分があるのがいいですよね。それにJavaを書ける人はちょっと勉強したらScalaも書けるようになる。Javaのようにコードが冗長にならない。

濵田 MackerelのエージェントはGo言語で開発されているのですが、これも自分にとっては選択の理由の一つでした。

「飛び道具」を使って一晩でプロファイラを書いた

──新人時代の濵田さんは、どんなことから始めたのですか?

辻川 最初は慣れてもらうことからですが、当時から思っていたのは「彼は放っておいても大丈夫だな」。なんでもできるし、自分で勝手に調べて分からないところがあったらそこだけ質問してくる。手がかからない(笑)。はてなの新人はみんな優秀ですが、その中でも特に優秀でした。

──濵田さんが入社してから2年を振り返って、印象に残っている出来事は?

濵田 障害ですね。どうしてもサービスには障害は起きる。自分では最初は何もできないわけですが、辻川さんが解決している姿を見て、そのアプローチを学びました。背中を見て育った感じですかね。

──リモートワークなので背中を見て、というのは比喩表現ですよね。

濵田 はい。Mackerelのチームで一番開発歴が長いということで、今もビジネス上の大きなことをやりたいときなどには、辻川さんは頼りにしています。

──濵田さんは技術ブログの質と量がすごいのですが、いつ書いているのですか?

濵田 夜と休日です。自分では、細かいTipsよりも、ある程度まとまったドキュメントの方が好きです。あとから見返して、ためになるので。

──ブログ記事にまとめられているMackerelフロントエンドのパフォーマンス改善の取り組みでは、定量的なアプローチを徹底しているのが印象的でした。

濵田 機能追加を続けていると、どうしてもレスポンスは悪くなりがちです。だからこそ、継続的にパフォーマンスを改善する取り組みを大事にしています。

──それにしても、パフォーマンスチューニングのためにJavaScriptのプロファイラを一晩で作るのは普通ではないと思います。

濵田 あの頃は若かったので(笑)。プロファイラはHaskellを使って書いたのですが、そこは飛び道具を使った感じでした。

──そんな濵田さんは、プログラミングはいつから?

濵田 大学に入ってからです。親しい友人がHaskellが得意だったので、その影響でHaskellが好きになりました。もともと数学は得意だったので、割とすんなり入れました。

実は専攻は電気系の学科で、物理の理論に近い分野が専門でした。プログラミングはほとんど趣味というか、現実逃避みたいな(笑)。

──何か「これを作りたい」といった目標はあったのでしょうか?

濵田 Project Eulerというサイトがあって、そこで数学の問題をプログラムで解くのにHaskellは使いやすいので、よく挑戦していました。

Haskellの次に興味を持ったのがVimの世界で、他の人が作ったVimプラグインを見たりしているうちに、作るようになりました。一番使われているのはlightline.vimで、これは海外から問題報告が届いたりして、自分にとってオープンソースソフトウェア開発のとっかかりになりました。

──なぜVimに興味を?

濵田 プログラムを始めたときに使っていたのがVimだったので。今もプログラムはVimで書いています。

辻川 僕は今もEmacsです(笑)。

──ScalaだとIDE(統合開発環境、Scala向けIDEとしてIntelliJが有名)も人気がありますよね。

辻川 Scalaだけを書くわけではなく、GoもJavaScriptも書きます。そこで負荷が少ないよう、自分が一番慣れているエディタで書いています。

異例のスムーズさだったリーダーの引き継ぎ

──濵田さんはいつからリーダーに?

濵田 正式にはこの4月からです。大きく変わったわけではありませんが、ある程度責任を求められるというか。テックリードはディレクターと一緒にプロダクトに貢献していく部分が大きいです。新たな機能を設計する際も、コードをよく知っている立場として、どのように作れば実現しやすいかを考えるという役割があります。

辻川 その前から実質的にリーダー役だったんです。私が半年間の育児休業を取っていて、つい最近の2017年4月に復帰したところです。

濵田 辻川さんが育休に入るときには不安もありましたが、意外となんとかなるものだと思いました。

辻川 普段の様子を見ていて問題がなさそうだったので、こちらは特に心配していませんでした。それでも、育休中に何か困ったことがあって呼ばれることがあるだろうと思っていたら、本当に1回もなくて。これはすごいなあと思いました。

濵田 困ったことはあったのですが、ここでがんばらなきゃ、と思っていました。辻川さんが休みに入る前からいろいろ質問して雰囲気はつかんでいたので。「なんでそういう設計になっているか」が難しい部分だと思いますが、それはある程度理解できていました。

──でも、普通はここまできれいに引き継ぎできませんよね。

辻川 すごいです。特別な工夫はしなかったのに、うまく引き継ぎができちゃった感じですね。定期的な会議で、複雑な機能のレクチャーをするようにしていましたが、それだけでうまく引き継げたとは思えないので。

濵田 設計した人の気持ちを理解するようにしました。なんでこういうテーブルスキーマになっているんだろうとか。

リモートワークが普通の光景

──リモートワークでお仕事をしているということですが、どのようなやり方なのか教えてください。

辻川 私が愛知県にある家で仕事をするようになった頃に、リモートワークが始まりました。京都と東京にメンバーがいて、日常的に3拠点を結ぶリモートワークをしています。

まず、チームメンバーは基本的に(ビジネス向けチャットシステムの)Slackを使い、テキストでコミュニケーションをしています。毎日の朝会だけはZoomというテレビ会議を使っています。家で仕事をしているとリズムをつかみにくいので、朝会で仕事モードに切り替わるのがいいですね。

チームの仕事はスクラムで進めていて、その区切りが2週間に1回あります。そのタイミングで私が京都か東京に出張して顔を合わせるようにしています。そのときも、京都と東京の2拠点での会議です。

濵田 拠点間でコミュニケーションが非対称にならない方がいいと考えています。京都オフィスにいるチームがチーム内だけで話が盛り上がって東京のメンバーに伝わっていない、といったことがあるとチームとしては良くありません。コミュニケーションが平等になるよう、非対称にならないように各メンバーが自分のパソコンのカメラに向かって、イヤホンを付けて朝会をします。リモートワークにはもう慣れて、自分としてはこれが普通だと思ってやっています。

辻川 自分の場合は、最初は(はてなオフィスで振る舞われる)オフィスランチがないのが不便でした(笑)。

濵田 入社して最初の頃の思い出なのですが、辻川さんとリモートでペアプロ(ペアプログラミング)した経験があります。画面を共有して話をしながら一緒にプログラミングをしたんです。最初はびっくりしたんですけど、なんとかできるものだと思いました。

辻川 雑談していて「画面のリモート共有の機能があるぞ。これだったら使えるかも」と試してみたという流れだった気がします。やってみたら意外とできた。

ペアプロではないのですが、本番環境のデータベースにクエリを直接流すような大事なオペレーションは画面共有機能を使って2人で確認しながら進めるようにしています。1人だとミスを見落とすことがある。危険が伴う操作は2人以上で見ながらやりましょう、というやり方です。

濵田 昨日も2人で「ペアオペ」をやっていて。途中で「ちょっと待って!」と声をかけたことがありました。

──ところで、開発中の次世代のMackerelについても教えてください。

濵田 プラットフォームとして今はデータセンターを使っていますが、これをAWS(Amazon Web Services)に移行しようとしています。こちらの資料にも詳しいのですが、一番大きな理由は時系列データベースをスケールできるようにしたいという要求があったことです。

今後の成長に備え、様々な要求に応えられるスケーラブルな設計にするべく、時系列データベースのアーキテクチャを刷新しています。クラウド環境であれば、急なスケールにも対応しやすく、各種マネージドサービスを組み合わせて、細かい要求に応えられるようなソフトウェアを開発しやすいと考えています。

開発はすでに進んでいて、メトリックをより柔軟に収集したり描画したりできるようになる予定です。データの粒度を細かい間隔で取得したり、1分粒度のメトリックを何百日も残したりできるようになるというわけです。どうぞご期待ください。

──最後になりますが、テックリードになられて発見した喜びなどがあれば、それを教えてください。

濵田 どうすればサービスの価値を広げられるか、どう運用コストを抑えるかを考えながら、サービスの根幹を担う時系列データベースの設計をし、また実装するのは楽しい仕事です。このような大きな移行プロジェクトに深く関わることができて、とても嬉しく思っています。

──まさに、仕事が深化しつつあるのですね。ありがとうございました。

取材:星暁雄/写真:小高雅也

連載バックナンバー

employment.en-japan.com