[増補改訂]良いコードを書く技術 ──読みやすく保守しやすいプログラミング作法

はじめに

この記事を読むのに必要な時間:およそ 1 分

あなたはプログラマーですか? もしもプログラマーなら何のためにプログラムを書いていますか? 生活のため,それとも楽しいからでしょうか。理由は人それぞれでしょう。だけど,もしあなたがプログラマーなら,⁠良いコード」が書けるようになることで仕事がもっと楽しくなるはずです。

本書は良い仕事をしたい普通のプログラマーが,読みやすく保守しやすい良いコードを書けるようになるための解説書です。ここでの普通のプログラマーとは,初級プログラマーや初級から中級になりかけのプログラマーのことを指します。私が考える良いコードの具体例は本書の中で解説していきますが,一番大切なのは「良い仕事をしたい」⁠良いソフトウェアを作りたい」という気持ちです。この本を手に取ってくれたあなたの中にも,きっとそういう気持ちがあると思います。

良い仕事をすると仕事にやりがいを感じられるようになる,つまり仕事が楽しくなります。そして職人として仕事に誇りが持てるようになります。良い仕事をするプログラマーは仲間や顧客からの信頼が厚くなり,仕事を依頼される機会も増えていきます。ということは収入もアップすることでしょう。

と,なれば理想ですが,実際には職人として良いコードが書けるプログラマーは,あくまでも私の実感ですが業界の2割ぐらいしかいません。あとの8割はいわゆる普通のプログラマーです。その中には,良い仕事をしたいと思っているものの,なかなかそのコツをつかめなかったり,何から手を付けてよいかわからない人が多いようです。

プログラミングはとても創造的でエキサイティングで楽しいものなのに,これではもったいないです。たとえば,泳ぎ方がよくわからないままプールに行ってもおもしろくありません。むしろ苦痛なぐらいです。しかし,25メートル,50メートルと泳げるようになるとだんだん楽しくなります。さらに思いのまま泳げるようになると,快感へと変わっていきます。

私が良いコードを書けるようになったのは,良い師匠や書籍と巡り合えたおかげです。本書が良い仕事をしたい普通のプログラマーのみなさんの道しるべとなることを願っています。

2021年4月 縣 俊貴

謝辞

本書は多くの方から支えていただいて執筆することができました。

まず,地元福岡のプログラマー仲間である桜井雅史さん,上津竜太郎さん,きしだなおきさんには,プログラミングや設計,教育や勉強会についてたくさんの議論をしていただきました。その議論での気付きが本書にふんだんに盛り込まれています。山本竜三さん,染田貴志さん,南里範子さん,鳥谷部昇さん,城和典さんには,校正時に地道な作業を手伝ってもらい,たいへん助けていただきました。本書に彩りを添えている素敵なプログラマーのイラストは,高田美奈子さんに描いていただきました。馬場保幸さんからは,オープンソースのWebアプリケーションフレームワークCubbyを一緒に開発していく中で,本書のヒントをいただきました。株式会社ヌーラボのみなさんからは,日々のシステム開発,サービスの運営を通して,ソフトウェア技術についてあらゆることを教わりました。この場を借りてみなさんに感謝の言葉を贈ります。

遅筆な筆者を時には励まし,時には尻を叩いて支えてくれた技術評論社の稲尾尚徳さんには,どれだけ感謝の言葉を言っても足りないぐらいです。本当にありがとうございました。

増補改訂での更新点

増補改訂では,コード例を執筆時点で最新のJava 15に対応しました。古いライブラリやフレームワークも,すべて新しいものに置き換えています。

また,良いコードの実現に重要なデータ構造についての理解を深めるために,第7章「データ構造」を書き下ろしました。加えて第11章「メタプログラミング」では,メタプログラミングの題材を,外部DSLから,より導入が手軽で保守性が高い内部DSLに変更しました。これらの加筆,改訂により,より実践で役立つ内容となっています。

コード例について

本書には多くのコードが例として登場します。コード例で使用する言語は基本的にJavaです。RubyやJavaScript,TypeScriptなどほかの言語を使用する場合のみ,本文中にその言語名を明記します。ただし,言語に特化した話はあまりありませんので,ほかの言語の人でも十分に参考になる構成になっています。

コード例はサポートページからダウンロードできます。このコードはパブリックドメインですので,仕事や趣味のプログラムに自由に利用していただいてかまいません。

著者プロフィール

縣俊貴(あがたとしたか)

学生時代にMSXで制限された環境でのプログラミングの楽しさを学ぶ。以来,オープンソースのWiki実装「MobWiki」の開発や受託開発,プロジェクト管理ツール「Backlog」,ドローツール「Cacoo」などコラボレーション型Webサービスの企画と製品開発を経て,現職の株式会社ロカオプではWebマーケティング関連の製品開発やコンサルティングを行う。また,アプリ統合ブラウザ「Biscuit」を趣味で開発。

Twitter:@agata