見出し画像

祝「ScalaMatsuri2022」参戦!COMPASSとScalaの切っても切れない話【メンバーインタビュー#09】

こんにちは。採用広報チームの濱田です。

COMPASSのフルリモートの働き方を支える取り組みを紹介する前回記事、読んでいただけたでしょうか?

今回の記事のテーマは、私たちのプロダクト、AI型教材「Qubena」が採用しているプログラミング言語「Scala」です。「Scala」については過去のシステム開発部インタビュー記事でも触れられていますが、今回改めてテーマとして取り上げるのには理由があります・・・!

なんと、この度、COMPASSは、来る3/19-20に開催される、アジア最大級のScalaカンファレンス「ScalaMatsuri2022」将軍スポンサーとして参画することになりました・・・!(パチパチパチ!)

この参画はCOMPASSのScalaへの熱い想いあってこそ・・・ということで今回はCOMPASSきっての「Scala大好きおじさん」堀内さんと、VPoEを兼任するCEOの正幹さんをゲストに迎え、COMPASSのScala愛ScalaエンジニアにとってのCOMPASSの魅力を探っていきたいと思います。

小川正幹(おがわまさき)/写真左
代表取締役CEO 兼 VPoE。慶應義塾大学大学院政策メディア・研究科修士課程修了(博士課程単位取得退学)。2014年Qubenaの開発当初より開発責任者として参画、取締役CTOを経て現職。2児の父。
◆noteはじめました! https://note.qubena.com/m/m01b8fcada0bb

堀内紀彰(ほりうちのりあき)/写真右
一橋大学商学部を卒業後、エンジニアとしてスタートアップ界隈を渡り歩く中でScalaと出会い、その魅力にどっぷり浸かる。2013年に合同会社ギジオ(現・合同会社ミルクソフト)設立、業務委託として様々な企業の開発に携わる中でCOMPASSと出会う。そのScala愛はScalaの逆引き解説サイト「Scalapedia」を開設・運営するほど。


Q.QubenaのScala採用背景とは?

――さて、今日はお二人のScalaの愛を存分に語っていただけたらと思いますが、そもそも、Qubenaの開発にScalaを採用したのはいつごろからですか?

小川:
確か、導入したのは2018年ころでしたね。正直、全面導入は怖かったので、最初は試験的に取り入れるところからでした。もともとQubenaはPythonで書いていたのですが、一部のモジュールをScalaで動かすところから始めました

当時、Qubenaで扱う学習要素をグラフ構造で扱いたくて、JanusGraphというグラフデータベースを採用したのですが、フルマネージドのサービスが存在しませんでした。なので結局、自分達でサーバーを立てて運用することにしたんです。で、JanusGraphの裏側はCassandraで動いてて、だとすると、同じ JVM上でScalaでデータ抽出部分書いたら速いのでは?と考えたのが、導入のきっかけです。JanusGraphから学習要素のデータを抽出するところだけとりあえずScalaでやってみようという感じでした。

実際に導入してみたら、現場から「Scala癒しだ〜」という声が上がって(笑)

堀内:
それ、分かります!本当に癒しですよね。「Scalaは癒し」なんですよ!

ちょっと書き換えるにもスクリプト言語だと、テスト書いて動作確認しながらになるけれど、Scalaだと型によってある程度の動作を保証してくれるし、エラーもすぐに教えてくれる。安全なプログラムが作られていることが分かりやすいんです。書いていて安心感のある言語ですね。

――「Scalaは癒し」・・・パワーワードですね(笑)当時はまだScalaを採用する企業もまだ少なかったのでは?

小川:
そうですね、Scalaが次にくるだろうという流れも出てきたころではありましたが、まだまだ扱えるエンジニアも少ないし、かなりチャレンジングな選択でしたね。ただ、そこは良いと感じるものはどんどん取り入れて試してみよう!というCOMPASSのカルチャーもあって、全面採用への迷いはなかったです。

