美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているか伝わる。そういうコードは使うのが楽しいし、自分のコードもそうあるべきだと思わせてくれる。
エンジニアの善意がコードを複雑にする? “改良したい欲”に駆られる前に知りたい「コーディングの鉄則」とは
コーディングに関する名著『リーダブルコード』(オライリー・ジャパン)の序章は、次のように始まる。
コードは理解しやすくなければならず、シンプルで無駄の無いことが重要だということを、この名著は教えてくれる。
ただ一方、自身の開発現場が「美しいコード」で溢れているかと問われたらどうだろうか。ついつい「複雑なコード」を書いてしまいがちなエンジニアは、少なくないはずだ。コードはシンプルで無駄の無いことが重要であることが分かっていても、なぜ「複雑なコード」は生まれてしまうのか。
その答えをくれるのが、書籍『脳に収まるコードの書き方 ―複雑さを避け持続可能にするための経験則とテクニック』(オライリー・ジャパン)だ。著者のマーク・シーマンさんによると、「脳に収まるコード」を書くポイントを習得することで、複雑なコードが生まれにくくなり、開発が持続可能になるという。
果たして、その真意とは。本著の翻訳者であり、アジャイルコーチとして数々の実績を持つ吉羽龍太郎さん(@ryuzee)に話を聞いた。
株式会社アトラクタ
Founder兼CTO/アジャイルコーチ
吉羽 龍太郎さん(@ryuzee)
野村総合研究所、Amazon Web Servicesなどを経て現職。アジャイル開発、DevOps、組織開発を中心としたコンサルティングやトレーニングが専門。Scrum Alliance認定スクラムトレーナー。著書に『SCRUM BOOT CAMP THE BOOK』(翔泳社)など、訳書に『プロダクトマネージャーのしごと』『エンジニアリングマネージャーのしごと』『チームトポロジー』『スクラム実践者が知るべき97のこと』『プロダクトマネジメント』『みんなでアジャイル』『レガシーコードからの脱却』『カンバン仕事術』(オライリー・ジャパン)、『ジョイ・インク』(翔泳社)など多数
エンジニアの「善意」が複雑さにつながることもある
ーーそもそも、なぜ「複雑なコード」が生み出されてしまうのでしょうか。
これが実は面白くて、決してネガティブな理由からだけではないんです。というのも、エンジニアが新しく学んだことをコードに反映させるプロセスを繰り返す限り、複雑なコードは生み出されるからです。
例えば、ユーザーからフィードバックを受けたり、あるいは日々技術書を読んでスキルアップに励んだりすることで、エンジニアは新しい知識をどんどん蓄えていきますよね。そうして身に付けた知識でプロダクトをより良い形にしようと考えるのは、エンジニアであれば当然のことです。
しかし新たな知識を得ることで、開発の初期段階で「最善」と考えられていた設計や実装が、時間が経つにつれて「陳腐なもの」や「時代遅れのもの」に感じられることがあります。そうなるとエンジニアとしては、これを改良したいという衝動に駆られるでしょう。
ここで問題が発生します。新しい知識や技術を取り入れるためにコードに変更を加える際、既存の機能や設計との互換性を維持しなければならないため、そのバランスを取るために追加のコードや調整が必要になります。意図的に複雑なコードを追加するつもりはなくても、こうした調整や修正が積み重なることで、結果としてコード全体が複雑化してしまうのです。
ーーエンジニアの良かれと思った行動が、かえってコードの複雑さを助長することもあるのですね。
はい。とはいえ、ネガティブな理由で複雑なコードが生み出されてしまうケースも当然あります。
ビジネスサイドからの「とにかく早くリリースしたい」「リリースしてから直せばいい」という要望を受けて、今ひとつの品質でプロダクトをリリースしてしまうケースなどは、その代表例でしょう。
本来は、品質を高めることによってスピードも上がるものだと思います。しかし一部の現場では「質を落とせば早く開発できる」という認識が蔓延してしまっていることで、いわゆる「見切り発車」が行われることもしばしばあります。
エンジニアはビジネスサイドの要望に耳を傾けつつも、後々チームの仲間や自分自身が困らないように、常に綺麗なコードで納品する努力をしなければなりません。
ーー複雑なコードが生まれてしまうと、開発現場にどのような弊害が生まれるるのでしょうか。
いくつかの弊害が考えられますが、中でも顕著なものは、開発や保守のスピードが著しく低下してしまうことですね。
そもそも複雑なコードとは、多くのモジュールやクラスに依存していたり、条件分岐やループが多くロジックが複雑で理解しがたいものを指します。そのため、コードの全体像を把握することだけでもかなりの労力が掛かりますし、「どこをどう触ると何が起きるのか」が一目で判断できません。
するとシステムに何か変更を加える必要が生じた際、まずコードの構成を調査して、その影響範囲を特定するという、本来は必要の無い作業を強いられることになります。その結果、改修対応に取り掛かるタイミングが遅れてしまうといったケースはよくあります。
コードは正しく機能すれば良いわけじゃない
ーー『脳に収まるコードの書き方』では、複雑なコードを回避することの重要性が提唱されていると伺いました。この「脳に収まるコード」とは、具体的にどのようなコードを表しているのですか?
一言で言うと、人間の短期記憶に収まる範囲で書かれたコードです。
ITエンジニア向けスカウト転職サービス
に登録すると続きをお読みいただけます。会員登録後、画面が自動で更新されます。
登録すると、あなたの経歴や希望条件を見た企業から直接あなたに特別なスカウトが届きます。 忙しい毎日でも、スキマ時間で転職活動を進めることが可能です。
取材・文/一本麻衣 編集/今中康達(編集部)
ソフトウエアは複雑さを増すばかりだが、人間の脳は限られた複雑さしか扱えない。ソフトウエアが思い通りに動くようにするには、脳に収まり、人間が理解できるコードを書く必要がある。
本書では、拡張を続けても行き詰ることなくコードを書き、複雑さを回避するための実践方法を解説。コードの腐敗や不必要な複雑さにつながる要因を避ける方法、コードの振る舞いを変更するための術、コードの問題を迅速かつ効果的に解決する方法まで幅広く紹介されている。
>>詳細はこちら
RELATED関連記事
JOB BOARD編集部オススメ求人特集
RANKING人気記事ランキング
南場智子「ますます“速さ”が命題に」DeNA AI Day2026全文書き起こし
なぜアメリカの一流エンジニアは15〜16時に帰るのか。資本主義の最前線で生き抜く「仕事をゲームと割り切る」マインド
AI時代に技術書はすぐ腐る。だからエンジニアは「エンタメの夜明け」を読んで、世界を動かすホストになれ
AWS認定資格12種類を一覧で解説! 難易度や費用、おすすめの学習方法も
有名エンジニアの「AI課金事情」を大公開! 最高額は月20万円!?【中島聡、松本勇気、牛尾剛、ちょくだい、ナル先生】
タグ