2017年6月2日金曜日

ライブラリ、モジュール、コンポーネントの違い

プログラミングをやっていると、いろんな専門用語が出てきます。

その中で、プログラムの部品という意味で使われる用語にも幾つか種類があり、それぞれ少しだけ意味が違います。

ここでは、私個人が考えをまとめるのを兼ねて、その違いを書いていこうと思います。

ライブラリ、モジュール、コンポーネントの違い

よくプログラミングで部品という扱いをされるものとして、ライブラリ、モジュール、コンポーネントがあります。それぞれ違いを説明していこうと思います。

料理に例えてみる

プログラミングをあまり知らない人でも少しはわかりやすくなるよう、プログラムを料理のレシピとして例えて説明していきます。

プログラミングというのは、とてつもなく工程が長くて説明が細かい料理のレシピを書くようなものだと思って下さい。コンピューターがそのレシピ通りに実行すると、料理(ソフトウェアの実体)が動き出します。

ライブラリ……部分的なレシピ

プログラミングの部品と言って最も代表的だと思うのが、ライブラリです。これは、「関数やデータ、クラスなどの、ソースコードの一部を部品化したもの」です。

ライブラリを説明する図。
ライブラリ(オレンジ)はソースコード(青)の欠けた部分を補う部品。
静的リンクはソフトウェア(太枠)の一部として事前に組み込まれ、
動的リンクは実行時に後から組み込まれる。

料理のレシピで例えるならカツカレーのレシピに対するトンカツのレシピです。

カツカレーのレシピを書こうというときに、トンカツの揚げ方まで事細かに書くとは限りません。世の中にはトンカツ単品のレシピは既に良いものがあるでしょうから、そのうちの一つを指定して「トンカツの作り方はこのレシピを参照するように」と書いたほうが手っ取り早く、間違いがありません。

料理のレシピとしては手抜き感がありますが、プログラミングの世界では質の高いレシピ(ライブラリ)を正しく引用できるなら、出来上がる料理(ソフトウェア)の品質も高くなるものなのです。プログラミングの手間を省くためにも、大変だと思った部分は積極的に良いライブラリを探して使っていくのが得策です。

モジュール……料理の一部となる料理

プログラミングの部品といえばもうひとつ有名なものがあって、それがモジュールと呼ばれるものです。これは、「外部のソフトウェアと連携できるソフトウェア」です。

モジュールを説明する図。
モジュールはそれぞれ独立したソフトウェアであり、
互いに連携を取って一つのソフトウェアのように振る舞う

例えば、スープ、前菜、副菜、メインディッシュ、デザートなど、各々の専門家が作った料理はそれ単体でも美味しい料理(ソフトウェア)ですが、それらのコンセプトを統一して組み合わせれば豪華なフルコース(大掛かりなソフトウェア)になりますよね。この個々の料理のことをプログラミングではモジュールと言います。

これはフルコース以外でも当てはまります。たとえば、ウェハースはそれ単体でも美味しい完成された料理ですが、チョコレートサンデーに挿すならウェハースはモジュールとも呼べます。カツカレーのトンカツも、買ってくるようにとレシピに書いたならそれはモジュールです。

つまり、ライブラリとモジュールとの使い方の違いは、他のレシピを参照するか、作られた料理を使用するかの違いで、どちらもソフトウェアを作るための部品として使われます。

技術的には、コマンドライン引数やプロセス間通信、ソケット通信、共有メモリ、ウィンドウメッセージ等を利用して複数のソフトウェア同士が連携してひとつのシステムとして動作します。

JavaScript (Node.js や Require.js など)の世界で言うモジュールは少々特殊ですが、主にファイル単位で互いに独立していて、かつ何らかの方法で連携を取る方法が用意されているもののことをモジュールと呼ぶことがあります。

コンポーネント……冷凍食品のおかず

世の中にはコンポーネントと呼ばれる部品もあります。これはいろんな意味があるのですが、プログラミング中であれば「GUI部品または構成要素全般」のことを指していることが多いです。

GUI部品としてのコンポーネントを説明する図。
コンポーネントは画面のボタンなどの汎用性の高い部品で、
プログラマーは機能を作ることに専念できる。

GUI部品というのは、ボタンやテキストエリア、ファイル選択ダイアログなどの見た目と機能を併せ持つ部品のことで、これをコンポーネントと呼ぶことがあります。これらを組み合わせることで簡単にソフトウェアの画面を作ることができます。また、ボタンを押されたらどう反応するかなどの部分は自分でプログラミングすることができます。

これは料理で例えるなら、冷凍食品のおかずが近いと思います。あえて使いやすい未完成の状態で提供されていて、温めたり揚げたり焼いたり、ちょっとした調理だけで料理の一部として使えるように作られているところがGUI部品に似ていると思います。

また、このコンポーネントは「構成要素」や「成分」、あるいは「構成している」という意味の一般的な英単語でもあるため、英語の文章に普通に出てくることがあります。そのため、特に英文を読んでいるときやその日本語訳を読んでいるときは、文脈によって意味が変わる言葉なので注意しましょう。

具体的には、統合開発環境や画面レイアウトに関するところでコンポーネントという言葉を見たら GUI 部品を意味することが多いです。それ以外の場面では一般的な英単語としての意味か、あるいは別の分野の専門用語かもしれません。

まとめ

さて、今回はプログラミングの世界で「部品」を意味する言葉の使われ方の違いを、私が理解している範囲で書いてみました。料理を例に出すのはやや強引なところもあると思いますが、概ねのイメージが伝わってくれれば幸いです!

0 件のコメント :

コメントを投稿