[go: nahoru, domu]

コンテンツにスキップ

「アプリケーションプログラミングインタフェース」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m編集の要約なし
T.Stone (会話 | 投稿記録)
英語版の要約を追加
2行目: 2行目:


<!-- 不正確 -->
<!-- 不正確 -->
'''API'''('''Application Programming Interface''')とは、[[アプリケーション]]から利用できる、[[オペレーティングシステム]]や[[プログラミング言語]]で用意された[[ライブラリ]]などの機能の入り口となるものである。
'''API'''('''アプリケーション・プログラミング・インターフェイス'''、'''Application Programming Interface''')とは、[[アプリケーション]]から利用できる、[[オペレーティングシステム]]や[[プログラミング言語]]で用意された[[ライブラリ]]などの機能の入り口となるものである。主に、[[ファイル]]制御、ウインドウ制御、[[画像]]処理、文字制御などのための[[関数]]として提供されることが多い
関数の形のものが多い。


APIを使うことで[[ソフトウェア|コンピュータソフトウェア]]が他のソフトウェアと広義の意味で通信しあうことができる。また低レベルな(機械寄りのプログラム言語を使う)ソフトウェアと高レベルな(人間寄りのプログラム言語を使う)ソフトウェアの間の関係をより抽象化するための方法である。APIの目的の一つは、ウィンドウやアイコンを描画するというような共通して使える機能(関数)を提供することである。そのような機能を使えば、プログラマーが一から百まで全部コーディングしなくても済むようになる。API自身は抽象的なものだが、APIを提供しているソフトウェアはそのAPIの'''実装'''と呼ばれる。
主なものに、[[ファイル]]制御、ウインドウ制御、[[画像]]処理、文字制御など。

例えば画面に「Hello World」と表示させる仕事を考えると:
#全部自分でやろうとすると...
##画用紙に「Hello World」という文字を書く。
##それを白と黒の四角いマスで表現したデータを作る。
##[[CPU]]がそのデータを[[ディスプレイアダプター]]の[[フレームバッファ]]に格納するプログラムを作成する。
##[[グラフィックカード]]を設定して、フレームバッファから正しく信号が生成されるようにする。
#[[オペレーティングシステム]]('''OS''')を使うと...
##OSから提供される「[[フォント]]」という[[データ構造]]を[[メモリ]]に読み込む。
##OSに空の[[ウィンドウ]]を表示させる。
##OSに「Hello World」という文字列をウィンドウに描画させる。
#OSの機能を使う[[アプリケーション]]を使うと...
##「Hello World」と書いた[[HTML]]ドキュメントを作成し、[[Mozilla]]や[[Internet Explorer]]などの[[Webブラウザ|ウェブブラウザ]]に表示させる。

明らかに最初のやり方は手間がかかり、加えて相当な量の情報を渡さなくてはならないため実用的ではない。下に行くほどより簡単になっており、3つ目のやり方になると、「Hello World」とタイプすればいいぐらいの手間になる。

しかし高レベルなAPIには柔軟性がないことがある。例えば[[Webブラウザ|ウェブブラウザ]]で文字を点滅させながら円を描くように回転させることは難しいが、低レベルなAPIを使えばもっと簡単に実現できる。APIの簡潔さをとるか柔軟性をとるかは十分にトレードオフを考慮する必要がある。

APIは家の電気と同じように[[コンピュータ]]にとって非常に重要である。自分の家だろうが、友人の家だろうが、[[パン]]を焼きたい時には[[トースター]]を[[コンセント]]につなぐ。これはどちらの家でもコンセントという標準化されたAPIを備えているからである。もしコンセントがなければ、人は[[発電所]]までトーストを焼きにいかなくてはならなくなる。ヨーロッパのトースターは[[変圧器]]がなければ、アメリカでは動かないのと同じように、[[Windows]]用に書かれたプログラムは、[[UNIX]]との仲立ちをしてくれるAPI[[アダプター]]がなければ、UNIX上では動かない。

APIにはさまざまな設計モデルがある。
実行速度を考慮したインターフェイスは通常、[[関数]]、[[プロシージャ]]、[[変数]]や[[データ構造]]から構成される。また例えば[[ECMAScript]]の構文を解析するための[[インタープリタ]]であることもある。良いAPIは[[ブラックボックス]]であり、良い抽象化層であると言える。すなわちプログラマーはそのAPIの機能がより低レベルのAPIとどんな関係をもっているのかを知る必要がないのである。それはまた、そのAPIを使用しているコードを壊すことなく、APIの機能を再設計したり、改良したりすることを可能にしている。

