本書は プログラミング API の設計本です。Web API の設計極意に関して知りたい人は 『RESTful Webサービス』や『Webを支える技術 -HTTP、URI、HTML、そしてREST』を読むのがいいと思います。本書は GoF のデザインパターン や EFFECTIVE JAVA を読んだ開発者が次に読むべき本として紹介されています。
本書は、NetBeans API を構築した筆者がデザインパターンやコーディング作法だけではうまくいかない問題、後方互換性を維持したままライブラリを発展させる方法、を重点的に解説しています。なるほど、 デザインパターンや設計方法を学んだ次に読むべき本 として挙げられている理由がよくわかる内容になっています。
社内ライブラリと API 設計は別物
本書で扱う API という言葉は、例えばオープンソースライブラリのような、多くの人に共有されるものという位置づけになっています。社内で使うようなライブラリなどの API とはニュアンスが違う感じがしました。
一度リリースしたら、後方互換性を維持して発展させていかなければならない、そういった類のライブラリや API を作る開発者向けの本です。
本書のテーマ
本書のテーマは、次の2つに集約されると思います。
- 後方互換性を維持する API のデザインパターン
- 優れた API であるためにどうするか
NetBeans API で培った経験則を余す所なく記載してくれているため、ボリュームがスゴイことになっています。また、作って終わりの API の作り方を教えているわけではないので、おそらくほとんどの開発者には なんとなくわかった気になるだけか難しくて後回しにする ような内容かもしれません。
はっきり言って、本書が役に立った!と感じる開発者は少ないかもしれませんが、少なくとも GitHub でソースコードを公開している開発者は頑張って読んでもらうのがいいと思いました。それくらい内容が濃く、経験者しかわからないことが書いてあります。
後方互換性を維持する API のデザインパターン
開発者は、API の現在のバージョンをコーディングしている場合に、未来について考えることが求められます。私に言えることは、それは、今までの API 設計でよく行われた方法ではないということです。また、今日までに書かれた書籍やその中の助言は、この種の思考にはあまり役に立ちません。それらには、単一バージョンの場合のデザインパターンが説明されていることがほとんどです。
これが、新しいデザイン本が必要な理由 です。今日のシステムはコンポーネントの組み合わせで出来ています。おそらく今後もこの傾向は変わらないと思います。コンポーネント利用者の経験(投資)をムダにしない為に、よりよい発展を目指す上で、後方互換性を維持することは重要なことになります。これが、本書を読む理由 です。
優れた API であるためにどうするか
では、どのように API 設計をすればいいか。その方法も本書に書かれています。
- メソッドとフィールドの優れたシグニチャ
- ファイル操作
- 環境変数とコマンドラインオプション
- API としてのテキストメッセージ
- (ネットワーク)プロトコル
- API の振る舞い
- I18N と L10N のサポート
- API の品質検査方法(正しさの証明)
- 理解しやすさ
- 一貫性
- やりたいことが満たせる API を発見できること
- 単純なことを簡単に行えること
- 投資の保全(利用者を尊重すること)
API に優れた名前をつけることや 驚き最小の法則、シンプルで一貫性のある I/F にするというのは基本的にな事になります。こういったことを踏まえた上で、この API を利用してくれているユーザを尊重すること(次のバージョンでメソッド名を変更するなんてとんでもない!)が大切だと書かれています。
後方互換性を保ち、API のユーザの投資をムダにしない設計の方法を学びたい人、新しい視点を身につけたい人に本書はおすすめです。
- オブジェクト指向アプリケーションフレームワークには、伝統的なデザインパターンとは異なるスキルが必要
- クラスを API として扱って、頭痛の種を軽減
- 将来、改善できるように API の発展計画を準備
目次
- 【第1部 理論と正当性】
- 第1章 現代的なソフトウェア構築の技芸
- 第2章 APIを作成する動機
- 第3章 優れたAPIを決定づけるもの
- 第4章 絶え間なく変わる標的
- 【第2部 実践的設計】
- 第5章 必要以上に公開しない
- 第6章 実装ではなく、インタフェースに対してコーディングする
- 第7章 モジュール方式アーキテクチャの使用
- 第8章 クライアント用とプロバイダ用のAPIを分離
- 第9章 テストの容易性に留意する
- 第10章 他のAPIとの協調
- 第11章 APIの実行時の側面
- 第12章 宣言型プログラミング
- 【第3部 日々の生活】
- 第13章 有害で極端な助言
- 第14章 API設計のパラドックス
- 第15章 API宇宙の発展
- 第16章 チームワーク
- 第17章 ゲームでAPI設計スキルを向上させる
- 第18章 拡張可能なビジターパターンのケーススタディ
- 第19章 終焉の手続き
- 終章:将来