2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
新多真琴氏:(スライドを示して)今、上2つが終わりました。これから本編に入っていこうと思います。技術選定の話をしていきますが、今日、技術選定の話を持ってこようかどうか若干迷っていました。「EMといったらピープルマネジメントだろ」みたいなところもあると思うんですけど(笑)。
先ほどの(大野晋氏のセッションの)質疑にもあったように、(EMは)技術をわかっていたほうがいいのかどうか、そのあたりにもかかってくると思いますが、実際に意思決定する立場は自分でなくとも、どこに理由があってその技術を選定するに至ったのかは、わりときちんとわかっていたほうがマネージャーなのでよかろうよ、と思っています。
この技術的な意思決定は私がやりました。これはCTOのロールのうちの1つだと思ってやっていたのですが、もしテックリードが横にいたら、テックリードと一緒に決めていたかもしれないなと思います。
(スライドを示して)はいちょっと、変な絵の状態で止めて前提の話をしちゃいましたけど(笑)。
入社した当時、6月のあらたまさんは、「遠くのほうにヤバいものがあるな」と薄々感づいていたのですが、近づいてみたら本当にヤバかったということがありました(笑)。めちゃくちゃ誇張しています。誇張していますが、事実としてあるのでお話ししていきます。
Cake.jp自体は、2017年の頭ぐらいにスタートしたサービスです。Cake.jpというかたちになるまでに2回ぐらいピボットしていて、そのピボットの過程の中でコードベースを捨てるという選択を取らずに来ました。
足掛け10年ぐらいの歴史を持つ、システムとしてはなかなか古き良きサービスなんですけど(笑)、この業界で10年というとだいぶ長いじゃないですか。いろいろな技術革新がありましたし、いろいろなデファクトスタンダードが出ては消え、出ては消えてきました。
技術も業務フローも時代の変遷に合わせてたくさん最適化させてきました。新しい種を見つけて、それに沿うように今のシステムを無理くりトランスフォームさせるということをやっていっていたので、コードの歴史的経緯を把握することがけっこう難しくなっていました。
そうなるとやはり楽しくないじゃないですか。なので、「これはちょっとなんとかしないと」と思っていたのが入り口としてありました。
じゃあ、これをこんなになるまで放置してきたのが悪かったかというと、そんなことはないと思うんですよね。きれいなコードを書きましょう、きれいなアプリケーションを作りましょうとやって、やっているうちに会社が倒産したら意味ないじゃないですか(笑)。
暴論といえば暴論なんですが、プロダクトマーケットフィットしていない状態でそういうことを言うのは、「優先順位がなっとらん」みたいな話だと思っています。なので、そういった状況の事業、プロダクトにおいては、コードの寿命よりももっと優先されるべき事項があるよね、と。
結果として、技術的投資が今のタイミングではないという判断が、暗に明にされてきたというだけではないかと捉えています。もちろん、二兎を追えるに越したことはないんですよ。ですが、それをすごく高い水準で発揮できている事例を私たちは聞いたことがありますか? という話なんですよね(笑)。
それだけ、各社悶え苦しんでいる部分だろうと思いますし、今後、Web産業自体がさらに成熟していくにあたってこういう事例はものすごくたくさん出てくると思うのです。なので、ここでなにか1つ、自分たちの中で正解を見つけられたら、それはみんなにとってもすごくいい示唆になるんじゃないかと考えています。
じゃあ今のCake.jpがどういう状態で、事業としてどういう状況かという話です。コロナ禍で巣ごもり需要になり、2019年には確か2パーセントぐらいだった菓子産業のEC化率が、今は10パーセントぐらいにまで上がっているんです。そのぐらい急成長を遂げている、なかなかすごい市場になっています。
わりとほかにケーキ・スイーツの専門という競合がいない状態なので、だいぶありがたい状況、追い風をもらっている状況です。より使いやすく、よりいい商品にきちんと出会えて、きちんと商品が届いて、お祝いに花を添えられる。そういうサービスを作っていくためには、やはり技術的な投資にも力も入れていくフェーズだよねという話をしました。
(スライドを示して)新しいアプリケーションと書いています。どういうことかというと、今のアプリケーションをコツコツがんばってきれいにして、バージョンアップしてメンテしていくよりは、新しいアプリケーションに載せ替えていこうという判断を2021年にしました。
(スライドを示して)理由を3つ書きました。大きく分けると2つなんですが、1つは、現状のままメンテナンスを続けるというのが、けっこうスループットが出にくそうだと、各状況を見ていて私が判断したからです。
あと、コードがなんか気持ち悪いから直したいとか(笑)、そういう場当たり的な対応をするよりは、より本質的な対応、切り込むための武器みたいなものが欲しかったというのが1個。
もう1つが、これは個人的な意見なのでチームメンバーみんながどう思っていたかはわからないんですが(笑)、マイナスをゼロにする仕事はけっこうつまらないじゃないですか。
「何をやっているんだろうな、自分」みたいな感じ(笑)。しかも、すごく大変なものだとけっこうモチベーションが続かないと思っています。なので、せっかくなら生産性だけじゃなくて、楽しさを持って新しいことを学ぶ。それが苦手という人もいますが、たいていの人はわくわくする類の話だと思います。そういう付加価値的な楽しさも大事にしていきたいと考えて、新しいアプリケーションへの載せ替えを考えていました。
じゃあどうやったかというと、(スライドを示して)このあたりの本に助けてもらいました。左と右の本はチームで輪読もやって、けっこう共通の語彙が増えてきていい感じです。先人たちの知恵を積極的に借りて選定した結果、PHPからサーバーサイドKotlinに載せ替えるという決断をしました。
どういうところがというと、ECサイトは手続き的な処理、型が決まっている処理がけっこう多いんですよね。そこにCake.jpらしさが加わります。例えば住所を知らない相手にギフトを送ることができるソーシャルギフトという機能があって、これはすごく便利なんですけど、そういう独自の機能が乗ってくるかたちになると思っています。
ECサイトに必要とされる業務フローをしっかり正しく落とし込むには、ある程度の型付けとパッケージングができる言語を選定したかったんです。
GoとJavaとKotlinの3択で考えていて、既存メンバーの技術のキャッチアップを考えた時に、「GoよりもJava、Kotlinのほうがキャッチアップの難易度が低くて済むんじゃないかな?」というところも検討材料の1つにして、サーバーサイドKotlinへの移行を決断したという感じです。
あと、これは採用の文脈なんですが、「PHPでECやっています」って、なんだろうな、特色がないというか、同じアセットを持ってやっていらっしゃる他社がすごくたくさんいると思います。
今の売り手市場においては、応募者が(企業を)よりどりみどりなわけじゃないですか、という時に、「おっ」と引っかかってもらう要素を作りたかったんですよね。ただ、そのためだけに飛び道具が欲しいわけではありません。きちんと現状を踏まえた上で方針を立てて、なおかつ社外へのメッセージも両立させる選択ができるようにしよう、と考えながら決めたことでした。
今「Cake」はPHPで書かれているのですが、もうそのような流れなので、カオスモノリスからきちんとパッケージングしてモジュラモノリスに載せ替えていきましょうというところですね。
Kotlinでパッケージングが利くので、LLにありがちな「こういうルールでやろうね」と言っても、結局どこからでもなんでも呼び出せちゃう状態を、仕組みとして防ぐというのをやりたかったんですね。ちょっと極端な例ですが、viewにSQLを書けるじゃないですか。それを「書かないようにしようね」じゃなくて、そもそも書けない作りにしたかったということです。
もう1個、こっちがすごく大事だと思っているのですが、コンテキストの境界を正しく作る。いきなりDDDの宗派の人みたいになってきますが、これがすごく大事なことだと思っています。
コードを書くということは、現実をできるだけ写像として切り取り、それぞれのコンテキストに合わせることが一番大事だと思っています。そういうモデリングがやりやすい言語、やりやすいアプリケーション構成にしていきたいとずっと思っていました。
エンジニアリングはモデリングなので、現実世界で何が起きているかをつぶさに観察する。業界を知って、事業を知って、業務フローを知って、初めてモデリングができる状態だと思っています。言われたものを作るだけじゃ駄目だと思っているので、しっかり周りと対話して、よく知って、課題が何なのかを明らかにして、それをいい感じに解いていく。そういう手段として、エンジニアリングがあるよ、と。そういう話をチームではよくしています。
まだちょっとできていないのですが、加盟してくれている店舗にバイトとしてお邪魔して、どういった業務をふだんされているのかを知りにいくということを今後やっていきたいと勝手に思っています(笑)。
「自律型組織の話をしていたはずなのに、めちゃくちゃ技術の話をしてるじゃん」みたいな感じですね。でも、ここまで足回りが整えられて、初めてエンジニアリングの観点で自分たちに自律性が備わるようになるんじゃないかと私は思っています。わりとハードモードな考えだと理解していますが、1回振り切ってみればもういいかと思っているところです。
「じゃあ、やってみてどうなの?」みたいなところですが、現在はいくつかの新規・既存の機能が少しずつサーバーサイドAPIとして切り出されている状態です。2021年8月に「やるぞ!」と言って、ファーストデプロイが11月だったかな。最初のAPIを私がガーッと書いて、あとはよろしくとお任せして、たくさんバグを潰してもらいました(笑)。
そういう立ち上げのタイミングも私しか触っていなかった状態から、徐々に触りたい人が増えてくれて、今ではメンバーの過半数がコントリビュートしてくれるようなアプリケーションになっています。
もともと目論んでいたとおり、それぞれの領域の責務が明確になって、これはどういう業務フローに接着したコードなのかがわかりやすくなりました。そうすると、テストが書きやすくなるんですね。それで「テストをたくさん書こう」となって、すごく堅ろうなアプリケーションが作れてハッピーみたいな感じでした。
そういういいループが回るので、みんなそれなりに楽しそうに書いてくれていると見ていて思っているところです。
一方で課題もあります。単純にパスが増えました。1つの画面を返すまでのパスが1往復分増えたので、不具合が起きた時の切り分けがちょっと大変になっちゃいました。
こればかりはトレードオフとして割り切るほかないと思うのですが、例えばトレーサビリティを上げるとか、いろいろできることはあると思っていて、そういういいやり方を模索していきたいなと思っています。
ほかの課題は、既存実装に書かれている責務を境界のない状態からスタートしているので、どこまで切り出してどう寄せていくかが議論の的にけっこうなるところです。ここが一番難しいと思っています。
PHPがあって、Kotlinがあってという状態なので、最悪99パーセントPHPに寄せていても、一応「Kotlin化が叶いました」みたいなことになるじゃないですか(笑)。意味がないんですけど。その塩梅に対してメンバーがけっこう苦労してくれていて、「すまんなぁ、ありがとうなぁ」みたいなことを言う人になっています(笑)。
こればかりはどうしても易きに流れてしまうので、「言うても納期があるので、ここの部分はPHPで書きます」ということがけっこうあります。それはきちんと次のスプリントで「これをKotlinに移行するぞ」というイシューを立てて潰すことを順次やっています。
このタイミングでは、アプリケーションのリプレイスだけをやろうと。データレイヤのリファクタリングはやらないことにいったん決めました。なので、もともとあるデータ構造に引きずられてついついアプリケーション側が割を食ってしまうというパターンもないわけではないです。
プラス、APIとして立てていて、土管みたいな機能、CRUDだけがあるみたいなものをKotlin化してもあまりうまみがないので、何を移行対象にするかはけっこう気をつけて見ているところです。実際に失敗もして「これは今じゃなかったな」みたいな話をすることもあります。
技術の話はそんな感じです。ちょっとしゃべりすぎちゃって5分押しぐらいなので、巻いていこうと思います(笑)。
(次回へつづく)
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05