APIの公開に関しては2つの一般的な方針がある。
#自社のAPIを厳重に秘匿する。<br>例えば[[ソニー]]は[[ライセンス]]をもった開発者にしか[[プレイステーション]]の公開APIを利用できないようにしている。なぜならプレイステーションのゲームを開発できる人の数を制限したほうが、より多くの利益をあげられるからである。これはAPIの実装を売ることで利益を上げるわけではない会社の典型的な例である。(ソニーの場合は、ゲーム開発時のAPIのライセンス料によって利益を上げようとしたがうまくいかず、プレイステーション用[[コンソール]]の販売を中止している。)
#自社のAPIを広く普及させる。<br>例えば[[マイクロソフト]]は計画的にAPIにかんする情報を公開しているので[[Windows]][[プラットフォーム]]用のソフトウェアを作成することができる。これはAPIの実装を販売して利益をあげる会社の例である。OSなどのAPIは、いくつかのコードに分割され、[[ライブラリ]]として実装されており、OSと一緒に配布される。OSと一緒に配布されるWindowsのAPIは誰でも使うことができる。また直接アプリケーションの中に統合される必要があるAPIもある。

使用料などを求められないAPIを「オープン」なAPIと言う。[[フリーソフトウェア]]で提供されるAPIはオープンなので、誰でもソフトウェアのソースを見たり、APIの実装を理解することができる。普通は、信頼ある組織からAPIの「[[リファレンス実装]]」が提供される。(例えば[[Windows]]の Win32 API)それにあらたな機能を追加することもできる。例えば、Win32 APIのほとんどは[[WINE]]というソフトウェアとして[[UNIX]]システムに提供されている。

互換性のためのAPIを作成するためにそのAPIの実装を解析することは一般的に合法である。この手法は相互運用性のための[[リバースエンジニアリング]]と呼ばれる。 しかし法律的な面ではあいまいな部分があるので、リバースエンジニアリングする前に十分注意して法的な検討もする必要がある。例えば、使おうとしているAPIに、[[特許]]保持者の許可がなければ使えない特許技術が許可なく含れていたら、それは違法になってしまう。

APIの例:
*[[パソコン]]の[[BIOS]]コールインターフェイス
*さまざまな[[アプリケーション]]の[[ドキュメントオブジェクトモデル]](例えば[[HTML]])
*The Single UNIX Specification
*[[マイクロソフト]]の [[Win32 API]]
*[[サンマイクロシステムズ]]の[[Java 2 Platform, Enterprise Edition]]
*[[SCSI]]用の共通プログラミングインターフェイス'''ASPI'''
*[[マッキントッシュ]]OSの Carbon と Cocoa API
*[[SNMP]](ネットワーク管理プロトコル)
*[[UPNP]](ユニバーサル[[プラグアンドプレイ]])
*[[CORBA]]

2004年2月17日 (火) 07:02時点における版


API(アプリケーション・プログラミング・インターフェイスApplication Programming Interface)とは、アプリケーションから利用できる、オペレーティングシステムプログラミング言語で用意されたライブラリなどの機能の入り口となるものである。主に、ファイル制御、ウインドウ制御、画像処理、文字制御などのための関数として提供されることが多い。

APIを使うことでコンピュータソフトウェアが他のソフトウェアと広義の意味で通信しあうことができる。また低レベルな(機械寄りのプログラム言語を使う)ソフトウェアと高レベルな(人間寄りのプログラム言語を使う)ソフトウェアの間の関係をより抽象化するための方法である。APIの目的の一つは、ウィンドウやアイコンを描画するというような共通して使える機能(関数)を提供することである。そのような機能を使えば、プログラマーが一から百まで全部コーディングしなくても済むようになる。API自身は抽象的なものだが、APIを提供しているソフトウェアはそのAPIの実装と呼ばれる。

