API, SDK, Libraryの違い | DAFTCRAFT ENGINEER BLOG

API, SDK, Libraryの違い | DAFTCRAFT ENGINEER BLOG|ダフトクラフト株式会社

先日、SDKについての会話中に非エンジニアからライブラリとの違いは何かという質問を受けました。開発者はライブラリ/SDK/APIを使い分けていますが明文化はされていなかったので、ここで大まかにまとめます。

目次

 

ライブラリとは

 

● 汎用性の高い機能(関数)をまとめたもの
● プログラムを作っていくためのパーツ

ライブラリは単体で動作するのではなく、プログラムから呼び出して利用するものです。ライブラリを使うことで、必要な機能を1から開発する手間がなくなります。実績のあるライブラリは多くの人に使われ検証もされているので、品質の面でもメリットがあります。

 

 

 APIとは

 

APIは Application Programing Interface の頭文字をとった言葉です。

● 特定のアプリケーションやサービスとやりとりをするためのインタフェース
 ・入力と出力の仕様
 ・ライブラリも広義のAPI

● Web APIはhttp(s)通信でやりとりするAPI
 ・やりとりする先: エンドポイント(URL)
 ・入力: リクエスト
 ・出力: レスポンス

APIは、ある機能に対して所定の入力をすると処理され出力が返ってくるものです。使い方を守っていれば想定通りの機能が提供されるため、具体的な処理内容まで理解することなく簡単に使う事ができます。

イメージとして飲み物の自動販売機の購入手順をAPIとして考えてみます。入力はお金と欲しい飲み物の選択(押したボタンの種類)で、出力は飲み物です。この時、自動販売機は入力に対して処理をしていますが、内部の動作をユーザは気にすることなく飲み物購入という機能を使えています。機能に対する入力(お金、 飲み物)と出力(飲み物)の関係(API仕様)はどの自動販売機でも共通しているので、ユーザは使い方を気にせず好みで飲み物を買うことができます。

webを扱っているとWeb APIをAPIと省略している事も多いです。

 

 

SDKとは


SDKはSoftware Development Kitの頭文字をとった言葉です。

● ソフトウェアを作るために必要なものをまとめたもの
 ・そのまま開発キットということ
 ・開発に必要なライブラリやAPI、ドキュメントなどが色々入ってる
● サービスや機能(製品)を簡単に使うためのもの

サービスや製品を使ったソフトウェアの開発を促すために用意される事が多いです。例えばAndroidアプリ開発のためのAndroid SDKがあります。

 

 

Android用ゲームの開発を例に考える

 

Android用ゲーム開発を例にSDK/API/ライブラリの違いを考えていきます。ゲームはブロック崩しとして、インターネットを通じてステージを追加したりハイスコアを他プレイヤーと競えるものとします。ゲームエンジンにはUnityを使います。

まずターゲットはAndroidなのでAndroid SDKをインストールします。Android SDKには、Android OSの機能を使うためのAPIやそれを補助するライブラリなどが入っているため、バッテリ残量を取得したりディスプレイに画像を表示したり、Android端末に対する処理が行えるようになります。Unityを使うとAndroid APIを直接使う事は少ないですが、これはビルド時にUntiyがAndroid SDKを使ってAndroid端末で動く形にしているためです。

ブロック崩しの動きや見た目はUnityで実装します。Unityはゲームエンジンなので、ゲームを作る上で必要な部品が一通り揃っています。例えばブロックとボールの当たり判定であったり、当たった時に音を出したり、残り時間や点数をUIに表示するといった機能を簡単に作る事ができます。

次に、ステージの追加を考えます。プレイヤーも追加ステージを作れるように、設定ファイルと画像をzipにまとめたらステージとして利用できるようにしようと思います。zip圧縮はOS標準機能や専用ソフトでプレイヤーでも簡単に作れます。これをゲーム側で読み込むことでステージを追加します。ただし読み込むためにはzipファイルの展開が必要です。ユーザが使う圧縮展開ソフトは人が使うための機能も含まれたソフトで、そもそもユーザによって使っているソフトが異なることもあり、プログラム側からの利用には向きません。プログラム側で使いたいのはzip圧縮と展開の機能だけです。zipの仕様に沿って独自実装も不可能ではありませんがかなりの手間がかかります。そこでzipライブラリを使います。zipライブラリを使う事で簡単にzipの展開ができるようになりました。これでzipの仕様は気にせず、目的の設定ファイルと画像の扱いに集中することができます。

最後に、スコアを送信してインターネット上のランキング表示について考えます。ここでは簡単に、ランキング登録のためのWeb APIを使う事とします。そのためにはサーバ側にランキング登録APIを実装します。APIの仕様は例えば以下です。

・endpoint: https://example.com/mygame/ranking/regster
・Method: Post
・Request: json
 ・player_id
 ・stage_id
 ・score
・Response: json
・status

ゲーム側は登録したいデータをこのAPI仕様に沿って送ることで、サーバ側にランキング情報が登録されます。ただしこれだけだとスコアの改竄が容易なので、実際には認証やチート対策の仕組みがサーバ側にもゲーム側にも必要になってきます。

ランキング情報を表示するときは、サーバ側のランクング情報取得APIをゲーム側が使ってデータ取得し表示を行います。このようなサーバとクライアント(ゲーム)の連携でWeb APIを頻繁に使うプロジェクトだと、Web APIをAPIと省略して呼ぶことも多いです。

ここでサーバ側とゲーム側はやりとりをWeb APIで行っていますが、接点はWeb APIだけなのでシステムとして独立してます。つまりAPI仕様に沿っていればその先がどうなっているかはお互い考慮する必要がないということです。そのため、ゲーム側はUnity(C#)で開発して、サーバ側はScalaやgoで開発しAWS上で動かすといった、別の仕組みで動かす事ができます。

 


 まとめ

 

● APIは、外部の機能やサービスとやりとりする仕組み
● ライブラリは、機能がまとめられたプログラムのパーツ
● SDKは、特定のサービスや製品を使った開発をしやすくするための道具一式

であると言えます。

 

XR開発はダフトクラフト
VR/AR/MR専門の開発会社がお客様の課題を解決いたします
Picture of 岩城 謙太

岩城 謙太

Unity エンジニア | サーバーサイドや機械学習エンジニアリングを含め10年以上の開発経験を持つ