ソフトウェア・アプリケーション・モジュール・パッケージ・ライブラリ・バイナリ・リポジトリ・・・
この業界にいると、似たようなカタカナがたくさん出てきますが、はっきり「こう!」って説明できるものって案外少なくて、どれもなんかもやっとしますよね?
なんかITで出てくる・・・システム、的な?
紛らわしいですよね?
違いがよくわかりませんよね?
違いがわかるように整理してみました。
この記事を読めば、「あ、要するに〇〇のことね!」って言えるようになるはずです。
この目次のように分類してみるとよいでしょう。
全体像(大きな違い)
目次の分類を押さえた上で、まずはざっくりと、大項目の関係を押さえておきましょう。
- データの集まりがプログラム
- データやプログラムの集まりがソフトウェア
- プログラムまたはソフトウェアの集まりがライブラリ(的なもの)
的な雰囲気です。厳密さを追い求めると泥沼にハマるので、表現の正確性は保証できませんが、上記視点があるとぐっとわかりやすくなります。もちろん、常に100%全て上記が言えるわけではないのですが、要するに大小関係、包括関係である点を押さえていただけると良いです。
例えば、
- 文の集まりが文章
- 表紙や文章の集まりが本
- 本の集まりが図書館
的なイメージです。別の例えをするなら、
- 社員で構成されるのが部門
- 社長やさまざまな役割の部門(営業・開発・経理など)で構成されるのが会社
- 色々な分野の会社が集まったのがグループ企業
みたいなイメージでも良いかもしれません。あるいは
- ネジやシャフトで作ったのがタイヤ
- タイヤやボディなど組み合わせて作ったのが車
- 車用品や色々な車を売っているのがディーラー
とかでもわかりやすかも。
A | B | C | D | |
種類 | データ | プログラム | ソフトウェア | ライブラリ(的なもの) |
例1 | 文 | 文章 | 本 | 図書館 |
例2 | 社員 | 部門 | 会社 | グループ企業 |
例3 | ネジ | タイヤ | 車 | ディーラー |
Aが最小単位です。Bはそれ自体で重要な一機能を担っていますし、Bそれ自体が単体で使い道がある場合もあるのですが、基本的にはCや他の目的のための道具として使われることがほとんどです。Cは基本的に完成品で、単体それ自体で価値を発揮します。BやCが複数集まって選べるようにしたものがD。そんなイメージです。
各詳細は下記外部サイトをご覧ください。(新しいタブで開く)
次から、それぞれの単語の意味と、もっと細かい違いを解説していきます。ただし、どれも定義や境界が曖昧なものが多いです。分野や文脈によって変わります。もしかしたら、時代によっても変化してきたのかもしれません。ですから、決して、「厳密さ」「正確さ」は求めないでください。必要ありません。専門用語とはいえ、「なんとなく」「ざっくりと」違いがわかればそれで十分です。
A. データ(ファイル)の種類
データ(ファイル)が最小単位です。2種類のデータがあると思ってください。
テキストデータ
人間が読めるデータ、いわゆるテキストデータです。メモ帳やVSCodeなどのテキストエディタやPDFなどで閲覧、編集が可能です。プログラムとして意味のある文字列の場合は、次に紹介するバイナリデータに変換することでコンピュータへ命令することができます。
バイナリデータ(=バイナリ)
「バイナリ」と出てきたら、「バイナリデータ」または「バイナリファイル」の省略です。つまり、「バイナリ」と出てきたら、データまたはファイルなんだな、と思えばOKです。
バイナリデータは、コンピュータが読めるデータです。人間は読めません。無理やり人間の読めるテキストファイルで開こうとすると文字化けします。テキストデータの対義語としての狭義のバイナリデータと、「コンピュータに保存されているデータ全て」という意味の広義のバイナリデータがあります。詳しい説明は外部サイトに譲ります。
バイナリ 【binary】 バイナリデータ / binary data
データベース
ここに並べて書いていいのかわかりませんが、データベースも、テキストデータの一種です。データベース自体は、「プログラム」とは呼べない気がします。「ソフトウェア」の一部として使われることが多いです。なので、あくまで「データ」ですね。ただ、DBMSは「プログラム」または「ソフトウェア」の一種です。データベースやDBMSをここで紹介している他の用語と混同することはないでしょうから、詳細な説明は割愛します。詳しく知りたい方は、下記参照してみてください。
B. プログラムの種類
(広義での)バイナリデータの集合体で、ひとつの指示や命令の機能を持たせたものが「プログラム」です。プログラム=「コンピュータに対する指示書」と思ってもらえればよく、実態としてはデータの集まりです。
小さなものでは、プログラミングを始めるとだいたい最初に書かされる「Hello World!」を出力させるコードも、コンピュータに指示できる以上はたとえ1文でも立派な「プログラム」です。大きなものだと何千行もあったり、何十、何百といったファイルで構成されているプログラムもあり、幅広い概念です。なにせ「コンピュータに指示を出すデータの集まり」は全てプログラムですから。詳しくはわわわIT用語辞典「プログラム」をどうぞ。
したがって、駆け出しエンジニアのみなさんが色々なドキュメントを理解しやすくするためには、最初はどれも「要するにプログラムのことね」と思っていただければ十分です。
モジュール
モジュールをプログラムよりも小さい単位と捉え区別している記事もありますが、プログラム自体が広い概念ですから、モジュールも「プログラムの一種」という認識で問題なさそうです。モジュール(module)は直訳で「部品」です。要するに、より大きなプログラムやソフトウェアの部品になるようなプログラムのことを「モジュール」と言っているんだと思います。プログラムの中でも、
- 小さめ
- 使い回しがしやすい(まさに部品としての役割)
などの特徴を持ったもので、要するに小回りの利く便利な奴です。詳しくはわわわIT用語辞典「モジュール」をどうぞ。
Pythonでは、Pythonファイル(.py)のことをモジュールと呼びます。
モジュールと聞いたら、「プログラムの部品」または「部品としてのプログラム」のどちらかだと考えていただければ大きくハズレないでしょう。
コンポーネント
コンポーネントもプログラムの一種で、モジュールと同じように「部品」としての役割を果たすものなので、モジュールと似たようなものです。
違いを説明するなら、このサイトの説明がなんとなくそれっぽいです。
モジュールとは?ライブラリ、コンポーネントとの違い
あるいは、これとか。
モジュールとコンポーネントとライブラリとプラグインの違いとは
ただ、分野や文脈によって変わる場合もあるので、モジュールとの違いはあまり気にしなくて良いでしょう。どちらも「プログラムの部品」あるいは「部品としてのプログラム」と考えれば意味は通るはずです。同じ文脈で両方出す人がいたら、どのように使い分けているのか聞いてみて、その人の前ではその使い分けで使う、というのが大人の対応かなと思います。詳しくはわわわIT用語辞典「コンポーネント」をどうぞ。
スクリプト
プログラムの一種で、ソースコードを書いたらすぐに実行できるタイプのプログラムのことです。通常、ソースコードを書くだけではプログラムは実行出来ません。それをコンパイル(機械語に翻訳すること)して初めて実行出来ます。そのコンパイルを裏で自動でやってくれるタイプのプログラムということです。スクリプトを作成できるプログラミング言語を「スクリプト言語」(逆にコンパイルが必要な言語はコンパイラ言語)と言ったりします。詳しくはわわわIT用語辞典「スクリプト」をどうぞ。
パッチ
プログラムの一種。ソフトウェアを後から変更することができる後付けプログラムのことです。パッチ(patch)は直訳で「当て布」や「絆創膏」の意味で、元の意味どおり、「このソフトウェアにパッチを当てる」なんて言い方をします。バグを修正したり、機能を追加したりする目的で作成、実行するものです。詳しくはわわわIT用語辞典「パッチ」をどうぞ。
C. ソフトウェアの種類
「ソフトウェア」という単語は聞き馴染みがあるでしょう。それだけ一般的な言葉であるがゆえに、意味が複数存在します。(「ヤバい」とか「いとをかし」とかみたいなものです)
- 広義のソフトウェア
- 狭義のソフトウェア
- もう少し限定的に、一般的に「ソフト」と呼ばれる場合、アプリケーションやOSなどを意図するソフトウェアです。プログラムはもちろん、それ以外の設定ファイルやデータを保管しておくファイル、各種ライブラリ等も含み、全体で何らかの価値を提供してくれるシステムのことを指しています。
どちらの意味でも、「ソフトウェア」は、単に「プログラム」よりも広い意味です。プログラム以外の色々なファイルやデータを含んでいると考えていただければ問題ありません。
そして、この世の中にソフトウェアと呼べるものは非常に多く、様々な分類があります。ソフトウェアにはOSとアプリの2種類、みたいな簡略化した説明をよく見ますが、エンジニアとしてはその解像度だと微妙です。「車には、普通車とそれ以外の2種類ある」くらいの知識でディーラーに勤めるのは無理があるでしょう。もっと細かい表現が出てきます。したがって、駆け出しエンジニアの方は、今から紹介するものを全て押さえておくことをオススメします。ただ、色々なドキュメントを理解しやすくすることが目的なら、最初はどれも「要するにソフトウェアのことね」と思っていただければ十分です。
OS(=オペレーティングシステム)
OSもソフトウェアの一種です。WindowsとかMacとかそういうのですね。ソフトウェアのうち、「パソコンをパソコンたらしめている一番基本的なソフトウェア」という理解が良いです。「ソフトウェアを利用するためのソフトウェア」という解釈もできます。詳しくはこちらの記事をどうぞ。
アプリ(=アプリケーションソフトウェア)
「アプリ」はかなり一般的によく使う単語になりました。正式には「アプリケーションソフトウェア」。要するに「アプリ」もソフトウェアの一種です。「アプリ」の定義も色々なサイトで紹介されていますが、これも対象範囲が広く、「ソフト」と聞いて思い浮かべるもの、そのものです。なので、正確な定義としては、「アプリには含めないソフトウェア」を理解する方が早いでしょう。
- アプリには含めないソフトウェア:
- OS
- ハードウェアを動かすためだけのソフトウェア(ファームウェアやデバイスドライバなど)
- 単体のデータ・ファイル・フォルダ・プログラム等
要するに、所謂「ソフト」と聞いて思い浮かべるソフトウェアはだいたいアプリケーションソフトウェア、という認識で問題ありません。
アプリケーション(application)を直訳すると「応用されたもの」の意味で、「応用」には「実際の事柄に当てはめて利用する」という意味があります。つまり語源からは、「実際に利用するソフトウェア」が「アプリケーションソフトウェア」ということですので、ほとんどのソフトウェアが「アプリ」と呼ばれるのは納得です。「ソフトウェア」と呼んでいても、実質「アプリケーションソフトウェア」のことを指しているケースも珍しくありませんよね。
一応、これだけでソフトウェアの説明は終わりにできるのですが、もう少し細かい分類も見ていきましょう。まだまだ「要するにソフトウェアのことね」な呼び方がたくさんあります。
パッケージ(=パッケージソフトウェア)
ソフトウェアの一種で、かつ、アプリケーションソフトウェアの一種です。アプリケーションソフトウェアのうち、「既製品(市販品)」のことです。
そもそも、ソフトウェアを手に入れる方法は2つあります。
- 開発して(開発してもらって)デプロイ&リリース
- 既製品(市販品)をダウンロード&インストール
1はつまりオーダーメイド(受注製作)です。まずどんなソフトウェアが欲しいのか決めて、必要なら設計書を書いて、実装して、テストして、使えるようにゼロから作ります。2は見込み生産です。開発したものを、無料または有料で誰でもすぐに使えるようにしたものです。Microsoftの「Excel」とか、トレンドマイクロ社の「ウイルスバスター」とか店頭に並んでいるのを見たことがある人も多いのではないでしょうか?
この2つ目の方法で手に入るソフトウェアが、パッケージソフトウェアです。リアル店舗でROMを購入する方法もありますが、最近はウェブサイトからダウンロードしてきたり、パッケージ管理システム(パッケージマネージャ)からインストールしたりする方が一般的ですね。
Linux関係では「パッケージ」と略されることも多いので、一見ソフトウェアのことだとわかりにくいのですが、「あ、要するに既製品のアプリケーションソフトウェアのことね」と思っていただければOKです。もっと詳しくはわわわIT用語辞典「パッケージソフト」をどうぞ。
パッケージ(Python)
モジュール(.pyファイル)をいくつか集めてまとめたもの。こちらは、ソフトウェアとは呼べないかもしれません。プログラムの集まり、と言った方が適切です。パッケージソフトウェアとの違いは、文脈で判断するしかありません。
【Python】モジュールとパッケージとライブラリの違いを1分で
プラグイン・アドオン・アドイン
ソフトウェアの一種。どれもアプリケーションソフトウェアの機能を拡張するソフトウェアのこと。もしくは、「機能を拡張できる」という機能そのものを指す場合もあります。プラグインは後者の意味では使わないとか、「拡張」と「追加」を使い分けて解説しているサイトもあるみたいですが、そんな細かい使い分けが必要な状況に私はまだなったことがないので、最初はざっくり上記の理解で問題ありません。詳しくはわわわIT用語辞典「プラグイン」をどうぞ。
Google Chromeの拡張機能も、これの一種です。私は、このブログを書いているWordpressを触ったときに初めてプラグインと出会いました。
機能としては、パッチと似てますね。どちらも既存のソフトウェアありきでそれに加えて使用するソフトウェアです。パッチとプラグインの違いは、
- パッチはプログラム。元のソフトウェアの一部を改造することによって、中のプログラムの修正や機能追加を行う。
- プラグインはソフトウェア。元のソフトウェアに改造を加えることなく、新しく機能を追加する。
という使い分けが一般的のようです。確かに、パッチを当てて、その後にパッチを当てる前の状態に戻すという話は聞いたことありません(私の経験不足ゆえかもしれませんが)。それは、パッチを当てる=元のソフトウェアの中身を改造してしまっているので、元に戻すのは容易ではないのでしょう。逆に、プラグインは、試しに機能を追加してみて「やっぱやーめた」がやりやすい印象です。
ミドルウェア
ソフトウェアの一種です。ソフトウェアのうち、アプリケーションソフトウェアとOSの中間に存在するソフトウェアを指します。あくまでOS上で動くソフトウェアなので、アプリケーションソフトウェアの一種とも言え、両者は明確に分類できるものではないようです。アプリケーションソフトウェアの中でも、別のアプリケーションソフトウェアを動かすために必要なもの、というくらいの認識の方が理解しやすいでしょう。一般ユーザーとして直接利用することはないんだけど、別のソフトウェアを利用するために必要、そんなソフトウェアです。詳しくはわわわIT用語辞典「ミドルウェア」をどうぞ。
例としては、ApacheやNginxなどのWebサーバーソフト、OracleやMySQLなどのDBMS(データベースマネジメントシステム)などがミドルウェアとして代表的です。これらのソフトをエンドユーザーが直接触ることはないですが、エンドユーザーが直接触るwebサービスは、これらのソフトなしには成立しないのです。こちらはミドルウェアの例が載っていて説明も丁寧:ミドルウェアとは?定義、意味、特徴を初心者向けにわかりやすく解説
ファームウェア
ソフトウェアの一種です。ソフトウェアの一種ですが、ハードウェアに組み込まれており、ハードウェアを動かすためのソフトウェアがファームウェアです。ほぼハードウェアの一部であると言ってもいいでしょう。あくまでソフトウェアなのですが、その性質上、ソフトウェアの分類に含まれず、ハードウェアの一部扱いされることも多いということです。
例えば、パソコンのファームウェアはBIOS(Basic Input Output System バイオス)と言います。非エンジニアでも、パソコンがトラブった時に見たことがある人もいるかもしれませんね。かの有名なホラーゲーム「バイオ◯ザード」とは全く関係ありません笑。詳しくはわわわIT用語辞典「ファームウェア」をどうぞ。
デバイスドライバ
ソフトウェアの一種です。マウスやモニターなどのデバイスを動かすために必要なソフトウェアがデバイスドライバです。現代のパソコンには、OSと同様、たいてい最初から入っていますから、普段意識することはないでしょう。マウスとかUSBに指すだけで使えますよね。あれは、予めデバイスドライバが内蔵されているおかげなのです。詳しくはわわわIT用語辞典「デバイスドライバ」をどうぞ。
D. ライブラリ的なもの
プログラムやソフトウェアを集めて、提供できる形にしているものを、「ライブラリ的なもの」としてまとめました。厳密に言うとどれも役割が異なるので、この分類はあくまでざっくりで。
ライブラリ
ライブラリ(library)は直訳で「図書館」。転じて、プログラムを集めたもの。もう少し正確には、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたもの。あくまでプログラムの「集まり」なので、ライブラリ単独では機能しません。ライブラリから呼び出したプログラムも単独では機能しないことが多いですが、何かやりたい処理を代わりにやってくれるプログラムを提供してくれます。詳しくはわわわIT用語辞典「ライブラリ」をどうぞ。
「ライブラリをインポート」などという表現を使うのでモジュールなどのプログラムとの区別が一見つきにくいのですが、「プログラムが複数集まっていて、どれでも好きなものを使える状態」をインポートするのだという感覚を持っておけば、混同することはないでしょう。
ランタイム(=ランタイムライブラリ)
ランタイム(runtime)は直訳で「実行時」。転じて、プログラムなどを動かすときに必要なプログラムのことです。これもいわゆる「ライブラリ」ですので、プログラムの集まりなんだなと思っていただければ大丈夫です。
ただ、厄介なことに、「ランタイムモジュール」とか「ランタイムパッケージ」と言ったりする場合もあるみたいですね。その時は、要するに動かすのに必要な「モジュール」や「パッケージ」なんだな、と思ってください。この記事の大枠が頭に入っていれば、臨機応変に判断できるはずです。
リポジトリ(パッケージ管理システム)
リポジトリ(repository)は直訳で「貯蔵庫」や「資源のありか」。「レポジトリ」と表記していることもあります。
パッケージ管理システム関連で「リポジトリ」が出てきたら、それはインストール可能なパッケージソフトウェアの集まりです。無数のパッケージソフトウェアが集まっているそのリポジトリから、必要なパッケージソフトウェアをインストールすることができます。リポジトリは各社が提供しており、提供しているパッケージソフトウェアのラインナップが微妙に異なります。
詳しくはこの記事の中で解説していますのでご参照ください。
リポジトリ(バージョン管理システム)
ちょっとややこしいですが、パッケージ管理システムとバージョン管理システムは異なります(え、当たり前って?)。バージョン管理システムにおける「リポジトリ」では、ソースコードのファイルやその変更履歴などプロジェクトに関する情報を「保管」しておく場所です。なので、実態としては「データの集まり」です。データを入れておく「箱」をイメージしていただいても相違ありません。
バージョン管理システムとは、その名のとおり、ソースコードの「バージョン」を管理してくれるシステムです。「この変更やめたいからやっぱりこっちのバージョンに戻して!」とかができます。GitHubやGitLabが有名ですね。私はGitしか使ったことありませんが、他にもたくさんあるみたいです。
IT用語まとめ
まとめると、
- バイナリは、データの一種
- データの集まりがプログラム(=コンピュータへ指示できる)
- モジュールやコンポーネントはプログラムの一種
- データやプログラムの集まりがソフトウェア(=完成品。単体で役に立つ)
- OSやアプリ、パッケージはソフトウェアの一種
- プログラムやソフトウェアの集まりがライブラリやリポジトリ
って感じですかね。厳密に言うと違うよ〜ってところはあるかもしれませんが、駆け出しエンジニアが技術ブログやドキュメントに書いてあることを理解するためには、上記認識で十分と思います。細かいところは、必要になったらおいおい詰めていく感じで。
かなり外部サイトに頼った記事になりました。特にわわわIT用語辞典には大変お世話になりました。「ざっくり知る」というコンセプトがこの記事にぴったりだったんですよね。ありがとうございました。引き続きよろしくお願いします。
この記事が、IT用語がこんがらがっている人の助けになれば嬉しいです。
最後まで読んでくださってありがとうございました!
コメント