例えば画面に「Hello World」と表示させる仕事を考えると:

  1. 全部自分でやろうとすると...
    1. 画用紙に「Hello World」という文字を書く。
    2. それを白と黒の四角いマスで表現したデータを作る。
    3. CPUがそのデータをディスプレイアダプターフレームバッファに格納するプログラムを作成する。
    4. グラフィックカードを設定して、フレームバッファから正しく信号が生成されるようにする。
  2. オペレーティングシステムOS)を使うと...
    1. OSから提供される「フォント」というデータ構造メモリに読み込む。
    2. OSに空のウィンドウを表示させる。
    3. OSに「Hello World」という文字列をウィンドウに描画させる。
  3. OSの機能を使うアプリケーションを使うと...
    1. 「Hello World」と書いたHTMLドキュメントを作成し、MozillaInternet Explorerなどのウェブブラウザに表示させる。

明らかに最初のやり方は手間がかかり、加えて相当な量の情報を渡さなくてはならないため実用的ではない。下に行くほどより簡単になっており、3つ目のやり方になると、「Hello World」とタイプすればいいぐらいの手間になる。

しかし高レベルなAPIには柔軟性がないことがある。例えばウェブブラウザで文字を点滅させながら円を描くように回転させることは難しいが、低レベルなAPIを使えばもっと簡単に実現できる。APIの簡潔さをとるか柔軟性をとるかは十分にトレードオフを考慮する必要がある。

APIは家の電気と同じようにコンピュータにとって非常に重要である。自分の家だろうが、友人の家だろうが、パンを焼きたい時にはトースターコンセントにつなぐ。これはどちらの家でもコンセントという標準化されたAPIを備えているからである。もしコンセントがなければ、人は発電所までトーストを焼きにいかなくてはならなくなる。ヨーロッパのトースターは変圧器がなければ、アメリカでは動かないのと同じように、Windows用に書かれたプログラムは、UNIXとの仲立ちをしてくれるAPIアダプターがなければ、UNIX上では動かない。

APIにはさまざまな設計モデルがある。 実行速度を考慮したインターフェイスは通常、関数プロシージャ変数データ構造から構成される。また例えばECMAScriptの構文を解析するためのインタープリタであることもある。良いAPIはブラックボックスであり、良い抽象化層であると言える。すなわちプログラマーはそのAPIの機能がより低レベルのAPIとどんな関係をもっているのかを知る必要がないのである。それはまた、そのAPIを使用しているコードを壊すことなく、APIの機能を再設計したり、改良したりすることを可能にしている。

APIの公開に関しては2つの一般的な方針がある。

  1. 自社のAPIを厳重に秘匿する。
    例えばソニーライセンスをもった開発者にしかプレイステーションの公開APIを利用できないようにしている。なぜならプレイステーションのゲームを開発できる人の数を制限したほうが、より多くの利益をあげられるからである。これはAPIの実装を売ることで利益を上げるわけではない会社の典型的な例である。(ソニーの場合は、ゲーム開発時のAPIのライセンス料によって利益を上げようとしたがうまくいかず、プレイステーション用コンソールの販売を中止している。)
  2. 自社のAPIを広く普及させる。
    例えばマイクロソフトは計画的にAPIにかんする情報を公開しているのでWindowsプラットフォーム用のソフトウェアを作成することができる。これはAPIの実装を販売して利益をあげる会社の例である。OSなどのAPIは、いくつかのコードに分割され、ライブラリとして実装されており、OSと一緒に配布される。OSと一緒に配布されるWindowsのAPIは誰でも使うことができる。また直接アプリケーションの中に統合される必要があるAPIもある。

使用料などを求められないAPIを「オープン」なAPIと言う。フリーソフトウェアで提供されるAPIはオープンなので、誰でもソフトウェアのソースを見たり、APIの実装を理解することができる。普通は、信頼ある組織からAPIの「リファレンス実装」が提供される。(例えばWindowsの Win32 API)それにあらたな機能を追加することもできる。例えば、Win32 APIのほとんどはWINEというソフトウェアとしてUNIXシステムに提供されている。

互換性のためのAPIを作成するためにそのAPIの実装を解析することは一般的に合法である。この手法は相互運用性のためのリバースエンジニアリングと呼ばれる。 しかし法律的な面ではあいまいな部分があるので、リバースエンジニアリングする前に十分注意して法的な検討もする必要がある。例えば、使おうとしているAPIに、特許保持者の許可がなければ使えない特許技術が許可なく含れていたら、それは違法になってしまう。

APIの例: