メインコンテンツまでスキップ

SDK入門 - ライブラリ・API・フレームワークとの違い

このドキュメントの目的

SDK(Software Development Kit) の本質を理解し、似た概念との違いを明確にすることが目標です。


目次

  1. SDKとは
  2. ライブラリとの違い
  3. APIとの違い
  4. フレームワークとの違い
  5. SDKの構成要素
  6. SDKを使うメリット・デメリット
  7. まとめ

SDKとは

一言でいうと

SDKは「特定のサービスやプラットフォームを使うための道具一式」 です。

日常生活での例え

組み立て家具と家電で考えてみましょう:

┌─────────────────────────────────────────────┐
│ 組み立て家具(ライブラリの例え) │
├─────────────────────────────────────────────┤
│ │
│ ・部品と説明書が届く │
│ ・自分で組み立てる必要がある │
│ ・どう使うかは自分で決める │
│ ・柔軟だが手間がかかる │
│ │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ 家電(SDKの例え) │
├─────────────────────────────────────────────┤
│ │
│ ・電源を入れればすぐ使える │
│ ・複雑な仕組みは内部に隠れている │
│ ・説明書を見れば使い方がわかる │
│ ・特定の目的に最適化されている │
│ │
└─────────────────────────────────────────────┘

SDKは家電のように「すぐ使える」ことを目指しています:

┌─────────────────────────────────────────────┐
│ SDKが提供するもの │
├─────────────────────────────────────────────┤
│ │
│ ├── すぐ動くコード(電源を入れれば動く) │
│ ├── ドキュメント(取扱説明書) │
│ ├── サンプルコード(使用例) │
│ └── 開発ツール(付属品) │
│ │
│ → 開発者がサービスを簡単に使える │
│ │
└─────────────────────────────────────────────┘

SDKの正式名称

SDK = Software Development Kit(ソフトウェア開発キット)

「キット」という言葉がポイントです。単なるライブラリではなく、開発に必要なものがセットになっていることを表しています。


ライブラリとの違い

ライブラリとは

ライブラリは「再利用可能なコードの集まり」です。特定の機能を提供します。

ライブラリの例:
├── 日付操作ライブラリ
├── 文字列処理ライブラリ
├── 数学計算ライブラリ
└── 画像処理ライブラリ

SDKとライブラリの違い

┌─────────────────────────────────────────────┐
│ ライブラリ │
├─────────────────────────────────────────────┤
│ ・特定の機能を提供 │
│ ・汎用的(特定サービスに依存しない) │
│ ・コードのみ │
│ │
│ 例: 日付計算、JSON解析、暗号化 │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ SDK │
├─────────────────────────────────────────────┤
│ ・特定のサービス/プラットフォーム向け │
│ ・そのサービスを使うことに特化 │
│ ・コード+ドキュメント+ツール+サンプル │
│ │
│ 例: AWS SDK、Stripe SDK、Google Maps SDK │
└─────────────────────────────────────────────┘

関係性

SDKはライブラリを含むことが多いです:

SDK
├── ライブラリ(メインのコード) ← ライブラリはSDKの一部
├── ドキュメント
├── サンプルコード
└── ツール

APIとの違い

APIとは

API(Application Programming Interface)は「ソフトウェア同士が通信するための約束事」です。

銀行で例えると

┌─────────────────────────────────────────────┐
│ API = 銀行の窓口 │
├─────────────────────────────────────────────┤
│ │
│ あなた → 窓口 → 銀行システム │
│ │
│ 窓口(API)が定めるルール: │
│ ・「振込したい」と言えば振込できる │
│ ・「残高照会」と言えば残高がわかる │
│ ・必要な情報(口座番号など)を伝える │
│ │
│ 内部の仕組みは知らなくていい │
│ │
└─────────────────────────────────────────────┘

SDKとAPIの違い

┌─────────────────────────────────────────────┐
│ API = 銀行の窓口 │
├─────────────────────────────────────────────┤
│ ・サービスとの通信方法を定義 │
│ ・「何ができるか」「どう呼ぶか」の仕様 │
│ ・実装は含まない │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ SDK = 銀行アプリ │
├─────────────────────────────────────────────┤
│ ・窓口(API)を使いやすくしたもの │
│ ・スマホで簡単に操作できる │
│ ・内部でAPIを呼んでいる │
└─────────────────────────────────────────────┘

関係性

SDKは内部でAPIを呼び出します:

あなたのコード

SDK(使いやすいインターフェース)

API(通信の約束事)

サービス(実際の処理)

フレームワークとの違い

フレームワークとは

フレームワークは「アプリケーションの骨組み」を提供します。制御の主導権はフレームワークにあります。

SDKとフレームワークの違い

┌─────────────────────────────────────────────┐
│ フレームワーク │
├─────────────────────────────────────────────┤
│ ・アプリの構造を決める │
│ ・「あなたのコードを呼ぶ」(IoC) │
│ ・主導権はフレームワーク側 │
│ │
│ 例: Spring Boot, Ruby on Rails, Django │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ SDK │
├─────────────────────────────────────────────┤
│ ・特定サービスへのアクセス手段 │
│ ・「あなたがSDKを呼ぶ」 │
│ ・主導権はあなた側 │
│ │
│ 例: AWS SDK, Stripe SDK, Twilio SDK │
└─────────────────────────────────────────────┘

制御の方向

フレームワーク:
フレームワーク → あなたのコードを呼ぶ

SDK:
あなたのコード → SDKを呼ぶ

4つの概念の比較

┌──────────────┬────────────────────────────────────┐
│ 概念 │ 特徴 │
├──────────────┼────────────────────────────────────┤
│ ライブラリ │ 再利用可能なコード集 │
│ │ 汎用的な機能を提供 │
├──────────────┼────────────────────────────────────┤
│ API │ ソフトウェア間の通信規約 │
│ │ 「何ができるか」の定義 │
├──────────────┼────────────────────────────────────┤
│ フレームワーク│ アプリの骨組み │
│ │ 制御の主導権を持つ │
├──────────────┼────────────────────────────────────┤
│ SDK │ 特定サービス向けの開発キット │
│ │ ライブラリ+ドキュメント+ツール │
└──────────────┴────────────────────────────────────┘

SDKの構成要素

典型的なSDKには以下が含まれます:

1. クライアントライブラリ

SDKのメイン部分:
├── 認証処理
├── API呼び出し
├── レスポンス解析
└── エラー処理

2. ドキュメント

使い方の説明:
├── クイックスタート
├── APIリファレンス
├── チュートリアル
└── トラブルシューティング

3. サンプルコード

動く例:
├── 基本的な使い方
├── よくあるユースケース
└── ベストプラクティス

4. 開発ツール(オプション)

開発を助けるツール:
├── CLIツール
├── デバッグツール
├── テストツール
└── コード生成ツール

SDKを使うメリット・デメリット

メリット

┌─────────────────────────────────────────────┐
│ SDKを使うメリット │
├─────────────────────────────────────────────┤
│ │
│ 1. 開発時間の短縮 │
│ └── 認証、エラー処理などが実装済み │
│ │
│ 2. 品質の担保 │
│ └── サービス提供元がテスト済み │
│ │
│ 3. ベストプラクティスの適用 │
│ └── 推奨される使い方が組み込まれている │
│ │
│ 4. サポートの受けやすさ │
│ └── 公式SDKなら問い合わせしやすい │
│ │
└─────────────────────────────────────────────┘

デメリット

┌─────────────────────────────────────────────┐
│ SDKを使うデメリット │
├─────────────────────────────────────────────┤
│ │
│ 1. 依存関係の増加 │
│ └── SDKのバージョン管理が必要 │
│ │
│ 2. ブラックボックス化 │
│ └── 内部の動きが見えにくい │
│ │
│ 3. 柔軟性の制限 │
│ └── SDKの設計に縛られる │
│ │
│ 4. サイズの増大 │
│ └── 使わない機能も含まれる場合がある │
│ │
└─────────────────────────────────────────────┘

SDKを使うべきとき

SDKを使う:
├── 公式SDKが提供されている
├── 複雑な認証が必要
├── 多くのAPIを使う
└── 長期的にメンテナンスする

直接APIを呼ぶ:
├── シンプルなAPI呼び出しのみ
├── SDKのサイズが問題になる
├── SDKが提供されていない
└── 細かい制御が必要

まとめ

SDKとは

  • 特定のサービスを使うための「開発キット」
  • ライブラリ+ドキュメント+サンプル+ツール

他の概念との違い

概念主な役割SDKとの関係
ライブラリ再利用可能なコードSDKに含まれる
API通信の約束事SDKが内部で使う
フレームワークアプリの骨組み制御の方向が逆

次のステップ