Cha道

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

Chatworkでは、人と一緒に働くのが楽しい。こんな気持ちになれたことに驚いた。

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

小学生の頃からプログラミングに触れ、いくつものテック企業で経験を積んだ後にChatworkへ。テックリードの加藤潤一は「技術的難易度の高い仕事をしたくて、この会社に来た」と笑顔で語ります。そして、「人が魅力的だから、メンバーと一緒に働くのが楽しい」とも。
エンジニアとして20年超のキャリアを持ち、Scala×DDDの伝道者として知られる加藤。
彼は仕事において何を大切にしているのでしょうか?
そして、加藤の考えるChatwork技術基盤の未来とは?
穏やかな表情で、これまでの経歴と今後の展望を語ってくれました。

■プロフィール

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

プロダクト本部コアテクノロジー開発部

加藤潤一

Chatwork株式会社テックリード。10歳で初めてプログラミングに触れる。SIとしてさまざまな現場での業務を経験した後、2011年より某D社、2013年より大手ソーシャルゲーム企業で、それぞれScalaやドメイン駆動設計を採用したシステム開発に従事。2014年7月よりChatworkに参画。現在はChatwork次期アーキテクチャのプランニングや設計、開発に携わる。

趣味だったプログラミングが、世の中の役に立つと気づいた

――加藤さんがプログラミングに初めて触れたのは小学生の頃だそうですね。

当時は10歳でしたから、小学4年生くらいの頃です。家にたまたまPASOPIAというパソコンがありました。現在のパソコンのCPUは64bitが当たり前ですが、当時は8bitで画面は白黒。若手の方は想像もつかないかもしれませんね。そのパソコンを使って、太陽系の軌道を描画するプログラムなどをBASICで書きました。その後も趣味の一環としてプログラミングを続けていたものの、仕事として関わるとは全く考えていませんでしたね。

――プログラミングを仕事にしたいと思い始めたのは、何がきっかけですか?

私は高校を卒業してから大手電機メーカーに入社し、蛍光灯製造工場で製造技術や品質保証などITとは直接関係のない仕事をしていました。働く過程で、他部署の人たちが業務効率化のためにプログラミングを活用したり、世の中で徐々にIT化が進んでいくのを目の当たりにして。「私が趣味でやっていたプログラミングを、仕事で使うと便利なんだ!」と気づいたわけです。
そこからC言語やアセンブリ言語などを学び直し、業務効率化のためのツールをつくるように。仕事が劇的に楽になり、プログラミングがどんどん面白くなりました。しかし、自分の本業はエンジニアではなかったので、仕事でずっとプログラムを書いていられるわけではありません。もっとコードを書きたい、エンジニアとして飯を食っていきたいと思うようになり、転職をしました。その後はSESとしてソフトウェアハウスに行ったり金融系システムやプリンタードライバーの開発をしたり。数多くの仕事を経験しましたね。

Web系企業で学んだ、チームで仕事をする醍醐味

f:id:cw-recruit:20210114202251j:plain
――いくつもの会社で働かれてきたそうですが、特に印象に残る職場はありますか?

前々職のWebサービスを提供する某D社や前職の大手ソーシャルゲーム企業ですかね。順に話すと、当時のD社は技術力が高い人や面白い人が目立っていました。私はどんな人と働くかを大切にするタイプなので、楽しそうな会社だなと考えて入社を決めたんです。
以前の職場では主にSI事業に携わっており、業務システムの開発を支援する立場でした。自社の事業としてユーザーに直接Webサービスを提供するのは初めてで、自分のキャリアにおける新しいチャレンジでしたね。

――SI業務とD社での業務には、どんな違いがありましたか?

SIは基本的にクライアントから依頼された仕様通りにシステムを開発することが仕事です。現場のプログラマが仕様に対して意見を言うなんてことはほぼありません。でも、Webサービス開発はそうではありませんでした。仮説を立てて開発、検証する改善のサイクルを、自分たちの責任で回す必要があります。言い訳ができないんですよね。エンジニアの裁量が大きいぶん責任も大きいんだと、SIの感覚に慣れていた私は驚きました。

――D社では技術的にもチャレンジをされたそうですね。

所属していたチームにScalaとDDD(ドメイン駆動設計)を導入しました。D社で働き始めたのは2011年からですが、2010年頃から私はScalaとDDDに強い魅力を感じ、自分の強みにしていくと決めていました。Scalaはオブジェクト指向と関数型の特徴を備えた魅力的な言語で、静的型付き言語なのに型推論のおかげでスクリプト言語のようにすっきりした記法で書けます。副作用のない関数を使ったオブジェクト指向プログラミングも、とても自分の手になじみました。
とはいえ、その頃のD社のルールでは、Scalaの導入は本当はNGでした。インフラチームの負担を考慮して、使用する言語は原則としてJavaかPHPだけしか認められていませんでしたから。しかし、ScalaはコンパイルすればJavaアプリケーションであることに変わりはないので、実質上Javaみたいなものじゃないですか(笑)。そこで、許可を得ずに「これはJavaアプリケーションです」と言って、Scalaのアプリケーションをデプロイしてしまいました。

