ソフトウェア
ソフトウェア(英: Software)は、コンピュータシステム上で何らかの作業を行うプログラム群、プロシージャ群、それらに関する文書を指す用語である。物理的装置であるハードウェアと対比させて言うときに使う。プログラムとほぼ同義だが範囲は更に広い。日本語では略して「ソフト」とも呼ばれる。
ソフトウェアには、ワープロソフトのように生産的な仕事を行うためのアプリケーションソフトウェア、アプリケーションソフトウェアに必要なサービスを提供するハードウェアとのインタフェースとなるオペレーティングシステムのようなシステムソフトウェア、分散システムを制御・管理するミドルウェアなどがある。
語用論
日本では、ハードウェアと対比する用法が転じ、映像や音楽等のコンテンツ(映画、ドラマなどの作品をビデオテープやDVDなどの記録メディアに収録したもの)もソフトウェアと呼ぶ。類似の用法は欧米にもある。
ある機能をもつソフトウェアに対して、「ソフトウェア」という言葉が接頭辞・形容詞的に用いられることがある。エンコードをするソフトウェアを「ソフトウェアエンコーダ」、DVDを再生するソフトウェアを「ソフトウェアDVDプレーヤー」と呼ぶことがある。情報を処理する(DVD再生の場合、DVDに収録されたデジタル画像データを可視化する)際に、当該情報専門の単体のハードウェア(DVD再生機・録再機)で処理されるか、汎用コンピュータ(PC等)用のソフトウェアで処理されるかを区別するためである。
コンピュータハードウェアとの関係
ソフトウェアは、物理的なハードウェアと対比した言葉であり、LSIなどの電子回路そのものは、コンピュータに処理をさせる手順を記述していても、物理的な物であるのでソフトウェアとは呼ばない。ハードウェアでありソフトウェアでもある中間的な存在として、ファームウェアがある。コンピュータにおいて、ソフトウェアはRAMにロードされ、CPUで実行される。最も低いレベルでは、ソフトウェアは特定のプロセッサに固有の機械語で構成されている。機械語はプロセッサへの命令となる2進数の値から構成されていて、それによってコンピュータの状態を次々と変化させる。従ってソフトウェアは、コンピュータハードウェアの状態を変化させる命令列である。通常、機械語よりも人間が使いやすい高級言語で書かれる。高級言語はコンパイラかインタプリタによって機械語のコードに変換される。他にも機械語とほぼ一対一に対応したアセンブリ言語があり、アセンブリ言語で書かれたソフトウェアはアセンブラによって機械語に変換される。
ほとんどのコンピュータは、オペレーティングシステム(OS)と呼ばれる特別なソフトウェアプログラムでリアルタイムに機械(ハードウェア)が制御される。ソフトウェアの他の形態にはプログラム言語のアセンブラおよびコンパイラ、企業および家庭向けアプリケーションソフトウェア(分類を参照)がある。
1957年にジョン・テューキーがこの意味で「ソフトウェア」という用語を最初に使用した。情報工学およびソフトウェア工学では、ソフトウェアはコンピュータシステム、プログラム、データにより処理される情報全般やあらゆる「機械装置以外のもの」を示す。記憶装置に異なる命令群を読み込んで計算を制御する概念は階差機関の一部としてチャールズ・バベッジが考案した。これがほとんどの近代ソフトウェアの基礎となる理論はアラン・チューリングの1935年の論文 Computable numbers with an application to the Entscheidungsproblem で初めて提唱された。
分類
一般のコンピュータシステムでは、ソフトウェアを3つの階層、システムソフトウェア、プログラミングツール、アプリケーションソフトウェアに分けるが、その境界はあいまいである。
- システムソフトウェア
- ハードウェアやシステムが動作するのを助ける。システムソフトウェアは、システムに使われているハードウェアの詳細(メモリ、通信、プリンタ、リーダー、ディスプレイ、キーボードなど)を抽象化し、アプリケーションが詳細に煩わされないようにすることを目的としている。具体的には以下のようなものがある。
- ファームウェア - Basic Input/Output System (BIOS) など。
- 基本ソフトウェア - オペレーティングシステム(OS)、デバイスドライバ、ウィンドウシステム、ユーティリティソフトウェア、各種サーバ
- ミドルウェア
- プログラミングツール
- プログラマがプログラムを書くのを補助するツール群。統合開発環境 (IDE) はそのようなツールを統合したソフトウェアである。
- テキストエディタ
- コンパイラ、インタプリタ、リンケージエディタ、デバッガ
- アプリケーションソフトウェア
- 特定のタスク(群)を実施するためのソフトウェア。企業活動での利用が大きな部分を占めるが、およそ人間のあらゆる活動には、それに対応したアプリケーションソフトウェアが存在する。
- ファクトリーオートメーション
- ビジネスソフトウェア
- 教育ソフトウェア
- 医療ソフトウェア
- データベース
- パソコンゲーム(ゲーム機のゲームソフトも含む)