Scalaを選択したことで人材確保のハードルが高まったというのはその後(いまも)大変なところではありますが・・・!

堀内:
今は採用している会社が増えましたよね。有名どころだと、NECや富士通、ビズリーチなどでも使われています。伸び盛りの会社で使われることが多いんですよね。

今ちょうど波の時期にあるんです。Scala3になって、できることが色々増えていて、このタイミングで注目する人がさらに増えていて、よりまた伸びていくんじゃないかなって思っています。

ちなみに、COMPASSでもこれからScala3にどうやって移行していこうか考えているところです。

――堀内さんはご自身で解説メディアを運営されるほどのScala愛をお持ちですが、そもそもご自身がScalaを始めたきっかけは何だったんですか?

堀内:
友人から勧められたのがきっかけです。Javaと比べて、開発生産性が上がるんだよと言われて。

実際やってみて、Javaに比べて非常に書きやすく、表現力が高いところが魅力だと感じています。ビジネス的な面でも、アジャイル開発やドメイン駆動設計といった開発上のフレームワークと親和性が高いのも現場で支持されるポイントなのかなと。

そこからどっぷりはまって、今ではすっかり「Scala大好きおじさん」ですね。

インタビューに答えてくれる堀内さん

小川:
一時期はスクリプト言語一択って感じで、型とか気にせずとにかくガリガリ書くっていう感じだったけれど、時代が進んでいくにつれて、型もちゃんとしないとって流れはきてますよね。

堀内:
プロダクトが複雑化してくると、型をしっかりしておかないと、どうにもならないところは出てきちゃいますからね。

小川:
実は、最初は僕らも導入する時、めちゃくちゃ抵抗があったんですよね。もともとPythonで書いていたので。

でも、切り替えた時に、当時の技術責任者が「リファクタが楽なんですよ〜」って言っていて。どうしても複雑化してしまう部分を、整理しながら作ることができる。ある程度開発に美学を持っている人からすると、そういうところがScalaは魅力なんだなと感じますね。動きゃなんでもいいんじゃなくて、堅牢性も含めて考えたいって時に便利だなと思うんです。

堀内:
おっしゃる通りで、Scalaはどちらかというと、スタートアップよりも成長フェーズのプロダクトに向いているかなと思います。逆に言うと、とにかく書いて市場に出すって時には、PythonやRubyの方が向いています。COMPASSの場合はその意図がまさに一致していたと思いますね。

――なるほど。そのタイミングで、Scalaを通じてCOMPASSと堀内さんがつながったんですね!

堀内:
そうですね。技術顧問のかとじゅんさんから「今一番面白い会社が教育系にあるよ」と聞いて、僕自身かねてから抱いていた教育への想いみたいなものもあり、とても興味を持ちました。しかも、Scalaとドメイン駆動設計をやっていくとのこと。プロダクトの成長のフェーズに関われるというのは大きな魅力でしたね。

小川:
うちの会社って、プロダクトを一年ごとに作り続けてきた変な会社なんです。常に新しいプロダクトにリソースをつぎ込まなくてはいけなくて、改善や機能追加がほとんどできていなかったのがこれまでのフェーズ。

堀内さんには昨年リリースした「Qubena 小中5教科」のまさに開発のピークから参加いただいているのですが、その「Qubena 小中5教科」が50万ユーザーを抱えるプロダクトになって、ここからはさらに成長させるフェーズ。よりマーケットフィットさせるために、全リソースを投下できるような環境を整えています。これからアクセルをグッと踏むぞ!というところ。

堀内:
その中で、Scalaを採用して、より改善できる状態で臨めるというのも技術的にも面白いところなんですよね。会社のフェーズと技術的なものが一番マッチしているんじゃないかと思います。

インタビューに答えてくれる正幹さん

Q.ScalaエンジニアにとってCOMPASSの魅力とは?

――堀内さんは実際に働いてみて、Scalaエンジニアの観点でCOMPASSの環境をどのように感じていますか?

