APIとは、あるプラットフォーム(OSやミドルウェア)向けのソフトウェアを開発する際に使用できる命令や関数の集合のこと。また、それらを利用するためのプログラム上の手続きを定めた規約の集合。個々のソフトウェアの開発者がソフトウェアの持つすべての機能をプログラミングするのは困難で無駄が多いため、多くのソフトウェアが共通して利用する機能は、OSやミドルウェアなどの形でまとめて提供されている。個々の開発者は規約に従ってその機能を「呼び出す」だけで、自分でプログラミングすることなくその機能を利用したソフトウェアを作成することができる。
プラットフォームとは、アプリケーションソフトを動作させる際の基盤となるOSの種類や環境、設定などのこと。
WindowsやUNIX、Mac OSは、それぞれ異なるプラットフォームである。
また、OSにとっては、自らを動作させる基盤となるPC/AT互換機、Macintoshなどのハードウェアの種類がプラットフォームである。
アプリケーションソフトにせよOSにせよ、対応しているプラットフォームはあらかじめ決まっており、それ以外のプラットフォームでは動作しない。
例えば、Mac OSプラットフォーム上で動作するワープロソフトは、Windows 2000を搭載したパソコンでは動作しない。
ただ、複数のプラットフォームに対応するために、「Macintosh用」「Windows用」などのように、それぞれのプラットフォームに対応した同じアプリケーションソフトを用意することはある。複数のプラットフォームに対応したソフトウェアを「マルチプラットフォーム」と言う。
OSとは、キーボード入力や画面出力といった入出力機能やディスクやメモリの管理など、多くのアプリケーションソフトから共通して利用される基本的な機能を提供し、コンピュータシステム全体を管理するソフトウェア。
ソフトウェアの開発者は、OSの提供する機能を利用することによって、開発の手間を省くことができ、アプリケーションの操作性を統一することができる。また、ハードウェアの仕様の違いはOSが吸収してくれるため、あるOS向けに開発されたソフトウェアは、基本的にはそのOSが動作するどんなコンピュータでも利用できる。
パソコン向けのOSとして広く利用されているものにはMicrosoft社のWindowsシリーズやApple社のMac OS Xなどがあり、企業などが使うサーバ向けのOSとしてはLinuxなどのいわゆるUNIX系OSやMicrosoft社のWindows Serverシリーズがよく使われる。
ミドルウェアとは、OS上で動作し、アプリケーションソフトに対してOSよりも高度で具体的な機能を提供するソフトウェア。OSとアプリケーションソフトの中間的な性格を持っている。
多くのアプリケーションソフトで共通して利用される機能は、個別に開発するのは非効率であるため、通常はOSの機能として提供され、アプリケーションソフトはOSの機能を利用するだけですむようになっている。
だが、このようにしてOSに実装される機能はどんなアプリケーションソフトでも必ず必要とされるような極めて基本的なものに限られる。
このため、特定の分野でしか使われないが、その分野では必ず必要とされるような具体的で基本的な機能は、ミドルウェアの形で提供されることが多い。
また、ミドルウェアにはOSやハードウェアによる違いを吸収し、様々なプラットフォームで動作するアプリケーションソフトの開発を容易にするというメリットがある。
代表的なミドルウェアにはデータベース管理システム(DBMS)や、トランザクション処理機能を提供するTPモニタ、分散オブジェクト環境を提供するORBなどがある。
ソフトウェアとは、狭義にはコンピュータプログラムとほぼ同じ意味。コンピュータを動作させる手順・命令をコンピュータが理解できる形式で記述したもの。コンピュータを構成する電子回路や周辺機器などの物理的実体をハードウェアと呼ぶのに対して、形を持たない手順や命令などをソフトウェアと呼ぶ。広義にはコンピュータが扱うプログラム以外のデータを含めてソフトウェアと呼ぶ場合もある。ソフトウェアはその役割によって基本ソフトウェア(オペレーティングシステム)とアプリケーションソフトに大別される。WindowsやMac OS、UNIXなどは前者にあたり、ワープロソフトや表計算ソフトなどは後者に分類される。
プログラミングとは、コンピュータに人間が意図した動作を行なわせるための指示の集まり(プログラム)を作成すること。狭義には、プログラミング言語を用いて人間に可読な形式で指示をまとめたソースコードを記述する作業(コーディング)のことを指す。広義には、ソースコードをコンピュータで実行可能な形式(オブジェクトコード)に変換したり、意図したとおりに動作するかテストしたり、不具合を見つけて修正したり(デバッグ)といった一連の作業を含む。

