未分類

JJUG クロスコミュニティカンファレンス(CCC)にて「失敗から学ぶAPI設計」について話をしました #jjug_ccc #ccc_h4

日本Javaユーザー会が年2回開催するカンファレンス、JJUG CCCにてTwitter4JのAPI設計の話をしてきました。

使いやすいと評判をもらってるTwitter4JにおいてどういうAPI設計の失敗をしているのか!?・・・実は大きな失敗はしていないというのがネタでした。
ただ、一度決めたインターフェースを永遠に互換性をもたせるようなことはしていないので利用者に混乱を与えやすい箇所や、テストのしにくい箇所などは失敗とまでは言わないまでも適宜変更を加えてきました。
インターフェースの変更というのは「やってはいけない」変更のうちの一つ。しかも非常に多くのアプリケーション/サービスで使われているTwitter4Jでいかに混乱を避けてインターフェースを変更してきたかというのも大事なトピックとして話をしてきました。
要は
・バージョンx.y.zのうちzの部分については互換性を持たせる
・zのバージョンアップでも場合によっては一部@deprecatedにする
・yのバージョンアップを2回ほど重ねたあたりで@deprecatedを廃止する
・移行用のドキュメントはしっかり書いて混乱を防ぐ
といったところ。

看板に掲げていた「API設計の失敗」の実例として挙げたのは、細かいことだけれどもファクトリの導入において若干混乱を招いてしまったこと。
ファクトリパターンですら初心者にはちょっと難しいので導入するならstaticファクトリメソッドがいいね、最初からそうすれば良かった、という感じです。
後からSingletonオブジェクトを取得できるstaticメソッドを導入したんだけれども結構Twitter4Jをがっつり使っている人にも知られていない状態です。
小難しい話じゃないけれども(いつも難しい話はしないよう心がけてます)、むやみにカッコイイアーキテクチャ、デザインパターンにしないというのは大事だと思う。

自分ではTwitter4Jを使った大したアプリケーションを作っていないくせに、全体的にはとてーもとてーもとてーも利用者目線で考えてAPI設計をしているだけあってうまくいっています。何をどう考えて設計しているかは自分の中で体系立てられていないのでいずれ整理した上で、再現可能な気がしたら「成功するAPI設計パターン」的な話をできたらいいなーと思っています。

参考図書としてあげたのは2冊。Effective Javaは鉄板。Practical API DesignはJavaプログラマ全員読むべき!とは思わないけれどもフレームワークだとか、システムの共通部分を設計・開発する人にはお勧めです。NetBeansプラットフォームのAPI設計をした方の著書です。

関連記事:
JJUG CCC 2013 Springに参加しました~! – Challenge Java EE !
泥箱的なメモ — JJUG CCC Spring 2013 #jjug_ccc に参加してきた所感とか
makopi23のブログ 「JJUG CCC 2013 Spring」に参加しました
JJUG CCC 2013 Springに行ってきました – Keep It Simple, Stupid
JJUG CCC 2013 Springに参加してきました #jjug #jjug_ccc – uehaj's blog
JJUG CCC 2013 Springをやってみた – arclamp
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc – Togetter