堀内:
まず技術的な面から、Akka Typedを使っているのは、非常に面白いところですね。昔は型がつけられなくて、テストをいちいちしなくちゃいけなかった。そこに型がつけられるようになったというのが大きなブレイクスルーポイントだと思っているのですが、それを採用しているのが、COMPASSの尖っているところですよね。また、Akka Cluster Shardingで負荷分散を図っているのもポイント。変わり種で言えば、JanusGraphなどグラフDBを使っているのも、面白いです。技術者としては、いろんなことが試せるのが楽しいですね。

小川:
僕は開発の現場から離れてしばらく経つのですが、個人的に分散処理の技術って昔から複雑だなぁと思っていました。Akka Cluster Shardingは実際使ってみてどうですか?

堀内:
もちろん難しくはあるんですけれど、他のフレームワークよりは簡単にできると感じています。

小川:
Qubena自体を扱う人が増えてきたので、負荷分散がすごく重要な段階だと考えています。インフラ的な努力もあるけれど、コード側の努力をエンジニアの皆さんが意識してやってくれているのが、私としては心強いですね。

堀内:
そうなんですよね。複雑なロジックを複雑なままやりがちなのですが、フレームワークや言語の力でなんとかしていく、それがScalaでできることなのかなと思います。

一対一の単純な答え合わせではなく、AIが学習して、子供たちの解答に合わせて問題を出題する部分がQubenaの肝ですよね。その部分ってどうしても複雑化しがちなんですが、Scalaを使うことによってメンテナンスがしやすくなっている。どんどん改善していけるのがいい部分かなと思っています。これがスクリプト系だと一から全部作り変えるしかないんですよね。

小川:
僕は、他の競合サービスと比べたときに、このAIこそが優れているところだと考えていて、我が社が誇るロジックがシステムの裏側には存在していると思っています。

堀内:
まさにコアドメインだと思うんですけれども、これまでのものを作り上げたのは、Scalaなくしてはできなかったと思いますね。

――おおお、ScalaあってのQubenaと言っても過言ではないですね・・・・!

堀内:
あとは、環境的なところで、僕が関わらせていただいて1年と4ヶ月くらいですが、本当に風通しが良い雰囲気だなと感じています。僕は業務委託という立場ですが、雇用形態や年齢・社歴関係なく声を上げることができる。それって技術にしっかり集中できるという環境が整っているってことなんですよね。

そして、若いプロダクトだけれど成熟した人が多いという印象です。風通しの良さ、雰囲気の良さを感じますね。すごくいいメンバーが揃っていると思います。

小川:
それはうれしいですね。ありがとうございます。
そこについては、僕としては、やっぱり、会社としてみんなで共有しているバリューが効いていると思うんですよね。

COMPASSのバリュー「3Be」

それぞれが技術を高め合って、リスペクトし合える関係がないと、うまくやっていけないし、常に現状をアップデートしていくチャレンジ精神が無いと走り続けることはできない。3つのバリューが言葉として掲げられているだけではなく、一人ひとりの行動に体現されているなぁと思います。


Q.COMPASSの「カイゼン会」とは?

――正幹さんからValueの話が出ましたが、「Beyond the Best」を体現する取り組みとして、堀内さんにリードいただいている「カイゼン会」もCOMPASSらしさの一つですよね。

小川:
そうそう、堀内さんは「Scalaカイゼン会」をはじめ、数々のカイゼン会をリードしてくださっています。

堀内:
COMPASSに参加して間もない頃、当時の開発責任者の方から、中長期的な保守性やメンテナンス性、チームの能力の全体的な底上げをリードする場の運営をお願いされたのが始まりです。

隔週でバックエンド全体の「カイゼン会」、週次でチーム別の「カイゼン会」を主催し、今上がっている課題をどうしていこうか、内容をレビューしていくという会をしています。

――COMPASSでは改善活動に2割の時間を使うと決めている、と過去のインタビューでもお伺いしました。

小川:
そうですね、新規の開発だけで100%にするのではなくて、「20%は余白を残す」ことを開発チームにはお願いしています。状況によって繁忙期では改善まで手が回らないことも正直あるので、そこは柔軟性を持たせつつ、個人でやることのリストの中に改善を入れられるようにしているんです。

堀内:
年間通じて、「ならして2割は取れるようにしたいね」とは話していて、取れそうな時期にできるだけ改善の時間をとってもらうようにプッシュしています。その改善をチームとして進める場がカイゼン会です。

最近の改善課題でいくと・・・、後のバージョンで廃止されてしまった機能を多用してる関係でDIフレームワークがアップデートできない状況になってしまっていたところへの着手を進めていたりします。これを解決するとテスト性が上がり、他の機能開発や改善がスムーズになるので真っ先に対応したいのです。

こういうのって日々の機能開発では拾ってもらえない案件だと思うので、こういうことにしっかり工数を確保したうえで着手できて、改善していけるっていうのはうれしいですね。

小川:
課題だけ積み上がって消化されないことがよくあるけれど、COMPASSでは、それについて一つひとつ優先順位をつけてやっていける。こういう環境って大事だと思うんです。

――実際、改善すべき課題は多いですか?

堀内:
成長期のプロダクトなので、当然、カイゼン会の課題はたくさん出てきます。正直山積みです。ただ、やればやっただけ成果が見えるので、そこが面白いところでもあります。解決したい課題がたくさんあることもQubenaの魅力。こういうところで腕を振るうっていうのも、キャリアの一つなのかなと思いますね。

小川:
課題っていうと、悪いイメージがあるけれど、「もっとこうしたら良くなるんじゃないか」と考える前向きな課題が多いと思っています。

堀内:
そうですね、過去のコードをよりよいものにしていくというのは、未来につながる大事なこと。苦労が見えるコードを触る時には「なるほどな」と勉強になりますし、日々、先人の技術に感謝と敬意を持つことを忘れないようにしたいと思っています。

僕だけではなくてCOMPASSのエンジニアはそういう意識の方が多いと感じています。今のチームでも、過去のコードに敬意を持って、どうやったらもっと良くなるかを考える前向きな雰囲気なので、本当に良い環境だなと思います。

――その前向きな雰囲気はこれまでの開発チームの皆さんへのインタビューでも、すごく感じたところです。

小川:
エンジニアのリーダー陣に、「何を大事にしたい?」と聞いたら「心理的安全性」と答えるくらい、安心して開発できる環境をめちゃくちゃ大事にしてくれているんですよね。

堀内:
本当にその通りで、その点は、エンジニアとして働くにはめちゃくちゃやりやすいんじゃないかな。お互いをリスペクトしながら、より良いプロダクト、より良い事業を作っていくという同じ方向を向いている

さらに言えば、中長期的な目標と短期的な目標って往々にして異なるので、率直に意見をぶつけあえる土壌がないとバランスを取るのが難しい。でも、それがCOMPASSだと互いのリスペクトがあるのでうまくいっている。僕もいろんな現場に携わってきましたが、COMPASSは、環境が整っていて、だから伸びていく、そんなチームなんだと思います。

小川:
堀内さんにそう言ってもらえるとうれしいですね!

「中長期」「短期」のワードを出していただきましたが、Qubenaは今、まさに大きな成長のタイミングであるとともに、子どもたちの学びを支えるプラットフォームとして、数年先、いや10年以上先の成長も見据えた開発が必要なプロダクトです。その両方を一緒に楽しめる&Scala愛を共有できる新しい仲間をお待ちしています!

=============

ここまで読んでくださった皆さんありがとうございます!「ScalaMatsuri2022」でお会いできるのを楽しみにしています。

今回ご紹介したCOMPASSならではのエンジニアの仕事の魅力や大切にしていることに共感し、一緒に働いてくれる仲間を絶賛募集中です。興味を持っていただけた方のご応募、お待ちしています。