API(アプリケーション・プログラミング・インタフェース、Application Programming Interface)とは、アプリケーションから利用できる、オペレーティングシステムやプログラミング言語で用意されたライブラリなどの機能の入り口となるものである。主に、ファイル制御、ウインドウ制御、画像処理、文字制御などのための関数として提供されることが多い。
つまり、簡単にいえば、アプリケーションをプログラムするにあたって、プログラムの手間を省くため、もっと簡潔にプログラムできるように設定されたインターフェースの事である。
APIの利用
APIを使うことでコンピュータソフトウェアが他のソフトウェアと広義の意味で通信しあうことができる。また低レベルな(機械寄りのプログラム言語を使う)ソフトウェアと高レベルな(人間寄りのプログラム言語を使う)ソフトウェアの間の関係をより抽象化するための方法である。APIの目的の一つは、ウィンドウやアイコンを描画するというような共通して使える機能(関数)を提供することである。そのような機能を使えば、プログラマーが一から百まで全部コーディングしなくても済むようになる。API自身は抽象的なものだが、APIを提供しているソフトウェアはそのAPIの実装と呼ばれる。
例えば画面に「Hello World」と表示させる仕事を考えると:
全部自分でやろうとすると
画用紙に「Hello World」という文字を書く。
それを白と黒の四角いマスで表現したデータを作る。
CPUがそのデータをディスプレイアダプターのフレームバッファに格納するプログラムを作成する。
グラフィックカードを設定して、フレームバッファから正しく信号が生成されるようにする。
オペレーティングシステム(OS)を使うと
OSから提供される「フォント」というデータ構造をメモリに読み込む。
OSに空のウィンドウを表示させる。
OSに「Hello World」という文字列をウィンドウに描画させる。
OSの機能を使うアプリケーションを使うと
「Hello World」と書いたHTMLドキュメントを作成し、Mozilla FirefoxやInternet Explorerなどのウェブブラウザに表示させる。
明らかに最初のやり方は手間がかかり、加えて相当な量の情報を渡さなくてはならないため実用的ではない。下に行くほどより簡単になっており、3つ目のやり方になると、「Hello World」とタイプすればいいぐらいの手間になる。
しかし高レベルなAPIには柔軟性がないことがある。例えばウェブブラウザで文字を点滅させながら円を描くように回転させることは難しいが、低レベルなAPIを使えばもっと簡単に実現できる。APIの簡潔さをとるか柔軟性をとるかは十分にトレードオフを考慮する必要がある。
APIの概念
APIは家の電気と同じようにコンピュータにとって非常に重要である。自分の家だろうが、友人の家だろうが、パンを焼きたい時にはトースターをコンセントにつなぐ。これはどちらの家でもコンセントという標準化されたAPIを備えているからである。もしコンセントがなければ、人は発電所までトースターを持参してパンを焼きにいかなくてはならなくなる。ヨーロッパのトースターは変圧器がなければ、アメリカでは動かないのと同じように、Windows用に書かれたプログラムは、WineなどのUNIXとの仲立ちをしてくれるAPIアダプターがなければUNIX上では動かないし、同様にUNIX用に書かれたプログラムはCygwinなどのソフトウェアを用いないとWindows上では動作しない。
APIにはさまざまな設計モデルがある。実行速度を考慮したインタフェースは通常、関数、プロシージャ、変数やデータ構造から構成される。また例えばECMAScriptの構文を解析するためのインタプリタであることもある。良いAPIはブラックボックスであり、良い抽象化層であると言える。すなわちプログラマはそのAPIの機能がより低レベルのAPIとどんな関係をもっているのかを知る必要がないのである。それはまた、そのAPIを使用しているコードを壊すことなく、APIの機能を再設計したり、改良したりすることを可能にしている。
APIの公開に関しては2つの一般的な方針がある。
自社のAPIを厳重に秘匿する。
例えばソニーはライセンスをもった開発者にしかプレイステーションの公開APIを利用できないようにしている。なぜならプレイステーションのゲームを開発できる人の数を制限したほうが、より多くの利益をあげられるからである。これはAPIの実装を売ることで利益を上げるわけではない会社の典型的な例である。(ソニーの場合は、ゲーム開発時のAPIのライセンス料によって利益を上げようとしたがうまくいかず、プレイステーション用コンソールの販売を中止している。)
自社のAPIを広く普及させる。
例えばマイクロソフトは計画的にAPIに関する情報を公開しているので、誰でも簡単にWindowsプラットフォーム用のソフトウェアを作成することができる。これはAPIの実装を販売して利益をあげる会社の例である。OSなどのAPIは、いくつかのコードに分割され、ライブラリとして実装されており、OSと一緒に配布される。OSと一緒に配布されるWindowsのAPIは誰でも使うことができる。また直接アプリケーションの中に統合される必要があるAPIもある。
使用料などを求められないAPIを「オープン」なAPIと言う。フリーソフトウェアで提供されるAPIはオープンなので、誰でもソフトウェアのソースを見たり、APIの実装を理解することができる。普通は、信頼ある組織からAPIの「リファレンス実装」が提供される(例えばWindowsのWindows API)。それに新たな機能を追加することもできる。例えば、Windows APIのほとんどはWineというソフトウェアとしてUNIXシステムに提供されている。
互換性のためのAPIを作成するためにそのAPIの実装を解析することは一般的に合法である。この手法は相互運用性のためのリバースエンジニアリングと呼ばれる。しかしAPIそのものとは異なり、APIの実装には著作権が存在するため、リバースエンジニアリングする前には著作権侵害の問題が生じないよう、十分注意する必要がある。また、使おうとしているAPIに、特許保持者の許可がなければ使えない特許技術が許可なく含まれていたら、それは特許権侵害になりうる。(ただし、これはリバースエンジニアリングに限られた話ではなく、APIを利用するプログラムにも全般的に言えることである。)
APIの例
パソコンのBIOSコールインタフェース
さまざまなアプリケーションソフトウェアのDocument Object Model(例えばHTML)
The Single UNIX Specification
POSIX
iconv
マイクロソフトのWindows API
サン・マイクロシステムズのJava Platform, Enterprise Edition(Javaプラットフォーム)
SCSI用の共通プログラミングインタフェースASPI
Mac OSのToolbox
Mac OS XのCarbonとCocoa、Core Image
SNMP (ネットワーク管理プロトコル)
Universal Plug and Play (UPnP、ユニバーサルプラグアンドプレイ)
CORBA
Video for Windows
関連項目
ソフトウェアドキュメンテーション
システムコール