――なんと(笑)。かなり思い切ったことをやりましたね。

「良いアイデアなら許可を求めるな」の考え方ですね。しばらく経ってから「あれはScalaという言語で開発したアプリケーションです」と白状しました(笑)。ですが、運用の実績をつくったことで、社内への普及はずいぶんスムーズになりましたね。他のチームも「自分たちもScalaをやりたい!」と言い出して、社内で一気に注目されるようになりました。現在では、サーバーサイドの主要な言語としてScalaが用いられているそうです。

――普及のきっかけをつくったのが加藤さんだったとは! D社時代の経験から学んだことはありますか?

チームで仕事をする意義を学んだかな。どのエンジニアにも、得意分野とそうではない分野があるじゃないですか。サーバーサイドは得意だけどフロントエンドは苦手という人もいれば、その逆もいる。でも、一人ではできないこともチームを組むことで補完し合えます。
D社のプロジェクトはサービスを提供するうえで必要になる技術領域が幅広かったので、チームを組むことの意義を強く感じました。それに、みんなが一丸となってひとつのゴールに向かっていくために、どうすればいいかを考えることが多かった。チームプレイの大切さに気づいた職場でしたね。
その後は大手ソーシャルゲーム企業に転職してチャットサービスの開発に携わります。もともとはインフラチームで働く予定でしたが、チャットサービスを新規に立ち上げたいという相談を受けました。私がScalaとFinagleでプロトタイプを開発したことがきっかけとなり、そのプロジェクトに携わることになったんです。この現場でもScalaとDDDを用いた開発スタイルを採用し、社内に啓蒙していました。

課題と真摯に向き合う前CTOの姿に共感した

f:id:cw-recruit:20210114202108j:plain
――大手ソーシャルゲーム企業の後、現職のChatworkに移られます。転職のきっかけは何でしたか?

より技術的難易度の高い案件に携わりたいと考えるようになったからです。大手ソーシャルゲーム企業では新しいサービスの開発に携わっていたわけですが、新規開発ってそれほど技術的な難しさはないんですね。むしろ、既存の巨大なシステムをリプレイスしていくような案件の方が、技術的難易度は高い。

そういったプロジェクトはえてして炎上案件になるので大変ですが、自分のスキルを伸ばすためには必要な経験だと思いました。転職活動を始め、まずChatwork以外の企業から内定が出ました。条件も恵まれており良い企業でしたが、どうも煮え切らない思いがありましたね。

――煮え切らない、ですか。

なんとなく、その企業で働いても予定調和に終わりそうな未来が見えたんです。活躍はできたと思いますが、自分の想像のつく範囲内で成長が止まってしまう。本当にこの会社でいいんだろうか、という気持ちがありました。

そんなある日、偶然にもChatworkがScalaのエンジニアを募集していることを知りました。なんだか惹かれるものがあり「私が働けそうなポジションはありますか?」とエントリーフォームから送ったら、「めちゃくちゃあります! 明日、会えますか?」という感じに返信が来て(笑)、すごいスピードで話が進みました。

面談では当時CTOの山本正喜(現在は代表取締役CEO)が、Scalaの導入やアーキテクチャ刷新などに課題を抱えていることを包み隠さず相談してくれたんです。そのうえで「ぜひ課題解決に協力してほしい」という感じに話してくれました。

ChatworkのValues(Chatworkが大切にしている5つの価値観)には「自然体で成果を出す」という項目があります。面談を振り返ってみると、当時のCTOがその価値観を自ら体現していたと感じました。大見得を切るようなことはせず、わかっていてもなかなか手を付けることが難しい、技術的負債の問題などについても正直に伝えてくれました。課題と真摯に向き合う姿に共感したことが、Chatworkを選んだ大きな理由ですね。

とはいえ、当時のアーキテクチャ刷新はかなりチャレンジングなプロジェクトでしたので、仕事をするうえで大変なことも多かったです。新卒のメンバーに当時の話をしたところ「そんな大変な状況、僕はとてもじゃないけどやっていけないと思います」と言われたこともありますよ(笑)。でも振り返ってみると、そんな経験も全て自分のためになりました。

――Chatworkにはどんなタイプのメンバーが多いと感じますか?

メンバーがみんな誠実なんですよね。若手だろうがベテランだろうが同じ立場で、フラットに議論できる文化があります。みんながサービスやユーザーのことを第一に考えて、改善のためのアイデアを出してくれる。全員が自分ごとだと考えて仕事に取り組んでいるんでしょうね。ちなみに「自分ごとで行動する」というのもValuesに入っているんですけど(笑)。

本来、チームで仕事するって、面倒なことも多いじゃないですか。でも、Chatworkの場合は人と一緒に働くのが楽しいんですよ。こんな心境の変化があったことに、自分自身とても驚きました。こういう人たちが一緒に働いてくれているからこそ、難易度の高い挑戦にも前向きに取り組めるんだと思います。同じ志を持っている人たち、まさに同志ですね。

次期アーキテクチャで実現するChatworkの未来

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

――現在、加藤さんはChatwork次期アーキテクチャのプランニングや設計に尽力されているそうですね。

次期アーキテクチャでは、Chatworkの技術的負債を解消し、よりサービスを高速に改善していけるような技術基盤の構築を目指しています。Chatworkは2011年3月にリリースされ、機能追加が次々に行われてきました。その結果として生じてきた技術的負債を解消する取り組みが、これまで何回か続けられてきたんです。

最初に実施されたのは、2015年にスタートしたChatworkの基幹システム全体のリプレイスプロジェクトです。「Falcon」と名付けられていました。しかし、改修スコープが大きすぎたことや、システム性能やマネジメントの課題などがあったために難航。2016年1月にChatworkに開発本部長として入社した春日重俊(現在は執行役員CTO兼プロダクト本部長)が、プロジェクトを止める決断をしました。

その後、2016年にメッセージ機能の部分だけを対象としたリプレイスが行われました。PHPで書かれたコードをScalaに置き換え、Akkaの特徴を生かしたアーキテクチャを構築。メッセージデータのストレージをAmazon AuroraからCQRSを使ったKafka + HBaseに変更し、さらにKubernetesも導入しています。このプロジェクトはうまくいきました。

しかし、他の機能は依然として古い設計・実装のまま。システムの大半は、PHPで書かれたモノリシックなアプリケーションです。何かの機能に手を入れると、別の機能に影響が出てしまう。機能ごとにチームを分割して、並行開発・並行リリースを進められるようなアーキテクチャにはなっていません。

次期アーキテクチャではこの本丸の部分に手を入れて、新しい技術基盤への刷新を目指しています。これは単なる技術的な改善ということだけではなく、今後の事業計画に合わせてプロダクト・組織を成長させるために、アーキテクチャを戦略的に見直します。技術的な各論としては、機能単位でモジュールが分割されてチーム活動の独立性を担保していく予定です。モジュラーモノリスからマイクロサービスへの移行も視野に入ります。

開発がスタートするのは2021年からで、長期にわたる大きなプロジェクトになるでしょうね。大変だと思いますが、取り組む意義は大きいです。

点と点をつなげる

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

――今後、加藤さんが個人的に実現したい目標はありますか?

私は、常々思っていることがあります。自分自身が行動して何かを実現するのは、それほど難しくない。しかし、他の人に何かをお願いしてその人にやってもらうことは、とても難しいということです。両者は全く別のスキルじゃないですか。

身の回りにいる人たちに良い影響を与えられるようになるには、後者のスキルをより磨かなければいけません。とはいえ、これは一朝一夕に実現できるわけではなく、すごく時間がかかることだと思います。目標というよりもライフワークですね。長期的に他の人たちと関わり、一緒に技術を学んでいきながら、お互いに切磋琢磨していきたいです。

――彼ら・彼女らにはどんなメッセージを普段から伝えていますか?

今に集中することが大切、ということですね。たまに「将来、テックリードやCTOになりたいです。どんな努力をすればなれますか」という感じの質問をされる方がいます。そういった人たちには、未来のことばかりを考えるのではなく、現在の自分が置かれている環境でできることに集中したほうがいいという話をよくするんですよ。

スティーブ・ジョブズがスタンフォード大学卒業式で行った有名なスピーチに「点と点をつなげる(Connecting the dots)」というフレーズが登場しますよね。まさに、あのメッセージの通りです。私が最初にプログラミングに触れたときも、面白いと感じただけで将来の役に立つなんて全く思いませんでした。後になってから、仕事に役立つことが偶然わかった。点と点がつながったわけです。その後のキャリアでも、そのとき集中して真剣に取り組んだことが、後になってから活きることの連続でした。

これから何が起きるかなんて、誰にもわかりません。未来を見通して予測するのは不可能で、とにかく点を打っていく努力をするしかない。そんなメッセージを、これから多くの人々に伝えていきたいです。