Findy Engineer Lab

エンジニアの"ちょい先"を考えるメディア

技術的負債で悩む人たちを救いたい。苦渋を味わったシステム設計から私が逃げ出さない理由

READYFORでアプリケーションアーキテクトを務め、システム設計やリファクタリングについて第一線で発信をする仙塲大也さん。ネット上ではミノ駆動(@MinoDriven)の名前で活動しています。

著書の『良いコード/悪いコードで学ぶ設計入門』は、2022年4月の発売から10カ月で3万部を超え、「ITエンジニア本大賞2023」の技術書部門大賞を受賞しました。

そのプレゼン大会でミノ駆動さんは、「みんなで強くなる」「昔の自分を助けに行く」という思いで本を執筆したと語り、大賞受賞スピーチでは感極まって涙する場面もありました。

エンジニアになった頃は会社の技術的負債に忙殺される日々で、「システム設計」という概念すら知らなかったというミノ駆動さんは、いかにしてリファクタリングのスペシャリストになったのでしょうか。

激動のキャリアと設計への思いについてお聞きしました。

技術的負債を解消するシステム設計のスペシャリスト

── ミノ駆動さんといえばシステム設計のスペシャリストとして知られています。そもそもシステム設計とは何でしょうか。

ミノ駆動さん(以下、ミノ駆動) 「設計」とは何らかのソフトウェア品質特性の向上を促進するための仕組みをつくることです。一口に設計といってもさまざまな種類があります。例えば、どうやってソフトウェアを安全に保つのかを決めるのはセキュリティ設計ですし、どうすればパフォーマンスを出せるのかを決めるのはパフォーマンス設計です。

私が長年取り組んできたのは「変更容易性」に関する設計であり、その中で主にやってきた活動がリファクタリングです。現在所属するREADYFORに入社したのも、そもそもは「リファクタリングで技術的負債を解消してほしい」というオファーを受けてのことでした。

── 「変更容易性」や「技術的負債」、「リファクタリング」について詳しく教えていただけますか。

ミノ駆動 例えば、ソフトウェアにある機能が存在するとします。この機能を変更するのにプログラムを書き換えるわけですが、その際に重要なのが「変更容易性」です。というのも、機能を変更することで、ソフトウェアの他の部分に思いもよらぬバグが発生するケースがあるからです。

機能変更を行った際にバグが発生しやすく正確な変更がなかなかできない状態を「変更容易性が低い」といい、そのような構造を「技術的負債」と呼びます。

── 後から変更する可能性があるなら、最初からそのことを想定して設計しなければならないわけですね。

ミノ駆動 そうですね。こうした技術的負債を解消する──つまり、ソフトウェアの挙動を変えずにプログラムを整理し、「変更容易性が高い」構造に設計し直すことをリファクタリングといいます。

炎上続きの開発プロジェクトで感じた疑問

── ミノ駆動さんは、エンジニアとしてのキャリアの最初から、システム設計やリファクタリングが専門だったのでしょうか。

ミノ駆動 いえ、そんなことはありません。むしろ、システム設計という考え方すら知りませんでした

── そうだったのですね。あらためてキャリアについて順を追って教えていただけますか。

ミノ駆動 私はもともと中学生の頃からソフトウェアのプログラマーになりたいと考えていました。それで、大学は情報科を目指したのですが、受験で失敗してしまい、仕方なく電子系の学科に入学したんです。

当時は「ソフトウェアだけじゃなく、ハードウェアのことも分かっていた方が就職に困らないだろう」と自分に言い聞かせていました。そして、就職活動では「ハードウェアの会社だけど、ソフトウェアのプログラミングができる」と面接で言われた会社に入りました。

── ソフトウェアのプログラミングを希望されていたのですね。

ミノ駆動 ところが、実際に入ってみるとソフトウェアのプログラミングの仕事はほとんどなく、電子回路の設計のようなハード系の開発に従事していました。社内でプログラミングの仕事を自分で探し回っているありさまでした。それでもやはり、ソフトウェアプログラマーとしての夢をあきらめきれず、次の会社に転職します。

── 2社目はどのような企業だったのでしょう。

ミノ駆動 大手精密機器メーカーです。転職してすぐに大規模な開発プロジェクトに配属され、ソフトウェアプログラマーとしてのキャリアを本格的にスタートさせました。

ただ、その開発プロジェクトには問題がありました。私が転職する前から始まっていたプロジェクトだったのですが、もうあちこちで火の手が上がっていたのです。

── いわゆる“炎上プロジェクト”ですね。

ミノ駆動 とにかくバグが多くて、一つのバグを修正したら他の箇所に連鎖的にバグが出るという状態でした。とはいえ、納期は迫ってきますから、何とかするしかありません。それで、だましだまし、場当たり的に修正を繰り返して、何とか納品できるレベルにまで持っていくというありさまだったんです。

プログラムのソースコードを見てみると、付け焼き刃の修正ばかりで、もう何が書かれているのか分からないような状態です。どういう理屈で動いているのかすら分かりません。

もちろん、意図してそうなったわけではなく、50人規模のチームが目の前のバグを潰すことに躍起になった結果、ロジックが絡み合って非常に乱雑な「悪いコード」になってしまったわけです。

── 応急処置ではなく、バグを修正しても他に影響が出ないように構造自体を変更しなければ根本的解決にならないわけですね。

ミノ駆動 それが、まさにシステム設計です。当時はまだ私の中にシステム設計という概念はありませんでしたが、場当たり的なバグ修正でプロジェクトのメンバーみんなが長時間残業を繰り返す状況はさすがにおかしいだろうと感じていました。

メンバーは結構平気な顔で残業をしていたのですが、私はそんなに体力がある方ではないので、正直つらかったです。

「なんでこんなにバグが出るんだろう」「ソフトウェア開発ってこういうものなのかな」「何か根本的な問題があるんじゃないか」──。そんなふうに疑問を持つようになりました。

そんな最中に、何か参考になる本はないか探していたところ、たまたま職場の本棚にあった『リファクタリング』という書籍に出会ったんです。

設計の概念を知るもリファクタリングプロジェクトは頓挫

── まさに、ミノ駆動さんが求めていた考え方との出会いだった?

ミノ駆動 『リファクタリング』は、米国のエンジニアであるマーティン・ファウラーによる技術書です。私が手に取ったのは2000年に発売されたオリジナル版(※現在は第2版が発売されている)ですが、読んで衝撃を受けましたね。

簡単に言うと「バグを埋め込みにくくする設計がある」という記述があって、今の自分にふさわしい本はこれだと。ソフトウェアにおける設計という概念を初めて知ったんです。

そこから、リファクタリングの練習を積み重ねました。とはいっても、会社の仕事としてではなく、あくまで個人的にです。知識をつけて、もっとリファクタリングの技術を高めなければ、バグ続きで炎上するプロジェクトには太刀打ちできないと思ったからです。

── そうやって身に付けたリファクタリングの技術を仕事にも反映されたのでしょうか。

ミノ駆動 実は私がリファクタリングの技術を高めていたのとちょうど同じ時期に、会社でリファクタリングプロジェクトが発足したんです。バグが頻発して修正を繰り返すような状態は、会社としても問題だと感じていたんでしょうね。そこで、設計に詳しいメンバーを集めて、根本的な解決を図ることにしたのです。

もちろん、私は真っ先に手をあげました。積み重ねたリファクタリングのスキルを生かすチャンスだったからです。しかし、チームでリファクタリングを進めていた途中で問題が発生しました。

── どんな問題が起きたのでしょう。

ミノ駆動 そもそも、設計やリファクタリングにはコストがかかります。だから、ソフトウェアの全ての箇所をリファクタリングできるわけではないんです。例えば、メインの機能とサブの機能があれば、メインの方にコストを投下させるといった“選択と集中”が重要です。

ですが、当時の私はそのようなコスト意識が不足しており、とにかく目の前のコードを全部直そうとしてしまったのです。それこそ、作り直しに近いレベルでリファクタリングすることを提案しました。

メンバーからは「そんなことできるはずがない」という声も上がりましたが、押し切って進めようとしたんです。また、現場の事情を考えずに、自分が提案した設計のガイドラインを押し付けてしまったりもしました。

当然、現場からは猛反発を受けました。それが原因かは分かりませんが、結局そのリファクタリングプロジェクトは頓挫してしまい、私はチームを離れることになりました。

設計の価値を感じてくれる会社へ“Twitter転職”

── ミノ駆動さんにとっては苦い経験ですね……。その後、クラウドワークスへ転職されています。

ミノ駆動 きっかけになったのは、大手精密機器メーカーでとある事業部に異動になったことでした。その事業部というのが、上からの締め付けがものすごいところでして、周囲でも転職する人が続出しているような状況だったんです。私自身もあまりのプレッシャーで倒れてしまったことがありました。

そのような状況についてTwitterに泣き言を書いていたところ、ある人が相談に乗ってくれたのです。実はその人こそクラウドワークスの役員で、「うちもリファクタリングをしないといけないので、ぜひ話がしたい」と言ってくれたのです。

当時、私はTwitterでリファクタリングに関する話をよく書いていたので、興味を持ってもらえたのでしょう。

── 確かに、ミノ駆動さんは2015年頃からTwitterで積極的にリファクタリングに関する情報発信を行っておられます。現在では2.8万フォロワーを抱えるまでになっていますね。

ミノ駆動 もともとは趣味で制作していたゲームの告知をするためのアカウントだったんです。ちなみに、そのゲームというのは『バグハンター』というタイトルで、いろいろなバグや技術的負債がモンスターとして登場し、それを倒すというRPGです。続編の『バグハンター2 REBOOT』も公開しています。

── まさにバグに悩んでいたミノ駆動さんならではのユニークな内容です。

ミノ駆動 とはいっても最初はフォロワーも少なかったですが。その後、技術とは関係ないツイートがバズってフォロワーが増えていきました。

── そんなTwitterでクラウドワークスから誘いを受けたと。悩んでいたとはいえ、長年勤めてこられた大手精密機器メーカーを退職するのは大きな決断だったのでは。

ミノ駆動 外から見るとそうですよね。「せっかく大手企業に10年勤めたのに転職するなんて」と思われるかもしれません。でも、そのとき所属していた部署もハードワークでしたし、私がやりたかったリファクタリングに価値を感じてくれる仲間も会社にはいませんでした。いくら設計の重要性を語っても「よく分からない」と言われる始末だったんです。

だからこそ、設計の価値を理解してくれる環境に身を置きたかったんです。実際、クラウドワークスに入社すると、もう前職とは設計への理解度が天と地ほどの違いでした。上司も他のエンジニアも設計の重要性を理解してくれて、しかも前職では業務外で細々とやっていたリファクタリングを仕事としてやれる。それが何よりもうれしかったです。

転職時には妻にも心配されましたが、結果として、給与も良くなったので問題はありませんでした。

設計は“つぶしがきく技術”だった

── もう一つ気になるのが、エンジニアとしての領域です。大手精密機器メーカーとクラウドワークスでは事業の内容はもちろん、エンジニアとして扱う領域も大きく異なると思いますが、その点について不安はなかったのでしょうか。

ミノ駆動 それはやはり、不安でしたよ。大手精密機器メーカーのときは事業系のソフトウェアを開発していましたが、クラウドワークスで必要なのはWeb技術ですからね。私のように組み込み系からWeb系に転職されるエンジニアはそう多くはないのではないかと思います。

ただ、私の場合はそういった領域の違いを越えて共通するリファクタリングという技術が武器になりました。実は設計はとても幅が広くて、フロントエンドでも組み込み系でもWeb系でもゲームでも、あらゆる領域において必要とされるんです。

── ミノ駆動さんの場合は事業系からWeb系への転職だったわけですが、それが仮にオンラインゲームの会社だったとしても応用がきくわけですね。

ミノ駆動 そうですね。ある意味、「つぶしがきく技術」と言えますね。

── クラウドワークスに転職されてから、ミノ駆動さんは講演に登壇されるなど、さらに精力的に情報発信を行われています。こうした活動の背景には、やはり事業系とWeb系の文化の違いがあるのでしょうか。

ミノ駆動 大いにありますね。Web系のエンジニアには、どんどんつながって情報や技術をシェアし合う文化があるんです。これはWebの技術がオープンだからでしょうね。事業系エンジニアはどうしても特許などの関係もあって機密情報が多く、他社とは交流しにくいですから。

