Cha道

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

フロントエンドエンジニアと学校の先生、 どちらも本業です。

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

Chatworkで技術的負債を解消しつつ、社外で小学校や専門学校の講師を務めている高瀬和之。
エンジニアと講師業務を両立させている意味は何なのか。
ロボット開発のベンチャー企業でのCTOに就いていた高瀬が、なぜChatworkにジョインしたのか。
そして、どのように技術的負債の解消に挑んでいるのか。存分に語ってくれました

■ プロフィール

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

フロントエンドエンジニア
高瀬 和之

理系の教育一家に生まれる。父が数学で祖父が理科の教師、祖母が校長を勤めていた。ハンダごて、ラジオキット、パソコンとプログラミング学習ツールなどに自宅で触れることによって、ものづくりへの興味を持つ。中学を卒業して、自宅から2km圏内にあった長岡工業高等専門学校へと進学。その後、大阪大学の情報系の学科に編入後、2足歩行ロボットの開発を行うプレンプロジェクト社に入社した。5年間勤務してCTOを勤めた後、2019年9月にChatworkにジョイン。フロントエンドの開発や採用・育成業務に携わっている。また、専門学校や小学校での講師としても、並行して活動している。

開発と教育、どちらも本業です。
専門学校と小学校で「先生」をやっています。

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

―― Chatworkのエンジニアと、外部の講師の仕事を両立していると聞きましたが、そのキッカケは?

前職は、大阪のロボット開発のベンチャー企業に勤めていたのですが、その会社は受託で教材の開発も行っていたんですよ。教材をつくっては現場で試してみたり、専門学校のカリキュラムのコンサルティングを行う中で、「あ、これは自分に向いているかも」と感じました。そこで、エンジニアとしての仕事をしながら、小学校でのプログラミング教育の先生や専門学校での講師もやらせていただくことになりました。

エンジニアも講師も、どちらも本業という意識でやっています。当時、エンジニアの現場では、ロボットの開発の中でもソフトウェア領域を主に担当していました。ロボット本体側の組み込みソフトや、それを操作するためのiOS、Android、Webアプリの開発です。また、ハードウェアをオープンソースで提供している珍しい会社だったので、海外からもよく声が掛かってアメリカやヨーロッパでワークショップも開催していましたね。スーツケースにロボットを10体くらい詰めて、各地を回っていた時期もありました。

―― それだけ目まぐるしく動いている中で、よく講師もやられていましたね(笑)。 

開発と講師の仕事は相乗効果が大きいんですよ。教えることが、開発に良いフィードバックをもたらしてくれますし、もちろん開発の先端事例を教育にも活かせます。それぞれに違った楽しみがあるので、片方だけやっていたのでは、むしろ頑張れなかったと思います。今でも毎週木曜日は専門学校で機械学習、統計学、回路設計の3コマを教えていますし、小学校でもロボットを活用したプログラミング教育を行っています。この2つは、Chatworkに入社した今でも続けていますね。他にもプログラミングの家庭教師やワークショップの講師なども担当していました。

教育は、画面の中だけで完結しない。それが面白いんですよ。小学生に対しては、プログラミングツールをつかってロボットを動かすことを教えています。ほんの少しの反応があっただけでも、彼らは「おおおー!」と驚いてくれる(笑)。画面での入力が、リアルの世界につながっていることを実感することで、想像力が刺激されているのでしょう。これは、私自身がものづくりに興味を持った原体験と同じです。昔のハンダごてやラジオのキットが、パソコンとロボットに変わっても、根本は変わらない。「技術をつかってものづくりをするのが、こんなに面白いんだ!」と感じてもらえると、本当に嬉しいんです。将来、彼ら彼女らがエンジニアになってくれて、この国を支えてくれるかも知れませんし。そう考えるとワクワクしますね。

フロントエンドの技術的負債の解消は、
フレームワークの導入と状態管理から

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

―― ロボット開発と講師業務を並行して進めながら、どうしてChatworkへとジョインしたのでしょうか?

