Closed12

SDKについて調べたときのメモ(SDK, IDE, API, ライブラリの違い)

でゅーいちでゅーいち

ROSの勉強をしている時に,ROSはSDKという記述を見かけ,改めてSDKってなんだっけ?となって調べた

でゅーいちでゅーいち

まずSDKとは,Software Development Kitの略.
以下はいろいろなページからのSDKについての説明文の引用.

ソフトウェア開発キット(ソフトウェアかいはつキット、英語: Software Development Kit、SDK)は一般に、特定のソフトウェアパッケージ、ソフトウェアフレームワーク、ハードウェアプラットフォーム、コンピュータシステム、オペレーティングシステム、ゲーム機などのためのアプリケーションを作成するためにソフトウェア技術者が使用する開発ツールのセットを意味する。
引用元:ソフトウェア開発キット - Wikipedia

Software Development Kit (SDK) は、開発者向けのプラットフォーム固有の構築ツールのセットです。特定のプラットフォーム、オペレーティングシステム、またはプログラミング言語で実行されるコードを作成するには、デバッガー、コンパイラー、ライブラリなどのコンポーネントが必要です。SDK は、ソフトウェアの開発と実行に必要なすべてを 1 か所にまとめます。さらに、ドキュメント、チュートリアル、ガイドなどのリソースや、アプリケーション開発を高速化するための API やフレームワークも含まれています。
引用元:SDK とは何ですか? - SDK の説明 - AWS

SDK はソフトウェア開発キット (Software Development Kit) の略称で、プラグラムや API、開発ドキュメント等を含む、アプリケーション開発に必要なツール一式を指します。開発作業に必要なツールが一式含まれているため、開発者がゼロから開発を行う必要がなくなり、開発の効率化やコストの軽減を図ることができます。通常、これらのツールは、ハードウェア・プラットフォームやオペレーティングシステム (OS)、またはプログラミング言語などのメーカーによって提供されます。
引用元:SDK (ソフトウェア開発キット) とは | Red Hat

ふむふむ.つまり,特定のアプリケーションの開発を支援してくれるツールがまとめられたものがSDKという訳か.なるほど.

でゅーいちでゅーいち

では具体的なSDKの例が知りたい.
ROSがSDKであるというのは分かったが,世の中にはどんなSDKがあるのか.

調べると以下が出てきた.

  • Android SDK
  • Windows SDK
  • iOS SDK
  • AWS SDK

AWS SDKは使ったことがある.自分の感覚からすると,SDKは一種のライブラリみたいなものという認識でいいのか?うーん,どうなんだろ.

でゅーいちでゅーいち

Unityを使ったことがあるが,UnityはSDKではないのか?まさに開発キットという感じがするのだが.
ただ,UnityにはUnity SDKというものがあることからすると,UnityとSDKは少し違うのだろう??
Android SDKも同じく,Android StudioはSDKではないのか?と思った.

でゅーいちでゅーいち

Android Studio

Android Studio は Android アプリ開発用の公式の統合開発環境(IDE)です。
引用元:Android Studio の概要 | Android Developers

うむ.やはりAndroid StudioはIDEか.

Unity

Download the world’s most popular development platform for creating 2D and 3D multiplatform games and interactive experiences.
引用元:Start Your Creative Projects and Download the Unity Hub | Unity

Unityが何かを明示的に言及しているようなのはこれくらいしか見つけられなかった.
また,このドキュメントを読む感じだとUnityはIDEではなさそう.まあ確かにUnityを使っていてソースコードを書こうとしたらVSCodeなどのIDEが実際に必要だった.
UnityはIDEでもSDKでもなく,それらを使って2D,3D空間をデザインし,アプリケーションを開発するためのプラットフォームということか.
これについて抽象的な名前を付けるとすると「ゲームエンジン」が尤もらしいのかもしれない(もちろんゲーム以外も開発されるわけだから正解ではなさそう).

まあとりあえずUnityはSDKではない.

今度はもう少しIDEについて調べてみよう.IDEとSDKがどう違うのかをはっきりさせたい.

でゅーいちでゅーいち

