手を動かして見えた未来、コネヒトのGo戦略変更の舞台裏
みなさん、こんにちは!コネヒトの芦刈です。
コネヒトTech Visionのアップデートアップデートされ、新たなStrategyを発表させていただきました。
2020年冬にTech Visionを発表した時にはバックエンドシステムにGoを積極的に導入する「Let's Go」というStrategyを掲げていましたが、今回の新たなStrategyには入れなかったのはなぜか?を2年間かけてGo導入を推進した阿保に、CTOの永井がインタビューした様子をお届けしたいと思います。
Let's Goとは?
2人の経歴を紹介
永井:Tech Visionの各Strategyの次のフェーズを考える中で、Let's GoをStrategyから敢えて落とそうという結論に至ったその経緯についてまずは教えて下さい。
阿保:まずLet’s Goのこれまでを振り返ると、2022年は検索システムの一部でGoを採用したり、社内外勉強会を開催したりと、大きくLet’s Goが進みました。
一方で、まだほとんどのエンジニアは事業のための開発で日々PHPで書かれたシステムを触っていて、
業務でGoに触れる機会は無く、彼らが事業の課題を解決するための最適な選択肢としてGoを検討するような状態ではありませんでした。
その状況を打破するために2023年にGoギルド(Goに興味のあるエンジニアが有志で集まったチームのこと)が結成され、
直近はWebエンジニアがGoを触る機会を作るのも兼ねて、メインシステムであるPHP (CakePHP)で書かれたバッチを全てGoで移植することを2024年の目標に掲げ進めていました。
その目標を進めていくなかで、既存システムのフルリプレイスは、今の会社の状況だと適さないと考えました。
実現性と必要性の観点から「敢えて戦略から落とす」という判断をした
永井:「今の会社の状況だと適さない」というのはどういう視点で判断したのでしょうか?
阿保:実現性と必要性の観点から判断しました。
実現性の観点では、これまでの実績から考えると20個弱ある既存のバッチを全て移植するとなると1年以上かかる計算になり、巻き込む人を増やしたとしてもフォローをしながら移植しきるのは難しいと判断しました。
必要性の観点では、移植元のシステムは言語やフレームワークのバージョンも比較的新しいものに追従できており、開発メンバーも事業のための開発で日々触っているので、わざわざ難易度の高いリプレイスをする必要性が低いと判断しました。
バージョンアップが難しいくらい古く触りづらいようなシステムの場合は、事業戦略上、別の言語にリプレイスするという選択肢もあるかもしれませんが、今回対象としたシステムはそうではないため、このような判断に至りました。
永井:なるほど。確かにそうだよね。
ちなみにLet's Goを今回のStrategyにも継続していくという話はありましたか?
阿保:元々はそのつもりでした。「Tech VisionにあるからGoを採用してきた」のが前回までのフェーズで、「Goで作るのが効果的だから採用する」のが今回のフェーズであるという定義をしました。
Tech Visionにあるから採用してきた中で、PHPと比較したときのGoならではの強みである並行処理や、ワンバイナリのデプロイ容易性だったり、
静的型付け言語としての開発体験を、そこまで成果として可視化できなかったという反省もありました。
Goの強みが活かせる実績を作りつつ、ガイドラインや開発環境、サポート体制の整備を進めることで、
Goを使うのが効果的だと判断した際に安心して採用しようと思えるようになり、次のフェーズに進めるのではないかと思っていました。
ただ、この方向性は良さそうだけれど、直近の開発起点で考えるとGoを使うのが必ずしも効果的であると断言できなかったため、
今はGoにこだわるタイミングではないのでは?という話になっていきました。
Goに関わらず、ネイティブアプリのFlutterやWebアプリのNext.jsなど、
課題を解決するうえでそのチームが最適だと判断した技術を、失敗を恐れず採用できるような開発組織をつくっていくことはTech Visionを進めるうえで重要ですし、
次のStrategyではGoに縛らず、新規技術に挑戦できる開発組織を作るという素案をGoギルドで作りました。
これを永井さんに相談したところ、「新規技術に挑戦するというのはStrategyとしては抽象度が高く、逆に絞れないのではないか?」、「新規技術に挑戦するというのはTech Visionのマニフェストと同じ意味合いを持っているのでは?」というフィードバックを貰いました。
コネヒトのTech Visionには「1つの技術に固執することよりも、課題に対して適切な技術を選択することを大切にする」というマニフェストがあるので、「新規技術を効果的に採用する」というものは同じ意味合いを持つと結論づけ、今回のStrategyからは落とそうと永井さんと会話しました。
永井:実際にGoギルドメンバーにフィードバックを持ち帰ってみての反応はどうでした?
阿保:永井さんと会話したものをGoギルドに持ち帰ると「Strategyからただ落とすだけだと推進力が落ちるのではないか?」という疑問が上がりました。実際、Let's GoもStrategyがあったからここまで進めることが出来た側面があるので、推進力が下がっていいのか?という問いには納得した部分もありました。
そこでTech Visionの他のStrategyに、新規技術に挑戦できる仕組みを作ることを想起するような文脈が入れられないか探る方向になり、失敗できるシステムと組織を作るために今回のStrategyであるFailable Systemの議論に参加して、自然な形に落とし込めました。
永井:ただ落とすだけでなく、別のStrategyに意思を残すってアプローチは見ていて納得感あり、進化の過程だなと思ってみてました。
ちなみに今回のLet's Goを通して、今後何かを進めるときにGoはコネヒトの選択肢になったと阿保くんは思いますか?
阿保:選択肢になりやすくなったとは思います。
検索システムのWeb APIや、バッチ処理が普通に動いているという実績ができましたし、動かすための基盤から作らなくていいのでGoの採用ハードルは下がったと考えています。
また、Let's Goをどう着地させるかをGoギルドで会話していく中で、
他のエンジニアが今後Goで開発する際に同じ問題にぶつからない状態にするという方針に辿り着きました。
各メンバーがGoギルドで開発して感じた問題を洗い出してみると、同じような問題を感じていることが分かったので、
その問題を解決し持続可能な状態で置いておくことにしました。
永井:おお、持続可能な状態で置いておくというのはすごくいいですね。
前回のStrategyで役割を終えたという評価ができたのはLet's Goのみだったので、いい取り組みではありましたよね。またその意思決定をGoギルドの中で判断ができたというのも組織として強い部分だなと思っていました。
阿保:ありがとうございます!
2023年の4月に部署目標にLet's Goが入ったこともあったので、そこで更に意識するようになったのかなと思っています。
永井:なるほどね。そういう視点でいうと、Let's GoのオーナーとしてTech Visionは羅針盤としては機能していたと感じますか?
阿保:そうですね、推進力になっていたと思います。
検索システムのWeb APIをGoで開発したことや、社内外勉強会を始めたのも、Tech Visionにあるから行動していこうという気持ちになりました。
技術に触れて、手を動かしたからこそ見えた未来
永井:そうか。それは良かった!
Let's Goが部署の戦略に入った当初はママリAPIのバッチ処理をPHPからGoに移行しようという話だったと思うんだけれど、
本質的に全て変えるのは違うと思っていたのか、はたまた途中でギアチェンジしたのか、でいうとどうでしたか?
阿保:一度決めたものから方針転換した理由は、実際に手を動かして進めたからこそわかった部分も多くあって、手を動かして得られたフィードバックと、組織の状況を元に意思決定をしました。
なので途中で変えたというのが近いです。
実際にGoでのリプレイスを進めてみると、CakePHPのようなフルスタックWebフレームワークからの移植は想像以上に大変でした。
既存資産が使えないので自分たちで作らなければいけないものも多く、
導入するパッケージやアーキテクチャなど意思決定する頻度もたくさんあり、やり切るには組織として体力が必要でした。
前述した必要性の観点も踏まえて、方針転換しようという話をしました。
永井:Goギルドの中では全て移行すべきだという意見は出てこなかったですか?
阿保:移植を中途半端な状態で辞めることによって管理がバラバラになることへの懸念はありました。
ただし全て元に戻すとなると、Go言語で開発していたシステムが放置されてしまうし、ノウハウもたまらない。
将来的にどの技術で実装するかはその時のそのチームの判断に任せるけど、そのときにフラットに判断できるように環境を整備しながら運用を続けていくのが良いのではないかという意見があり、最終的にそうなりました。
永井:確かにそれはそうだね。僕としてもチームでどの技術を採用するかを議論し判断できる状態が理想だと思うな。
阿保くん個人としてGoとの関わり方はどうしていきたいと思っていますか?
阿保:Goはできることが限られているしフォーマッターなんかも言語標準のものがあるため、誰が書いても同じような書き方になるところが好きです。個人としては社外勉強会に参加したり、社内勉強会で知見を共有していきたいと思っています。
永井:最後にLet's Goに二年程取り組んだと思うのですが、新しい言語を組織に取り込むことにトライしてみてどうだったか?阿保くんの総括を聞かせてください。
阿保:技術は手段という言葉がコネヒトでもよく使われているのですが、ちゃんとその手段を実践投入して酸いも甘いも知っている状態と、なんとなく知っているという状態に大きな差があると再認識しました。
日頃から技術に触れて手を動かして、自分たちの武器を増やしていくことで、課題に対して適切な技術を選択できるような組織になっていくと思います。
今後のコネヒトが目指す開発組織への展望
永井:Tech Visionの初期のStrategyを立てた時は中期視点でバッチを全部Goに入れ替えて、Goを触らないと開発できないバックエンドの組織にするという構想を一緒に描いていたので、
阿保くんから「Let's Goを止める」と話を聞いた時は正直驚きました。
ただ本質的な視点でいうと、阿保くんを筆頭にGoギルドで話し合ってくれたことは、今の状況を考えた上でも納得できる判断だったと思いますし、
そもそもメインシステムをGoに入れ替えることがゴールではなくて、技術的選択肢の一つとしてGoを組織にインストールすることがLet’s Goのゴールなので、
Goでの開発を持続可能なステージまで持っていけたと推進してくれていたメンバーから出てきたことで、このStrategyは大きな役目を終えたかなと思いました。
阿保くんの突破力が、Let’s Go推進の大きな動きの原動力となりました。
考え抜いてそして実際に色々なトライを繰り返し周りを巻き込んだ彼の熱意が今回の意思決定につながりました。
コネヒトでは、トップダウンではなく、ボトムアップで重要な技術的意思決定を行える組織を目指したいと思っていて、積極的に権限を移譲し今後もこのような事例を増やしていきたいと思っています。
ーありがとうございました!