torutkのブログ

ソフトウェア・エンジニアのブログ

「APIデザインの極意」を読む会(第1回)を実施しました

Java読書会BOF主催の「APIデザインの極意 Java/NetBeansアーキテクト探求ノート」を読む会(第1回)を10/25(土)に実施しました。今回は第1回なので表紙、著者・訳者紹介、前書きから朗読していきました。そのため、原題"Practical API Design: Confessions of a Java Framework Architect"の意味(confessionって何? 教会での懺悔の意味もあるみたいだよ、といった議論)や、邦題ではどうしてNetBeansや探求ノートが入ったんだろう、などといったことも議題に上りました。

今回の読書範囲は表紙からp.37まで、おおよそ60ページ弱でした。

来月は11月29日(土)開催予定です。参加者募集中です。

気になった事柄のメモ

私は、APIを設計する方法を知っていると思い込んでいましたが、他のエンジニアに守ってほしい最も重要な制約を系統立てて分かりやすく説明するのに何ヶ月も要しました。(p.xvi)

この本を読むまでは、個人のセンスによるところだからと思っていましたが、この本ではこれを

普通のAPIを優れたAPIへ変える測定可能な標準をまとめました。(p.xx)

私の仕事は、全体の一貫性を保ちながらより多くの人々にAPIを設計させる方法を見つけることでした。その時点で、API設計の背後にある理論、APIを作成する動機、APIが良いものか否かを評価する規則を記述するため、私はこの本の執筆を始めました。(p.xx)

とあります。API設計をエンジニアリングするという本ですね。

著者はNetBeansの開発に初期から携わっていて、その初期はAPIの作成を1人で行っていたので一貫性が保てましたが、開発人数が増えてくるとしだいに1人では回らなくなって、APIの作成も複数でするようになったことで本書執筆の動機が生まれたそうです。

長い序章を抜けて第1章に入ると、「科学」についての紹介として合理主義、経験主義、そして無知についての話題でした。ここではAPIが必要となる背景(ビルディングブロックを組み合わせてソフトウェアを作る)が語られています。

ビルディングブロックをAPIを通して使うことで、すべてのことに深い理解を持たずとも浅い理解でソフトウェアシステムを作り上げることができるようになっています。(「選択的無知」という用語)

2章の冒頭にこのまとめが書かれています。

適切なAPIであれば、システムに対する理解を最小限にしながら、優れたシステムを設計できるということです。(p.15)

2章ではアプリケーションのモジュール化について言及されています。

非モジュール化

すべての構成単位が他の構成単位と直接干渉するように強く結び付いてしまっている一体化された塊(p.19)

モジュール化

モジュール方式のアプリケーションは、分離された小さなコードの塊から構成されています。(p.19)

ここまでは、読んでいてふんふんと思いましたが、続く文章で

それらの塊はきちんと隔離され、一意に特定され、他のコードが使用する明確なインタフェースを公開し、正しく機能するために必要な環境(他のコンポーネントや構成単位が正しく機能するために必要な環境)を注意深く記述しています。(p.19)

と読むと、いままで経験してきたアプリケーション開発でよくある作り方はパッケージ名に応じたディレクトリに分かれるものの一つのソースツリーにすべてが入っていたり、すべてを1つのビルドで構築していたり(個別にビルドができないとか)とモジュール化とはいえなかったのかと思いをめぐらしました。

今回の読書会範囲では、このあとモジュールのバージョンの話、3章に入ってモジュールのAPIはメソッドとシグニチャだけではないよ、読み書きするファイルと内容、環境変数コマンドラインオプション、toStringの結果などのテキスト出力、プロトコル、振る舞いなども考慮しないといけないよ、という話題が続きました。