統合開発環境 (IDE) とは、アプリケーション構築に必要は複数の開発者用ツールを 1 つのグラフィカル・ユーザー・インタフェース (GUI) で使えるようにまとめたソフトウェアおよびプログラミング環境のことであり、IDE により開発を効率化できます。
引用元:IDE (統合開発環境) とは?をわかりやすく解説 | Red Hat

なるほど,GUIで使えるようにまとめたソフトウェアで,あくまでプログラミング環境か.
まとめると,「SDKはアプリケーションの一部分を担って自前で開発する箇所を少なくしてくれるもので,IDEはアプリケーションの部品の組み立て・実装を支援してくれるもの」ということか.

でゅーいちでゅーいち

もう少しSDKについて調べていると,SDKとAPIの違いを焦点にした記事を多く見かけた.
最初は,「いや,SDKとAPIは違うやろ」と思った
しかしSDKとライブラリが近いとなると,確かに「SDKとAPIの違いは何か」という議論にはなりそう.
あれ,てかそもそもライブラリとAPIの関係性は?
...
というように,ここで以下のような疑問がどんどんわいてきた.

  • SDKとライブラリはどう異なる?ライブラリはSDKの一部分という解釈でよい?
  • ライブラリとAPIの関係性,違いは?
  • SDKとIDEの違いは?(↑のスレッドで解決)
でゅーいちでゅーいち

まず,ライブラリとAPIについてそれぞれ調べてみる.

ライブラリ

ライブラリ(英: library)は、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたものである。ライブラリと呼ぶときは、それ単体ではプログラムとして動作させることはできない、つまり実行ファイルではない場合がある。ライブラリは他のプログラムに何らかの機能を提供するコードの集まりと言える。
引用元:ライブラリ - Wikipedia

API

API はアプリケーション・プログラミング・インタフェース (Application Programming Interface) の略であり、アプリケーションをプログラミングするためのインターフェースという意味です。API はアプリケーション・ソフトウェアを構築し、統合するための一連の定義とプロトコルであり、ソフトウェア同士をつなぐ (連携させる) ことで、 アプリケーションの開発を容易にします。
引用元:API とは?をわかりやすく解説 | Red Hat

そうか,ライブラリは具体的な機能やコードの集まりのことを指しているのに対して,APIはあくまでインターフェースなのか.
ライブラリとAPIの違いについては分かった.

では,ライブラリとSDKの関係性についてはどうだろうか.

でゅーいちでゅーいち

最初に取り上げたAWSのページでもすでにライブラリとSDKの関係性を述べていたが,以下にも同じような記述があった.

Software Development Kit (SDK) は、デバッガー、コンパイラー、ライブラリなどのプラットフォーム固有の構築ツールのセットです。
引用:SDK と API - デベロッパーツール間の違い - AWS

つまり,SDKの一部分としてライブラリが存在するということだ(ただしこれはすべてのライブラリが何らかのSDKの一部という訳ではない).
ふむふむ,SDK完全に理解した.

でゅーいちでゅーいち

ちなみに,Stack Overflowでこれについてうまくまとまっているものがあった.

An IDE is an integrated development environment - a suped-up text editor with additional support for developing (such as forms designers, resource editors, etc), compiling and debugging applications. e.g Eclipse, Visual Studio.

A Library is a chunk of code that you can call from your own code, to help you do things more quickly/easily. For example, a Bitmap Processing library will provide facilities for loading and manipulating bitmap images, saving you having to write all that code for yourself. Typically a library will only offer one area of functionality (processing images or operating on zip files)

An API (application programming interface) is a term meaning the functions/methods in a library that you can call to ask it to do things for you - the interface to the library.

An SDK (software development kit) is a library or group of libraries (often with extra tool applications, data files and sample code) that aid you in developing code that uses a particular system (e.g. extension code for using features of an operating system (Windows SDK), drawing 3D graphics via a particular system (DirectX SDK), writing add-ins to extend other applications (Office SDK), or writing code to make a device like an Arduino or a mobile phone do what you want). An SDK will still usually have a single focus.
引用元:Difference between framework vs Library vs IDE vs API vs SDK vs Toolkits? - Stack Overflow

このページを見るといろいろな言葉で説明されており理解を深めやすい.
また,フレームワークについても言及されているのもありがたい.

このスクラップは3ヶ月前にクローズされました