プログラミングの仕事をしていると、外来語由来のカタカナ専門用語が非常に出くわします。 ライブラリとかミドルウェアとかフレームワークといった感じですね。 今回は改めて、その意味について調べてみました。
間違ってたらコメントくださいな~。
ライブラリ
単体では動作することができず、意図的に組み込んで使うプログラムです。 簡単にいえば、import とか、include とかして呼び出すプログラムとイメージするのがわかりやすいかな。 ここは、一番馴染みがあるので分かりやすいと思います。
API
プログラマが使うための利用方法を提供してくれる仕組みですね。import やinclude以外のものに対してよく使われるイメージ。 REST APIとかが最近良く聞く言葉ですね。 あれは、ネットワーク越しに必要なプログラム機能を利用する仕組みなので、まさに言葉通りって感じですね。 プログラマ以外はAPI?って何?ってなりそうですし。
ミドルウェア
上記3つではこれが一番分かりにくかったですし、結構定義が別れていました。 日本語で調べると我流の解釈が出てきそうなので、英語で調べてみました。
wikiの記述
wikiの場合は以下のように記述されていました。
英文:Middleware is a type of computer software that provides services to software applications beyond those available from the operating system.
参考訳(by DeepL):
ミドルウェアとは、コンピュータソフトウェアの一種で、オペレーティングシステムから利用できるサービス以外のサービスをソフトウェアアプリケーションに提供するものです。
OSが提供する以外のサービスを利用できるようにするためのソフトってことでしょうか。 サービスってなんやねん!となりますが、なんとなくイメージは付きます。 ちなみに、自分の理解もこの定義に近く、ようはアプリケーションとアプリケーションをつなぐ仲介役ぐらいに考えていました。
IBMの記述
英文:Middleware is software that enables one or more kinds of communication or connectivity between two or more applications or application components in a distributed network.
参考訳(by Deep L):
ミドルウェアとは、分散型ネットワーク内の2つ以上のアプリケーションやアプリケーションコンポーネント間で、1つ以上の種類の通信や接続を可能にするソフトウェアです。
明らかにwikiとは違いますね。 ネットワークがあることを前提の定義なので、wikiよりは狭いです。 ミドルウェアの定義は?と聞かれてこれを答える日本人は見たことないですね。
RedHatの記述
英文:Middleware is software that provides common services and capabilities to applications outside of what’s offered by the operating system.
参考訳(by Deep L):
ミドルウェアとは、OSが提供するものとは別に、アプリケーションに共通のサービスや機能を提供するソフトウェアのことです。
ほぼほぼ、wikiと同じですね。文章が分かりやすくて素敵です。
Microsoftのdefinition
英文:Middleware is software that lies between an operating system and the applications running on it.
参考訳(by Deep L):
ミドルウェアとは、OSとその上で動作するアプリケーションの間にあるソフトウェアのことです。
この定義だと、アプリケーション以外のソフトウェアはミドルウェアってことになりそうですね。 日本でよく聞く定義はこれな気がしています。「middle」という言葉が入っているので、「間」という言葉を使っているのでしょうか。 wikiと違って、アプリケーションに機能を提供するかは言及されていません。
英語圏でも定義は別れていそう
プログラミングの情報共有サイトとして有名なstackoverflowでも同じ用なトピックがありました。 めちゃくちゃ議論が白熱している。 案外宗教戦争っぽくなってそうですね。 英語圏の人でも間違うんだから、日本人が間違えるのは仕方ないんや~
フレームワーク
アプリケーションを構築するための枠組みですね。 webアプリケーションフレームワークなら、フレームワークを使用して中身を埋めていくだけで、自分好みのwebアプリケーションを作成できます。 言うは易しですが、意外と間違って使われてたりします。 reactとvueはよく比較されますが、 reactはライブラリでvueはフレームワークとして分類されているので、そもそも比べるまでも無かったり。 まあ、reactはほとんどフレームワークとして認識されているようですが。
IDE
いわゆる開発環境ですね。vscode とかAtomとかEclipseとかが該当します。 ソフトウェアを作るための便利ツールが揃っています。 vscodeが便利すぎるんや。
SDK
フレームワークと開発環境をまとめて提供してくれるツール群です。 Android SDKとかがよく使われているのかな。
Platform
SDKと区別が難しいですが、一番の違いはハードウェア(HW)まで含まれてるということです。 SDK+HWがPlatformという認識で良さそう。 PCとかみんな大好きPS4のソフトを開発するためのものを引っくるめてplatformと考えて良さそう。