SDKとライブラリは、同列に語られることが多いですが、実際には別の概念です。

なんとなく違いを理解しているつもりではありますが、改めて整理してみます。

SDKとは

MDNによると下記のように定義されています。

SDK(Software Development Kit)とは、開発者が特定のフレームワーク、オペレーティングシステム、その他のプラットフォーム向けのソフトウェアを作成するために使用できる統合されたツール群です。

SDK (Software Development Kit) (ソフトウェア開発キット) - 用語集 | MDNSDK(Software Development Kit)とは、開発者が特定のフレームワーク、オペレーティングシステム、その他のプラットフォーム向けのソフトウェアを作成するために使用できる統合されたツール群です。SDK には以下が含まれます:MDN Web Docs

仕様書、サンプルコード、デバッガ、エミュレータ、ライブラリなどがパッケージ化されたツールセットのようなものという理解でよいと思っています。

ライブラリとは

KDDIビジネスによると下記のように定義されています。

ライブラリとは、IT分野では、プログラミングで頻繁に利用される機能やプログラムの部品を、再利用しやすい形でまとめたファイルを指します。 英語の「Library (図書館) 」が語源で、必要な機能を持つ部品を探して利用するという意味合いがあり、さまざまな目的や用途に応じた多様な種類が存在します。

ライブラリとは?意味・用語説明|IT用語集|KDDI株式会社プログラミングで頻繁に利用される機能やプログラムの部品を、再利用しやすい形でまとめたファイルを指します。biz.kddi.com

日頃composerやらnpmやらpipでインストールして利用しているものは、ほとんどがライブラリに該当します。

具体例で見る両者の関係

言葉の定義だけだとイメージしづらいので、Laravelアプリ開発を例に具体的に見てみます。

LaravelからS3にファイルをアップロードしたり、SESでメールを送ったりする場合、composer require aws/aws-sdk-phpでAWS SDK for PHPを導入するのが一般的です。
この中には、下記のようなものがまとめて含まれています。

  • S3用のS3Client、SES用のSesClient、DynamoDB用のDynamoDbClientなど、サービスごとのクライアントクラス(=ライブラリ的な部品)
  • 認証情報の管理やリトライ処理などの共通機能
  • 各サービスのAPIリファレンスやサンプルコード

つまり「AWS SDK」という大きな箱の中に、S3用・SES用といった部品としての「ライブラリ」がいくつも入っている、というイメージです。

一方で、HTTP通信をシンプルに行うためのGuzzleのようなライブラリは、AWS SDKには含まれておらず、composerで個別にインストールして使います。
これは単体で「HTTP通信」という1つの機能を提供するだけのもので、認証情報の管理やリトライ処理のようなツール一式を持っているわけではありません。

このように、SDKは「開発に必要なものが一式揃った箱」、ライブラリは「その箱の中身にもなり得るし、単体でも使える部品」と捉えると整理しやすくなります。

比較

SDKとライブラリを比較すると以下のようになります。

項目SDKライブラリ
定義ソフトウェア開発キット。特定のプラットフォームやサービス向けに開発を支援するツールやライブラリの集合特定の機能を提供する再利用可能なコードの集合
役割開発環境の提供、APIのラッパー、サンプルコードなどを含む特定の機能を呼び出して利用する
依存関係SDKがライブラリを含むことが多い単体で利用可能なことが多い
例Android SDK、iOS SDK、AWS SDKReact、Axios、Zod

図

簡易的な図ですが、SDKとライブラリの関係を示すと以下のようになります。
SDKの中にはライブラリが含まれることがありますが、すべてのライブラリがSDKに含まれるわけではありません。

sdkとライブラリの関係図

理解度チェック(AI生成)

以下の4択問題で、SDKとライブラリの理解度をチェックしてみましょう。答えは折りたたまれているので、クリックして確認してください。

Q1. SDKの説明として最も適切なものはどれか?

  1. 特定の機能を提供する再利用可能なコードの集合
  2. 開発に必要なツールや仕様書、ライブラリなどがパッケージ化された統合ツール群
  3. npmやpipでインストールするパッケージの総称
  4. プログラムのバグを検出するためのテストツール

Q2. ライブラリの説明として最も適切なものはどれか?

  1. 特定のプラットフォーム向けの開発環境一式
  2. プログラミングで頻繁に利用される機能や部品を再利用しやすい形でまとめたもの
  3. アプリケーションの実行環境をエミュレートするツール
  4. ソースコードをコンパイルするためのツールチェーン

Q3. composerやnpm、pipでインストールするものの多くは、SDKとライブラリのどちらに該当するか?

  1. SDK
  2. ライブラリ
  3. どちらでもない
  4. 常に両方を同時に含む

Q4. SDKとライブラリの関係性として正しいものはどれか?

  1. すべてのライブラリはSDKに含まれる
  2. SDKとライブラリは常に排他的で、同時に使われることはない
  3. SDKの中にはライブラリが含まれることがあるが、すべてのライブラリがSDKに含まれるわけではない
  4. ライブラリの中にSDKが含まれることが一般的である

Q5. Android SDKやAWS SDKのような「SDK」と呼ばれるものの特徴として正しいものはどれか?

  1. 単一の機能を提供するコードの集合のみで構成される
  2. 開発環境の提供やAPIのラッパー、サンプルコードなどを含む
  3. ライブラリを一切含まない
  4. 特定のプラットフォームに依存せず、あらゆる環境で動作する