5年に渡ってロボットに携わっていたので、ハード寄りの開発については、理解が深まっている実感を持てていました。一方で、ソフトウェア開発のスキルはどうなのか、と内省したときに自信が持てなかった。そこで、20代も最後に差し掛かっていたこともあり、新しい領域に飛び込もうと考えました。ソフトウェア開発をゴリゴリやるなら、やはりSaaS企業が良いだろうと、そこで頭に浮かんだのがChatworkです。私が独学趣味で学んでいたScalaに関しての技術力が高いことで知られ、大阪にもオフィスがあったので、以前から注目していました。プロダクトがコミュニケーションツールだったことも魅力的でしたね。人間のあらゆる活動の起点になれるものなので、開発のしがいがありそうだった。一方で、講師の仕事は続けたかったので、「週3〜4日勤務の正社員」という形で入社を決めました。2019年の9月のことです。前職はいまでも好きな会社ですが、CTOという役職には未練は感じませんでしたね。私はずっと開発現場で、ものづくりと教育に貢献していきたかったので。

―― いま、どのような仕事にメインで取り組んでいるのでしょうか?

メインはChatworkのフロントエンド開発で、たまにScalaも触ってます。いま、最も注力しているのは、技術的負債の解消です。Chatworkは2011年にリリースしたサービスですので、今でも当時の技術が残っている部分があります。たとえば、フロントエンドを構築するのに、当時はjQueryを使っていたのですが、今のChatworkのように大規模化したアプリには合わないんですよ。ですので、私の入社前から進めていることですが、最初のステップとして、フレームワークをモダン化するためにReactを導入しています。まずはロゴ周りなどの簡単なところから実装して、メッセージをやりとりするチャットの部分を改変して、その周りのダイアログの領域へと徐々に拡げていきました。優先順位を付けながら、まだコードを書き直している最中です。

―― フレームワークとしてのReact導入の次は、何を手掛けましたか?

Reduxの導入を同時並行で進めています。Reactの導入は、あくまで見た目にフォーカスしたものですが、それに加えて、状態管理を洗練させたいのです。もともとは、自前のフレームワークで組まれていたので、状態が変化した際に不用意に画面が更新されていたりと、安定していませんでした。そこで、状態管理を汎用的かつ使いやすい形で行うために、幾つかの技術選定を経て、Reduxを本格的に導入することに決めたのです。

技術だけでなく、組織体制を変えていかないと、
いつかは破綻してしまう

―― ReactとRedux。2つの施策によって、技術的負債の解消のメドは立ちましたか?

いや、まだまだです(笑)。JavaScriptベースの開発にTypeScriptを持ち込むことによって、型の恩恵を最大限に活かす施策も進めています。より大規模開発にマッチした手法を採り入れて、効率と正確性の向上を目指しているのです。加えて、関数型プログラミングの考え方も積極的に導入しています。「状態をインプット→見た目としてアウトプット」というシンプルな考え方が、すごくしっくり来るんですね。レビューもしやすいので、コードがどんどんキレイになりますし。業務外のモブワークでも、仲間たちとワイワイ議論しながら理解を深めている最中です。もともと私が、Haskellというゴリゴリの関数型言語を使っていたので、その知見も活かせていますね。

もう少し未来を見据えた取り組みとしては、コマンドクエリ責任分離(CQRS:コマンド・クエリ・レスポンシビリティ・セグリゲーション)の考え方をフロントエンドの領域で活かせないか、試行錯誤を始めています。もともとはサーバーサイドでの考え方なのですが、状態を変更しようとする操作と、状態を取り出して表示させようとする操作を適切に分離させることで、それぞれの開発を独立して行える。そうすることで、「機能型組織」へと体制を進化したいと考えています。現状は「フロントエンド」「サーバーサイド」「iOS」「Android」など技術領域別の組織構成なのですが、近いうちに「チャット」「タスク管理」「ファイル管理」、「ビデオ/音声通話」といった機能ごとに組織を分けていきたい。よりユーザー目線でスピード感を持った開発体制をつくりたいです。

―― 技術的負債を解消するには、組織の進化も必要だということですね。

そうですね。フレームワークと運用する組織体制はセットだと思います。あとは、アーキテクチャの領域ですね。そこでは、レイヤードアーキテクチャのコンセプトを、フロントエンドでも導入しようと検討を重ねています。それぞれの依存性を適切に分割して、層状の構造をつくる考え方です。その中でも、クリーンアーキテクチャの概念を持ち込もうかと。フロントエンドの領域で一般的に用いられる責務の考え方をそのまま適用するだけでは、拡大を続けるChatworkの開発においては破綻が見えている。私たちにまだ知見が無い領域なのですが、自社に合うのはどういった形なのか、アーキテクトチームの方と活発に議論しています。

プロダクトは自分の分身。「その場限りのコード」は書きたくない

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

―― 先を見越して、先進的な考え方をゼロから取り入れようとするのは、大変だと思うのですが。

やっぱりその場限りのコードを書きたくないんですよ。無計画に増改築を繰り返して行くのは、この規模のプロダクトになるとそのまま負債になってしまう。それだけは避けたいんですよ。「プロダクト=自分の分身」だと思っているので、気持ち悪いことは極力やりたくない。未来に向けて適切な進化を重ねていくことを、何よりも大切にしています。

でも、あるべき姿をフラットに追求しながら、みんなでワイワイ議論しながら開発できているのは、幸運だとも思っています。上意下達の命令もほとんどないですし、組織やプロダクトに対して良いと考えたことを、ストレートかつ純粋に実行に移せている。Chatworkという会社が、その環境を維持できている理由は大きく2つあると思っています。

1つ目は、プロダクトが安定した収益を生み出していること。社会のリモートワーク化が進む中で、ビジネスチャットの利用者のパイ全体が増えている。特に、Chatworkのメインのターゲットである、中小企業にもDXが浸透してきているのも追い風になっています。だから、目の前の収益を優先した無理な開発を行うことなく、中長期の目線で健全にプロダクトに向き合えるのです。

勇気ももらえますし、みんなでやれると楽しいですし

―― 確かに、業績が安定していることで、開発にも余裕が生まれますね。新しい投資も惜しみなくできますし。では、もう1つの理由は何でしょうか?

Chatworkという会社のカルチャーですね。会社全体ではなく、エンジニア一人ひとりの気質が特徴的だと思います。ものづくりに対する姿勢が非常にピュアなんですね。前職のロボットのベンチャー企業も似たような感じだったのですが、「いいものをつくろう」「そのために自分がやれることは最大限やろう」という強い気持ちを持っていますし、プロダクトへの愛もあります。誰かが手を挙げれば、そこに勝手に人が集う。そして、部署がバラバラな人たちでチームを組んでも、課題に対して一丸となって向き合える。これは大きいですよ。勇気ももらえますし、みんなでやれると楽しいですし。だから、難易度の高いチャレンジに取り組めるんだと思います。

そういえば、つい先日の朝会では、タスクの確認はそっちのけでUIの話で盛り上がりましたね。過去にも、自然発生的にUIの改修は行っていて、たとえば、ファイルをチャットに投稿する際の表示順序を入れ替えたことがありました。以前は、ファイルの種類→ファイル名→メッセージの順で表示されていたのですが、投稿後の表示とは逆になっていたので修正しました。細かい修正なのですが、ユーザーの方からTwitterで「地味に嬉しい」という反応をいただけて(笑)、それを見てみんなで喜ぶという。これだけ多くの人に使ってもらっているサービスですので、小さい改善で何らかの反応があるのも、モチベーションにつながりますよね。

ものづくりの原体験を、30歳になっても味わえています

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

―― みんなでものづくりに前向きに楽しんで取り組んでいるのは、教育の現場とも近いかもしれませんね。

そうですね。似ていると思いますよ。私が教えている小学生たちは、目をキラキラさせながら、パソコンをいじってくれています。ロボットが動いたときの喜び方がすごい。ほんの1cm、足が動いただけで「うおー!」ってなります。そこから先は、もうキットを離さなくなる。「新しい何かを形にしたい」と思うのは、人間の根源的な欲求かもしれませんね。

でも、いまの私の職場環境もこれに近いです。ピュアにみんなで新しいことにチャレンジしていますし。もちろん、うまくいかないときも、辛いときもありますよ。無理をしてでも、高いところを目指しているわけですから。ただ、そこに登るまでに、技術を心底楽しんでいる瞬間をみんなと共有できるのは、この会社の好きなところですね。ものづくりを好きになったときの原体験を、30歳にもなって自分の仕事で再現できているのは幸せかも知れないなぁ。「先生」をやっているから、余計にそう感じるのかもしれませんけど。