── そして、2021年4月、現在のREADYFORへジョインされました。きっかけは何だったのでしょうか。

ミノ駆動 知人のつてでREADYFORのエンジニアリングマネージャーが興味を持ってくれているということを聞いて、TwitterでフォローしたらすぐにDMが飛んできたんです。それで会ってみたところ、冒頭にお話ししたようにREADYFORが技術的負債を抱えていて、それをリファクタリングで解決してほしいというオファーを受けました。

もちろん、迷いはありました。ただ、READYFORに移った方が、自分の設計スキルをより強力に発揮できると判断して転職を決めました

メンバーが 「ドメイン駆動設計」という考え方を理解してくれたことも大きかったですね。ソフトウェアを設計する際には、ビジネスサイドの事情や課題を知らないとうまく設計できないのですが、それを知って設計するのが「ドメイン駆動設計」です。

READYFORには「乳化」というチームビジョンがあって、組織の中にエンジニアリングが自然と溶け込んでいる状態を追求しています。この会社ならより自分の力が発揮できると思ったんですね。

── 「Developers Summit 2021 Summer」で発表されていた内容ですね。お話を聞いていると、ミノ駆動さんは設計やリファクタリングの最先端の考え方を実践できる場所を、常に求めてきたように感じます。

参考リンク▶ ビジネス考えてるかい?事業の持続的成長を促進させるシステム設計の考え方

設計初心者のステップアップを支援したい

── 長年システム設計に携わり、ここ数年は設計の考え方を広めてこられたミノ駆動さんからすると、現在の状況をどう感じていますか。システム設計やリファクタリングの大切さは広まってきたのでしょうか。

ミノ駆動 あくまで推測ですが、まだまだ広く認知されているとは言い難いと思っています。例えば、経済産業省が2018年に発表した『DXレポート』では、レガシーシステムを放置して積み上がった技術的負債により毎年12兆円以上の経済的損失が生じる「2025年の崖」が予測されています。コードに限った話ではありませんが、そのようなレポートが出ているくらいですから、世の中に設計の考え方が浸透するのもこれからといったところでしょう。

それと、もう一つ、マーケットシェア理論に「10.9%」という数字の考え方があります。これは、どんなにマイナーなことであっても、市場全体の10.9%に認知されると、市場に本格的な影響力を及ぼすという理論です。多額の経済損失が生じるほど技術的負債が蓄積している現状から察するに、設計の考え方はまだエンジニア全体の10.9%にも浸透していないでしょうね。

── その割合を高めるのに、ミノ駆動さんのような方の情報発信が必要ということですね。

ミノ駆動 少なくとも私はその数値を3%は高めたと言えるかもしれません。日本のエンジニアは約90万人いるといわれていて、その10.9%ということは約10万人。『良いコード/悪いコードで学ぶ設計入門』は3万部以上売れているので、3%にはシステム設計の考え方を届けられたということですから。

── 書籍や講演、Twitterなどを拝見しても、ミノ駆動さんは分かりやすく物事を伝える技術に長けている印象です。

ミノ駆動 「分かりやすさ」はまさに私が意識していることです。設計に関する技術書は多数ありますが、初級者が読むには少々パワーを要するものばかりなんですね。だからこそ、書籍や情報発信を通じて、初級者の方のステップアップを支援したいと考えています。

── 最後にお聞きしたいのですが、キャリアの初期に大変な状況を経験したにもかかわらず、設計に携わり続けたのはなぜでしょうか。

ミノ駆動 なぜでしょうね(笑)。普通の人だったら設計から逃げ出しているかもしれません。

ただ、リファクタリングは泥臭いことではあるけど、きれいなコードに整頓できる喜びがあって、ひらめいて良い構造ができるとある種の快感のような感情を得ることもあります。それは今でもずっと続いてます。

その一方で、設計の価値が伝わらなかった過去やプロジェクト内での軋轢も経験しました。それでも設計をよくしていきたいという思いがずっとあります。設計が分からない人が多いのは嫌なんでしょうね……。過去の「負」の感情をベースに動いている部分もあります。

本当に、私の中には設計に対して喜怒哀楽いろんな感情があるんです。

ミノ駆動さん近影

取材・構成:山田井ユウキ
制作:はてな編集部