Hyrumの法則(暗黙の依存関係の法則)とは何か?『Googleのソフトウェアエンジニアリング』から学ぶAPI利用時の落とし穴

2022年9月2日

Hyrumの法則とは

Hyrumの法則とはあるAPIに十分な数のユーザーがいるとき、そのAPIの作者が仕様として何を約束しているかに関係なく、作られたシステムが持つあらゆる観測可能な挙動に関して、それに依存するユーザーが出るという法則です[1]竹辺 靖昭 (監修)、Titus Winters (編集)、Tom Manshreck (編集)、Hyrum Wright (編集)、久富木 隆一 (翻訳)『Googleのソフトウェアエンジニアリング … Continue reading

これはGoogleのエンジニアであるHyrum Wright(ハイラム・ライト)にちなんだ俗語で、『Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス』(以下『Googleのソフトウェアエンジニアリング』と略記)で紹介されています。Hyrum自身は「暗黙の依存関係の法則」と名付けたかったことが同書に記されています。

Hyrumの法則の解説

Hyrumの法則の全文

Hyrumの法則は『Googleのソフトウェアエンジニアリング』の中で以下のように紹介されています[2]『Goolgeのソフトウェアエンジニアリング』9頁。

あるAPIに十分な数のユーザーがいるとき、APIを作った者自身が契約仕様として何を約束しているかは重要ではない。作られたシステムが持つあらゆる観察可能(observable)な挙動に関して、それに依存するユーザーが出てくるものである。

ここからはこのHyrumの法則の内容を解説していきます。

APIとは

Hyrumの法則はAPIを開発する際の教訓です。
APIとは、2 つ以上のプログラムが相互に通信するための手段のことを指します。APIにもさまざまな種類がありますが、今日単に「API」と言った場合は、「Web API」を意味していることがほとんどです。
Hyrumの法則が紹介されている『Googleのソフトウェアエンジニアリング』はその名のとおりGoogleでの開発手法・体制について書かれたものです。
GoogleはWeb上で地図を検索できる「Googleマップ」や動画投稿サイト「Youtube」など、数多くのWebアプリケーションを提供しています。
プログラマーはこれらのアプリをカスタマイズして使用することができます。たとえばGoogleマップの背景の色を変えて、Webサイトに掲載することが可能です。この時、Googleマップのプログラミング自体はGoogleが所有していますが、Webサイトに特定のコードを書くことで、Googleマップの機能を使うことができます。これがAPIの機能です。

プログラマーは「見えるもの」を使おうとする

多くの場合、APIが使えるプログラムは「このプログラムで何ができるのか」「どのようにして設定するのか」「どこまでの動作を保証しているのか」という仕様がまとめられています。
開発したプログラマーは、この仕様にしたがって他のプログラマーがAPIを利用すると考えます。しかし、APIを利用するプログラマーは仕様に書かれていること以上の情報を利用する可能性があります。
たとえば、Googleマップのような地図機能をAPIで利用できるとします。その地図機能には位置情報や地図の色、大きさ、言語の設定方法が仕様としてまとめられており、動作の保証をしていますが、それ以外の情報については保証していなかったとします。
この地図機能を利用しようとしているプログラマーが保証している部分だけをカスタマイズしてくれたらよいのですが、人によっては地図の線の太さやフォントも何かしらシステムに組み込んで利用しようとするかもしれません。
このように、その機能の観測可能な挙動、つまり使ったときに得られるあらゆる情報を使って、プログラマーはAPIを利用する場合があります

保守性の高いシステムを作るために

安心して使い続けられる、保守性の高いシステムを構築するには、Hyrumの法則が伝えるようなプログラマーの傾向に注意しなければなりません。
APIで利用できるシステムの開発者であれば、APIを利用するプログラマーが仕様として謳っている以上の情報を使って、システム構築をしている可能性を考えておく必要があります。
また、APIを利用する側であれば、仕様に書かれていない部分のデータを使ってカスタマイズすると、大本のプログラムが変更になった場合にシステムが使えなくなってしまうことがあります。
開発者側であっても、利用者側であっても、Hyrumの法則に注意することが、保守性の高いシステムを構築する手助けになります。

1竹辺 靖昭 (監修)、Titus Winters (編集)、Tom Manshreck (編集)、Hyrum Wright (編集)、久富木 隆一 (翻訳)『Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス』オライリージャパン、2021年、9頁。
2『Goolgeのソフトウェアエンジニアリング』9頁。