Cha道

Chatworkの「人」「組織」を
伝えるメディア

“代えのきかないエンジニア”になれたのは、Chatworkで経験を積めたからこそ。

f:id:cw-recruit:20220120105423j:plain

サービスの“信頼性”に責任を持つポジションとして、近年多くのIT企業で重視されるようになったSRE(Site Reliability Engineering)。ChatworkでもSRE専任のチームを設けており、より良いサービスを実現するためのシステム改善を続けています。
このSREチームを発足して業務の根幹を支え、現在はプロダクト基盤開発部でChatworkの次世代基盤の開発に携わっているのが尾崎耕多。今回は尾崎にChatworkで働くようになった経緯や印象に残るプロジェクト、今後の目標などを聞きました。

■プロフィール

f:id:cw-recruit:20220120110608j:plain

プロダクト本部プロダクト基盤開発部
尾崎 耕多

前職では受託開発のプロジェクトを主に担当し、フルスタックエンジニアとして開発業務を行う。2014年にPHPエンジニアとしてChatworkに入社。2016年ごろにインフラエンジニアへ転身し、その後SREチームを発足してSREへ。現在はプロダクト基盤開発部でChatworkの次世代基盤の開発に携わっている。

手に職をつけるためエンジニアの道へ

f:id:cw-recruit:20220119203252j:plain

――エンジニアを志したきっかけは何ですか?

実は私は10代のときにニートをしていました。高校一年生のときに学校を中退して、そのまま家に籠るようになりました。そんな自分を変えようと、いくつかアルバイトに挑戦してみましたが続かなくて。このままではいけないと思い、手に職をつけることを決めました。
当時からパソコンを触るのは好きで、趣味のWebサイトも自分で作っていたため、コンピューター関係の仕事ならば続けられると考えました。高卒認定試験を受け、プログラミングを学べる専門学校に進学しました。
専門学校入学後は、授業でエンジニアリングの基礎を学びつつ、C言語の専門書をボロボロになるまで読み込んで学習しました。インターネットで情報を調べながら、ひたすらアルゴリズムを書いたり、ボードゲームのオセロの解析ツールを作ったりしていましたね。この時代にエンジニアとしての土台ができたと思います。

――前職の会社に入社した流れを教えてください。

専門学校の知人から誘われたことをきっかけに、受託開発の会社のアルバイトになり、学校卒業後にそのまま正社員になりました。前職の会社は受託開発と自社サービス開発の両方をやっていました。

――前職ではどのような業務内容を担当しましたか?

Webアプリケーションの受託開発のプロジェクトがメインで、自社サービスはたまにヘルプに入る程度でした。かなり幅広い業務を担当しており、顧客との交渉・提案、仕様策定からサーバサイドの開発、フロントエンド開発、モバイル開発、インフラまで何でもやっていました。
3~4か月ごとに担当するプロジェクトが変わる環境だったため、さまざまな技術に触れられました。当時の経験を通じてエンジニアとしてジェネラリストになったからこそ、ChatworkでSREの仕事ができているのだと思います。

世界に通用する自社サービスに携わりたいと思い転職を決意

f:id:cw-recruit:20220119203235j:plain

――転職を考えたきっかけを教えてください。

前職は私が入社して3年目くらいの頃には人の入れ替わりが激しくなり、社内にWebアプリケーションに強い人材が少なくなってしまいました。私が社内でエンジニアのトップのような立ち位置になり、このまま会社にいてもエンジニアとしての伸び代が少ないと思ったため、転職を決めました。

――どのような基準で企業選びをしましたか?

前職時代に受託開発の大変さを味わったため、次の職場では自社サービスの開発をしており事業がうまくいっている会社。さらに言えば世界展開を狙えるようなサービスを扱っている会社を志望しました。自社サービスで稼ぐためにはユーザーの母数が多いほどいいので、海外にも目を向けている会社がいいと考えたんです。また、自分の携わったサービスにより世界のマーケットで勝負できるのは、エンジニアとして楽しいだろうなと思いました。
もともと仕事でChatworkを使っており、プロダクトには馴染みがありました。さらに、前職の同僚が先にChatworkに転職していたので、社内の様子をいろいろ聞いていたんです。その人が前職のときとは打って変わって、すごく楽しそうに仕事をしていて「すごくいいな」と感じて。採用面接や体験入社で実際にオフィスに行き、メンバーとも話して雰囲気の良さを感じて入社を決めました。

――入社後のChatworkの印象についてお聞かせください。

みんな残業せずに19時くらいには帰っていくので、なんてホワイトなんだと感動しました。さらに技術力の高さもすごく印象的でした。かなり早い段階からSPAを導入しており、当時の最先端を行くような設計でした。新しい技術を積極的に取り入れる会社だと感じましたね。

Chatworkの信頼性を支えるSRE

f:id:cw-recruit:20220119203207j:plain

――入社当時は、サーバーサイドエンジニアを担っていたと伺っています。

チャットが未読だった場合にメールを自動送信する機能や、削除されたファイルのバックアップを一定期間残す仕組みなどを開発していました。未読通知のメール配信機能の開発は、特に印象に残っています。
この機能ではメッセージを送られてから一定期間が経過すると通知メールをユーザーに送信します。そして、メールの送信間隔はユーザーが設定できます。Chatworkのユーザー数はかなり膨大であるため、この仕様を実現するには並列分散処理を適切に設計しなければなりません。バッチ処理の実装の醍醐味を味わえました。

――その後、インフラエンジニアに転向されたそうですが、きっかけは何ですか?

それまでChatworkのインフラ周りを全て担っていた人が、退職したのがきっかけです。私は前職でインフラ関係の業務にも触れており、Chatworkでもサービスのデプロイ周りなどインフラに近い所に携わっていました。
そこで、次なるインフラ担当者として私に白羽の矢が立ったようです。あるとき、複数のメンバーから「尾崎さん、話があるから飲みに行こう!」と誘われて、飲みの席でインフラエンジニアになってほしいと打診されました。急な話なのでびっくりしましたが、社内にいるメンバーのスキルセットや自分の経歴・スキルを考えると、確かに私が引き受けるのが一番良いと思いました。
実際にインフラエンジニアをやってみると、自分の適性にすごく合っていると感じました。私は基本的に、大変な状況が発生したときに消火しに行くのが好きなファイヤーマンタイプなんです。もしもインフラでトラブルが起きれば、システム全体に波及します。そんなとき、頭をフル回転させて対応することに、やりがいを感じつつ働くことができました。

――その後、インフラチームがSREチームになり、今に至ると伺っています。

Chatworkをかなり多くの方々に利用していただけるようになり、サービスが停止するとTwitterのトレンドに入るくらい、広い範囲に影響するようになりました。このような背景のもと、より信頼性を向上させるために組織改編が行われ、インフラチームがSREチームになりました。
SREチームの役割はChatworkというサービスの信頼性を保つことです。プロダクトに問題が起きたときや信頼性に関する課題が生じた際の対応、トイルの撲滅としてデプロイ周りやIaC(Infrastructure as Code)周りの整備、オペレーションの自動化など、必要に応じてさまざまな業務を担います。

――SREチームで印象に残る業務はありますか?

PHP製のアプリはAmazon EC2に乗っており、デプロイとロールバックの正確性、速度に問題がありました。特に懸念だったのは、ロールバックができないケースがあったことです。サービスの信頼性で問題があったときにすぐに切り戻せないことにより、平均修理時間が長くなっていました。
また、あるプロジェクトでScala製アプリをKubernetesで動かすことになり、SREの学習コストが二重にかかり負担が大きいという課題もありました。それらの課題を解決するために、Amazon EC2からKubernetesへと移行しました。
考慮漏れなどに起因する事故を避けるため、既存のインフラストラクチャの仕様を明確にしてIaC化を行い、その仕様に対して自動テストを構築し、問題ないことを確認しながら移行しました。エンジニアとしての総合力が問われる業務で、難しかったですがやりきったときの達成感は大きかったです。

どこでもフィットする歯車から、代えのきかない歯車に

f:id:cw-recruit:20220119203145j:plain

――尾崎さんがChatworkでの経験で得たものはありますか?

もともと私は何でもできるエンジニアで、「どこでもフィットする歯車」になれるという立ち位置でした。Chatworkでさまざまな経験をしたことで、“何でもできる”の度合いがグッと向上したと感じています。
例えば、私はコンテナもサーバーレスも仮想マシンもわかりますし、アプリケーション開発もできます。他のエンジニアと比べて技術選定の選択肢がすごく多いんです。私だからこそできるアーキテクチャ選定やアプリケーション開発が出てきたといいますか。どこでもフィットする歯車から、代えのきかない歯車になれてきたと感じています。

――Chatworkでエンジニアとして働く醍醐味はどのような点にあると思いますか?

一番の醍醐味は、サービスに必要であれば積極的に技術的チャレンジができることです。例えば、Chatworkでは過去にFalconプロジェクトという大きなリリースを行い、サービスの根幹であるメッセージ関連の処理を作り変えました。この際に、HBaseやKafka、Kubernetesなどの技術を採用しました。
他にはPHPからScalaへの移行を現在も行っています。また、次世代開発基盤を開発している私たちのチームでは、一部Rust+サーバーレスという構成でアプリケーションを作っています。。既存のやり方にとらわれず、積極的に良いものを取り入れる文化があります。エンジニアにとってすごく楽しめる環境だと思いますね。

――今後の目標についてお聞かせください。

今取り組んでいる次世代基盤を早く完成させて、ユーザーにとってより安全で使いやすいChatworkを実現したいです。次世代基盤ではサービスをいくつかに分割し、かつ即応性と耐障害性などに優れたリアクティブシステムを採用します。仮に一部の機能に障害が起きても、その影響がシステム全体には波及しなくなり、信頼性の向上につながります。
さらに、開発効率の大幅な改善も期待できます。現在のChatworkは全体で数十万行にも及ぶ巨大なプログラムですから、特定のエンジニアが全体像を把握することは難しい状態です。次世代基盤を構築する過程でこれらのコードを分割するため、エンジニアにとってより読み解きやすくなっていきます。これにより、デプロイの回数が大幅に増加し、機能改善がスムーズに行われるようになるでしょう。次世代基盤の完成により、Chatworkの成長が加速すると考えています。