プログラミングを学習していると、「API」と「フレームワーク」という言葉が頻繁に出てきます。
最近、自分の中で「“APIであるもの”と“ないもの”」「“フレームワークであるもの”と“ないもの”」の境目が、ぼやけてきました。
ライブラーとフレームワークが別ものとして扱われている記事を見たりすると、「フレームワークとは何?!」と考えてしまいます。同じものだと思うのですが…
ここで、もう一度、整理を行うために、まとめました。
ライブラリの階層構造
アプリ開発において、自身が定義したクラスや関数をプログラムから呼び出します。
自分が作ったクラスや関数も、別のクラスや関数を呼び出します。
別のクラスや関数も、また別のクラスや関数を呼び出します。
これを更に掘り下げて行くと、BIOSがCPUのマシン語を呼び出す所に行きつきます。
呼び出されるクラスや関数はライブラリーとして提供されたものです。
つまり、アプリケーションはライブラリーの階層構造の上に成り立っています。
※BIOS(Basic Input Output System):ハードを直接操作するための基礎ライブラリ
※CPU(Central Processing Unit):中央処理装置
APIの意味
ライブラリーに含まれるクラスと関数が行う、処理の内容を見てみます。
階層構造の上へ行くほどアプリに近い処理を行い、下へ行くほどハードに近い処理を行います。
図に示したように、アプリに近い処理を行うライブラリーをAPI(Application Programming Interface)と呼びます。
ただし、「どれくらいアプリに近い処理を行えば、APIと言えるのか?」ついては、曖昧です。開発者または使用者が「〇〇 API」と呼べば、そのライブラリーはAPIです。
また、逆にハードに近い処理を行うライブラリーをドライバーと呼びます。
APIはアプリを特徴付ける機能を持ちます。アプリに近い処理を行うライブラリーであるためです。
APIを利用すると、その機能(〇〇)を利用できるようなることから、〇〇 APIは「〇〇の窓口」と表現されたりします。
例えば、Web APIはネット上のプログラム同士(Webサーバー&クライアント)を繋ぐ機能を持ちます。ですので、「プログラム同士を繋ぐ窓口」と表現されます。
「機能面から見たAPIとは何か!」を述べれば、そのような表現になることは必然です。
ですので、この表現も正しいと思います。
フレームワークの意味
良く試験などで「穴埋め問題」と呼ばれる問いがあります。
空欄を埋める語句を間違えない限り、誰でも正しい文章を導き出せます。


フレームワークは、正に、この「穴埋め問題」と同じです。
プログラムのひな形があり、アプリの機能に合わせて空欄を埋めれば、誰でも一定以上の品質を持ったプログラムを作成できます。
そんな、ひな形を登録したAPIがフレームワークです。
例えば、Android APIはフレームワークであり、Activityクラスはひな形です。
ライブサイクルの遷移で呼び出されるコールバック(onCreate/…/onDestroy)に、その時々に必要な処理を記述する(埋める)ことで、一枚の画面を作成します。
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 空欄:画面が作成された時の処理 enableEdgeToEdge() setContent { 表示するCompose UIを記述 } } override fun onResume() { super.onResume() // 空欄:画面が前面に移る時の処理 } override fun onPause() { super.onPause() // 空欄:画面が背面に移る時の処理 } override fun onDestroy() { super.onDestroy() // 空欄:画面が破棄された時の処理 } }
関連記事: