基本情報技術者単語帳 - ソフトウェア
OS 【Operating System】
ソフトウェアの種類の一つで、機器の基本的な管理や制御のための機能や、多くのソフトウェアが共通して利用する基本的な機能などを実装した、システム全体を管理するソフトウェア。
CPU(MPU/マイクロプロセッサ)や主記憶装置(メインメモリ)、外部記憶装置(ストレージ)、入出力装置などコンピュータのハードウェア資源の管理、外部の別の装置やネットワークとのデータ通信の制御などが主な役割で、コンピュータに電源が投入されると最初に起動し、電源が落とされるまで動作し続ける。
利用者に対するコンピュータの基本的な操作手段も提供し、入力装置による操作の受け付けや出力装置への情報の提示、OS自体が備える様々な機能の実行、記憶装置内に格納されたプログラムの起動や終了、ストレージに格納されたファイルやディレクトリの操作などを行うことができる。
アプリケーションソフトとの関係
OSの機能を利用し、OSの上で動作するソフトウェアを「アプリケーションソフト」(application software/応用ソフト)という。アプリケーションの開発者は、呼び出し規約(API:Application Programming Interface)に基づいてOSの提供する機能を利用することができ、開発の手間を省き操作性を統一することができる。
また、ハードウェアの仕様の細かな違いはOSが吸収してくれるため、あるOS向けに開発されたアプリケーションは、基本的にはそのOSが動作する他のコンピュータでも使用できる。ただし、CPUの種類が異なるなど根本的な仕様が異なる場合は、同じOSでも機種ごとに調整されたプログラムが必要となる。
OSの種類
OSは動作する機器の種類や目的などに応じていくつかの異なるタイプに分かれる。最も一般的なのはパソコンやサーバなどの汎用コンピュータ向けの汎用OSで、サーバコンピュータの運用に特化した「サーバOS」、利用者が操作する端末での利用を想定した「クライアントOS」などに分かれる。
汎用OS以外にも、デジタル家電や産業機械などに制御用として組み込まれた特定目的の専用コンピュータの制御に特化した「組み込みOS」がある。中でも、乗り物の駆動装置の制御など、リアルタイム性の高い制御プログラムの実行に特化した設計のOSは「リアルタイムOS」と呼ばれる。
パソコン向けのOSとして広く利用されているものには米マイクロソフト(Microsoft)社の「Windows」シリーズや米アップル(Apple)社の「macOS」(旧Mac OS X)シリーズなどがある。サーバ向けのOSとしては「Linux」などのいわゆるUNIX系OSや、サーバ向けWindowsである「Windows Server」シリーズなどがよく知られる。スマートフォンやタブレット端末などのモバイル機器では米グーグル(Google)社の「Android」とApple社の「iOS」(iPad OS/watchOS)が市場を二分する。
システムソフトウェア
電子機器などの基本的な制御や管理を行うためのソフトウェア。機器の種類やメーカーによって何を指すかは異なり、ファームウェアやオペレーティングシステム(OS)、ミドルウェアなど(およびこれらの組み合わせや総称)をこのように呼ぶ。
機器内部の各装置の制御や基本的な機能の提供、利用者が本体の設定変更や起動するプログラムの選択などを行うための基本的な操作画面(ユーザーインターフェース)の提供などを行なうものを指す。
パソコンなど汎用コンピュータ製品ではOSやファームウェアなどの区別をはっきり付けることが多いため、これらをシステムソフトウェアと呼ぶことは稀である。テレビやビデオレコーダー、家庭用ゲーム機など、コンピュータを応用したデジタル機器でよく用いられる呼称である。
一方、システムソフトウェアに利用者があとから追加・導入し、特定の目的のために使用するソフトウェアを「アプリケーションソフトウェア」(application software)「アプリケーションプログラム」(application program)などという。
UNIX 【ユニックス】
1969年にAT&T社ベル研究所(当時)で開発が始まったオペレーティングシステム(OS)。また、その流れを汲むOSの総称。
現代では「UNIX」という名称の商標権は業界団体のThe Open Group(オープングループ)が保有しており、同団体の策定した共通仕様「Single UNIX Specification」を満たすと認定されたOSのことをUNIXという。正式にUNIX認証を得ているOSのほとんどは企業が製品として開発・販売しているもので、これを「商用UNIX」と呼ぶことがある。
これ以外に、UNIX風の仕様や操作感、振る舞いのOSが数多くあり、それらを「UNIX系OS」(UNIX-like OS)と呼ぶ。Linuxなど有力なUNIX系OSの多くはオープンソースソフトウェアとして公開されており、誰でも自由に開発に参加したり、入手、使用、改変、再配布などができる。広義には、正規のUNIXシステムとUNIX系OSすべてを含む総称としてUNIXという語を用いることもある。
特徴
UNIXは当初から、異なる機種間の移植性や、複数のプログラムを並行して動作させられるマルチタスク、複数の利用者が一つのシステムを利用できるマルチユーザーなどの特徴を重視して開発されてきた。
基本の操作体系は利用者が文字による指示(コマンド)を打ち込んでプログラムを実行し、実行結果を画面に表示する対話的なCLI(コマンドラインインターフェース)である。パイプやシェルスクリプトなどの連携機能によって単機能のプログラムを組み合わせて複雑な処理をさせる手法が定着しており、巨大な多機能プログラムを開発する手法と対比して「UNIX哲学」と呼ばれる。
初期のUNIXは特定機種向けのアセンブリ言語で開発されていたが、移植性と開発効率を高めるために高水準プログラミング言語の「C言語」が考案され、UNIX本体および対応ソフトウェアの開発で標準的に用いられた。CはUNIXの枠を超えて様々なシステムや分野で広く普及し、多くの派生言語を生み出した。
歴史
1960年代末にベル研究所で大型コンピュータ(メインフレーム)向けの大規模OS「Multics」(Multiplexed Information and Computer Services)の開発に携わっていたケン・トンプソン(Kenneth L. Thompson)、デニス・リッチー(Dennis M. Ritchie)、ブライアン・カーニハン(Brian W. Kernighan)らが中心となり、当時ミニコンピュータと呼ばれた小型コンピュータ向けのOSとしてUNIXの開発が始まった。
複雑で巨大なMulticsのアンチテーゼとして軽量で軽快なOSを目指していたことから、接頭辞「Multi-」(多数の)を「Uni-」(単一の)に置き換えた「Unics」(Uniplexed Information and Computing Service)という名称が考案された。理由は不明ながら程なくして「UNIX」という表記に変更され、これが定着した(発音は同じ)。
1970年代、UNIX System VやBSD(Berkeley Software Distribution)といった初期のUNIXは大学や研究機関で主に教育・研究用として広く普及した。1980年代になるとSunOS/SolarisやAIX、HP-UXといった商用UNIXが台頭し、企業や官公庁などの情報システムの分野でメインフレームからシェアを奪って普及した。
1990年代にはLinuxやFreeBSDといったフリー/オープンソースのUNIX系OSの開発が活発になり、普及が始まったインターネット向けのサーバなどを中心に広まっていった。これらは厳密には商標としての「UNIX」は名乗れない派生OSで「UNIXそのもの」とは区別される。
2000年代にはこうしたUNIX系OSが商用UNIXのシェアをも奪って業務システムでも本格的に採用されるようになり、現在ではスーパーコンピュータからパソコン(macOSなど)、スマートフォン(Androidなど)、デジタル家電や産業機械の組み込みシステムに至るまで、幅広い用途で広く普及している。
セキュアOS
アクセス権限の管理を強化し、通常よりセキュリティを高めたOS。通常は強制アクセス制御(MAC:Mandatory Access Contorol)と最小特権の機能を組み込んだものを指す。
強制アクセス制御はどのような対象にも例外なく適用されるアクセス制御機能で、管理者やファイルの所有者など通常は特権的な権限を有する利用者であっても、あらかじめ設定された管理方針から外れた権限の行使は拒否される。
最小特権は管理者や特権的に実行されるOSのプロセスなどに対して細分化された部分的な特権のみを与え、UNIX系OSの「root」ユーザーに与えられているような何でもできる万能の権限を排除した仕組みである。
システムの管理者ユーザーとは別にセキュリティ管理者のアカウントを置くといった実装になっていることが多く、通常使用時の操作や管理は煩雑になるが、外部の攻撃者に管理者のユーザーアカウントが乗っ取られるなどしても限定された操作しかできない。
セキュアOSはOracle社(旧Sun Microsystems社)のSolarisに対するTrusted Solarisのように通常のOS製品の派生商品として開発・提供されるものと、Linuxに対するSELinux(Security-Enhanced Linux)やTOMOYO Linuxのように既存のOSへ追加してセキュアOS化することができる拡張機能として提供されるものがある。
トラステッドOS (trusted OS)
ISO/IEC 15408などの標準規格に基づいて通常のOSとはアクセス制御などの仕組みを変え、セキュリティを強化したOS。軍用システムなど特別に高いセキュリティが要求される場面で用いられる。
ISO/IEC 15408は米国防総省のTCSEC(Trusted Computer System Evaluation Criteria)などを元に策定された国際標準で、「コモンクライテリア」(CC:Common Criteria)と呼ばれる情報技術セキュリティの評価基準を定めている。
一般にトラステッドOSと呼ばれるものはCC内で規定されたセキュリティ機能要件(SFR:Security Functional Requirements)のうち、強制アクセス制御(MAC)や特権制御(通常は最小権限)、すべてのファイルやプロセスなどに専用のラベルを付与して情報の機密度などを設定できる機能などを実装したものを指す。
管理者ユーザーに万能の特権がないなど通常のOSとは仕組みや動作が大きく異なるため、一般的なソフトウェアの多くはそのままでは動作せず、適合するよう改造したり新たに開発したりする必要がある。導入や運用にも専門的な知識が必要で管理も煩雑であるため、軍事用途や機密情報を扱う政府機関のシステムなどで利用されることがほとんどである。
トラステッドOSの概念は1970年代から米軍などが研究してきたが、コモンクライテリアの成立・普及後はCC内に規定される評価保証レベル(EAL:Evaluation Assurance Level)を用いてEAL1からEAL7までの7段階でOS製品を個別に評価するのが一般的となっている。
VM 【Virtual Machine】
コンピュータやCPU(マイクロプロセッサ)の機能を模倣し、まったく同じように振る舞うソフトウェア。また、そのようなソフトウェアによってコンピュータ内に構築された仮想的なコンピュータ。
仮想化技術におけるVM
仮想化技術におけるVMはコンピュータ全体の動作を模したソフトウェアで、その上でオペレーティングシステム(OS)を起動して制御することができる。OSやその上で動作するソフトウェアからはある特定の仕様を持つ物理的なコンピュータであるかのように見える。
VM上でソフトウェア環境を構築することにより、一台の物理的なコンピュータをあたかも複数台あるかのように分割し、それぞれを別の利用者が互いに影響を与えず独立に操作したり、それぞれ別のOSを動作させたりすることができる。また、ある機種向けのOSやソフトウェアを、その機種を模したVMを用意することで別の機種上で動作させることができる。
ただし、VMを動作させることによる処理能力の消費が大きく、物理的なコンピュータをそのまま使う場合よりも性能が大きく制約される。また、導入や運用には高度な知識や技能が必要なシステムが多く、構造が複雑なためトラブルが発生した場合に対処するのが難しい。
コンピュータのハードウェア資源を管理し、VMを実行するソフトウェアを「ハイパーバイザー」(hypervisor)という。通常はハードウェア上でOSが実行されるが、仮想化環境ではハードウェア上でハイパーバイザーが動作し、ハイパーバイザーが用意した個々のVM上でOSが実行される。
ソフトウェアの実行環境としてのVM
ソフトウェアの実行環境としてのVMは、ある仕様を持つCPUのように振る舞うソフトウェアで、そのプロセッサ向けのプログラムコードを読み込んで実行することができる。
VMに実装されているのは実際には存在しない架空のプロセッサの機械語(マシン語)の命令セットで、その架空の機械語で記述されたプログラムを読み込んで、自らが動作しているコンピュータのCPUが解釈できる実際の機械語プログラム(ネイティブコード)に変換して実行する。
この架空のプロセッサ向けのプログラムを「中間コード」という。命令語が1バイトで構成されるものを特に「バイトコード」と呼ぶ。プログラミング言語で記述されたソースコードは開発者側でコンパイラなどによって一旦中間コードのプログラムに変換されて利用者へ提供され、利用者側のVMで動的に実行可能コードに変換される。
このように中間コードとVMを介在させることにより、開発者側はプログラミング言語から中間コードへのコンパイラが提供されていれば、利用者の機種やOSごとに配布プログラムを用意する必要がなくなる。利用者側はその中間コードのVMが利用できれば、ソフトウェアが自分の機種やOS向けに個別に対応していなくても使用できるようになる。
この仕組みを利用する著名な例として、Java言語の実行環境である「Java仮想マシン」(Java VM)や、.NET共通仕様を満たす様々なプログラミング言語で対応プログラムを開発できる「.NET Framework」「.NET Core」などがある。
カーネル
オペレーティングシステム(OS)の中核となるソフトウェア。動作中のプログラムの実行状態を管理したり、ハードウェア資源を管理してプログラムがハードウェアの機能を利用する手段を提供したりする。
カーネルはコンピュータの起動時にブートローダなどによって一番最初に起動され、特権モードなど強い権限を持つ特別な動作モードで実行される。起動後は電源断や再起動まで常駐し続け、プログラムの起動や終了後の後始末(専有していたメモリ領域の回収など)を行う。
CPUやメインメモリ、ストレージ、入出力機器、ネットワークなど、コンピュータを構成するハードウェア資源(デバイス)を管理する。装置の仕様の違いによらず同じ手順でアプリケーションソフトから利用できるよう抽象化された操作手段を提供する。
また、メモリ空間から各プログラムに必要な容量を割り当てたり(メモリ管理)、複数のプログラムを並行して実行できるようCPUが実行するプログラムを短時間ごとに細かく切り替えたり(プロセス管理)、実行中のプログラム間でデータをやりとりする手段(プロセス間通信)を提供したりする。
カーネルがアプリケーションに提供する機能や、それを利用するために呼び出す命令や関数などのことを「システムコール」(system call)あるいは「スーパーバイザコール」(SVC:supervisor call)などという。
モノリシックカーネルとマイクロカーネル
OSの機能をほとんどカーネル内部に取り込み、巨大な単一のカーネルとして機能させる設計方針を「モノリシックカーネル」(monolithic kernel)、カーネルには最低限の機能しか実装せず、大半の機能をモジュール化して外部化する設計方針を「マイクロカーネル」(microkernel)という。
モノリシックカーネルは全体を緊密に連携でき性能上有利だが、一部の問題がシステム全体を巻き込みやすく安定性を確保するのが難しくなる。マイクロカーネルは外部化されたモジュールと通信するための性能上のロス(オーバーヘッド)が生じるが、問題を局所化しやすく部分的な修正や入れ替えなども行いやすい。
両者の特徴を併せ持ち、全体としてはモノリシックカーネルとして設計されているが、限られた一部の機能をモジュール化してユーザー空間で実行するようにした設計を「ハイブリッドカーネル」(hybrid kernel)という。近年のWindowsやmacOSなどがこれに分類される。
言語プロセッサ
何らかのコンピュータ言語で書かれたデータを読み込んで処理・解釈し、別の言語やデータ構造による表現に変換するソフトウェアの総称。
一般的には、人間が読み書きしやすいプログラミング言語で記述されたソースコードを、機械語(マシン語)などコンピュータが解釈・実行しやすい形式のオブジェクトコードに変換するソフトウェアをこのように呼ぶことが多い。
機械語の語彙と一対一に対応するアセンブリ言語で書かれたプログラムを扱う「アセンブラ」(assembler)、人間に分かりやすい高水準言語で書かれたプログラムを扱う「コンパイラ」(compiler)、高水準言語で書かれたプログラムを機械語に変換しながら同時に実行する「インタプリタ」(interpreter)などが含まれる。
マイクロカーネル
オペレーティングシステム(OS)の中核部分であるカーネル(kernel)の設計様式の一つで、カーネル自体には最低限の機能しか実装せず、OSの機能の多くをモジュールとして独立させたもの。
マイクロカーネルではメモリ上のカーネル空間にメモリ管理やプロセスの実行制御、プロセス間通信(IPC)など必要最低限度の機能しか用意せず、ファイルシステムやデバイスドライバ、ネットワーク通信といったOSの基本的な機能の多くを外部モジュール(部品)としてユーザー空間に展開する。
外部に機能を提供するモジュールはサーバ(server)とも呼ばれ、OS上で実行されるソフトウェアはカーネルではなくサーバに対して必要な機能の呼び出し要求を行う。
機能の大半が部品化され、カーネルや他のモジュールから独立しているため、機能追加や部分的な修正、入れ替えなどが行いやすく、一部の機能に不具合が生じてもシステム全体が巻き込まれにくい。ただし、プログラム間で頻繁にIPCによる通信が発生し、CPUの動作モードの切り替え(カーネルモードとユーザモード)も頻発するためオーバーヘッドが大きく、性能上の制約となる。
これに対し、OSのすべての機能をカーネル内に取り込み、一体的に運用するカーネル設計を「モノリシックカーネル」(monolithic kernel)という。マイクロカーネルが考案される以前のカーネルはすべてモノリシック型であり、現在でもLinuxなど多くのOSがモノリシックカーネルとして設計されている。
近年のWindows(NTカーネル)やmacOS(Mac OS X)のように基本設計としてマイクロカーネル型を採用したOSでも、性能上の問題などから一部の機能をカーネル内に取り込んで高速に実行できるようにするといったモノリシック的な構造が組み込まれる場合があり、「ハイブリッドカーネル」(hybrid kernel)と呼ばれる。
モノリシックカーネル
オペレーティングシステム(OS)の中核部分であるカーネル(kernel)の設計様式の一つで、主要な機能のすべてを同じメモリ空間に置き、一体的に運用するもの。カーネルの機能を最小限に絞り込み、機能の多くをモジュール(部品)として外部化する「マイクロカーネル」(microkernel)の対義語。
モノリシックカーネルではカーネル内にデバイスドライバやファイルシステム、ネットワーク通信などの機能を一通り揃え、メモリ上のカーネル空間にすべてを展開する。OS上で実行されるソフトウェアはカーネルに対して直接、OSの提供する機能の呼び出しを依頼する。
すべてが一体化した設計のため、プログラム間の通信のためのオーバーヘッドなどが少なく性能的には有利だが、カーネル内の機能の一部に異常や不具合が生じるとシステム全体を巻き込んで停止してしまうことがある。
基本設計としてマイクロカーネル型を採用したOSでも、性能上の問題などから一部の機能をカーネル内に取り込んで高速に実行できるようにするといったモノリシック的な構造が組み込まれる場合があり、「ハイブリッドカーネル」(hybrid kernel)と呼ばれる。
マイクロカーネルが考案される以前のOSはすべてモノリシックカーネルであり、現代でもLinuxを始めとする主要なUNIX系OSのほとんどがモノリシックカーネルとして設計されている。WindowsやmacOS(Mac OS X)は旧世紀の製品(Windows 9x/Mac OS)は完全なモノリシックカーネルだったが、マイクロカーネルを基盤とする新世代の設計に移行した。実用上の要請から実際にはカーネルに様々な機能を取り込んでおり、ハイブリッドカーネルの例としてよく挙げられる。
ミドルウェア 【MW】
ソフトウェアの種類の一つで、オペレーティングシステム(OS)とアプリケーションソフトの中間に位置し、様々なソフトウェアから共通して利用される機能を提供するもの。OSが提供する機能よりも分野や用途が限定された、具体的・個別的な機能を提供する場合が多い。
多くのアプリケーションで共通して利用される機能やハードウェアの基本的な制御機能などは、個別に開発するのは非効率であるため、通常はOSの機能として提供され、アプリケーションはOSの機能を利用するだけで済むようになっている。
ただ、そのようなOSの機能はほとんどのアプリケーションが必要とするような極めて基本的・汎用的なものに限られるため、特定の分野でしか使われないが、その分野では必ず必要とされるような機能がミドルウェアとして提供されることが多い。
また、ミドルウェアの中には複数のOSやハードウェアに対応し、OSや機種ごとの差異を吸収する設計となっているものもある。アプリケーション開発者はシステムごとの違いを気にせずに、効率的に開発を進めることができる。
ミドルウェアの種類
どのような機能がミドルウェアとして提供されるかは分野によって大きく異なる。インターネット上のサーバなどではWebサーバやデータベース管理システム(DBMS)、アプリケーションサーバ、データ連携ツールなどが該当する。
業務システムなどでは、こうしたアプリケーションの基盤となる機能だけでなく、自身がアプリケーションとして動作し、システムの運用や管理など行うものをミドルウェアと呼ぶことがある。例えば、バックアップソフト、クラスタソフト、システム監視ツール、運用管理ツールなどである。
組み込みシステムのミドルウェア
産業機械やデジタル家電といった、いわゆる組み込みシステムでは、機器の性能や記憶容量が乏しく、分野や用途によって必要なソフトウェアの機能が大きく異なるため、OS標準の機能が最小限に絞り込まれていることが多い。
このため、パソコンやサーバではOSが提供するような基本的な機能も必要な場合にのみミドルウェアとして組み入れる仕組みになっている場合もある。ファイルシステムやネットワーク通信、グラフィック表示の操作画面(GUI:Graphical User Interface)などの機能である。
ライブラリやモジュールとの違い
汎用的な機能をアプリケーションに提供するソフトウェアには「ライブラリ」(library)や「モジュール」(module)なども存在するが、これらは単体では動作しないプログラム部品として提供され、アプリケーションの一部に組み込まれて一体的に動作する。
一方、DBMSのようなミドルウェアは単体で動作するソフトウェアであり、システム上に常駐して外部から処理依頼を受け付け、結果を送り返す。アプリケーション本体とは独立しており、配布や導入・設定、起動や終了などもアプリケーションとは別に行われるのが一般的である。
カーネルモード 【特権モード】
マイクロプロセッサ(CPU/MPU)の実行モードの一つで、すべての命令を制限なく実行できるモード。オペレーティングシステム(OS)の中核部(カーネル)が動作するモードとして設計・想定されているためこのように呼ばれる。
現代的な設計のプロセッサは複数の動作モードを持っており、すべての機能や命令を無制限に使用できるカーネルモードと、何らかの制約が加えられているユーザーモード(製品によって他の呼称で呼ばれることもある)に分かれている。
カーネルモードはOSのカーネルなどコンピュータの資源やソフトウェアの制御や管理を行うソフトウェアの実行モードで、ハードウェアへの直接アクセスなどユーザーモードでは制限されている動作も行うことができる。アプリケーションソフトなど利用者が直接触れるプログラムのほとんどはユーザーモードで実行される。
ユーザーモード 【非特権モード】
マイクロプロセッサ(CPU/MPU)の実行モードの一つで、一部の機能や命令の使用が制限されたモード。利用者(ユーザー)が操作するアプリケーションソフトなどを動作させるモードとして設計・想定されているためこのように呼ばれる。
現代的な設計のプロセッサは複数の動作モードを持っており、すべての機能や命令を無制限に使用できるカーネルモード(特権モード/スーパーバイザモード)と、何らかの制約が加えられているユーザーモードに分かれている。
ユーザーモードはアプリケーションソフトやミドルウェアなど、主に利用者が直接触れるソフトウェアを動作させるための実行モードである。実行中のプログラムに何らかの瑕疵や問題があっても影響がシステム全体へ波及しないよう、ハードウェアへのアクセスなどコンピュータの制御に関わる重要な機能の利用には制約が課せられている。
一方、オペレーティングシステム(OS)のカーネル(中核部)などは制御のためにコンピュータ全体への無制限のアクセスが必要になるため、カーネルモードで動作する。アプリケーションがハードウェアの機能を利用したい場合などには、システムコールなどを通じてカーネルモードのソフトウェアに処理を依頼する形を取る。
コンパイラ
人間に分かりやすく複雑な機能や構文を持つ高水準プログラミング言語(高級言語)で書かれたコンピュータプログラムを、コンピュータが解釈・実行できる形式に一括して変換するソフトウェア。“compiler” の原義は「翻訳者」。
コンパイラは、プログラミング言語で書かれた「ソースコード」(source code)を読み込んで解析し、コンピュータが直に実行可能な機械語や、それに相当する中間言語などで記述された「オブジェクトコード」(object code)に変換する。この変換工程のことを「コンパイル」(comple)という。
コンパイラが生成したオブジェクトコードはそのままでは実行可能でない場合が多く、リンカなど別のソフトウェアを用いて、起動に必要なコードを追加したり、必要なライブラリなどを結合(リンク)したりして実行可能形式のプログラムとする。コンパイルを含む一連の工程を「ビルド」(build)という。
一方、ソースコードを読み込みながら、逐次的に実行可能コードを生成して実行するソフトウェアを「インタプリタ」(interpreter:「通訳者」の意)という。コンパイルやリンクなどのビルド工程を経ずにソースコードをいきなり実行できるため、スクリプト言語の実行環境としてよく用いられる。
様々なコンパイラ
Javaや.NET言語など、CPUやオペレーティングシステム(OS)の種類に依存しない中間形式でプログラムを配布する言語では、実行時に実行環境固有のコード形式(ネイティブコード)に変換するコンパイラを「JITコンパイラ」(Just-In-Time compiler)あるいは「実行時コンパイラ」という。この方式では、開発時にソースコードから中間形式へ、実行時に中間形式からネイティブコードへ、2段階のコンパイルを行う。
デジタル家電などの組み込みソフトウェアの開発など、開発環境と実行環境が異なる場合、開発環境上で別の環境向けのオブジェクトコードを生成する「クロスコンパイラ」(cross compiler)という。実行プログラムは対象環境に送ってテストや実行を行う。
コンパイラとは逆に、コンパイル済みのオブジェクトコードを解析して元のソースコードに逆変換するソフトウェアを「デコンパイラ」(decompiler)あるいは「逆コンパイラ」という。高水準言語ではソースコードとオブジェクトコードの各要素は一対一に対応しないため、完全な復元は難しい。特に、変数名などのシンボルはコンパイル時に失われるため、オブジェクトコードから取り出すことはできない。
システム運用 【IT operation】
企業などで情報システムが本来の能力を発揮し続けられるよう監視や管理、保守などを継続的に行うこと。システムの開発、導入が完了し、本稼働を開始した後、永続的な業務として行われる。
システムを構成するコンピュータやネットワーク、ソフトウェアなどの状態を常に記録し、異状や障害、不正、およびその徴候が無いかを常に監視する。データの複製保管(バックアップ)やソフトウェアの更新(アップデート)など、定期的に必要な保守作業も行う。
サービスの提供を妨げるシステム障害や外部からの攻撃などの事象が発生した場合には、監視システムや利用者の報告などによる事象の検知、原因究明や被害状況の把握、被害拡大を防止する応急処置の実施、関係者への連絡や調整、原状への復旧や再発防止のための対策などを行う。
また、システムの利用者(従業員)からの問い合わせや要望の受付、トラブル対応、システムに関する利用案内や変更点の告知など、社内の他部門に対する情報システム関連の窓口となるユーザーサポート、サービスデスク(ヘルプデスク)業務も重要である。
運用管理業務は社内の情報システム部門が担当することが多いが、定型的な業務を中心に外部の専門の事業者に委託(アウトソーシング)する場合もある。大企業などで、独自システムの開発を一括してシステムインテグレータ(SIer)などの専門事業者に発注している場合は、同じ事業者に引き続き運用業務を委託する例も多く見られる。
割り込み 【インタラプト】
コンピュータのCPU(中央処理装置)に現在実行中の処理を一時中断させ、強制的に指定された処理を実行させること。また、CPUに伝達されるそのような処理要求。
CPUは周辺機器などから処理要求を受信したり、実行中のプログラムで急を要する処理を行う必要が生じると、現在実行している処理を中断し、用意されたプログラムを実行する。割り込んだ処理が終了すると、再びそれまで実行していた処理を再開する。
このうち、外部の回路や周辺機器などハードウェアが発生させるものを「ハードウェア割り込み」あるいは「外部割り込み」という。割り込みコントローラなどを経由してCPUの専用端子に信号が送られ、実行中の処理を中断して機器の制御に必要な処理などを実行する。
一方、CPUが実行中のプログラム自身が発生させるものを「ソフトウェア割り込み」あるいは「内部割り込み」という。例外的な事象が発生したことをオペレーティングシステム(OS)に伝え、適切な対応を迫る。算術演算でオーバーフロー(桁あふれ)やゼロ除算などが発生したり、書き込み禁止のメモリ領域へ書き込もうとした場合などに起きる。
マルチタスク 【マルチプロセス】
システムなどが、同時に複数のタスク(作業、処理)を並行して実行すること。また、OSがコンピュータやマイクロプロセッサ(CPU/MPU)をそのように運用すること。
マルチプログラミングに対応したOSでは複数のプログラムを同時に実行状態に置くことができ、利用者が操作・表示していないプログラムも処理を進めることができる。利用者は複数のソフトウェアを利用する際にいちいち起動・終了を繰り返す必要がなく、即座に別のソフトウェアに切り替えて中断した操作を再開することができる。
コンピュータ上でのプログラムの実行は、細かく見ると入出力の待ち時間などが発生しており、何もしていない時間に別のプログラムの実行を進めることで計算資源の利用効率を向上させることができる。
CPU(マイクロプロセッサ)あるいはCPU内部のプロセッサコアが一つしか無いシステムでは同時に一つのプログラムしか実行できないが、その場合は処理時間を極めて短い時間ごとに区切って稼働中のプログラムに割り当て、順番に切り替えてプロセッサを使用することで並行して実行させる。この切り替え処理を「コンテキストスイッチ」(context switching)という。
プリエンプティブマルチタスクとノンプリエンプティブマルチタスク
CPUをOSが管理し、処理能力を実行中のプログラムに少しずつ順番に割り当てて実行させる方式を「プリエンプティブマルチタスク」(preemptive multitasking)あるいは「非協調的マルチタスク」、プログラム側が自発的に制御をOSに明け渡すことで実行プログラムの切り替えを行っていく方式を「ノンプリエンプティブマルチタスク」(nonpreemptive multitasking)あるいは「協調的マルチタスク」「擬似マルチタスク」などという。
シングルタスク (ユニタスク)
システムなどが、一度に一つのタスク(作業、処理)のみを実行可能なことをシングルタスク(single-tasking)あるいはユニタスク(unitasking)という。
初期のコンピュータやOSは基本的にシングルタスクで動作していたが、近年では主要なシステムはほとんどマルチタスク動作が可能となっており、複数のソフトウェアなどを同時に起動して動作させることができる。
また、画面表示や操作方式(ユーザインターフェース)の特徴として、起動したソフトウェアが画面全体を占有し、一度に一つのソフトしか表示・操作できない仕組みのことをシングルタスクという場合もある。その際、OSの設計はマルチタスクになっており、利用者から見えない状態(バックグラウンド)で複数のソフトウェアが実行されている場合もある。
ブート 【ブートストラップ】
コンピュータを起動すること。また、コンピュータの電源が投入あるいはリセットされてから、オペレーティングシステム(OS)が操作可能な状態になるまでに実行される一連の工程。
一般的なパソコンなどの場合、電源が入ると自動的にマザーボードの不揮発性メモリ(ROMやフラッシュメモリなど)に記録された「ブートローダ」(bootstrap loader)という小さなプログラムを実行する。これは「1次ブートローダ」とも呼ばれる。
1次ブートローダは起動デバイスに指定されたストレージ装置(内蔵ハードディスクやSSD、光学ディスク、USBメモリなど)の先頭部分の特殊な領域から、OSの起動プログラムである「2次ブートローダ」を読み込んで実行する。
2次ブートローダは設定情報などからOSが記録されているストレージ上の領域(ボリュームやパーティション)を認識し、OS本体の初期化プログラムを読み込んで実行する。マルチブート対応のブートローダの場合、ストレージに複数のOSを保存して起動時に利用者がどれを起動するか選択するようにすることもできる。
1次ブートローダはBIOSやUEFIなどの一部としてあらかじめ組み込まれていることが多いため、単に「ブートローダ」といった場合はOSの導入時などにストレージの先頭領域に登録する2次ブートローダを指すことが多い。
語源
この場合の「ブート」(boot)は「ブートストラップ」(bootstrap)の略で、原義は(靴の)ブーツの上端にある「つまみ革」を意味する。これは、指で摘んで引っ張り上げることで足を靴に滑り込ませる取っ手である。
英語のことわざに “pull oneself up by one's bootstraps” (つまみ革を引っ張って自分を持ち上げる)という表現があり、不可能なことや馬鹿げたことの例えや、人に頼らず自助努力で何とかするという意味合いで用いられる。
コンピュータの起動をブートストラップに例えたのはコンピュータ黎明期の1950年代のことで、由来はこのことわざであるとされるが、その心は「OSは自身を起動することはできない」という矛盾を解決する仕組みを意味するのだとも、「電源スイッチを押せばあとは外部の助けを借りずに自力でOSを起動できる」ことを例えたのだとも言われ、はっきりしない。
ネットワークブート 【ネットブート】
コンピュータの起動時に、構内ネットワーク(LAN)を通じて別のコンピュータからOSイメージを取得して起動すること。
コンピュータ内部には起動用のオペレーティングシステム(OS)を記録したストレージ(ハードディスクやSSDなど)を持たず(あるいはこれを用いず)、ネットワークを通じてサーバからOSのプログラムファイルや設定データなどを取得して起動する。
クライアント側にはサーバと通信するための専用のファームウェアが必要で、米インテル(Intel)社が策定したPXE(Preboot eXecution Environment)と呼ばれる仕様がよく用いられる。PXEによる起動は「PXEブート」とも言う。
一方、電源がオフの状態でネットワークを通じて別のコンピュータからの指示を受け、内蔵したOSを起動することを「リモート起動」(remote boot/リモートブート/遠隔起動)という。この場合はOSイメージ自体はやり取りせず、通常の起動プロセスを同じようにコンピュータに組み込まれたものを使う。
NetBoot
macOSの機能の一つで、macOS Serverからの指示でネットワーク上のMacの起動を行うものを「NetBoot」という。
クライアント側のmacOSの起動イメージをサーバから送信するシンクライアントとしての運用が可能なほか、内蔵ストレージに組み込まれたmacOSに遠隔からソフトウェアのインストールを行うといった管理機能も使用できる。
マルチブート
一台のコンピュータに複数のOS(オペレーティングシステム)を導入(インストール)し、起動時に選択できるようにすること。2つのOSを導入する「デュアルブート」が最も一般的。
通常、コンピュータには一つのOSが導入され、電源を投入すると自動的に起動されるが、マルチブート環境ではストレージ(外部記憶装置)を複数台接続するか一台を複数の区画に分割し、それぞれ別のOSをインストールして起動可能にする。一度に一つのOSしか起動することはできず、他のOSへ切り替えるには一旦コンピュータを再起動しなければならない。
OSの起動は「ブートローダ」(boot loader)と呼ばれる特殊なソフトウェアによって行われ、電源投入時あるいはリセット時にブートローダの案内が現れ、どのOSを起動するか選択することができる。複数のOSに対応したブートローダとしてはLinuxで標準的に用いられるGRUB、Windowsに付属するWindows Boot Manager(BOOTMGR)が知られる。
仮想化・エミュレータとの違い
一台のコンピュータで複数のOSを使う手段としては他に、仮想化ソフトやPCエミュレータを導入する方法もある。コンピュータ上にソフトウェアによって仮想的なコンピュータを作り出し、そこにOSを導入・起動する。
ハイパーバイザ型の仮想化であれば同時に複数のOSを起動して並列に動作させることができ、ホストOS型(エミュレータ型)であればOSの操作画面上で他のOSを起動して同時に使用することができる。マルチブートと異なりソフトウェアを介してOSを動作させるため直に起動するより性能が劣化する。
ジョブ管理 【ジョブスケジューリング】
コンピュータシステムに業務に必要なプログラムを登録し、起動スケジュールを指定したり、起動や終了の指示、実行状態の監視などを行うこと。専用の管理システムにより実施することが多い。
「ジョブ」(job)は主に大型汎用機(メインフレーム)系のシステムにおいて用いられる処理単位で、人間側から見て業務上の特定の目的を達成するために、関連する複数の(単一でもよい)プログラムをまとめて連続して実行する一つのかたまりにしたものを指す。
ジョブ管理は業務上の要請に従って必要なプログラムやデータを揃え、オペレーティングシステム(OS)付属のジョブ管理システム(ジョブスケジューラ)や他の専門的なシステムに登録する。実行するプログラム名やその所在、実行時の設定などを管理画面上の操作で指定するか、専用の「ジョブ制御言語」などで設定ファイルとして記述する。
一定期間ごとなど何らか条件に基づいて自動的に特定のジョブを起動する処理方式を特に「バッチ処理」という。複数のジョブを結び付けて実行順を指定したり、条件分岐などを含む複雑な実行条件を指定した「ジョブネット」などの単位で管理することができるシステムもある。
メインフレームではOS標準の機能としてジョブ管理のためのシステムが付属しており、これを用いることが多い。LinuxなどのUNIX系OSではatコマンドやcron、anacronなどのツールを、Windowsでは標準のタスクスケジューラを用いることが多い。「Hinemos」や「A-AUTO」「JP1/AJS」などの運用管理ソフトウェアを導入してジョブ管理を行うこともある。
ジョブ
仕事、職、任務などの意味を持つ英単語。ITの分野では、職という意味のほか、情報システムなどで人間がコンピュータに与える仕事の実行単位のことを指すことがある。
主に大型汎用機(メインフレーム)系のシステムにおいて用いられる概念で、人間側から見て業務上の特定の目的を達成するために、関連する複数の(単一でもよい)プログラムをまとめて連続して実行する一つのかたまりにしたものを指す。
ジョブには実行するプログラム名やその所在、実行時の設定などがジョブ制御言語(Job Control Language)によって記述され、ジョブ管理システムやジョブスケジューラによって実行制御が行われる。一定期間ごとなど何らか条件に基づいて自動的に特定のジョブを起動する処理方式を特に「バッチ処理」という。
単純なジョブは単に実行するプログラムが順に列挙されているだけだが、複雑なジョブはそれ自体が一種の簡易なプログラムのようになっており、前後のプログラム間でデータを受け渡したり、実行結果を受けて条件分岐や途中終了などを行うといった制御を行う場合もある。
UNIX系OSでは同様の機能をシェルスクリプトが担うことが多く、Windowsではバッチファイル(.batファイル)やWindows Scripting Host(WSH)、PowerShellスクリプトなどが似たような機能を提供する。これらの機能を用いて記述した実行単位のこともジョブという場合がある。
タスクスケジューラ 【ジョブスケジューラ】
コンピュータプログラムの実行制御システムの一つで、利用者が指定したスケジュールや条件に基づいてプログラムの起動や終了を行い、実行状態や実行結果を記録して報告するもの。
オペレーティングシステム(OS)上での特定のコマンドや実行ファイルの起動や終了などをスケジュールに基づいて自動実行するシステムで、再起動やシャットダウンなどシステム自身に対する操作を行うこともできる。
一般的な使用法では、実行するコマンドやプログラムを指定し、起動する時刻、頻度や周期などを指定する。システムが指定日時になるとスケジューラがプログラムを自動的に実行する。システムの起動時や終了時、ログイン時など特定のタイミングを指定できる場合もある。
LinuxなどのUNIX系OSではcron(crontabコマンド)やatコマンド(一回限り)がよく知られている。メインフレーム系のシステムでは業務システムのバッチ処理などを実現するため、複数のジョブ間の前後関係の指定や結果に基づく条件分岐、失敗時の処理の指定など高度な実行制御機能を持つ「ジョブ管理システム」が用いられることが多い。
Windowsタスクスケジューラ
Windowsでは標準機能の一つとして「タスクスケジューラ」が内蔵されている。専用のウィンドウで案内に従ってタスクの作成や管理を行うことができる。
利用者がコンピュータに自動実行させたい操作を「タスク」として登録すると、スケジュールや条件に従って所定のタイミングで自動的に起動してくれる。タスクには実行するプログラムファイルや引数、起動時のカレントディレクトリ、実行するスケジュールや条件を指定することができる。
スケジュールは頻度を毎日や毎週、毎月、一定日数ごとで指定でき、開始時刻(一回きりの場合は日付も)を指定する。スケジュールではなく、コンピュータの起動時や利用者のログオン時、特定イベント発生時などのタイミングを指定することもできる。
単体のプログラムの起動やコマンド実行などの場合は実行ファイルを指定すればよいが、複数のプログラムやコマンドを連続して実行したい場合は、バッチファイル(.batファイル)やPowerShellスクリプト(.ps1ファイル)などを作成して作業内容を記入し、これを起動するように指定すればよい。
バッチ処理 【一括処理】
複数のプログラムからなる作業において、あらかじめ一連の手順を登録しておき、まとめて連続的に実行する方式。または、一定期間や一定量ごとにデータをまとめて一括して処理する方式。
利用者は起動するプログラムやパラメータ、使用するデータファイルなどを指定したバッチジョブを作成し、システムのジョブスケジューラに起動日時や起動間隔などを登録する。システムは指定された日時や間隔に従ってジョブを起動し、指定されたプログラムを順番に実行する。
企業における受発注データの集計処理など、一定期間のデータを集めて処理する必要がある場合によく利用される。金融機関などでは利用者のいない夜間にコンピュータシステムでバッチ処理を行い、まとめて入出金・送金処理などを執行する場合もある。
“batch” は一束、一回分、ひとまとまりといった意味で、コンピュータが開発された初期の1950~60年代に、処理するプログラムやデータを記録した紙製の用具(パンチカードなど)をまとめてオペレータに渡し、集中的に処理したことが由来とされる。
一方、利用者が端末を操作して起動するプログラムを逐次入力していく処理方式をインタラクティブ処理(対話処理)あるいはリアルタイム処理(実時間処理)という。
リモートバッチ処理 (遠隔バッチ処理)
バッチ処理のうち、支店などで入力したデータを通信回線などを通じて遠隔地のホストコンピュータに送り、定期的にまとめて処理する方式をリモートバッチあるいは遠隔バッチなどという。
一定期間ごとにまとめてデータを処理するバッチ処理の方式の一つで、業務を遂行する現場にある端末やコンピュータから、本社や計算センターなどに設置したホストコンピュータにデータを送信し、バッチ処理を実施、送信元に処理結果を送り返す。
タスク
仕事、課業、職務、任務などの意味を持つ英単語。ビジネス用語として業務を構成する個々の作業や工程などを表すほか、コンピュータの分野ではソフトウェアの実行単位のことをタスクということがある。
ソフトウェアについてタスクという場合、分野や製品などによっていくつかの用法があり統一された厳格な定義などはない。よく知られる用法としては、メインメモリ上に展開され実行状態にあるプログラムのことを指すもので、「プロセス」(process)とほぼ同義である。
複数のプロセスを同時並行に実行できるOSの機能や構造を「マルチタスク」(multitasking)、そのような機能がなく同時に一つのプロセスしか実行できないことを「シングルタスク」(single-tasking)という。
また、一つのプログラムが並行する複数の処理の流れを同時に実行する場合に、その一つ一つの連続した命令の流れのことをタスクということがあり、こちらは「スレッド」(thread)とほぼ同義となる。
Windowsのタスクスケジューラのように、ある目的のために順番に連続して実行されるひとまとまりのプログラムやコマンドの集合のことをタスクということがあるが、これはWindows以外では一般に「ジョブ」(job)と呼ばれることが多い。
スレッド
撚り糸、筋、脈絡などの意味を持つ英単語。ITの分野では、コンピュータが連続して実行する命令の列など、一筋の連続した流れになっているものを比喩的に表す。
並行処理のスレッド
ソフトウェアの分野では、並行処理に対応したマイクロプロセッサ(CPU/MPU)およびオペレーティングシステム(OS)におけるプログラムの最小の実行単位をスレッドという。
連続して実行される一本の命令の並び、処理の流れのことで、並行処理を行わない場合は一つの実行プログラム(プロセス)は一つのスレッド(シングルスレッド)で命令を順に実行していく。
並行処理が可能な環境では一つのプログラムが複数のスレッドを持つことができ、それぞれが独立にプログラム中の異なる箇所を並行して実行していくことができる。このような実行方式を「マルチスレッド」(multithreading)という。
一方、オペレーティングシステム(OS)上で複数の異なるプログラムを並行して実行できることは「マルチタスク」「マルチプロセス」等と呼んで区別する。
SNSなどのスレッド表示
インターネットの分野では、一つの話題に属する複数の発言や記事を一つの流れとしてグループ化したものをスレッドと呼ぶことがある。隠語的に「スレ」と略して呼ぶこともある。
SNS(ソーシャルネットワークサービス)や電子掲示板(BBS)、メーリングリストなどで、様々な利用者が様々な話題について発言する場合、規模が大きくなってくると誰が誰に返答しているのか、どの話題についての発言なのかが分かりにくくなってくる。
このような場合に、スレッド表示に対応したシステムでは、関連する一連の発言をひとかたまりのスレッドとして管理し、スレッドごとに分けて表示したり、スレッドを指定して書き込んだりできるようにしている。
利用者は個々の発言がどの流れに属するものかすぐに判別でき、関心のある話題だけを閲覧することができる。発言時も自分の書き込みがどの発言や話題に対する応答かを簡単に明示することができ、効率的にコミュニケーションを進めることができる。
ディスパッチャ
発送係、(警察などの)通信指令係、(交通システムの)運行管理者などの意味を持つ英単語。ITの分野では、処理待ちのデータやプロセスに対して必要な資源の振り分けや割り当て、適切な受け入れ先への引き渡しを行うプログラムなどを指すことが多い。
ソフトウェアの構造や機能の一つで、外部からデータやメッセージ、処理要求などを受け取り、その内容などを元に適切なプログラムを選択して振り分けるものをディスパッチャという。
OSのディスパッチャ
オペレーティングシステム(OS)では、マイクロプロセッサ(CPU/MPU)が実行するプログラムを短い時間ごとに次々に切り替えるものをプロセスディスパッチャと呼び、単に略してディスパッチャとも呼ばれる。
CPUの実行時間を極めて短い時間ごとに分割し、ディスパッチャが実行中の各プログラムに少しずつ割り当てる。CPUを短時間ごとに切り替えて使用することで、CPUが一つしかなくても同時に複数のプログラムを実行状態において並行に実行することができる。
サーバのディスパッチャ
大規模なサーバシステムで、クライアントからの接続要求や処理依頼を受け付け、空いているサーバを見つけて処理を振り分けるシステムをディスパッチャということがある。この意味ではロードバランサ(load balancer:負荷分散装置)という名称の方が一般的である。
プロセス
処理、加工、過程、進行、経過などの意味を持つ英単語。日本語の外来語としては物事が進んでいく過程、手続きや業務などを構成する工程や段階などを指すことが多い。
プログラム実行単位のプロセス
コンピュータの分野では、動作中のプログラムをプロセスという。あるプログラムがメインメモリ上に展開され、CPUで実行されている状態を指す。あるプログラムの実行中に同じプログラムをもう一度起動すると、それらは別のプロセスとして管理される。
プログラムを構成する命令列(コード)だけでなく、コードやデータを置くためのメモリ領域、変数などの内部状態、CPUの実行状態(コンテキスト)、セキュリティ属性などの組み合わせである。オペレーティングシステム(OS)などからは固有の識別子(プロセスID)で区別される。
プロセスの管理
プロセスをOSの機能の一部として実行される「システムプロセス」と、利用者の指示および権限のもとで実行される「ユーザープロセス」に分類することがある。プロセスは必要に応じて別のプロセスを起動することができ、起動した側を「親プロセス」、された側を「子プロセス」という。
現代的なCPUやOSは「マルチタスク」に対応し、複数のプロセスを同時に実行状態に置くことができる。一つのCPUしか無いコンピュータでも、OSがCPUの実行時間を極めて短く区切って高速でプロセスを切り替える「コンテキストスイッチ」を行うことにより、複数のプロセスを並行して実行することができる。
マルチタスクOSの多くは、プロセスの内部に独立した複数の処理の流れを作り出す「マルチスレッド」(multithread)にも対応しており、プロセス内の一つ一つの処理の流れを「スレッド」(thread)という。プロセスやスレッドのことを「タスク」(task)と呼ぶ場合もある。
半導体製造プロセス
半導体の分野では、IC(集積回路)チップの製造工程のことをプロセスと呼び、チップ内部の微細な回路の線幅のことを「プロセスルール」というが、線幅のことを指してプロセスということがある。この値が小さいほど集積度が高く、同じ面積に多数の素子や配線を配置することができるため、機能や性能が優れている。
例えば、「7nmプロセスで製造されたCPU」といった場合、線幅7ナノメートルに調整された製造装置および製造工程で製造されたCPUという意味になる。初期のICチップはマイクロメートル(μm)単位だったが、近年では1メートルの10億分の1を表すナノメートル(nm)で表されるようになっている。
スレッド
撚り糸、筋、脈絡などの意味を持つ英単語。ITの分野では、コンピュータが連続して実行する命令の列など、一筋の連続した流れになっているものを比喩的に表す。
並行処理のスレッド
ソフトウェアの分野では、並行処理に対応したマイクロプロセッサ(CPU/MPU)およびオペレーティングシステム(OS)におけるプログラムの最小の実行単位をスレッドという。
連続して実行される一本の命令の並び、処理の流れのことで、並行処理を行わない場合は一つの実行プログラム(プロセス)は一つのスレッド(シングルスレッド)で命令を順に実行していく。
並行処理が可能な環境では一つのプログラムが複数のスレッドを持つことができ、それぞれが独立にプログラム中の異なる箇所を並行して実行していくことができる。このような実行方式を「マルチスレッド」(multithreading)という。
一方、オペレーティングシステム(OS)上で複数の異なるプログラムを並行して実行できることは「マルチタスク」「マルチプロセス」等と呼んで区別する。
SNSなどのスレッド表示
インターネットの分野では、一つの話題に属する複数の発言や記事を一つの流れとしてグループ化したものをスレッドと呼ぶことがある。隠語的に「スレ」と略して呼ぶこともある。
SNS(ソーシャルネットワークサービス)や電子掲示板(BBS)、メーリングリストなどで、様々な利用者が様々な話題について発言する場合、規模が大きくなってくると誰が誰に返答しているのか、どの話題についての発言なのかが分かりにくくなってくる。
このような場合に、スレッド表示に対応したシステムでは、関連する一連の発言をひとかたまりのスレッドとして管理し、スレッドごとに分けて表示したり、スレッドを指定して書き込んだりできるようにしている。
利用者は個々の発言がどの流れに属するものかすぐに判別でき、関心のある話題だけを閲覧することができる。発言時も自分の書き込みがどの発言や話題に対する応答かを簡単に明示することができ、効率的にコミュニケーションを進めることができる。
マルチタスク 【マルチプロセス】
システムなどが、同時に複数のタスク(作業、処理)を並行して実行すること。また、OSがコンピュータやマイクロプロセッサ(CPU/MPU)をそのように運用すること。
マルチタスクに対応したOSでは複数のプログラムを同時に実行状態に置くことができ、利用者が操作・表示していないプログラムも処理を進めることができる。利用者は複数のソフトウェアを利用する際にいちいち起動・終了を繰り返す必要がなく、即座に別のソフトウェアに切り替えて中断した操作を再開することができる。
コンピュータ上でのプログラムの実行は、細かく見ると入出力の待ち時間などが発生しており、何もしていない時間に別のプログラムの実行を進めることで計算資源の利用効率を向上させることができる。
CPU(マイクロプロセッサ)あるいはCPU内部のプロセッサコアが一つしか無いシステムでは同時に一つのプログラムしか実行できないが、その場合は処理時間を極めて短い時間ごとに区切って稼働中のプログラムに割り当て、順番に切り替えてプロセッサを使用することで並行して実行させる。この切り替え処理を「コンテキストスイッチ」(context switching)という。
プリエンプティブマルチタスクとノンプリエンプティブマルチタスク
CPUをOSが管理し、処理能力を実行中のプログラムに少しずつ順番に割り当てて実行させる方式を「プリエンプティブマルチタスク」(preemptive multitasking)あるいは「非協調的マルチタスク」、プログラム側が自発的に制御をOSに明け渡すことで実行プログラムの切り替えを行っていく方式を「ノンプリエンプティブマルチタスク」(nonpreemptive multitasking)あるいは「協調的マルチタスク」「擬似マルチタスク」などという。
シングルタスク (ユニタスク)
システムなどが、一度に一つのタスク(作業、処理)のみを実行可能なことをシングルタスク(single-tasking)あるいはユニタスク(unitasking)という。
初期のコンピュータやOSは基本的にシングルタスクで動作していたが、近年では主要なシステムはほとんどマルチタスク動作が可能となっており、複数のソフトウェアなどを同時に起動して動作させることができる。
また、画面表示や操作方式(ユーザインターフェース)の特徴として、起動したソフトウェアが画面全体を占有し、一度に一つのソフトしか表示・操作できない仕組みのことをシングルタスクという場合もある。その際、OSの設計はマルチタスクになっており、利用者から見えない状態(バックグラウンド)で複数のソフトウェアが実行されている場合もある。
タスクスケジューリング
オペレーティングシステム(OS)が実行すべきプログラムの選択や切り替えなどを行う処理のこと。通常は並行して実行されている複数のプログラムの間でCPUの実行時間を割り振る短期スケジューリングを指す。
OSがプログラム実行のスケジュールを立て、各プログラムにシステム資源を割り当てたり、剥奪して別のプログラムに切り替えたりする仕組みを指す。広義には、プログラムの起動や終了を制御する長期スケジューリング、仮想記憶のページ入れ替えを制御する中期スケジューリング、CPU実行時間を割り振る短期スケジューリングなどの種類があるが、通常は最後のCPU時間の制御を指すことが多い。
短期スケジューリングはCPUスケジューリングとも呼ばれ、マルチタスクOSに実装されている。同時に実行状態にある複数のプログラム(タスクやプロセスと呼ばれる)に対して、CPUの実行時間を割り当て、実行プログラムを順繰りに切り替えていくことにより、あたかも並列に実行しているかのように制御する。
どのような方針や基準に基づいて割り当てや切り替えを行うかを「スケジューリングアルゴリズム」と呼び、様々な方式が考案されている。基本的な方式として「ラウンドロビン方式」「先着順方式」「優先度準方式」があり、マルチプロセッサやマルチコアプロセッサの場合にはどのプロセッサに割り当てるか(アフィニティ)も加味した方式が用いられる。
先着順方式 (FCFS:First-Come First-Served)
最も単純な方式で、実行待ちプロセスの待ち行列(キュー)を用意し、最初に登録したプロセスから順に実行していく方式である。キューの処理方式を表すFIFO(First-In First-Out)方式とも呼ばれる。切り替えにかかるオーバーヘッドが小さく公平に処理を進められるが、処理の長いプロセスがあると性能が悪化する。
ラウンドロビン方式
CPUの実行時間を均等な長さの「タイムスライス」(タイムクォンタム)に分割し、実行待ちプロセスに対して順繰りに割り当てていく方式である。各プロセスは決まった時間だけCPUを利用すると処理が中断され、処理が終わっていなれければ待ち行列の最後尾に並び直して次回の割り当てを待つ。処理時間を公平に割り当てられるが、タイムスライスが短いとプロセス切り替えが頻繁に生じオーバーヘッドが大きくなる。
優先度順方式
各プロセスに優先度を設定し、優先度の高いプロセスは待ち行列内での順位を他のプロセスより優遇する割り当て方式である。重要な処理を優先的に進めることができるが、単純な実装の場合、高優先度のプロセスが途切れずに処理を行うと低優先度のプロセスがまったく実行されないリソーススタベーションを引き起こすことがあるため、優先度に関わらす最低限の割り当てを行う工夫が求められる。
プリエンプティブマルチタスク 【非協調的マルチタスク】
一つの処理装置(CPU)で並行して複数の処理を進めるマルチタスクで、CPUをOSが管理する方式。OSがCPUの処理能力を実行中のプログラムに少しずつ順番に割り当てて実行させる。
OSはCPUの割り込み機構を利用し、一定時間ごとに実行中のプログラムを強制的に一時停止し、同じように停止させられ待っている他のプログラムの実行を再開する。プログラム側の振る舞いによらずOS側から実行を差し止めて待機させる仕組みのことをプリエンプション(preemption)という。
停止したプログラムは状態を保存して待機し、再び順番が巡ってくると実行を再開する。このような切り替え(コンテキストスイッチ:context switching)を短い周期で繰り返すことにより、あたかも同時に複数のプログラムが実行されているように装うことができる。
OSはCPUの実行時間をあらかじめ決められた短い時間単位に分割してプログラムに割り当てる。これを「タイムスライス」(time slice)と呼び、ハードウェアタイマーなどを利用してマイクロ秒単位で設定したり、CPUのクロック周期の回数ごとに設定したりする。
コンテキストスイッチのたびにプログラムの実行状態の退避や呼び戻しなどの処理が発生するため、タイムスライスが短すぎると切り替えにかかるオーバーヘッドが大きくなり実効性能が落ちることになるが、逆に長過ぎると外部との入出力や状況の変化に即座に追随できなくなり、体感的な性能が落ちることになる。
多くのOSはプログラムの実行状態に優先度を設定することができ、必ずしもすべてのプログラムに平等に実行時間を割り当てるわけではない。OSによる実行順の調整はスケジューリング(scheduling)と呼ばれ、OSのカーネルなどに組み込まれたスケジューラ(scheduler)によって制御される。
一方、OSにプリエンプションの機能がなく、プログラム側が自発的に制御をOSに明け渡すことで実行プログラムの切り替えを行っていく方式を「ノンプリエンプティブマルチタスク」(nonpreemptive multitasking)あるいは「協調的マルチタスク」「擬似マルチタスク」などという。初期のパソコン向けOSなどではこの方式も見られたが、現在ではプリエンプティブ方式が主流となっている。
ノンプリエンプティブマルチタスク 【擬似マルチタスク】
一つの処理装置(CPU)で並行して複数の処理を進めるマルチタスクで、OSがCPUを管理しない方式。
実行中のプログラムが短時間ごとに自発的にOSに制御を返し、CPUの実行状態を並行して稼働している他のプログラムへ切り替える方式である。CPUの実行状態をOSが管理しないため、OSの構造はシンプルで済み、タスク切替時の処理の負荷も小さい。
しかし、OSへ制御を渡す頻度やタイミングは各プログラム任せとなるため、なかなかCPUを明け渡さない「行儀の悪い」プログラムがいると、OSや他のプログラムの処理が滞ってしまう。また、プログラムに不具合が発生し、特定の箇所で無限ループするなどして正しく切り替え処理を行わなくなってしまうと、OSごとシステム全体が停止してしまうという弱点がある。
Windows 3.1など、マルチタスクを実装し始めた初期のOS製品などがこの方式を利用していたが、OSの安定性を強化する必要性やCPUの機能・性能の向上を受け、現在ではOSが強制的にタスク切り替えを実施する「プリエンプティブマルチタスク」(preemptive multitasking)が主流になっている。
タスクスケジューリング
オペレーティングシステム(OS)が実行すべきプログラムの選択や切り替えなどを行う処理のこと。通常は並行して実行されている複数のプログラムの間でCPUの実行時間を割り振る短期スケジューリングを指す。
OSがプログラム実行のスケジュールを立て、各プログラムにシステム資源を割り当てたり、剥奪して別のプログラムに切り替えたりする仕組みを指す。広義には、プログラムの起動や終了を制御する長期スケジューリング、仮想記憶のページ入れ替えを制御する中期スケジューリング、CPU実行時間を割り振る短期スケジューリングなどの種類があるが、通常は最後のCPU時間の制御を指すことが多い。
短期スケジューリングはCPUスケジューリングとも呼ばれ、マルチタスクOSに実装されている。同時に実行状態にある複数のプログラム(タスクやプロセスと呼ばれる)に対して、CPUの実行時間を割り当て、実行プログラムを順繰りに切り替えていくことにより、あたかも並列に実行しているかのように制御する。
どのような方針や基準に基づいて割り当てや切り替えを行うかを「スケジューリングアルゴリズム」と呼び、様々な方式が考案されている。基本的な方式として「ラウンドロビン方式」「先着順方式」「優先度準方式」があり、マルチプロセッサやマルチコアプロセッサの場合にはどのプロセッサに割り当てるか(アフィニティ)も加味した方式が用いられる。
先着順方式 (FCFS:First-Come First-Served)
最も単純な方式で、実行待ちプロセスの待ち行列(キュー)を用意し、最初に登録したプロセスから順に実行していく方式である。キューの処理方式を表すFIFO(First-In First-Out)方式とも呼ばれる。切り替えにかかるオーバーヘッドが小さく公平に処理を進められるが、処理の長いプロセスがあると性能が悪化する。
ラウンドロビン方式
CPUの実行時間を均等な長さの「タイムスライス」(タイムクォンタム)に分割し、実行待ちプロセスに対して順繰りに割り当てていく方式である。各プロセスは決まった時間だけCPUを利用すると処理が中断され、処理が終わっていなれければ待ち行列の最後尾に並び直して次回の割り当てを待つ。処理時間を公平に割り当てられるが、タイムスライスが短いとプロセス切り替えが頻繁に生じオーバーヘッドが大きくなる。
優先度順方式
各プロセスに優先度を設定し、優先度の高いプロセスは待ち行列内での順位を他のプロセスより優遇する割り当て方式である。重要な処理を優先的に進めることができるが、単純な実装の場合、高優先度のプロセスが途切れずに処理を行うと低優先度のプロセスがまったく実行されないリソーススタベーションを引き起こすことがあるため、優先度に関わらす最低限の割り当てを行う工夫が求められる。
ラウンドロビン
総当たり戦、傘連判状、持ち回り、などの意味を持つ英単語。ITの分野では、複数の主体や対象を順繰りに(同じ順序で循環的に)指名したり割り当てたりすることを指す。
例えば、コンピュータのオペレーティングシステム(OS)が複数のプログラムを並行に実行するため、単純に実行待ちのプログラムに順番に、均等にCPUの実行時間を割り当てる方式が用いられることがある。このような割り当て方式をラウンドロビンスケジューリングという。
また、ネットワーク上で同等の機能を提供する複数のサーバ間で負荷分散(ロードバランシング)を行うため、外部からの接続要求を各サーバに順番に割り当てることをラウンドロビン方式という。DNSサーバがIPアドレスの問い合わせへの応答によってこれを行うことを特に「DNSラウンドロビン」という。
語源はフランス語で「リボンの輪」を意味する “ruban rond” で、17世紀フランスの農民が嘆願書に署名する際、首謀者が特定されないよう中心から放射状に名前を書いたことに由来する。英語ではスポーツの大会などで行われる総当たり方式を指すことが多い。
タイムスライス 【タイムクォンタム】
一台のコンピュータを同時に複数の主体で利用できるよう、処理時間を非常に短い時間で均等に分割したもの。
マイクロプロセッサ(CPU/MPU)の使用時間をミリ秒やマイクロ秒単位といった極めて短い時間に分割し、実行中のプログラムに順番に割り当てる。
各プログラムはCPUを占有することはできず性能は低下するものの、先に実行されたプログラムの終了を待つことなく、並行して同時に実行することができる。これは複数人が同時にコンピュータを使いたいときに特に便利である。
古くはメインフレーム(大型汎用機)のタイムシェアリングシステム(TSS:Time Sharing System)などで用いられてきた手法で、現代では多くのオペレーティングシステム(OS)がマルチタスク(multitasking)機能として標準で対応している。
ちなみに、通信において伝送路を複数の通信主体や通信方向(送信・受信/上り・下り)で共有するため、通信時間を短く分割して順に割り当てたものは「タイムスロット」(time slot)という。
映像効果のタイムスライス
映像の特殊効果の一つで、被写体はスローモーションだがカメラワークやカメラアングルは高速で移動・変化するような手法のことをタイムクウォンタムあるいは「バレットタイム」(bullet time)という。
映画の撮影などでは十数台~数十台のカメラを並べて同時に撮影し、少しずつ繋ぎ合わせることでこのような効果を得ることができる。一台でタイムクウォンタム効果を実現する特殊なカメラも開発されている。
画面内の光景をスローモーションでゆっくり動かしながらカメラは通常のシーンと同じような動きにすることができ、劇的な一瞬を切り取りつつ同時に臨場感やスピード感を表現することができる。
ディスパッチ
発送(する)、派遣(する)などの意味を持つ英単語で、ITの分野では同種の複数の対象から一つを選び出したり、データの送信、資源の割り当て、機能の呼び出しなどを表すことが多い。
タスク/プロセスのディスパッチ
マルチタスクやマルチスレッドに対応したOSで、待機状態のタスクやスレッドにCPUの計算時間を割り当て、処理を実行させることをディスパッチという。
マルチタスクに対応したOSでは複数の命令の流れを並行して実行状態におくが、プロセッサ(やプロセッサコア)の数は限られるため、ごく短時間ごとに実行と一時停止を切り替えて順番にプロセッサを利用する。
待ち状態のプロセスの中から優先順位などを見て次に実行すべきプロセスを決め、プロセッサでの実行を許可する動作のことをディスパッチという。逆に、実行状態のプロセスを一旦停止して待機状態に戻す動作はプリエンプション(preemption)という。
チャネル 【チャンネル】
経路、伝送路、周波数帯域、水路、溝、堀、導管、道筋、手段などの意味を持つ英単語。一般の外来語としては「チャンネル」表記が一般的だが、ITの分野では原音に近い「チャネル」表記が好まれることが多い。
テレビのチャンネルのように、情報やデータ、信号などの固定的な伝達・流通経路のことをチャネルということが多い。通信の分野では、信号の伝送経路として用いられる信号線の束や無線電波の周波数帯など物理的な伝送路を指すほか、ソフトウェア間の論理的な伝送経路を表すこともある。
ビジネスの分野では、市場内をモノやお金が流れる経路や手段(流通チャネル、販売チャネル、決済チャネル、資金調達チャネル等)などを表す用法のほか、広告や販売、マーケティングなどにおける顧客へのアプローチ手段の分類を表す用語としてよく用いられる。
物理メモリ 【実メモリ】
コンピュータに装着・内蔵されている、物理的実体としての主記憶装置(メインメモリ/RAM)。また、その記憶容量。全体の容量を指す場合と利用可能な空き容量を指す場合がある。
現代のオペレーティングシステム(OS)の多くは、外部記憶装置(ストレージ)の記憶領域をあたかもメインメモリの一部であるかのように扱うことができる「仮想メモリ」(virtual memory)機能を持っているため、物理的な半導体メモリ装置そのものや、その正味の記憶容量を明示したい時に「実記憶」という表現を用いることが多い。
仮想メモリの仕組み
仮想メモリ技術は実記憶内部の物理的な番地(メモリアドレス)とは独立に、各プログラムに割り当てるメモリ領域のアドレスを決めることができる仕組みで、仮想メモリ上の番地と実記憶上の番地の対応関係をCPUとOSが連携して管理している。
メモリはすべての領域が同じ頻度で利用されるわけではないため、実記憶のうち最後のアクセスから時間が経った領域やアクセス頻度の少ない領域の内容をハードディスクなどのストレージにコピーして消去し、他の用途に使い回すことができる。
ストレージに追い出した領域へのアクセス要求があると、別の使っていない領域を追い出して当該部分を実記憶に書き戻し、読み書き可能な状態にする。この処理はOSが内部的に行うため、プログラムからはストレージで拡張した分だけ実記憶がたくさんあるように見える。
物理メモリと仮想メモリのバランス
実記憶が少ないコンピュータでも、仮想メモリの容量を大きく設定すれば、必要なだけストレージ上に入れ替え用の領域(スワップ領域)を確保して、実行するプログラムに対して見かけ上は広大なメモリ領域を提供することができるようになる。
しかし、実記憶の容量を大きく超える領域が常時使用状態になると、メモリとストレージ間で頻繁に内容の書き出し処理と書き戻し処理が発生する。一般にストレージの読み書きはCPUやメモリの処理に比べ何桁も遅いため、入れ替え処理の増加はコンピュータの性能を極端に低下させる原因となる。終始入れ替え処理をし続けてコンピュータがほとんど応答しなくなる現象を「スラッシング」(thrashing)という。
フラグメンテーション 【断片化】
破片、断片、砕ける、断片化する、などの意味を持つ英単語。ITの分野では、まとまったデータや記憶領域などを小さな単位に分割したり、意図せず小さな断片に分断されてしまうこと(および、そのような状態になったデータや領域自体のこと)などを意味する。
ストレージのフラグメンテーション
ハードディスクなどのストレージ(外部記憶装置)にファイルの書き込み・消去を繰り返していくと、連続した大きな空き領域が次第に少なくなり、新たに記録するファイルが小さな断片に分割されて記録されるようになってしまう。
このような状態のことを「ディスクフラグメンテーション」という。これを解消する操作のことを「ディスクデフラグメンテーション」(disk defragment)あるいは短縮して「ディスクデフラグ」「デフラグ」と呼ぶ。
メモリのフラグメンテーション
長時間コンピュータを起動して様々なプログラムを使用していると、メモリ領域についてにも似たような現象が起きることがあり、これを「メモリフラグメンテーション」という。
固定長の領域を割り当てていくシステムで割り当てられた領域内に未使用の断片が生じることを「内部断片化」、可変長の領域を割り当てていくシステムで空き領域が細かく分割されすぎて連続した大きな領域の割り当てができなくなることを「外部断片化」という。
OSなどがメモリの占有領域の再配置などを行ってメモリの断片化を解消することをデフラグメンテーションあるいは「コンパクション」(compaction/メモリコンパクション)という。
通信におけるフラグメンテーション
ネットワーク通信において、送信したいパケットやフレームのサイズが通信回線や転送方式の制限よりも大きい場合に、これを送信可能なサイズの複数の単位に分割して送信する処理のことをフラグメンテーションという。特に、IPデータグラムの場合は「IPフラグメンテーション」という。
受信側では分割されたすべてのデータの到着を待ち、先頭から順番に連結してもとのデータに組み立てる処理が必要となる。
スワップ
交換(する)という意味の英単語。ITの分野では、OSがメインメモリとストレージの内容を入れ替える動作や、機器に装着された装置の交換、コンピュータプログラムで二つの変数や領域のデータを交換する処理などを指す。
メモリスワップ (memory swapping)
OSのメモリ管理機能の一つで、メインメモリ(RAM)とストレージ(外部記憶装置)の同容量の領域間でデータの交換を行う動作をメモリスワップと呼び、これを略して単にスワッピングという。これにより、物理的なメモリ容量より広いメモリ空間を扱えるようになる。
ストレージ上に一定のスワップ領域(スワップファイルやスワップパーティション)を予約しておき、メモリ容量が逼迫してきたら直近に使われていないメモリ領域の内容をスワップ領域に退避させ、物理メモリ側に空き領域を作り出す。この動作を「スワップアウト」(swap-out)という。
ストレージ上に退避した領域の内容はそのままではプログラムからメモリの一部としてアクセスすることはできないため、必要になったらメモリ上に呼び戻さなければならない。プログラムからの要求を受けてストレージ上の内容をメモリに書き戻す動作を「スワップイン」(swap-in)という。
スワッピング動作はOSのメモリ管理機能の一部として自動的に実行されるため、実行中のプログラムや利用者は普段は特に意識することはない。ただし、物理メモリ容量を使い果たすような大きな領域をプログラムが占有してしまうと、スワッピングが頻発して動作が緩慢になったり不安定になったりすることがある。
スワップイン 【ページイン】
コンピュータのストレージ(外部記憶装置)の一部とメインメモリ(RAM)の延長として利用するメモリスワップ(ページング)において、ストレージ上に退避した内容が必要になり、物理メモリに書き戻す操作のこと。
メモリスワップではストレージ上に一定の領域を予約しておき、メモリ容量が逼迫してきたら直近に使われていないメモリ領域の内容をストレージに退避させ、物理メモリ側に空き領域を作り出す。退避した内容が必要になったら物理メモリに書き戻してアクセスする。
空き領域を確保するためにストレージに書き出した内容へのアクセス要求があり、物理メモリ上に確保した領域に書き戻してアクセス可能にする操作をロールインあるいはページインという。
一方、これとは逆に、物理メモリ上に空き領域を作り出すために、あるメモリ領域の記憶内容をストレージ上のスワップ領域に書き出して抹消する操作を「スワップアウト」(swap-out)あるいは「ページアウト」(page-out)という。
ロールアウト 【ローリングアウト】
公開、公表、投入、運用開始、本格展開、押し出す、伸ばす、起床する、などの意味を持つ英単語。
ITの分野では、完成したシステムの運用を開始することや、サービスを公開することなどを指す場合が多い。既存のシステムやサービスに追加要素を展開・公開することも「新機能をロールアウトする」のように言う場合がある。
リリース、カットオーバー、ローンチ、サービスインなどの類義語よりも、限定的・部分的・試験的に導入・公開していたものを全面的に展開する、といった用例が多く見られる。
スワップアウト
オペレーティングシステム(OS)のメモリ管理において、メモリの空き領域が足りない場合に、すぐに使わない内容をストレージ(外部記憶装置)に書き出してメモリ上から削除する動作のことをロールアウトということがある。一般には同じ意味で「スワップアウト」(swap-out)という語の方がよく使われる。
一方、ストレージに退避した内容が必要になった時に、改めてメモリ上に領域を確保して読み込む動作は「ロールイン」(roll-in)あるいは「スワップイン」(swap-in)という。
スワップイン 【ページイン】
コンピュータのストレージ(外部記憶装置)の一部とメインメモリ(RAM)の延長として利用するメモリスワップ(ページング)において、ストレージ上に退避した内容が必要になり、物理メモリに書き戻す操作のこと。
メモリスワップではストレージ上に一定の領域を予約しておき、メモリ容量が逼迫してきたら直近に使われていないメモリ領域の内容をストレージに退避させ、物理メモリ側に空き領域を作り出す。退避した内容が必要になったら物理メモリに書き戻してアクセスする。
空き領域を確保するためにストレージに書き出した内容へのアクセス要求があり、物理メモリ上に確保した領域に書き戻してアクセス可能にする操作をスワップインあるいはページインという。
一方、これとは逆に、物理メモリ上に空き領域を作り出すために、あるメモリ領域の記憶内容をストレージ上のスワップ領域に書き出して抹消する操作を「スワップアウト」(swap-out)あるいは「ページアウト」(page-out)という。
スワップアウト 【ページアウト】
コンピュータのストレージ(外部記憶装置)の一部とメインメモリ(RAM)の延長として利用するメモリスワップ(ページング)において、あるメモリ領域の内容をストレージに書き出してその領域を開放する動作のこと。
メモリスワップではストレージ上に一定の領域を予約しておき、メモリ容量が逼迫してきたら直近に使われていないメモリ領域の内容をストレージに退避させ、物理メモリ側に空き領域を作り出す。退避した内容が必要になったら物理メモリに書き戻してアクセスする。
物理メモリ上に空き領域を作り出すために、あるメモリ領域の記憶内容をストレージ上のスワップ領域に書き出して抹消する操作をスワップアウトあるいはページアウトという。
どの領域を当面不要と判断してスワップアウトするか決定する手順(アルゴリズム)はいくつかあり、最も古く割り当てた順に選択するFIFO(First-In First-Out)、最後にアクセスされてからの経過時間が長い順(最近使われていない順)に選択するNRU(Not Recently Used)などがよく知られている。
一方、これとは逆に、ストレージ上に退避した内容へのアクセス要求があり、物理メモリ上の領域に書き戻してアクセス可能にする操作のことは「スワップイン」(swap-in)あるいは「ページイン」(page-in)という。
ガベージコレクション 【ガベージコレクタ】
コンピュータプログラムの実行環境などが備える機能の一つで、実行中のプログラムが占有していたメモリ領域のうち不要になったものを自動的に解放し、空き領域として再利用できるようにするもの。そのような処理を実行するプログラムを「ガベージコレクタ」(garbage collector)という。
従来のプログラムでは、実行時に変数や配列、オブジェクトなどのためにメモリ領域を確保した後、プログラム中でこれを解放するコードが明示的に実行されるまでは占有したままとなる。その領域が不要になった後も、開発者がメモリ解放処理を怠るといつまでも塩漬け状態となり、空き領域が逼迫する要因となっていた。
ガーベジコレクションは仮想マシン(VM)などの言語処理系やライブラリの機能として提供され、実行中のプログラムの動作から不要になったと判断した領域を自動的に解放し、再確保できる空き領域に設定する。これにより、確保された領域への参照が失われ再利用不可能になってしまうメモリリークや、領域の二重解放、参照の無効化などを防止することができる。
ただし、プログラムの本来の処理を一旦中断してガーベジコレクションが割り込む形となるため、応答速度などの条件がシビアなシステムではこれが問題となる場合がある。また、不要であると機械的には判断できずなかなか解放できない場合があるほか、解放処理がいつ行われるのか開発者があらかじめ予見することが難しく、解放時に何らかの処理を行いたい場合に困ることがある。
メモリコンパクション
オペレーティングシステム(OS)などが持つメインメモリ(RAM)の管理機能の一つで、空き領域の断片化を解消し、連続した広い空間に再編すること。
プログラムを長時間実行していると、コードやデータの配置と破棄のためにメモリ領域の確保と解放が繰り返され、小さな空き領域が飛び飛びの場所に存在するようになる。これをメモリの断片化(フラグメンテーション)という。
コンパクション処理が実行されると、実行中のプログラムを一時停止して、各領域を移動して隙間なく再配置し、単一の広大な空き領域を作り出す。
ストレージ(外部記憶装置)上で同じようにファイルや空き領域の記録位置を再編し、細かく分断された領域の断片化を解消する処理のことは「デフラグメンテーション」(defragmentation)という。
似た機能に「ガーベジコレクション」(garbage collection)があるが、これは実行中のプログラムが確保済みの領域の中で既に使われておらず不要になったと考えられるものを自動的に解放し、空き領域を増やす処理を指す。
仮想メモリ 【仮想記憶】
オペレーティングシステム(OS)によるメモリ管理の方式の一つで、メモリ領域に物理的なアドレス(番地)とは別に仮想的なアドレスを割り当てて管理する方式。
細切れのメモリ空間を連結して一つの連続した空間として利用したり、ストレージ(外部記憶装置)上にも仮想的なメモリ領域を確保することで、メインメモリ(物理メモリ)の容量を超えてメモリ空間を利用することができる。
物理メモリと仮想メモリの対応付け
OSは物理メモリ上の領域と仮想メモリ上の領域の対応付け(マッピング)を行い、コンピュータ内部のMMU(Memory Management Unit)と呼ばれる制御回路によって相互のアドレスの変換を行う。かつてはMMUが独立したICチップなどとして提供されることもあったが現在ではほとんどの場合マイクロプロセッサ(CPU/MPU)に内蔵されている。
物理メモリ空間でのアドレスを「物理アドレス」(physical address)あるいは「実アドレス」(real address)、仮想メモリ空間内におけるアドレスを「論理アドレス」(logical address)あるいは「仮想アドレス」(virtual address)と呼ぶ。
OS上で動作するプログラム(プロセス)には仮想メモリ領域が割り当てられ、OSを介してメモリにアクセスする。こうすることで物理メモリ上で細切れの領域を集めて一つの大きな仮想メモリ領域を確保することができる。個々のプログラム側でも自ら物理メモリ領域を管理する必要がなくなり、OSから連続したアドレス空間が与えられたように見える。
ストレージ領域の利用
ハードディスクやSSDなどのストレージ装置上に専用の領域(スワップファイル、ページファイル、スワップ領域などと呼ばれる)を設け、仮想アドレスを割り当てることにより、仮想メモリ空間を物理メモリ空間より大きく取ることができる。
ストレージ上の領域に実際にアクセスするには物理メモリ上にその内容を読み込まなければならないため、物理メモリの中で現在使われていない領域との入れ替え(スワップ)がOSによって行われる。
メインメモリの物理容量に対してあまりに大きな仮想メモリを確保すると、このスワップ処理が頻繁に発生するようになり、ついには処理がほとんど進まない状況に陥る「スラッシング」(thrashing)現象が発生することがある。
ページとセグメント
仮想メモリの管理を一定の大きさの領域を単位として行う方式を「ページング方式」、プログラムやデータのまとまりごとに不定長の大きさで管理する方式を「セグメント方式」と呼ぶ。
現代ではほとんどの場合ページング方式が用いられる。ページング方式の仮想記憶では、ページと呼ばれる決まった大きさ(4KBを採用しているシステムが多い)の領域にメモリを分割し、ページごとに仮想メモリ空間と物理メモリ空間の対応付けを管理する。
ページング
仮想記憶(仮想メモリ)の方式の一つで、メモリ領域をページと呼ばれる一定の大きさの領域に分割し、物理的なアドレス(番地)とは別に仮想的なアドレスを割り当てて管理する方式。
細切れのメモリ空間を連結して一つの連続した空間として利用したり、補助記憶装置(ハードディスクなど)上にも仮想的なメモリ領域を確保することで、物理メモリの容量を超えてメモリ空間を利用することができる。ページの大きさはOSやハードウェアによって異なるが、現代では多くのシステムが4KBのページを採用している。
各ページには物理メモリ上での所在地(物理アドレス、実アドレス)とは別に、OSによって仮想メモリ空間上でのアドレス(仮想アドレス、論理アドレス)が与えられ、プログラム(プロセス)へのメモリの割当も仮想メモリ空間上でページ単位で行われる。こうすることで物理メモリ上で細切れの領域を集めて一つの大きな仮想メモリ領域を確保することが可能で、また、プログラムの側で物理メモリを管理する必要がなくなる。
また、ハードディスクやSSDなどのストレージ(外部記憶装置)に専用の領域(ページファイル、スワップファイル、スワップ領域、スワップパーティションなどと呼ばれる)を設け、ここにもページを置くことにより、物理的なメモリ容量よりも大きな仮想メモリ空間を利用することができる。
ストレージ上に置かれたページにアクセスするには物理メモリ上に読み込まなければならないため、物理メモリの中で現在使われていないページとの入れ替え(スワップ)がOSによって随時行われる。
このとき、不要なページをストレージに書き出して物理メモリから消去することを「ページアウト」(page-out)あるいは「スワップアウト」(swap-out)、必要なページをストレージから読み出して物理メモリ上に配置することを「ページイン」(page-in)あるいは「スワップイン」(swap-in)という。
また、プログラムが物理メモリ上に存在しないページにアクセスしようすると、ハードウェアによって「ページフォールト」(page fault)と呼ばれる例外あるいは割り込みが発生し、OSによってスワップが行われる。
ベースアドレス指定 【基底アドレス指定】
CPUが命令を実行する際に処理対象となるデータの所在を指定するアドレス指定方式の一つで、命令のアドレス部の値にベースレジスタ(基底レジスタ)の値を加えたものをデータの存在するアドレスとする方式。アドレス部の値とレジスタの値を足し合わせる「修飾アドレス指定」の一種。
CPUは機械語で記述された命令列をプログラムとして実行するが、命令の中にはメモリ上の特定の位置の内容を読み込んで処理するものがある。その場合、命令のオペランド部(アドレス部)でデータの存在するメモリアドレスを記述するが、その指定方式にはいくつかの種類があり、命令によって対応している方式が異なる。
ベースアドレス方式はデータを取得する実際のメモリアドレス(有効アドレス)として、CPU内部の高速な記憶装置(レジスタ)の一種である「ベースレジスタ」に保存された値と命令のアドレス部の値を足し合わせたものを用いる。
一般に、ベースレジスタにはメモリ上でのプログラムの先頭のアドレスが記録されており、実行時にプログラムがメモリ上のどの位置に配置(ロード)されてもプログラムを改変せずに同じようにデータにアクセスすることができる。
スラッシング
コンピュータが搭載するメインメモリの容量に対して実行中のプログラムが使おうとするメモリ容量が過大なため、メモリとストレージとの間で内容の入れ替え(ページング/スワッピング)が頻繁に起き、処理がなかなか進まない状態のこと。動作が極端に遅くなり、外部からの入出力や操作もほとんど受け付けられない状態に陥る。
現代の一般的なOSでは、物理的なメモリ容量を超えるメモリ領域を扱えるようにするため、ストレージ(外部記憶装置)上に専用の領域を設け、現在使っていないメモリ領域の内容を書き出してメモリ容量を大きく見せる「仮想メモリ」(virtual memory)技術を搭載している。
ストレージ上に退避した内容が必要になると、メモリ上で最近使われていない領域を退避して場所を空け、必要な内容を読み込んでアクセスする。このとき、プログラムが物理メモリの容量に対して極端に大きな領域を確保して作業しようとすると、書き出した内容がすぐまた必要になって読み込まれ、しかし空き領域が逼迫しているためまたすぐ書き出され…という入れ替え動作が極端に頻繁に行われるようになる。この状態をスラッシングという。
以前は身近な性能劣化問題としてよく取り上げられたが、近年ではコンピュータのメインメモリの大容量化やSSDなどストレージの高速化、OSの仮想メモリ管理の効率化などによりあまり発生しなくなってきている。しかし根本的に状況が変化したわけではなく、メモリ搭載容量の少ない機種で大容量のメモリを必要とするソフトウェアを動作させれば依然としてスラッシングは起こり得る。
ページフォールト 【ページフォルト】
ページング方式の仮想記憶(仮想メモリ)において、プログラム(プロセス)がアクセスしようとした仮想メモリ領域(ページ)が物理メモリ上に無く、ストレージに退避していることが分かったときに発生する例外あるいは割り込み処理。
CPU内部などにあり仮想メモリを管理する専用の装置(MMU:Memory Management Unit/メモリ管理ユニット)は、要求されたページが物理メモリ上に存在しない場合にページフォールトをオペレーティングシステム(OS)に通知する。
これを受信したOSは直ちに、物理メモリ上のページから一定の基準(最後にアクセスされてからの経過時間など)で一つを選び、ストレージ上に退避している要求ページと入れ替える処理(スワップ)を行って、プロセスがそのページにアクセスできるようにする。
「フォールト」(fault:障害)という名称になっているが、それ自体はいわゆるエラーや障害ではなく、通常の処理の一種である。ただし、存在しない無効なアドレスへのアクセスや、OSや他のプロセスが管理する領域へのアクセスでも発生することがあり、これらの不正なページフォールトを発生させたプログラムは強制終了させられる。
LRU 【Least Recently Used】
広さの限られた一時的な保管場所が満杯になったとき何を棄てるか決定する基準の一つで、最も過去に使用されたものから順に破棄する方式。IT分野以外でも書類の整理方法などに応用されている。
CPU内部のキャッシュメモリやオペレーティングシステム(OS)の仮想記憶システムでは、高速な記憶装置の限られた記憶容量を使い回して当座の処理に必要なデータを用意しなければならない。
容量を使い切った後で新たに記録しなければならないデータが生じると、一定の計算手順(アルゴリズム)に従って既存のデータを消去したり、より低速・大容量な装置へ追い出す処理(仮想記憶のページアウトなど)を行い、空いた領域を新しいデータに割り当てる。
LRU方式は記録されたデータについて実行中のプログラムから最後にいつ参照されたかを記録しておき、入れ替えが必要になった時点で最後に参照されてから最も時間が経っているものを削除対象とする。逆に、最も最近参照されたものから削除する方式は「MRU」(Most Recently Used)と呼ばれる。
FIFO 【First-In First-Out】
複数の対象を取り扱う順序を表した用語で、最初に入れたものを最初に取り出す(先に入れたものを先に出す)方式のこと。
複数の対象を列を作って待機させ順番に処理する際に、列に入った順番通りに列から取り出すような構造や手順のことを意味する。窓口などで人々が行列に並んで待ち、早く来た順に呼び出されるのと同じ方式である。
コンピュータ上でデータ群を一定の形式やルールで格納するデータ構造のうち、データを一列に並べてFIFOで出し入れするものを「キュー」(queue)という。FIFO方式でデータなどを取り扱うことを「キューイング」(queueing)ということがある。
これに対し、積み上げられた座布団のように、最初に入れたものを最後に出す(先に入れたものを後に出す)方式のことは「LIFO」(Last-In First-Out)「FILO」(First-In Last-Out)、あるいは「先入れ後出し」などという。
プロトコル 【通信規約】
手順、手続き、外交儀礼、議定書、協定などの意味を持つ英単語。IT分野では、複数の主体が滞りなく信号やデータ、情報を相互に伝送できるように定められた約束事や手順である「通信プロトコル」を指すことが多い。他分野や一般の外来語としては「規定の手順」などの意味で用いられることもある。
コンピュータ内部で回路や装置の間で信号を送受信する際や、通信回線やネットワークを介してコンピュータや通信機器がデータを送受信する際に、それぞれの分野で定められた通信プロトコルを用いて通信を行う。英語しか使えない人と日本語しか使えない人では会話ができないように、対応している通信プロトコルが異なると通信することができない。
機器やソフトウェアの開発元が独自に仕様を策定し、自社製品のみで使用されるクローズドな通信プロトコルと、業界団体や標準化機関などが仕様を標準化して公開し、異なる開発主体の製品間で横断的に使用できるオープンな通信プロトコルがある。インターネットなどで用いられる通信プロトコルの多くは、IETF(Internet Engineering Task Force)などが公開している標準通信プロトコルである。
プロトコルの階層化
<$Img:TCP-IP-Layer-Model.png|right|TCP/IP階層モデル[PD]>人間同士が意思疎通を行う場合に、どの言語を使うか(日本語か英語か)、どんな媒体を使って伝達するか(電話か手紙か)、というように伝達の仕方をいくつかの異なる階層に分けて考えることができるが、コンピュータ通信においても、通信プロトコルの役割を複数の階層に分けて考える。
階層化することによって、上位の通信プロトコル(を実装したソフトウェア)は自分のすぐ下の通信プロトコルの使い方(インターフェース)さえ知っていれば、それより下で何が起きているかを気にせずに通信を行うことができる。電話機の操作法さえ知っていれば、地中の通信ケーブルや通信会社の施設で何が起きているか知らなくても通話できるのに似ている。
各階層のプロトコル群の機能や役割の範囲はモデル化して整理することがある。現在広く普及しているのはインターネット通信などで一般的な「TCP/IP階層モデル」(DARPAモデル)で、物理的な装置や伝送媒体に近い側から順に「リンク層」「インターネット層」「トランスポート層」「アプリケーション層」の4階層に分類している。
TCP/IP 【Transmission Control Protocol/Internet Protocol】
インターネットなどで標準的に用いられる通信プロトコル(通信手順)で、TCP(Transmission Control Protocol)とIP(Internet Protocol)を組み合わせたもの。また、TCPとIPを含む、インターネット標準のプロトコル群全体の総称。
IPは複数のネットワークを繋ぎ合わせて同じ識別番号の体系(IPアドレス)により相互に通信可能にするプロトコルで、これを用いて世界的に様々な組織の管理するネットワークを相互接続してできたオープンなネットワークを「インターネット」(Internet)と呼んでいる。
プロトコル階層
IPではプロトコル群を役割に応じて階層化して整理しており、下位プロトコルのデータ送受信単位(パケットやフレーム、データグラムなど)の中に上位プロトコルの送受信単位を入れ子状に埋め込んで運ぶ仕組み(カプセル化という)になっている。
例えば、HTTPメッセージはTCPセグメントに格納されて運搬され、TCPセグメントはIPデータグラムに格納されて運搬され、IPデータグラムはイーサネットフレームやPPPフレームなどに格納されて運搬される。上位プロトコルは下位プロトコルに運搬を依頼するだけでよく、下層で何が起きているか詳細を知る必要がない。
階層は物理的な装置や回線に近い側からリンク層、インターネット層、トランスポート層、アプリケーション層となっており、IPはインターネット層、TCPはトランスポート層のプロトコルである。リンク層はIPの関連規格群では規定せず、イーサネットやWi-Fiなど各機器が対応している通信手段を利用する。
アプリケーション層は用途やシステムの種類ごとに多種多様なプロトコルが定義されている。例えば、Webコンテンツの伝送にはHTTP(Hypertext Transfer Protocol)、電子メールの送受信にはSMTP(Simple Mail Transfer Protocol)やPOP3(Post Office Protocol)、IMAP4(Internet Mail Access Protocol)などが用いられる。
総称としての「TCP/IP」
IPネットワーク上ではIPと組み合わせてTCPではなくUDP(User Datagram Protocol)や他のプロトコルを用いることもあるが、「TCP/IP」という呼称はTCPとそれ以外を区別するという意味合いは薄く(UDPを使う場合を「UDP/IP」とはあまり呼ばない)、「IPを中心とする標準的な通信プロトコルの総称」を表すことが多い。
歴史的な経緯からそのような意味合いが定着しているが、今日ではそのような総称的な意味は「インターネットプロトコルスイート」(Internet Protocol Suite)のような用語で表すか、「IP接続」「IPネットワーク」のように単に「IP」一語で代表させるようになってきている。
OSI参照モデル 【OSI reference model】
コンピュータネットワークで様々な種類のデータ通信を行うために機器やソフトウェア、通信規約(プロトコル)などが持つべき機能や仕様を複数の階層に分割・整理したモデルの一つ。1980年代にCCITT(現在のITU-T)が策定した標準規格。
異機種間のデータ通信を実現するためのネットワーク構造の設計方針「OSI」(Open Systems Interconnection)に基づき、通信機能を7階層に分けて各層ごとに標準的な機能モジュールを定義している。
1984年にISO(国際標準化機構)と当時のCCITT(国際電信電話諮問委員会/現在のITU-T)が共同で策定した規格で、ISO側ではISO 7498として、CCITT側ではX.200として発行された。現代ではOSIを参照しないTCP/IPが事実上の標準として広く普及しているため、OSI基本参照モデルはほぼ有名無実化している。
第1層(L1:Layer 1)は「物理層」(physical layer)とも呼ばれ、データを通信回線に送出するための物理的な変換や機械的な作業を受け持つ。ピンの形状やケーブルの特性、電気信号や光信号、無線電波の形式などの仕様が含まれる。
第2層(L2:Layer 2)は「データリンク層」(data link layer)とも呼ばれ、回線やネットワークで物理的に繋がれた二台の機器の間でデータの受け渡しを行う。通信相手の識別や認識、伝送路上の信号の衝突の検知や回避、データの送受信単位(フレーム)への分割や組み立て、伝送途上での誤り検知・訂正などの仕様が含まれる。
第3層(L3:Layer 3)は「ネットワーク層」(network layer)とも呼ばれ、物理的な複数のネットワークを接続し、全体を一つのネットワークとして相互に通信可能な状態にする。ネットワーク内のアドレス(識別符号)の形式や割当の方式、ネットワークをまたいで相手方までデータを届けるための伝送経路の選択などの仕様が含まれる。
第4層(L4:Layer 4)は「トランスポート層」(transport layer)とも呼ばれ、データの送信元と送信先の間での制御や通知、交渉などを担う。相手方まで確実に効率よくデータを届けるためのコネクション(仮想的な専用伝送路)の確立や切断、データ圧縮、誤り検出・訂正、再送制御などの仕様が含まれる。
第5層(L5:Layer 5)は「セッション層」(session layer)とも呼ばれ、連続する対話的な通信の開始や終了、同一性の維持などを行う。アプリケーション間が連携して状態を共有し、一連の処理を一つのまとまり(セッション)として管理する機能を実現するもので、利用者の認証やログイン、ログアウトなどの状態管理を行う。
第6層(L6:Layer 6)は「プレゼンテーション層」(presentation layer)とも呼ばれ、アプリケーション間でやり取りされるデータの表現形式を定義する。通信に用いられるデータのファイル形式やデータ形式、暗号化や圧縮、文字コードの定義や形式間の変換などの仕様が含まれる。
第7層(L7:Layer 7)は「アプリケーション層」(application layer)とも呼ばれ、具体的なシステムやサービスに必要な機能を実装する。最上位の階層で、利用者が操作するソフトウェアが提供する具体的な機能や通信手順、データ形式などの仕様が含まれる。
LAN 【Local Area Network】
限られた範囲内にあるコンピュータや通信機器、情報機器などをケーブルや無線電波などで接続し、相互にデータ通信できるようにしたネットワークのこと。概ね室内あるいは建物内程度の広さで構築されるものを指す。
銅線や光ファイバーなどを用いた通信ケーブルで機器間を接続するものを「有線LAN」(wired LAN)、電波などを用いた無線通信で接続するものを「無線LAN」(wireless LAN)という。
有線LANの通信方式としては「イーサネット」(Ethernet/IEEE 802.3)系諸規格が、無線LANの通信方式としては「Wi-Fi」(ワイファイ/IEEE 802.11)系諸規格がそれぞれ標準として普及しており、単にLANといった場合はこれらの方式を用いたネットワークを指すことが多い。他にも建物内に電気を供給するために張り巡らされた電力線を流用して通信する方式などがある。
主な用途
1980年代頃から企業や公的機関、大学、研究機関などで普及し始め、施設内にあるコンピュータを相互に接続し、高機能・高性能なサーバコンピュータでファイルなどの情報資源を一元的に管理したり、プリンタなどの機器を複数のコンピュータで共有するのに用いられてきた。
インターネットの一般への普及が始まると、構内の機器を外部への回線に接続する中継手段としても広く用いられるようになった。近年では一般家庭でもパソコンやスマートフォン、デジタル家電などを相互に接続したり、インターネットに接続するための通信ネットワークとして「家庭内LAN」が普及している。
他の分類
これに対し、通信事業者の回線網などを通じて地理的に離れた機器や施設間を広域的に結ぶネットワークを「WAN」(Wide Area Network:広域通信網、ワイドエリアネットワーク)と呼び、LANの対義語として用いられる。
LANとWANの中間規模のネットワークとして、一都市内などに収まる範囲の「MAN」(Metropolitan Area Network:メトロポリタンエリアネットワーク)や、大学のキャンパスや工場などで敷地内の複数の建物のLANを一つのネットワークに結んだ「CAN」(Campus Area Network:キャンパスエリアネットワーク)などの概念を用いることもある。
また、LANに似た概念として、個人の所有・利用するコンピュータや携帯機器、周辺機器などを無線通信などで相互に結ぶネットワークを「PAN」(Personal Area Network:パーソナルエリアネットワーク)、自動車などの(大型の)機器の内部で装置間を結ぶネットワークを「CAN」(Controller Area Network:コントローラエリアネットワーク)、これらをLANの一種に分類することもある。
WAN 【Wide Area Network】
地理的に離れた地点間を結ぶ広域的な通信ネットワーク。建物内や敷地内を構内ネットワークと対比される用語で、通信事業者が設置・運用する回線網のことを指すことが多い。
また、通信事業者の回線網を通じて複数の拠点間のLANを相互に結び、全体として一つの大きなネットワークとした企業内ネットワークのことをWANと呼ぶこともある。
文脈によっては、世界の通信事業者、企業、各種組織などのネットワークを相互に結んだものという意味合いから、インターネットのことをWANと呼ぶ場合もある。
MAN (Metropolitan Area Network)
広域的な回線網のうち、一つの都市や市街地の内部を繋ぐ高速・高密度な回線網をMAN(マン/Metropolitan Area Network:メトロポリタンエリアネットワーク)と呼ぶことがある。
WANとLANの中間規模のネットワークの類型の一つで、通信拠点や施設間を光ファイバー回線などで結ぶ中長距離の高速な通信ネットワークと、建物内で末端のコンピュータや通信機器を結ぶLANを組み合わせて構築される。前者の拠点間ネットワークのみを指す場合もある。
CAN (Campus Area Network)
企業の大規模拠点や工場、大学、基地などで、広大な敷地内の建物や施設をまたいで敷設される構内ネットワークをCAN(キャン/Campus Area Network:キャンパスエリアネットワーク)と呼ぶことがある。
WANとLANの中間規模のネットワークの類型の一つで、複数の施設内のLANを地中などに敷設した高速な光ファイバー回線などで相互接続し、一体的に運用したものを指す。
概ね、単一の主体が所有・管理する地理的に連続した用地に敷設されたコンピュータネットワークをこのように呼ぶが、MANとの区別は必ずしも明確ではない。一つの街のように広大なアメリカの総合大学や大企業本社などでは構内ネットワークをMANと呼ぶ例も見られる。
プロファイル
輪郭、横顔、分析結果、略歴などの意味を持つ英単語。ITの分野では、何らかの対象に関する属性や設定などの情報を列挙した、ひとまとまりのデータ集合のことを指す場合が多い。
ソフトウェアの設定などで、複数の設定値のグループを作り、用途などに応じてグループごと切り替えて一括して設定値を変更できるような仕組みが提供されることがある。この目的ごとに作成される設定値などの集合のことをプロファイルという。
例えば、一台のコンピュータや一つのソフトウェアを複数の利用者で共用する際に、それぞれの利用者ごとの設定情報や個人的なデータなどを「ユーザープロファイル」としてまとめておき、ログイン時に切り替えることで、各々が自分専用のシステムであるかのように使用することができる。
一般の外来語としては「プロフィール」(またはプロフィル)と表記するのが一般的だが、これは英語の “profile” に対応するフランス語 “profil” が由来で、人物紹介、自己紹介などの意味で用いられる。
技術仕様や標準規格のプロファイル
ある技術についての仕様や標準規格などで、適用場面の限られたオプション仕様や、用途や対象などに応じて選択された複数の要素や項目の組み合わせのことをプロファイルということがある。製品の想定用途に応じて実装する機能を柔軟に絞り込むことができる。
例えば、動画圧縮形式の標準規格である「MPEG-4」では様々な圧縮技術や色表現などが利用できるが、それらの組み合わせがいくつかのプロファイルとしてまとめられており、機器や用途に適したものが選択・適用できるようになっている。
また、表示装置や印刷装置の発色具合など、機種によって特性が異なる場合、出力値を補正するためのパラメータなどを記述したデータのセットをプロファイルということもある。機種ごとに適切なプロファイルを適用することで発色のズレなどを防ぐことができるようになる。
ユーザーアカウント
コンピュータやネットワークなどを許可された人のみが利用できるようにするために登録される利用者の識別情報や資格情報のセット。単にアカウント(account:「口座」の意)と呼ばれることも多い。
ユーザーアカウントは原則として個人ごとに割り当てられ、「ID」「アカウント名」「ユーザー名」などと呼ばれる、そのシステム上で一意の名前や番号などによって識別・同定される。各アカウントにはシステム上で行使可能な権限(特定のファイルやディレクトリの読み書き、プログラムの実行、システム設定の変更など)が設定されており、管理者ユーザーはシステム設定を変更できるが一般ユーザーにはできないといった違いがある。
特定の個人が作成したアカウントとは別に、特殊な組み込みアカウントがあらかじめ存在する場合もある。コンピュータの管理者を表すアカウント(UNIXの「root」やWindowsの「Administrator」など)や、登録せずに一時的に限定された権限のみを利用可能な匿名のアカウント(Windowsの「Guest」やFTPサイトの「anonymous」など)、OSが自動的・自律的に行う処理のためのアカウント(Windowsの「System」)などである。
ユーザーアカウントを持つ利用者がコンピュータを使用するには、まず「ログイン」(ログオン/サインインなどとも呼ばれる)と呼ばれる認証手続きを行い、本人確認を行う。本人しか知らない十文字前後の英数字・記号の組み合わせ(パスワード)の入力により確認することが多い。ログインするとアカウントに設定された識別情報や権限に基づいてシステムを操作することができ、使用が終了したら「ログアウト」(ログオフ/サインオフ)する。
アクセス権
システムの登録利用者や利用者のグループに対して設定される、そのシステムの管理する資源を使用する権限のこと。システム利用権を設定し、これに基づいて資源の利用を許可したり拒否することをアクセス制御という。
何に対するどんな権限を設定できるかはシステムの種類によって様々だが、単にシステム利用権といった場合はOSのアカウント管理システムやファイルシステムなどを通じて設定される、ストレージ(外部記憶装置)内のファイルやフォルダ、周辺機器などに対する利用権限を指すことが多い。
多くのOSでは、ファイルやフォルダに対しては「読み込み」「書き込み」「作成」「削除」などの動作について、また、実行可能ファイルはこれに加えて「実行」について可否を設定できるようになっている。
システム利用権は特定のユーザーアカウントやアカウントのグループを単位に設定するようになっていることが多いが、「管理者」「全員」「システム」「作成者」など特別な組み込みアカウントやグループを指名できる場合もある。
システム利用権を変更する権限を持つのは一般に管理者や管理者グループに属するユーザーで、一般の利用者は与えられたシステム利用権に従って資源を使用するのみになっていることが多い。
アクセス権
システムの登録利用者や利用者のグループに対して設定される、そのシステムの管理する資源を使用する権限のこと。ファイルアクセス権を設定し、これに基づいて資源の利用を許可したり拒否することをアクセス制御という。
何に対するどんな権限を設定できるかはシステムの種類によって様々だが、単にファイルアクセス権といった場合はOSのアカウント管理システムやファイルシステムなどを通じて設定される、ストレージ(外部記憶装置)内のファイルやフォルダ、周辺機器などに対する利用権限を指すことが多い。
多くのOSでは、ファイルやフォルダに対しては「読み込み」「書き込み」「作成」「削除」などの動作について、また、実行可能ファイルはこれに加えて「実行」について可否を設定できるようになっている。
ファイルアクセス権は特定のユーザーアカウントやアカウントのグループを単位に設定するようになっていることが多いが、「管理者」「全員」「システム」「作成者」など特別な組み込みアカウントやグループを指名できる場合もある。
ファイルアクセス権を変更する権限を持つのは一般に管理者や管理者グループに属するユーザーで、一般の利用者は与えられたファイルアクセス権に従って資源を使用するのみになっていることが多い。
ユーザーアカウント
コンピュータやネットワークなどを許可された人のみが利用できるようにするために登録される利用者の識別情報や資格情報のセット。単にアカウント(account:「口座」の意)と呼ばれることも多い。
ユーザーアカウントは原則として個人ごとに割り当てられ、「ID」「アカウント名」「ユーザー名」などと呼ばれる、そのシステム上で一意の名前や番号などによって識別・同定される。各アカウントにはシステム上で行使可能な権限(特定のファイルやディレクトリの読み書き、プログラムの実行、システム設定の変更など)が設定されており、管理者ユーザーはシステム設定を変更できるが一般ユーザーにはできないといった違いがある。
特定の個人が作成したアカウントとは別に、特殊な組み込みアカウントがあらかじめ存在する場合もある。コンピュータの管理者を表すアカウント(UNIXの「root」やWindowsの「Administrator」など)や、登録せずに一時的に限定された権限のみを利用可能な匿名のアカウント(Windowsの「Guest」やFTPサイトの「anonymous」など)、OSが自動的・自律的に行う処理のためのアカウント(Windowsの「System」)などである。
ユーザーアカウントを持つ利用者がコンピュータを使用するには、まず「ログイン」(ログオン/サインインなどとも呼ばれる)と呼ばれる認証手続きを行い、本人確認を行う。本人しか知らない十文字前後の英数字・記号の組み合わせ(パスワード)の入力により確認することが多い。ログインするとアカウントに設定された識別情報や権限に基づいてシステムを操作することができ、使用が終了したら「ログアウト」(ログオフ/サインオフ)する。
パスワード
利用者が名乗った本人であるか確認する際などに用いられる秘密の合言葉。事前に登録したものと、認証時に入力したものが一致すれば本人であるとみなされる。
利用者の登録・識別を必要とするシステムでは、利用者の登録(アカウント作成など)の際に識別名(ユーザーID/アカウント名)とセットでパスワードを登録する。その識別名を名乗る利用者が使用開始(ログイン)を申請すると、システムはパスワードの入力を求め、登録されたものと一致すれば本人とみなして使用を許可する。
利用できる文字の種類や長さは個々のシステムによって定められているが、(半角の)ラテンアルファベット(大文字・小文字の区別あり)、数字、一部の記号の組み合わせで8文字以上と規定されている場合が多い。
パスワードと同じ秘密の情報を入力させる仕組みのものには、数桁の数字を入力させる暗証番号(PIN:Personal Identification Number)や、いくつかの単語の組み合わせを入力させるパスフレーズ(passphrase)などがある。
パスワードの割り出し
パスワードを他人に知られてしまうと自分になりすましてシステムを利用されてしまうため、誰にも知らせてはならない。ただし、攻撃者が不正にシステムを利用するためにパスワードの割り出しを試みる場合があり、直接知られなくても入手されてしまうことがある。
パスワードへの攻撃は、何らかの手法で候補を大量に生成し、実際にログインを試みることにより行われることが多い。主な手法として、すべての文字の組み合わせを片っ端から試す「総当たり攻撃」(ブルートフォースアタック)や、人間が覚えやすい既存の単語や文字の並びのリストを作り、それらを組み合わせて候補を作成する「辞書攻撃」(ディクショナリアタック)などがある。
これらの攻撃手法では短く覚えやすいものほど割り出しやすいため、パスワードは覚えられる範囲でなるべく長く、様々な文字種(大文字・小文字・数字・記号)を組み合わせて作成し、意味のある単語や覚えやすい単純な文字の並び(「password」「123456」など)などは避けるべきとされる。
また、本人や家族の氏名、生年月日、電話番号、居住地、出身地など、何らかの方法で入手した本人についての様々な情報から候補を作成する手法もあるため、自分や家族に関連する単語や番号などは含めないことが望ましい。
ディレクトリサービス 【ディレクトリサーバ】
ネットワーク上の資源に統一された識別名を与え、その所在や属性、設定などの情報を登録・記録し、検索・提供できるようにしたシステム。
ネットワーク上の構成要素や接続機器、利用者数の多い企業内LANなどでよく利用されるシステムで、利用者アカウントやネットワーク資源を一元管理し、管理者の負担軽減や利用者の利便性向上を図ることができる。
ディレクトリサービスが管理する資源は利用者(アカウント)、各種のサーバやサービス(ファイルサーバ上の共有フォルダなど)、プリンタなどのネットワーク接続の機器などである。これらに対して一意の識別名を与え、物理的な位置を意識せずにアクセス可能にする。
一部のシステムでは利用者の認証情報、機器やサービスに対する利用権限を管理することができ、ネットワーク上のシステムに対する一括ログイン(シングルサインオン)機能や、各資源に対するアクセス制御などの機能も提供する。
情報を登録・管理し、求めに応じて外部に提供するシステムを「ディレクトリサーバ」、サーバにアクセスして情報を請求し、利用するシステムを「ディレクトリクライアント」という。両者間の通信には「LDAP」(Lightweight Directory Access Protocol)というプロトコル(通信規約)が標準的に用いられているが、独自のクライアントソフトウェアを要求するサーバも多い。
代表的なディレクトリサービスとしてはWindowsネットワーク上の資源を管理する「Active Directory」が知られており、Windows Serverに同梱されている。他のディレクトリサーバはLDAP通信が可能なサーバという意味で「LDAPサーバ」と呼ばれることが多く、オープンソースの「OpenLDAP」などが知られる。インターネット上でホスト名(ドメイン名)とIPアドレスなどを結び付けるDNS(Domain Name System)なども、ある用途に特化した一種の大規模ディレクトリサービスと言える。
スーパーユーザー
オペレーティングシステム(OS)に組み込まれた特殊な利用者アカウントの一つで、最も強い権限を持つアカウント。システム管理者などが利用する。
複数の利用者アカウントを作成・運用できるマルチユーザーOSにおけるアカウントの分類の一つで、他のアカウントの作成や削除、権限の変更などを行なったり、周辺機器やファイルなどOSの管理するすべての資源に対する万能の権限を持っている。
多くのOSでは、スーパーユーザーはコンピュータの管理者がシステムの設定を管理したり、OSの中核を成す重要なプログラムを実行するために利用するもので、アプリケーションソフトの実行など通常の運用は、権限を制限した一般のアカウントで行うべきとされる。
LinuxなどのUNIX系OSでは、最初から用意されている組み込みのスーパーユーザーとして「root」という名前のアカウントが用意されている。rootでログインして操作する運用は稀で、一般ユーザーでログインしてからsuコマンドでrootに昇格したり、sudoコマンドでrootの代わりにコマンドを実行することが多い。
Windowsでは「Administrator」という組み込みアカウントがスーパーユーザーである。Administratorsグループという管理者権限を持つユーザーグループもあり、新規に作成したアカウントをこれに参加させればAdministrator相当の権限が得られる。UNIX系のrootよりも権限は抑えられており、Local Systemアカウントにしかない特権などもある。
一般的には、これらのOS導入時に自動的に組み込まれる管理者アカウントをスーパーユーザーということが多いが、これらのユーザー名を変更したり、新たに作成したアカウントに管理者としての強力な権限を与えてスーパーユーザーとすることもできる。
root 【rootユーザー】
LinuxなどのUNIX系OSでシステムに最初から組み込まれている管理者アカウント。一般に「スーパーユーザー」(superuser)と呼ばれる種類のアカウントの一つで、他のユーザーと異なり、ログイン時のホームディレクトリがシステムのルートディレクトリ(/)であることからこのように呼ばれるようになった。
オペレーティングシステム(OS)のインストール後に設定などを行わなくても最初から利用できる組み込みアカウントの一つで、あらゆる資源に無制限にアクセスすることができ、また、あらゆる設定を変更する権限を持つ万能のアカウントである。
極めて強力な権限を持ち、誤操作や外部からの乗っ取りが起きると被害が甚大なため、日常的な作業には権限を限定した他のユーザーアカウントを使用し、どうしても必要なときだけroot権限を利用するという運用が行われることが多い。
これには主に二つの手法が用いられる。一つは、OSの設定によりrootによる直接のログインを禁止し、他のアカウントでログインしてから「su」(substitute user identityの略)コマンドなどでrootに昇格するという手順を要求する方式である。昇格後はroot権限で何でも行うことができる。
もう一つは、やはり他のアカウントでログインし、「sudo」(substitute user do)コマンドなどを用いて指定した動作のみをroot権限で実行するという方式である。suで権限を丸ごと委譲する方式に比べ、どのユーザーにどのコマンド実行を許可するかを細かく指定できるため、一般的にはこちらの方式のほうが好まれる。
アドミニストレータ 【アドミン】
管理者、行政官、管財人などの意味を持つ英単語で、ITの分野ではコンピュータや通信機器、オペレーティングシステム(OS)などを管理する人や役職のことをこのように呼ぶ。管理に必要なシステム上の特権的・優越的な権限を与えられた人やユーザーアカウントを指すこともある。
企業などでコンピュータなどの情報・通信機器やシステムを使用する場合、利用者はそれぞれ固有のユーザーアカウントを与えられ、所属や役職に応じた使用権限のもとで操作を行うことが多い。このうち、その機器やシステムを管理するために、重要な変更を加える操作や設定などを行う権限が付与された管理者ユーザーのことをAdministratorという。
また、組織内で情報システムの整備や維持、利用者へのサポートなどの業務を担当する職員を「システムアドミニストレータ」(system administrator/シスアド、シス管などと略される)と呼ぶことがあり、これを略してAdministratorという場合もある。
万能の権限を持つ管理者ユーザーとして、UNIX系OSでは慣習的に “root” (ルート)という名前のアカウントが用意されていることが多い。Windowsでは、管理者権限を持つ組み込みアカウント(ビルトインアカウント)として “Administrator” が用意されており、Administratorユーザーが所属する管理者グループとして “Administrators” が用意されている。
IPA(情報処理振興機構)の実施する情報処理技術者試験にはかつて、システム管理者の知識・能力を認定する「初級システムアドミニストレータ試験」(初級シスアド)「上級システムアドミニストレータ試験」(上級シスアド)という区分があった。
ゲストアカウント 【ゲストユーザー】
オペレーティングシステム(OS)などの利用者アカウント(利用権)の種類の一つで、正式な利用者登録(アカウント取得)をしていない一時的な利用者のためのもの。
OSや一部のアプリケーションソフトは、特定の利用者にのみ操作・使用を許可したり、利用者ごとに設定を保存したりするため、利用者の登録と識別を必要とする。登録利用者の識別・認証情報と権限や資格、設定情報などを紐付けたデータのセットをユーザーアカウントという。
通常、アカウントは個々の利用者ごとに管理者の許可を得て登録するが、コンピュータを貸し出す場合など、一時的に使用する必要がある人にその場限りの利用権限を与えて使用を許可したい場合がある。
そのような場合に使用されるのがゲストで、一般利用者が行える操作などは許可される一方、システムの設定の変更やソフトウェアの導入・削除、重要なファイルやフォルダへのアクセスなど、コンピュータの動作に影響を与える操作は制限されていることが多い。
ゲストのアカウント名や権限などはソフトウェアの種類や設定によって異なるが、「Guest」などの名前が用いられることが多い。誰でも使えるようあえてパスワードを設定せずに運用することもあるが、セキュリティ上は好ましくないとされる。
管理者権限 【Admin権限】
情報システムの登録利用者に与えられる操作権限のうち、システムの管理を行うためのもの。オペレーティングシステム(OS)などに用意された、管理権限を持つ利用者アカウントを「管理者アカウント」などという。
OSに対する操作や設定の変更、ソフトウェアなどの導入や削除、任意のファイルの読み書き、他の利用者への権限の付与や変更などを行うことができる強力な権限で、一般的にはコンピュータの所有者や情報システムの管理者に与えられる。
単に管理者権限といった場合はオペレーティングシステム(OS)のユーザーアカウントに付与される権限を指すことが多いが、個別のアプリケーションソフトにOSのものとは別にアカウントと権限が用意されている場合や、クラウドサービスやネットサービスの登録利用者に与えられる管理権限を指す場合もある。
多くのOSでは、コンピュータへの導入(インストール)時にすべての権限を持つ万能の管理者アカウントが用意され、初期設定などに用いられる。Windowsでは「Administrator」(アドミニストレーター)アカウントが、LinuxなどのUNIX系OSでは「root」(ルートユーザー)がこれに相当する。
Windowsでは一般ユーザーでログイン後も、システムに重要な変更を加える操作を行う場合などに「管理者として実行」メニューを選択することで一時的に管理者権限を行使できる。UNIX系OSでは一般ユーザーでログイン後にrootユーザーに昇格するsuコマンドや、root権限でコマンドを実行するsudoコマンドが用意されている。
企業などの情報システムでは安全のため、こうしたシステム組み込みの万能アカウントの権限や使用について、直接ログインできないなど一定の制約を課したり、職務や管理対象ごとに特定の権限のみを与えた限定的な管理用アカウントを作成して通常はそちらを使用するといった運用が行われることが多い。
LDAP 【Lightweight Directory Access Protocol】
インターネットなどのIPネットワークを通じてディレクトリサービスにアクセスするためのプロトコル(通信規約)の一つ。ネットワーク上の利用者やサービス、周辺機器などの情報を一元的に管理することができる。
ディレクトリサービスとは、ネットワーク上のコンピュータの利用者やプリンタなどの周辺機器、共有フォルダなどのサーバ上のサービス、その他何らかの資源に関する情報をサーバ上のデータベースで一元管理する仕組みである。利用者アカウントをディレクトリに登録し、複数のコンピュータで横断的に利用するといったことができる。
LDAPは利用者がクライアントソフトを用いてディレクトリサーバに接続し、その管理する情報を利用するための通信手順やデータ形式を定めている。ITU-T勧告のX.500標準の一部を抜き出して簡略化し、TCP/IPで利用できるにしたもので、1995年にIETFによって最初の標準が発行された。
LDAPにおけるディレクトリ上の資源の識別や指定にはLDAP識別名(DN:Distinguished Name)と呼ばれる名前を用いる。「属性名=値」という形式の相対識別名(RDN:Relative DN)をカンマ区切りで並べたもので、属性名や値の具体的な仕様はディレクトリごとに異なる。
LDAP自体にはデータの暗号化やパスワードの秘匿といったセキュリティ保護機能がないため、暗号化プロトコルのSSL/TLSと併用してLDAPによる通信全体を暗号化するLDAPS(LDAP over SSL/TLS)と呼ばれる通信方式が用いられることがある。通常のLDAPはTCPの389番ポートを利用するが、LDAPSは636番を利用することが多い。
LDAPでディレクトリサービスを提供するソフトウェアやコンピュータを「LDAPサーバ」、サーバにアクセスして資源を利用する側を「LDAPクライアント」という。著名なLDAPサーバとしては米マイクロソフト(Microsoft)社の「Active Directory」やオープンソースソフトウェアの「OpenLDAP」などがある。
アクセス制御 【アクセスコントロール】
情報システムが利用者などを識別して、あらかじめ設定された権限に基づいて対象への接触や操作を許可あるいは禁止する仕組み。
何らかの主体(人間や機器、ソフトウェアなど)が、システムの管理下にある対象(装置や回線、データ、プログラム、ファイルなど)に対して、どのような操作が許されているかを登録・管理し、権限外の操作を実行しようとした時にはこれを拒否する。
例えば、ファイルシステムによるアクセス制御であれば、各ユーザーアカウントやユーザーのグループに対して、ファイルやディレクトリに対する読み込み、書き込み、削除、プログラムファイルの実行といった権限を付与し、操作主体と権限を確認して許可や拒否を行う。
認証・認可・監査
アクセス制御は「認証」(authentication)、「認可」(aurhorization)、「監査」(audit)といったプロセスから成る。認証は主体を識別して本物であることを確認するプロセスで、利用者にアカウント名を入力させ、パスワードなどの確認手段で本院であることを確かめる活動などが該当する。
認可は権限に基づいて操作の可否を判断するプロセスで、アカウント情報や管理者の定義したポリシー設定、アクセス制御リスト(ACL)などを参照して対象者の資格や権限を確認し、対象者が行おうとしている操作を許可したり拒絶したりする。
監査は、認証や認可、および利用主体による対象へのアクセスの履歴(ログ)を記録・蓄積し、後から「いつ誰が何を試みて結果がどうなったか」を管理者が追跡できるようにするプロセスである。システムやデータの安全を脅かす不審な試みや、不正な行為による被害などを確かめることができるようにする。
モデル
アクセス制御を適用する手法にはいくつかの典型的なモデルがあり、実際のシステムはモデルに基づいてアクセス制御の仕組みを実装している。
古くからありよく知られるのは、操作対象(オブジェクト)の所有者がアクセス許可の指定を行う「任意アクセス制御」(DAC:Discretionary Access Control)で、一般的なオペレーティングシステム(OS)のセキュリティ機能などで採用されている。
これに対して、「強制アクセス制御」(MAC:Mandatory Access Control)は管理者およびシステムが権限を設定し、所有者と言えどこれを変更できない仕組みである。軍用システムなど高度なセキュリティが要求される一部のシステムで実装されている。
他にも、利用者の役割(ロール)ごとに権限を設定する「ロールベースアクセス制御」(RBAC:Role-Based Access Control)や、利用者や操作対象の持つ様々な属性情報を収集し、どの属性のユーザーがどの環境でどの対象にアクセス可能かといった設定を記述していく「属性ベースアクセス制御」(ABAC:Attribute-Based Access Control)などの手法も提唱されている。
ロギング
起こった出来事についての情報などを一定の形式で時系列に記録・蓄積すること。そのように記録されたデータのことを「ログ」(log)という。
コンピュータシステムの場合には、利用者による操作や、機器や装置、ソフトウェアなどの稼働状況、通信機能による外部との通信などの記録を残すことをロギングということが多い。いつ、誰が(何が)、何を試み、結果がどうであったかをファイルやデータベースに時系列に記録する。装置やプログラムが発したメッセージや応答コードなどがある場合はこれらを併記することもある。
ある期間に記録されたログを解析することで、活動や通信の頻度や量、特定のある具体的な活動の詳細な内容や結果を知ることができる。システム障害やセキュリティ事象など問題が発生した際には、起こった出来事の経過を把握したり、原因の調査や解決法の検討などの助けになる。
ロギングは「このような出来事が起こった」ことを記録する活動だが、データ管理などで「記録内容がこのように変更された」ことを記録する活動は「ジャーナリング」(journaling)と呼ばれる。データや記憶領域に対する変更履歴を時系列に保存したもので、過去のある時点の状態を参照したり、その状態に戻したりすることができる。
アカウンタビリティ 【説明責任】
権限を行使したり組織を指揮・監督する人が、自ら(の組織)の行動(または行動を怠ったこと)やその結果について、利害関係者(ステークホルダー)や社会に対して報告・説明を行なう責任のこと。
例えば、企業の経営者が株主や債権者に経営状態や資金の使途などを開示して合理的な説明を行い、疑問に答える義務のことをこのように言う。
特に、政治や行政の分野で、特定の組織や政策、制度、事業などに権限を有する政治家や行政官が、その実態や結果、意思決定の過程などについて、国民や住民、利害関係者、議会、メディアなどに説明や報告を尽くす責務のことを指すことが多い。
日本では1990年代半ば頃から広まった外来語で、当時考案された「説明責任」の訳語が定着している。これについて、本来の “accountability” は適切に説明が行われていないと判断されれば地位を追われたり懲罰を受けることも含めた「責任」を表しており、ただ単に説明(釈明/弁明)を行う義務のように解釈すべきでないとする批判もある。
なお、情報セキュリティの分野では、情報システムの操作や情報の閲覧、編集などについて、誰がいつどのような操作を行ったか遡って追跡できる性質のことを “accountability” と呼び、日本語では「責任追跡性」あるいは「責任追及性」と訳される。
障害
ITの分野では、機器やソフトウェア、システム、通信回線などに異状が生じ、本来の機能を発揮できなくなることを指す。英語の “failure” に対応する概念とされることが多い。
システムなどの障害
システムなどが何らかの原因により機能の喪失や性能の低下を強いられたり、稼働を停止してしまっている状態を意味する。
機器やソフトウェア、部品などの故障・不良(fault)、欠陥・不具合(defect)が原因であることが多いが、操作ミスなど人為的な失敗や、悪意や故意に基づく攻撃や破壊、自然災害や事故などの外的要因、想定外あるいは設計限界を超えた使用環境などにより引き起こされる場合もある。
無線通信の障害
無線通信や放送などでは、遮蔽物や電磁的なノイズなどの影響で電波の受信感度が悪い状態を「電波障害」(radio disturbance)あるいは「受信障害」という。また、電波の影響で電子機器が誤作動することも電波障害(あるいは電磁波障害)という。
再起動 【リブート】
稼働中の機器やシステムを一旦終了し、直後に再び起動すること。ソフトウェアを終了して起動し直すことをリスタートということもあるが、単にリスタートといった場合は機器を起動し直すことを指すことが多い。
コンピュータのリスタートには、オペレーティングシステム(OS)などによる所定の終了処理を経て起動し直す「ソフトリセット」(ソフトウェアリブート)と、電源装置を操作して物理的、強制的に起動しなおす「ハードリセット」(ハードウェアリブート)がある。
ソフトリセットはオペレーティングシステム(OS)などソフトウェアの操作メニューから「再起動」「リブート」「リセット」などの項目を選択して実行する。利用者が任意に再起動することを想定しないシステムでは機能として用意されていない場合もある。
ハードリセットは本体にあるリセットボタンなどを押して実行する。スマートフォンやタブレット端末などでは専用のボタンなどは用意されておらず、電源ボタンや音量ボタンなど複数のボタンを同時に長押しするといった特殊な操作により行う場合もある。
完全に電源断の状態に戻してから、再度、内部の装置の検査などを含む完全な起動プロセスすべてを行って起動し直すことを「コールドリブート」(cold reboot)、すでに装置は健全に稼働しているとみなして検査などの工程をスキップし、迅速にOSの起動に移ることを「ウォームリブート」(warm reboot)という。
ミドルウェア 【MW】
ソフトウェアの種類の一つで、オペレーティングシステム(OS)とアプリケーションソフトの中間に位置し、様々なソフトウェアから共通して利用される機能を提供するもの。OSが提供する機能よりも分野や用途が限定された、具体的・個別的な機能を提供する場合が多い。
多くのアプリケーションで共通して利用される機能やハードウェアの基本的な制御機能などは、個別に開発するのは非効率であるため、通常はOSの機能として提供され、アプリケーションはOSの機能を利用するだけで済むようになっている。
ただ、そのようなOSの機能はほとんどのアプリケーションが必要とするような極めて基本的・汎用的なものに限られるため、特定の分野でしか使われないが、その分野では必ず必要とされるような機能がミドルウェアとして提供されることが多い。
また、ミドルウェアの中には複数のOSやハードウェアに対応し、OSや機種ごとの差異を吸収する設計となっているものもある。アプリケーション開発者はシステムごとの違いを気にせずに、効率的に開発を進めることができる。
ミドルウェアの種類
どのような機能がミドルウェアとして提供されるかは分野によって大きく異なる。インターネット上のサーバなどではWebサーバやデータベース管理システム(DBMS)、アプリケーションサーバ、データ連携ツールなどが該当する。
業務システムなどでは、こうしたアプリケーションの基盤となる機能だけでなく、自身がアプリケーションとして動作し、システムの運用や管理など行うものをミドルウェアと呼ぶことがある。例えば、バックアップソフト、クラスタソフト、システム監視ツール、運用管理ツールなどである。
組み込みシステムのミドルウェア
産業機械やデジタル家電といった、いわゆる組み込みシステムでは、機器の性能や記憶容量が乏しく、分野や用途によって必要なソフトウェアの機能が大きく異なるため、OS標準の機能が最小限に絞り込まれていることが多い。
このため、パソコンやサーバではOSが提供するような基本的な機能も必要な場合にのみミドルウェアとして組み入れる仕組みになっている場合もある。ファイルシステムやネットワーク通信、グラフィック表示の操作画面(GUI:Graphical User Interface)などの機能である。
ライブラリやモジュールとの違い
汎用的な機能をアプリケーションに提供するソフトウェアには「ライブラリ」(library)や「モジュール」(module)なども存在するが、これらは単体では動作しないプログラム部品として提供され、アプリケーションの一部に組み込まれて一体的に動作する。
一方、DBMSのようなミドルウェアは単体で動作するソフトウェアであり、システム上に常駐して外部から処理依頼を受け付け、結果を送り返す。アプリケーション本体とは独立しており、配布や導入・設定、起動や終了などもアプリケーションとは別に行われるのが一般的である。
DBMS 【Database Management System】
データベースを管理し、利用者や外部のソフトウェアからの要求に応えてデータの操作を行う専門のソフトウェア。
ハードディスクなどのストレージ装置(外部記憶装置)内に専用の管理領域を設け、データを記録するための構造体の作成や消去、構造の修正、データの書き込み、上書き、削除などを行う。条件を指定してデータを検索したり、特定のデータの集合を抽出したりする機能も提供する。
管理者や利用者が直接操作してこれらの操作を行うほかに、外部のソフトウェアからの接続を受け付け、指示を受けてこれらの操作を行うのもDBMSの重要な機能である。データの管理にDBMSを利用することで、個別のアプリケーションソフトがデータの記録・管理機能を自前で実装する必要がなくなり、自らの役割に専念することができる。
基本的な機能の他にも、誤ったデータの記録を拒否して整合性を維持する機能や、権限のない利用者による不正なデータの盗み見や改竄を防ぐ機能、関連する複数の操作を一体的に矛盾なく実行する「トランザクション処理」機能、障害に備えてデータを複製(バックアップ)したり過去のある時点の状態を復元する機能を備えたものもある。
DBMSの種類
DBMSにはデータの記録形式(データモデル)によっていくつかの種類がある。最も広く普及しているのは「リレーショナルデータモデル」(関係データモデル)と呼ばれる方式でデータを格納する「「リレーショナルデータベース管理システム」(RDBMS:Relational Database Management System)で、単にDBMSと言えばRDBMSを指すことが多い。
代表的なRDBMS製品としては、米オラクル(Oracle)社の「Oracle Database」、米マイクロソフト(Microsoft)社の「SQL Server」、米IBM社の「Db2」などがあり、オープンソースソフトウェアとして配布されている「MySQL」や「PostgreSQL」「MariaDB」なども人気が高い。
パソコンなど利用者の操作環境上で単体のアプリケーションとして動作し、グラフィック表示(GUI)の操作・編集システムと共に提供される製品は「デスクトップデータベース」とも呼ばれる。個人やグループ単位の小規模なデータ管理に用いられ、「Microsoft Access」や米クラリス(Claris)社の「FileMaker Pro」などがよく知られる。
近年では「KVS」(Key-Value Store:キーバリューストア)や「列指向データベース」「グラフ指向データベース」「ドキュメント指向データベース」など非リレーショナル型のDBMSの増えている。RDBMSの問い合わせ言語であるSQL(Structured Query Language)に囚われないという意味で「NoSQL」(Not only SQL)と総称される。
TPモニタ 【Transaction Processing Monitor】
複数の処理を一体不可分な「トランザクション」として管理するソフトウェア。業務用のデータベースシステムなどで用いられる。
送金処理の際の出金と入金のように、互いに密接に関連し中断の許されない一連の処理を「トランザクション」(transaction)と呼ばれる一つの処理単位として登録・監視し、含まれる処理が「すべて成功」か「すべて失敗」かのいずれかになることを保証する。
単一のトランザクションとして登録された処理の実行状況を監視し、一部が失敗したら手前の処理をすべて取り消してトランザクション開始前の状態に戻す。外部からの処理要求を受け付け、適切なタイミングでアプリケーションに引き渡す流量制御や、分散トランザクションにおける2フェーズコミットなどの機能も提供する。
TPモニターに相当する機能自体はデータベース管理システム(DBMS)などに含まれる場合もあり、単一のデータベースにおける処理などではこちらを使うこともある。複数のシステムやソフトウェア、データベースなどにまたがって複雑なトランザクション処理を行う場合には専用のTPモニター製品が必要になる。
シェル 【OSシェル】
コンピュータのオペレーティングシステム(OS)を構成するソフトウェアの一つで、利用者からの操作の受け付けや、利用者への情報の提示などを担当するもの。OS以外についても、その操作や表示を担当する機能やソフトウェア部品などのことをシェルと呼ぶことがある。
シェルは入力装置などによる利用者の操作を受け付けて、対応する動作をOSの中核部(カーネル)や他のプログラムに指示したり、それらからの出力を画面に表示するなどして利用者に伝える。簡易なプログラム(スクリプト)を記述して与えることで操作を自動化することができるようになっていることが多い。
OSの種類により、Windowsのようにシェルがカーネルなどと一体のパッケージとして提供されるものと、LinuxなどのUNIX系OSのように、機能や使い勝手の異なる複数のシェルがあり、利用者が任意に組み合わせて用いることができるようになっているものがある。
コマンドラインシェル
UNIX系などでよく用いられるのは、キーボードからの文字入力と画面への文字表示で利用者と対話する「CUI」(Character User Interface)あるいは「CLI」(Command Line Interface)を採用したシェルで、「コマンドラインシェル」と呼ばれる。
利用者は画面上で入力の待ち受けを表す「プロンプト」(prompt)に続けてキーボードから「コマンド」(command)と呼ばれる命令を入力し、Enterキーなどで決定するとシェルが入力内容を解釈して実行する。結果は次行以降に表示され、終了すると再びプロンプトが現れる。これを繰り返して対話的に操作する。
コマンドはその場で直に入力するだけでなくテキストファイルに保存してファイル名を指示することによっても実行できる。一行に一つずつ複数のコマンドを並べてまとめて実行することができ、条件分岐や変数などを利用してプログラムのように記述できる場合もある。この仕組みをUNIX系では「シェルスクリプト」、Windowsでは「バッチファイル」「PowerShellスクリプト」などという。
グラフィカルシェル
WindowsやmacOSなどでよく用いられるのは、画面上に表示された図形や画像などをマウス操作や画面へのタッチなどで指定して操作する「GUI」(Graphical User Interface)を採用したシェルで、「グラフィカルシェル」と呼ばれる。
机の上を模した「デスクトップ」(desktop)と呼ばれる操作画面上にウィンドウやタスクバー、アイコン、ランチャーなどが配置され、マウスポインタを移動させたり画面に指で触れるなどして位置を指定し、その場所にある操作要素に対して指示を与える。
主な操作
シェルを利用した主な操作として、コンピュータプログラム(ソフトウェア)の実行状態の管理やストレージ(外部記憶装置)の管理がある。前者は、プログラム名やアイコン(絵文字)を指定してプログラムを起動したり、実行中のプログラムを終了したり、起動パラメータや環境変数などを設定して動作モードを変更したりすることができる。
後者は、ストレージ装置などに設けられたファイルシステムを操作して、ファイルやディレクトリ(フォルダ)などを一覧したり、新たに作成したり、改名(リネーム)や複製(コピー)、移動(ムーブ)、削除(デリート)などを行ったり、リンクやショートカットなど別の場所に「分身」を作成することができる。
API 【Application Programming Interface】
あるコンピュータプログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと。
個々のソフトウェアの開発者が毎回すべての機能をゼロから開発するのは困難で無駄なため、多くのソフトウェアが共通して利用する機能は、OSやミドルウェアなどの形でまとめて提供されている。
そのような汎用的な機能を呼び出して利用するための手続きを定めたものがAPIで、個々の開発者はAPIに従って機能を呼び出す短いコードを記述するだけで、自分で一から処理内容を記述しなくてもその機能を利用したソフトウェアを作成することができる。
広義には、プログラミング言語の提供する機能や言語処理系に付属する標準ライブラリの持つ機能を呼び出すための規約などを含む場合もある(Java APIなど)。
また、APIを経由して機能を呼び出す形でプログラムを構成することにより、同じAPIが実装されていれば別のソフトウェア上でそのまま動作させることができるのも大きな利点である。実際、多くのOS製品などでは同じ製品の旧版で提供していたAPIを引き継いで新しいAPIを追加するという形で機能を拡張しており、旧バージョン向けに開発されたソフトウェアをそのまま動作させることができる。
APIの形式
APIは人間が記述・理解しやすい形式のプログラムであるソースコード上でどのような記述をすべきかを定めており、原則としてプログラミング言語ごとに定義される。
関数やプロシージャなどの引数や返り値のデータ型やとり得る値の意味や定義、関連する変数や定数、複合的なデータ構造の仕様、オブジェクト指向言語の場合はクラスやプロパティ、メソッドの仕様などを含む。
通信回線を通じて遠隔から呼び出すような構造のものでは、送受信するパケットやメッセージの形式、通信プロトコル(通信規約)などの形で定義される仕様をAPIと呼ぶこともある。
Web API
近年ではネットワークを通じて外部から呼び出すことができるAPIを定めたソフトウェアも増えており、遠隔地にあるコンピュータの提供する機能やデータを取り込んで利用するソフトウェアを開発することができる。
従来は通信を介して呼び出しを行うAPIはRPC(リモートプロシージャコール)の仕様を元に製品や環境ごとに個別に定義されることが多かったが、インターネット上でのAPI呼び出しの場合は通信にHTTPを、データ形式にXMLやJSONを利用するWeb APIが主流となってきている。
2000年代前半まではWeb APIの標準として仕様が巨大で機能が豊富なSOAPの普及が試みられたが、2000年代中頃以降は軽量でシンプルなRESTful APIが一般的となり、狭義のWebアプリケーションだけでなく様々な種類のソフトウェアやネットサービス間の連携・接続に幅広く用いられるようになっている。
APIと実装
API自体は外部からの呼び出し方を規定した決まりごとに過ぎず、呼び出される機能を実装したライブラリやモジュールなどが存在して初めてAPIに挙げられた機能を利用することができる。
あるソフトウェアのAPIが公開されていれば、同じAPIで呼び出すことができる互換ソフトウェアを開発することもできる。ただし、APIを利用する側のプログラムが(スクリプトなどではなく)バイナリコード(ネイティブコード)の場合にはこれをそのまま動作させることはできないのが一般的で、同じソースコードを元に互換環境向けにコンパイルやビルドをやり直す必要がある(ソースレベル互換)。
また、API自体は標準実装における動作の詳細までは定義していないため、APIが同一の互換ソフトウェアだからといって動作や振る舞いがまったく同じであるとは限らない。商用ソフトウェアの場合はAPIが非公開だったり、すべては公開されていなかったりすることが多く、公開情報だけではAPI互換の製品を作ることも難しい。
APIと知的財産権
従来は特許で保護されている場合を除いて、APIそのものには著作権その他の知的財産権は存在しないとする見方が一般的で、実際、元のソフトウェアのコードを複製せずすべて独自に実装するという方法でAPI互換ソフトウェアが数多く開発されてきた。
ところが、米オラクル(Oracle)社が権利を有するJava言語やその処理系に関して、米グーグル(Google)社が同社の許諾を得ずにAndroidスマートフォン向けにJava APIを実装した実行環境(Dalvik VM)を開発・提供しているのは著作権侵害であるとの裁判が起こされ、米裁判所は訴えを認める判決を出した。今後はAPIの権利について従来の状況が変化していく可能性がある。
ライブラリ
図書館、図書室、資料室、書庫、書斎、蔵書、文庫、選書、双書などの意味を持つ英単語。ある分野の資料やデータなどを一定の形式で集めたものを、図書館になぞらえて比喩的にライブラリと呼ぶことがある。
ITの分野では、ある特定の機能を持ったコンピュータプログラムを他のプログラムから呼び出して利用できるように部品化し、そのようなプログラム部品を複数集めて一つのファイルに収納したものをライブラリということが多い。
一般的に、ライブラリにはオブジェクトコード(機械語などで記述された実行可能形式のプログラム)が格納されているが、それ単体で起動して実行することはできず、他の実行可能ファイルに連結されて利用される。言語や処理系によってはソースコードの集合をライブラリという場合もある。
様々なプログラムが共通して利用する汎用性の高い機能などがライブラリとして開発・提供されることが多く、標準的なライブラリはオペレーティングシステム(OS)やプログラミング言語の開発環境、開発ツールなどの一部として付属することが多い。
特定のソフトウェアやハードウェアを利用したプログラムを開発するために必要な機能がライブラリの形でまとめられている場合もあり、当該システムのソフトウェア開発キット(SDK)などの一部として開発者に提供される。
また、部品化されたコンピュータプログラム以外にも、特定の分野や形式のデータなどを検索、取得、再利用しやすい形にまとめたファイルやデータベース、Webサイトなどのことを「フォトライブラリ」「音声ライブラリ」などといったように呼ぶことがある。
DLLファイル 【Dynamic Link Library】
Windowsのプログラムファイルの種類の一つで、様々なプログラムから利用される汎用性の高い機能を収録した、部品化されたプログラムのこと。標準のファイル拡張子は「.dll」。
DLLはそれ自体は単体で実行することはできず、実行可能ファイル(EXEファイルなど)が起動する際に自動的に連結されてメモリ上に展開される。多くのプログラムが共通して必要とする機能が収められており、様々なプログラムの一部として取り込まれて実行される。
DLLには、Windows開発元の米マイクロソフト(Microsoft)社がWindows自体や同社製ソフトウェアの一部として提供しているものと、同社以外の開発者が作成して販売あるいは配布しているものがある。Windows対応ソフトウェアの開発者にとっては、DLLとして提供されている機能は自ら開発せずに済むため開発効率が高まる。
おおむね拡張子が「.dll」のファイルがDLL形式のファイルとなるが、ActiveXコントロールの「.ocx」のように別の拡張子を用いるファイルもある。アプリケーションソフトに機能を追加するプラグインなどの中にも、DLL形式ながら他の拡張子で提供されるものがある。
多くのDLLファイルはWindows標準のWin32 APIという規約に基づいて機能を呼び出すよう設計されているが、COM(Component Object Model)に基づいて設計されたCOMコンポーネントや、.NET環境で開発されたマネージコードのアセンブリなど、内部の形式にはいくつかの種類がある。
ダイナミックリンクライブラリ (動的リンクライブラリ)
一般名としてのダイナミックリンクライブラリは、(Windows以外にも様々なOSで)実行時に実行ファイルに連結されるライブラリファイルのことを指す。多くのUNIX系OSでは.soファイルが、macOSでは.dylibファイルが該当する。
開発時に実行ファイル内部に取り込んで提供される「スタティックリンクライブラリ」(静的リンクライブラリ)の対義語で、ライブラリファイルが単体で配布・提供される。OS標準の機能など、多くのプログラムが共通して利用する汎用的な機能の提供に用いられることが多い。
クラスライブラリ
オブジェクト指向プログラミング言語において、外部から利用可能な特定の機能を持つプログラム部品をクラスとして定義し、これを複数集めて一つのファイルなどの形にまとめたもの。オブジェクト指向言語におけるライブラリ。
様々な場面で必要となる汎用的な機能をクラスとして定義しライブラリにまとめて配布することで、個々のプログラマは似たような機能をそれぞれ開発しなくても、すでに存在するクラスライブラリを自らのプログラムに連結するだけでその機能を呼び出すことができる。
ライブラリに含まれるクラスはその言語を用いて開発された個別のプログラムだが、多くの言語では開発元などが汎用的な機能をまとめた標準のクラスライブラリを開発環境や実行環境と共に配布しており、実質的には言語仕様の一部のように取り扱うことができるようになっている。
標準ライブラリとは別に、特定のソフトウェアや通信プロトコル、機器などを利用するための機能をまとめてクラスライブラリとしてSDK(ソフトウェア開発キット)などに含めて提供する場合もある。
商用の言語や開発環境では公開・配布されるのは外部から利用するのに必要なクラス定義やAPI、実行可能ファイルのみであることが多いが、オープンソースの言語や処理系ではクラスライブラリのソースコード自体が公開されている場合もある。
コンポーネント
部品、成分、構成要素などの意味を持つ英単語。ITの分野では機器やソフトウェア、システムの構成する部品や要素などのことを意味する。
ソフトウェア開発の分野では、特定の機能を持ち単体で完結しているが、単体では使用せず(できず)、他のプログラムから呼び出されたり連結されたりして使用されるプログラム部品のことをソフトウェアコンポーネントという。
特に、ある特定のシステムの一部を構成するのみに留まらず、将来単体で提供されて他のソフトウェアに組み入れられたり、他の開発プロジェクトで再利用されることを意図し、汎用性や独立性を高めた仕様や設計を持つものを指してコンポーネントと呼ぶことが多い。
また、ソフトウェア開発の中でも、GUIアプリケーションやWebシステムの場合には、実行時の操作画面を構成する個々の操作要素(ボタンやテキストボックスなど)のことや、それらを組み合わせた機能単位などのことをコンポーネントと呼ぶことがある。
意味の似た単語に「モジュール」(module)があるが、語義に明確な違いはなく、ほとんど同じ概念として用いられことが多い。ただし、モジュールには「システムや他の部品への接合部の仕様が標準化され、容易に追加や交換ができるような構成要素」といった意味合いが込められることが多いのに対し、コンポーネントは単純に要素や部品一般のことを指すことが多い。
ソフトウェアに限らず機器(ハードウェア)を構成する装置や部品、部材などをコンポーネントと呼ぶこともある。オーディオの分野では、プレーヤーやスピーカー、アンプなど単体の機器を組み合わせて一つのオーディオシステムを組み立てられる製品や構造を「コンポーネントステレオ」と呼び、日本では「コンポ」の略称で親しまれている。
JavaBeans
Java言語で再利用可能な部品(モジュール)化されたプログラムを作成するための仕様。また、その仕様に則って開発された部品化されたJavaプログラム。
Javaクラスとして定義したプログラムを容易に再利用できるようにしたもので、いくつかの規約に従って設計されたクラスがJavaBeansとして扱うことができるようになる。部品化されたJavaプログラムは「Bean」(ビーン)とも呼ばれる。
主な規約として、引数なしのpublicなコンストラクタが定義されている、外部からプロパティにアクセスするためのアクセサメソッド(getterメソッド/setterメソッド)など、メソッド名が一定の命名規則に則っている、シリアライズ可能になっている、などがある。
もとは、アプリケーションの操作画面(ユーザーインターフェース)を構成する表示・操作要素(GUI部品)に共通の仕様を持たせ、RADツールなどを用いて視覚的な操作で画面を設計し、初期化などのコードをツール側で自動生成できるようにするために導入された。
JavaBeansの仕様自体はGUI部品に限定されたものではなく汎用的であるため、様々なプログラムを共通の仕様で部品化する仕様として普及し、コードの共有や再利用、機能毎の分離や役割分担などに応用されている。汎用的なBeanを開発し、公開あるいは販売している開発者もいる。
拡張仕様として、ネットワーク上の異なるコンピュータに分散して配置されたJavaプログラム群が協調して動作するためのプログラム部品の仕様について定めた「EJB」(Enterprise JavaBeans)がある。Webアプリケーションを構成するアプリケーションサーバなどで利用される。
CORBA 【Common Object Request Broker Architecture】
様々なソフトウェア部品(コンポーネント)間で相互に機能の呼び出しなどを行えるようにする手順を定めた標準規格の一つ。業界団体のObject Management Group(OMG)が仕様を策定・公開している。
CORBAは異なるコンピュータ上のプログラム部品(コンポーネント)同士がネットワークを通じて機能やデータを利用し合う「分散オブジェクト環境」の基盤となるソフトウェアの仕様や通信規約などを定めている。プログラミング言語やオペレーティングシステム(OS)の違いに依らず利用することができる。
コンポーネントを外部から呼び出す方法などは共通の「IDL」(Interface Definition Language:インターフェース記述言語)と呼ばれる言語によって記述され、呼び出し時にはそれぞれのプログラミング言語へのマッピング(変換)が自動的に行われる。
CORBAでは、コンポーネント間は直接通信せず、「ORB」(Object Request Broker)と呼ばれる中継ソフトウェアを介してやり取りする。ORBはデータ形式の変換などを行って環境間の仕様の違いなどを吸収し、相手方のコンポーネントの呼び出し、応答の呼び出し元への返却を行う。
異なるコンピュータで動作するORB間は通信ネットワークを通じて「GIOP」(General InterORB Protocol)あるいは「IIOP」(Internet InterORB Protocol)と呼ばれるプロトコル(通信規約)で接続され、同じコンピュータ上のコンポーネント間の通信とほとんど同じ手順で別のコンピュータのコンポーネントを呼び出すことができる。
OSGi 【OSG】
動作中の機器に部品(モジュール)化されたソフトウェアを追加したり、その実行状態を制御したりする規格の一つ。業界団体のOSGi Allianceが仕様を策定している。
Javaプログラムを対象としたもので、Java仮想マシン(JVM:Java Virtual Machine)の上でソフトウェアの実行基盤であるOSGiプラットフォーム(OSGi Service Platform)を動作させ、そこに「バンドル」(bundle)と呼ばれるソフトウェア部品を追加することができる。
OSGiではこのプラットフォームとバンドルが備えるべき仕様や、それらの間の連携方法などの標準を定めており、開発元が異なるプラットフォームやバンドルを繋ぎあわせてシステムを構成することができる。バンドルの追加や削除、起動、停止などはプラットフォームの停止や再起動を伴わず動的に実行することができるのも大きな特徴となっている。
もとは家庭内ネットワークなどでコンピュータやデジタル家電などをゲートウェイ機器を中心に連携させ、インターネットを通じて動的に制御ソフトウェアを更新したり、新しい機能を配信したりするためのソフトウェア基盤を構築することを目指して策定された。
その後、様々な環境でJavaプログラムをモジュール化して動的に追加、実行するソフトウェア環境の標準として普及し、著名な採用例に統合開発環境(IDE)の「Eclipse」などがある。当初は規格名が「Open Services Gateway」、団体名が「Open Services Gateway Initiative」だったが、2003年に規格名が「OSGi」、団体名が「OSGi Alliance」にそれぞれ改められた。
ファイルシステム 【FS】
オペレーティングシステム(OS)の機能の一つで、永続的にデータを保存できる記憶装置(ストレージ/外部記憶装置)内部の記録状態を管理・制御し、人間に分かりやすいファイル単位でデータの書き込みや読み出しができるようにするシステム。ストレージ以外のシステム上の資源もファイル単位で取り扱えるようにするものもある。
ファイルシステムはストレージ内に設けられた連続した領域(ディスクなどの記憶媒体そのものや、その内部を分割したパーティション、ボリュームなど)を等容量の微細な領域に区画分けし、そのどこに何が記録されているかを記録する管理領域を作成する。
データは「ファイル」(file)と呼ばれる単位で管理され、任意の長さ(最大長に制限がある場合がある)のデータをストレージ上の空いている領域へ記録する。データは連続した領域に記録されるとは限らず、一つのファイルが複数の空き領域に分散して記録される場合もある。
ファイルには任意のファイル名を付けることができ、作成日や最終更新日(タイムスタンプ)、ファイルシステム上での位置(どのディレクトリに含まれるか)、登録利用者やグループごとのアクセス権限などの情報が管理領域に記録される。
人間や実行中のプログラムがストレージを操作する際は、いきなり内部の特定の位置を読み書きするのではなく、ファイルシステムに対してファイル名やパス(path:ストレージ内の位置情報)などを指定してファイルの作成や書き込み、読み込み、上書き、削除などの操作を依頼する。
ファイルシステムは管理領域を参照して既存のファイルの記録位置を割り出し、読み込みや書き込みを行なったり、新しいファイル用の領域を確保して管理領域に追加したり、削除されたファイルの領域を解放して管理領域から抹消したりといった操作を行う。
ファイルシステム上には複数のファイルを格納し、分類・整理することができる「ディレクトリ」(directory)あるいは「フォルダ」(folder)と呼ばれる保管場所を任意に作成することができる。ディレクトリの中にはさらにディレクトリを作成することができ、ファイル群を階層型に分類して管理することができる。
ファイルシステム上の別のファイルへの参照を表すリンクと呼ばれる特殊なファイルを作成できる場合もある。このうち、ファイルの実体は一つで、ファイルシステム内の複数の箇所に実体を指し示すファイル名(パス)を置くことができる機能を「ハードリンク」、別のファイルへの参照を表す特殊なデータを記録したファイルを作成する機能を「ソフトリンク」という(システムによってショートカット、エイリアス、シンボリックリンクなどと呼ばれることもある)。
ファイルシステムにはファイルやディレクトリの作成や管理といった基本機能の他にも、暗号化や利用者ごとのアクセス権限の設定などのセキュリティ機能、ファイル単位やストレージ単位の透過的なデータ圧縮、チェックサムやスナップショット、ジャーナリングなどの信頼性向上機能といった付加機能を持つものもある。
多くのOSは標準で一つ以上のファイルシステムに対応し、追加的に複数のファイルシステムに対応している場合が多い。Windowsでは「FAT」(FAT16/FAT32/exFAT)や「NTFS」が、macOS(Mac OS X)では「HFS+」や「APFS」が、Linuxでは「ext3」や「ext4」が標準的に用いられている。光学ディスク(CD/DVD/Blu-ray Disc)では独自のファイルシステム仕様が規定されており、「ISO 9660」(CD)や「UDF」(DVD/BD)がよく用いられる。
ディレクトリ
電話帳(phone~)、住所録、名鑑、要覧、指導書、規則集などの意味を持つ英単語。IT関連では、多数の対象をその所在などの情報と共に一覧できるよう整理したものを意味することが多い。
ファイルシステムのディレクトリ
ストレージ(外部記憶装置)のファイルシステムなどで、複数のファイルを格納し、ファイルを分類・整理することができる保管場所のことをディレクトリということがある。OSによっては同様の仕組みを「フォルダ」(folder)ということもある。
ストレージ内部を論理的に区切って名前をつけて区別する仕組みで、ディレクトリ名によって識別される。ディレクトリ内には任意のファイルを置くことができるほか、別のディレクトリを作成して入れ子状にすることができる。ディレクトリ内に作られたディレクトリは「サブディレクトリ」(subdirectory)あるいは「子ディレクトリ」などと呼ばれる。
ディレクトリの入れ子関係は、システムやストレージ領域の全体を表すディレクトリを頂点とする階層構造(あるいは木構造)として表すことができ、これを根本から先端に向かって枝分かれする樹木の形になぞらえて「ディレクトリツリー」と呼ぶことがある。
UNIX系OSでは、ストレージや他のシステム資源全体を包含する「ルートディレクトリ」(root directory)を頂点として、Windowsでは各ドライブごとにその内部を包含する「ドライブルート」(drive root)を頂点として、それぞれディレクトリの位置を指し示す。
ストレージ内でのディレクトリやファイルの所在は、「/foo/var/hoge.txt」のようにルートからの経路を順に並べた「パス」(path)によって表す。UNIX系OSでは区切り文字として「/」(スラッシュ)を用いるが、Windowsでは「C:\foo\var\hoge.txt」のように「\」(バックスラッシュ)を用いる。日本語版では同じ文字コードを共有している円マーク(¥)になる。
ディレクトリサービス (directory service)
情報システムの一種で、ネットワーク上に存在する機器やサービスについての情報や、利用者の識別や権限に関する情報を一元管理する仕組みのことを「ディレクトリサービス」(directory service)あるいは単にディレクトリという。
原義の電話帳に近い役割をコンピュータネットワーク上で果たすシステムで、登録利用者のアカウント情報(ユーザー名やパスワード、各種の権限など)、ネットワーク上のサーバコンピュータが提供する機能、共有データ(共有ファイル、共有ディレクトリなど)、プリンタなどの周辺機器についての情報を集めて単一のデータベースに登録して管理する。
利用者はディレクトリにアクセスすることでネットワーク上の資源の所在を知ることができ、個々の資源に対して権限の確認をしなくても、一度のログイン操作で許可された資源を自由に利用できるようになる。米マイクロソフト(Microsoft)社がWindows Serverなどで提供しているActive Directory(アクティブディレクトリ)が特に有名である。
ファイル
コンピュータにおけるデータの管理単位の一つで、ストレージ装置(外部記憶装置)などにデータを記録する際に利用者やオペレーティングシステム(OS)から見て最小の記録単位となるデータのまとまり。
利用者がコンピュータを用いて記憶媒体にデータを保存、読み込み、移動、削除などする際に一つのまとまりとして取り扱うデータの集合を表し、OSの一部であるファイルシステム(file system)によって管理される。
ハードディスクやSSD、USBメモリ、光学ディスク(CD/DVD/Blu-ray Disc)などの記憶装置・記憶媒体を利用する際に用いられるほか、コンピュータと周辺機器の間やコンピュータ間の通信においてもデータの送受信単位として利用される。
ディレクトリとパス
ファイルシステムは記憶媒体内でファイルの作成や削除、上書き、移動、複製などを管理する仕組みで、複数のファイルをまとめて一つの集まりとして扱う「ディレクトリ」(directory)や「フォルダ」(folder)などの入れ物(領域)を作成することもできる。
ディレクトリやフォルダの中に別のディレクトリやフォルダを作成し、入れ子状にすることもでき、記憶媒体全体を階層構造に整理して管理する。装置内でのファイルの位置は、「C:¥Windows¥System32¥cmd.exe」のように最上位から順にディレクトリ名を繋げた「パス」(path)という記法で表される。
ファイル名
ファイルにはそれぞれ固有のファイル名が付けられ、これを用いて識別・指定される。多くのOSではファイル名の末尾にファイルの種類や形式を表す「拡張子」(extension)と呼ばれる数文字の英数字の符号が付与される。
コンピュータの操作画面ではファイルは記憶媒体内での位置(パス)やファイル名で表示され、キーボードなどからパスやファイル名を指定して操作する。グラフィック表示を用いるGUI(Graphical User Interface)を備えたOSでは、ファイルは種類によって異なるアイコン(絵文字)とファイル名によって表示され、マウス操作やタッチ操作でアイコンを指し示して操作を行う。
ファイル属性
ファイルはファイルシステムに記録される際に様々な属性や付加情報(メタデータ)と共に記録される。作成日時や最終更新日時、最終アクセス日時、作成者(所有者)、各利用者やグループのアクセス権限などが記録、設定される。
また、多くのOSではファイルに「読み取り専用」属性を付与でき、解除されるまで削除や上書きができなくなる。「隠しファイル」に設定されたファイルは通常の動作モードではファイル一覧画面などに表示されなくなる(ファイル名を直に指定すれば操作はできる)。
ファイル形式
ファイルに記録されるデータの形式や書式(ファイルフォーマット)は作成したソフトウェアによって様々だが、大きく分類すると「バイナリファイル」(binary file)と「テキストファイル」(text file)に分かれる。
バイナリファイルは特に制約なくあらゆるビットパターンを記録できる自由な形式で、その形式に対応したソフトウェアでなければ何が記録されているか知ることができない。テキストファイルはデータを文字情報として記録したファイルで、文字コード規格で規定されたコードに従ってデータを文字列に置き換えて記録する。対応ソフトがなくてもどのような文字が記録されているかは見ることができる。
パス 【パス名】
小道、道筋、進路、通り道などの意味を持つ英単語で、ITの分野では、コンピュータ内で特定の資源の所在を表す文字列のことを参照情報という。ストレージ(外部記憶装置)内でファイルやディレクトリ(フォルダ)の位置を表すのに用いられるが、他の用途でも使われる。
ストレージの多くはファイルシステムによって管理され、多数のファイルをグループ分けして整理しやすいように、複数のファイルを格納できる「ディレクトリ」(directory)が多段階の入れ子状になった構造になっている。これを階層構造と捉えて、最上位から順にディレクトリ名を並べて記したものが参照情報である。
例えば、LinuxなどのUNIX系OSで「/foo/var/hoge.txt」という参照情報は、ルートディレクトリ(最上位ディレクトリ)にある「foo」ディレクトリの中の「var」ディレクトリの中にある「hoge.txt」というファイルを指している。
Windows(および前身のMS-DOSなど)では、先頭をドライブレターに「:」(コロン)とし、区切り文字を「\」(日本では円マーク「¥」、欧米ではバックスラッシュ「\」)として「C:\foo\var\hoge.txt」のように表す。この例は、Cドライブの「foo」フォルダの中の「var」フォルダの中の「hoge.txt」ファイルを指す。
相対パスと絶対パス
現在操作対象としているディレクトリ位置(カレントディレクトリ)を起点に、相対的な位置を記述する記法を「相対参照情報」(relative path)、階層構造の頂点(ルートディレクトリ)からの位置を記述する記法を「絶対参照情報」(absolute path)という。
相対パスは現在位置を「.」、一つ上の階層の親ディレクトリを「..」という特殊な表記で表し、「./hoge.txt」(カレントディレクトリにあるhoge.txt)や「../../hoge.txt」(2階層上のディレクトリのhoge.txt)のように書き表す。
特殊なパス
参照情報が最もよく使われるのはファイルシステムで管理されるストレージにおけるファイルやディレクトリの位置の記述だが、ストレージ以外の周辺機器などを指し表す特殊な参照情報表記が使われることもある。
例えば、UNIX系OSでは「/dev」以下の参照情報には周辺機器や標準入出力、特殊な機能(出力を捨てるための/dev/null等)にアクセスできる「スペシャルファイル」が置かれており、Windowsでも画面出力を表す「con」やプリンタを表す「prn」など特殊な参照情報(予約デバイス名)が存在する。
また、UNIX系OSでは個々の利用者のためのスペースとしてホームディレクトリが設けられ、標準的には「/home/ユーザー名」という位置に置かれる。自分のホームディレクトリは「~」(チルダ)という特殊な記号で表すこともできる。すなわち、「~」の指し示すストレージ内での位置はログインしているユーザーによって異なる。
UNC
Windowsでは参照情報の表記をネットワーク上の他のコンピュータの共有資源(共有フォルダなど)に拡張したものとして「UNC」(Universal Naming Convention)が定められている。これは先頭に「\\コンピュータ名\共有名」を付けたもので、残りはそのコンピュータ内での参照情報が続く。これにより別のコンピュータの共有フォルダの中のファイルや共有プリンタなどを通常の参照情報と同じように書き表すことができる。
絶対パス
ファイルなどの所在を書き表すパス(path)の表記法の一つで、階層構造の頂点(最上位階層)からの位置関係を記述する方式。
現在位置とは無関係に、ドライブやシステムの最上位ディレクトリ(ルートディレクトリ、ルートフォルダ)から目的のディレクトリ(フォルダ)やファイルまでの道筋を省略なくすべて記述する方法で、途中にあるディレクトリを区切り記号で繋いで並べる。
UNIX系OSでは頂点はルートディレクトリ(「/」で表される)で、「/」(スラッシュ)を区切り記号として「/usr/bin/sh」のように途中にあるディレクトリを順に示す。WebサイトやFTPサーバなどネット上の資源を記述する際も(サーバがWindows等でも)この形式が用いられる。
MS-DOSやWindowsではドライブ名(「C:¥」など)を頂点に、日本では「¥」(円記号、実際には半角文字)、海外では「\」(バックスラッシュ、同)を区切り記号として記述する。Windowsネットワークのファイル共有ではコンピュータ名を頂点に「¥¥コンピュータ名¥共有名¥パス」といった形式で記述するUNC(Universal Naming Convention)を用いる。
一方、システムが現在操作対象としているカレントディレクトリ(カレントフォルダ)を起点に、相対的な位置関係を記述する方式は「相対パス」(relative path)という。
絶対パスとフルパス
絶対パスとフルパスは通常同じ意味として用いられ、特にコンピュータ上でファイルシステムを扱う際には技術的な区別は存在しない。
ただし、Webサーバ等の運用においては、URLのパス部分の絶対指定のことを「絶対パス」(現在位置起点を「相対パス」)とし、サーバ内部でのファイルシステム上でのパスの絶対指定を「フルパス」と呼び分ける場合がある。
例えば、「https://www.example.com/mydir/myfile.html」というURLで参照されるファイルを、サーバ内の別のWebページなどから「/mydir/myfile.html」と指定したものが絶対パスにあたる。一方、このファイルがサーバ内部では実際には「/var/www/html/mydir/myfile.html」という位置に置かれている場合に、これをフルパスと呼ぶ。
相対パス 【相対パス指定】
ファイルなどの所在を書き表すパス(path)の表記法の一つで、現在位置からの相対的な位置関係を記述する方式。起点となる位置から目的の位置までの道筋にある要素を順に並べて記述する。
システムが現在操作対象としているカレントディレクトリ(カレントフォルダ)を起点に、指し示したいディレクトリやファイルの相対位置を記述する方法で、途中にあるディレクトリを区切り記号で繋いで並べる。区切り記号はWindowsの場合、日本では「¥」(円記号、実際には半角文字)、海外では「\」(バックスラッシュ、同)を用い、UNIX系OSやWebサーバなどでは「/」(スラッシュ)を用いる。
カレントディレクトリは省略可能だが明示したい場合は「.」で表し、一階層上位のディレクトリは「..」で表す。「..」を繰り返し記述することでディレクトリ階層の親子関係をたどって上へ移動することができる。例えば、「../../foo/bar.txt」という記述は、現在のディレクトリの二階層上のディレクトリの中にある「foo」ディレクトリの中にある「bar.txt」というファイルを指し示している。
一方、現在位置とは無関係に、ドライブやシステムの最上位ディレクトリ(ルートディレクトリ、ルートフォルダ)からの絶対的な位置関係を記述するパスの指定方法を「絶対パス」(absolute path)という。
ファイル共有
複数のコンピュータや利用者間で、ストレージ(外部記憶装置)に保存されたファイルやディレクトリ(フォルダ)を共有すること。狭義には構内ネットワーク(LAN)を通じて行われるものを指すが、広義にはインターネット上のサービスなどを通じて行われるものを含む。
LAN上で行われるファイル共有はOSのネットワーク機能の一部などとして提供されるもので、ネットワークを介して他のコンピュータ上のストレージ領域の一部に許諾を得てアクセスし、ファイルやディレクトリの読み込みや書き込み、複製、移動などを行うことができる。
コンピュータの利用者や管理者は相手方のコンピュータや利用者ごとにアクセス権を設定することができ、特定の利用者や利用者のグループのみにアクセスを許可したり、読み込みのみ、読み書きの両方が可能など、相手によって権限を細かく指定することができる。
WindowsではSMB/CIFSと呼ばれる仕様を用いたファイル共有が標準で提供され、macOS(Mac OS X)やUNIX系OSからアクセスできるようにするソフトウェアもある。LinuxなどのUNIX系OSではNFSと呼ばれる仕様が有名である。
OSの機能とは独立にネットワーク上でファイル共有機能を提供するソフトウェアもあり、特に、インターネット上で不特定多数の相手と一対一の相対接続(Peer to Peer)を行い互いが持っているファイルを共有・交換できるファイル共有ソフトはP2Pソフトとも呼ばれる。
インターネット上で複数の機器(デバイス)間や特定の相手やグループ間でファイル共有が可能なネットサービスもあり、オンラインストレージやSNS、クラウドサービスの追加機能として提供されることが多い。
アクセス権
システムの登録利用者や利用者のグループに対して設定される、そのシステムの管理する資源を使用する権限のこと。アクセス権を設定し、これに基づいて資源の利用を許可したり拒否することをアクセス制御という。
何に対するどんな権限を設定できるかはシステムの種類によって様々だが、単にアクセス権といった場合はOSのアカウント管理システムやファイルシステムなどを通じて設定される、ストレージ(外部記憶装置)内のファイルやフォルダ、周辺機器などに対する利用権限を指すことが多い。
多くのOSでは、ファイルやフォルダに対しては「読み込み」「書き込み」「作成」「削除」などの動作について、また、実行可能ファイルはこれに加えて「実行」について可否を設定できるようになっている。
アクセス権は特定のユーザーアカウントやアカウントのグループを単位に設定するようになっていることが多いが、「管理者」「全員」「システム」「作成者」など特別な組み込みアカウントやグループを指名できる場合もある。
アクセス権を変更する権限を持つのは一般に管理者や管理者グループに属するユーザーで、一般の利用者は与えられたアクセス権に従って資源を使用するのみになっていることが多い。
シンボリックリンク 【ソフトリンク】
オペレーティングシステム(OS)のファイルシステムの機能の一つで、特定のファイルやディレクトリを指し示す別のファイルを作成し、それを通じて本体を参照できるようにする仕組み。
リンクは本体と同じディレクトリに置いても良いが、通常は別の場所から参照できるようにするために作成される。UNIX系OSではシンボリックリンクの名称で知られるが、ほぼ同じ仕組みをWinodwsでは「ショートカット」(shortcut)、macOS(Mac OS X/旧Mac OS)では「エイリアス」(alias)という。
UNIX系OSでは一般に「ln」コマンドでシンボリックリンクを作成することができ、ファイルシステム上には本体の場所が記録された0バイトのファイルが出現する。シンボリックリンクを指定して操作を指示すると、自動的に本体に対して操作が行われる。
削除を指示するとシンボリックリンクが削除され、本体は影響を受けない。別の装置やファイルシステムにある対象を参照したり、存在しない(か存在するか不明な)対象に対しても作成できる。本体が元の場所から移動したり改名すると参照できなくなる。
似た機能に「ハードリンク」(hard link)があり、一つのファイルやディレクトリに対してファイルシステム内で複数の名称(パス)を設定することができる。ハードリンクはリンクファイルを介さず直接本体を指し示すため本体の削除ができ、本体を移動・改名しても参照は維持されるが、同じファイルシステム上に現に存在するファイルにしか設定できない。
ショートカット
近道、抜け道、手っ取り早い方法、手抜き、などの意味を持つ英単語。コンピュータでは、利用者が機能や情報に素早くアクセスするのを助ける簡易な手段、仕組み、操作法などのことをショートカットということが多い。
Windowsのショートカット
Windowsのファイルシステムの機能の一つで、別の場所にあるファイルやフォルダを指し示す特殊なファイルやそのアイコンのことをショートカットという。
拡張子「.lnk」のファイルで、内部には本体が存在するストレージ装置内の位置(パス)が記載されており、あたかも本体がそこにあるかのように扱うことができる。アイコンも本体と同じものが表示されるが、左下に小さく曲がった矢印が記載され、ショートカットであることを表している。
ファイルシステム内の深い階層にあるよく使うファイルのショートカットをデスクトップなどに設置すれば、必要なときに素早く開くことができる。実行可能ファイルへのショートカットであれば、ダブルクリックするなどして開くと自動的に実行ファイル本体が起動される。
ほぼ同様の機能のことを、macOSでは「エイリアス」(alias)あるいは「シンボリックリンク」(symbolic link)、LinuxなどのUNIX系OSでは「シンボリックリンク」と呼び、オペレーティングシステム(OS)の種類に拠らない一般的な呼称としては「ソフトリンク」(soft link)という。
キーボードショートカット
キーボード上の複数のキーを同時に押すことで、あらかじめ対応付けられたソフトウェアの特定の機能を実行することができる操作のことや、そのために割り当てられたキー入力の組み合わせのことを「キーボードショートカット」「ショートカットキー」あるいは単にショートカットという。
「Ctrlキーを押しながら『C』キーを押すと選択範囲をコピーする」といったように、ShiftキーやCtrlキー、Altキーなどの修飾キーと文字入力キーやファンクションキーなどを組み合わせて押すことで、紐付けられた機能を素早く実行することができる。
操作と機能の対応関係は機種やアプリケーションごとに異なるが、Windows環境でCtrl+Cがコピー、Ctrl+Xがカット、Ctrl+Vがペースト、Ctrl+Aが全選択、Ctrl+Sが保存、Shift+矢印キーやPageUp/PageDownキーで文字列選択など、慣用的に多くのアプリケーションに共通するショートカットもある。
一般の外来語としてのショートカット
一般の外来語としては、(女性の)短い髪型のことをショートカットということが多いが、これは和製英語で、英語では “short hair” などと表現する。また、原義の通り、自動車などで移動する際に抜け道、裏道、近道などを利用することをショートカットということもある。
ビデオゲームでは、レースゲームなどで正規のコースを逸脱するなどして経路を短縮することや、転じて、決められた手順やストーリーのあるゲームで本来のシナリオや操作の一部を省略して先に進むこともショートカットという。
エイリアス
偽名、別名、通称などの意味を持つ英単語。ITの分野では、ある対象や実体を、複数の異なるシンボルや識別子で同じように参照できるする仕組みを指す。
例えば、プログラミング言語の中にはデータ型などに開発者が別の名前を与えて宣言などに使うことができる仕組みが提供されていることがあり、この機能および名付けられた別名のことをエイリアスという。
LinuxなどのUNIX系OSでは、コマンドを別名で登録する機能のことをエイリアスという。aliasコマンドで設定し、unaliasコマンドで削除する。元のコマンドに指定したオプションも含めて展開されるため、長いオプションを頻繁に利用する場合に短い別名で呼び出すことができる。
メールアドレスのエイリアス
メールサーバで電子メールアドレスに別名をつける機能をエイリアスという。一つのメールアカウント、メールボックスに対して複数のアドレスを設定し、どのアドレスに送っても同じ人に届くようにすることができる。送信側からはどれが本アドレスでどれがエイリアスなのか区別することはできない。
迷惑メール対策などのために登録先ごとにアドレスを変えて不要になったら削除したり、企業などで個人名のアドレスに役職名のアドレスでも届くようにするといった利用例がある。アドレスの作成や削除はサーバ側で行うため、所属先や契約先のメールサービスが機能を提供している必要がある。
信号処理のエイリアス
デジタル信号処理の分野では、アナログ信号をデジタルデータに標本化(サンプリング)する際などに、サンプリング周波数の1/2以上の周波数の成分が混じっている時に生じる周期的なノイズのことを「折り返し雑音」「エイリアシング」あるいはエイリアスという。
写真を撮影したり映像を録画する際、細かい規則正しい模様になっている箇所に本来存在しない縞状の模様(モアレ)が見える現象などがこれにあたる。このようなノイズが生じないようにするための信号処理を「アンチエイリアス」(antialias)という。
ファイルシステムのエイリアス
macOS(Mac OS X/旧Mac OS)で、よく使うファイルやフォルダの「分身」を別の場所に置き、すぐに参照できるようにする機能をエイリアスという。Windowsのショートカット、UNIX系OSのシンボリックリンクに似た機能である。
エイリアスのアイコンにポインタを合わせてマウスをダブルクリックするなどファイルを開く操作を行うと、参照先本体のファイルやフォルダを開く動作が行われる。エイリアスを削除しても本体には何の影響もなく、エイリアスはいくつでも作成でき、ファイルシステム内のどこに置いてもよい。
ルートディレクトリ 【ルートフォルダ】
コンピュータがストレージ(外部記憶装置)の内容を整理するファイルシステムにおいて、装置やシステム全体の最上位のディレクトリのこと。すべてのファイルやディレクトリはルートディレクトリを根とする木構造のディレクトリ階層のいずれかに収まっている。
今日一般的なコンピュータのファイルシステムでは、ストレージの内部にファイルを格納するディレクトリ(directory)と呼ばれる領域を任意に作成することができる。ディレクトリの中にディレクトリを、さらにその中にディレクトリを作ることもでき、ディレクトリ構造全体は上位階層から下に向かって順に枝分かれしていく木構造(ツリー構造)となる。この中で、最上位のある唯一のディレクトリのことをルートディレクトリという。
Windowsのルートディレクトリ
Windows(や前身のMS-DOS)ではドライブ(一台の記憶装置あるいはその内部を区切ったパーティション)ごとにルートディレクトリが存在し、「C:¥」のようにドライブレターのみで表されるディレクトリがそれぞれのドライブのルートとなる。複数のストレージやパーティションがある場合にはそれぞれに対応するルートディレクトリが存在する。
Windowsではファイルシステムのディレクトリを含むシステム資源の保管場所をフォルダ(folder)と呼ぶのが一般的であるため、ルートディレクトリのこともルートフォルダ(root folder)と呼ばれることが多いが、意味上の違いはない。
UNIX系OSのルートディレクトリ
UNIX系OSではストレージ装置の物理的な構成は抽象化されており、「/」で表されるシステム全体で単一のルートディレクトリにすべての要素が収まっている。また、ストレージ内のファイルやディレクトリだけでなく、ファイル入出力と同じように扱えるよう抽象化された様々なシステム資源(周辺機器との入出力を扱う/devなど)も配置されている。
ちなみに、UNIX系OSの多くには「/root」というディレクトリもあるが、これはシステム管理者を表す組み込みユーザーアカウントの「root」(ルートユーザー/スーパーユーザー)のホームディレクトリを表すもので、ディレクトリのルートという意味ではない。
カレントディレクトリ 【カレントフォルダ】
実行中のソフトウェアなどがストレージ(外部記憶装置)のファイルシステム中で現在位置として指し示しているディレクトリのこと。相対パスでファイルやディレクトリなどを指定する際の基準の位置となる。
シェルやコマンドラインインタプリタなど主にOSへの操作を受け付けるソフトウェアが内部的に持つ状態の一つで、ストレージのファイルシステムを(UNIX系OSではストレージ以外のシステム上の資源も含む)階層構造で表したディレクトリツリーの中で、「今どこにいるのか」を表している。
利用者がツリーの根本からの絶対位置である絶対パスを指定せずにファイルやディレクトリなどを指定すると、カレントディレクトリからの相対的な位置関係を表す相対パスであると解釈される。この仕組みにより、深い階層にあるファイルなどを指定する際にいちいち長い絶対パスを毎回入力しなくても、当該ディレクトリに「移動」すればファイル名を指定するだけでよくなる。
パスの表記法には特殊な表記として、カレントディレクトリを表す「.」が用意されており(UNIX/Windows共通)、これを用いて相対パスであることを明示的に指定することができるようになっている。例えば「./sub/file.txt」という表記は、カレントディレクトリ中のsubディレクトリ中のfile.txtというファイルを指す相対パスとなる。
シェルなどにはカレントディレクトリを移動したり現在位置を表示したりするコマンドが用意されており、MS-DOSやWindows、ほとんどのUNIX系OSのシェルでは「cd」あるいは「chdir」コマンドにより別のディレクトリに移動できる。現在位置の表示はUNIX系OSでは「pwd」、Windowsでは引数なしの「cd」コマンドが用いられる。
ハードディスク 【HDD】
コンピュータなどの代表的なストレージ(外部記憶装置)の一つで、薄くて硬い円盤(ディスク)の表面に塗布した磁性体の磁化状態を変化させてデータを記録するもの。一台あたりの容量が大きく容量あたりの単価が安いため、パソコンなどに内蔵されるストレージとして標準的な存在となっている。
構造・原理
装置内にはガラスや金属でできたプラッタ(platter)と呼ばれる円盤型の記憶媒体が数枚封入されており、表面には磁性体が塗布されている。これを回転軸で高速(毎分数千回)で回転させ、アームの先端に取り付けられた磁気ヘッドを近接させる。特定の箇所の磁化状態を変化させることでデータを書き込むことができ、状態を読み取ることでデータを読み出すことができる。
プラッタの直径は主流の製品で3.5インチ(約8.9cm)だが、小型の機器向けに2.5インチや1インチの製品も存在する。一台の装置にプラッタが1~8枚程度備え付けられ、通常はその両面を記録に用いる。内部的な制御や区画分けはプラッタごとに行われるが、外部から見た記憶領域としては全体で一つとなる。
他媒体との比較
「ハードディスク」とは硬い円盤という意味だが、これはフロッピーディスクなどのようにプラッタの素材に柔らかいプラスチックフィルムなどを用いる装置と対比した表現である。フロッピーディスクなどは記憶媒体と駆動装置(ドライブ)が分離していてディスクだけを取り外して交換したり持ち運べるが、ハードディスクはディスクとドライブが一体化しているため、「ハードディスクドライブ」(HDD:Hard Disk Drive)とも呼ばれる。
磁気ディスクや光学ディスクなどの中では最も記録密度が高く、同じ世代で比較すると装置(媒体)一台あたりの記憶容量は飛び抜けて大きい。読み書きも高速で、パソコンやサーバなどのコンピュータ製品では基幹的な記憶媒体として広く普及している。ドライブ一体型なこともあり一台あたりの価格が高いことや、振動に弱いという難点もある。
SSDへの置き換え
装置の寸法や接続仕様をハードディスクに揃え、内部の記憶媒体をフラッシュメモリに置き換えた製品はSSD(Solid State Drive)と呼ばれ、ハードディスクの代替として近年急速に浸透している。
読み書き速度が桁違いに速く衝撃にも強いという長所があるが、半導体メモリのため価格が高く一台あたりの容量も少ないという欠点があった。近年では低価格化と記憶容量の向上が劇的に進み、従来のハードディスクの用途を置き換える形で普及が加速している。
接続方式
コンピュータ本体に内蔵されるハードディスクの場合、接続インターフェースとして初期にはIDE/ATA(パソコン向け)やSCSI(サーバ・ワークステーション向け)が、2000年代以降はSATA(Serial ATA)が主に用いられている。独自の筐体を持ちケーブルでコンピュータと繋ぐ外付けの装置もあり、USBやIEEE 1394、eSATAなどの規格で接続される。
ストレージ 【外部記憶装置】
コンピュータの主要な構成要素の一つで、データを永続的に記憶する装置。磁気ディスク(ハードディスクなど)や光学ディスク(CD/DVD/Blu-ray Discなど)、フラッシュメモリ装置(USBメモリ/メモリカード/SSDなど)、磁気テープなどがこれにあたる。
一般的には通電しなくても記憶内容が維持される記憶装置を指し、コンピュータが利用するプログラムやデータなどを長期間に渡って固定的に保存したり、他の機器へのデータの運搬や複製、配布などのために用いられる。
コンピュータ内には補助記憶装置とは別に、半導体記憶素子などでデータの記憶を行う主記憶装置(メインメモリ)が内蔵されており、利用者がプログラムを起動してデータの処理を行う際には補助記憶装置から必要なものをメモリに呼び出して使う。
同じコンピュータに搭載される装置同士で比較すると、補助記憶装置はメモリに比べて記憶容量が数桁(数十~数千倍)大きく、容量あたりのコストが数桁小さいが、読み書きに要する時間が数桁大きい。一般的な構成のコンピュータではメインメモリ容量の百倍から千倍程度の容量の固定内蔵ストレージを用意することが多い。
記録原理による分類
補助記憶装置装置は駆動装置(ドライブ)が記憶媒体(メディア)を操作して、記憶素子の物理状態に信号を対応付けて記録する。様々な動作原理の装置があり、主に磁気を利用するもの、レーザー光を利用するもの、電荷(半導体素子)を利用するものに分けられる。
磁気記録方式の補助記憶装置には磁気テープやハードディスク、フロッピーディスクなどがある。平たい媒体表面の磁性体の磁化状態を変化させて信号を記録する装置で、媒体を薄いテープ状にしてリールに巻き取った「磁気テープ」と、平たい円盤(ディスク)状にして中心軸(スピンドル)で高速に回転させる「磁気ディスク」に分かれる。
一昔前まで補助記憶装置の大半を占めていた方式で、現在でもパソコンに内蔵される固定補助記憶装置としてハードディスクがよく用いられる。磁気テープは容量あたりの単価が極めて安いという特徴から、現在でも企業や官公庁などの大規模なデータ保管に用いられることがある。
光学記録方式の補助記憶装置はCDやDVD、Blu-ray Discなどの光学ディスクで、信号を媒体表面の細かな凹凸や化学的な状態の変化として記録し、高速で回転させながらレーザー光を照射して反射光の変化を読み取る。
製造時にデータを記録する読み出し専用ディスクと利用時にデータの書き込みや上書きができる追記型や書き換え型のディスクがあり、前者は映像やソフトウェアなどのコンテンツの販売で、後者は映像の録画やデータのバックアップ、機器間のデータの運搬などでよく利用される。
近年では、読み出し専用メモリ(ROM)から発展した書き換え可能な不揮発メモリ(電源を落としても内容が消えない半導体メモリ)であるフラッシュメモリの大容量化、低価格化が進み、補助記憶装置装置として広く普及している。ハードディスクの代わりに固定内蔵ストレージとして用いられる「SSD」(Solid State Drive)、携帯機器の内蔵ストレージ、データの運搬に用いられるUSBメモリやメモリーカードなどがフラッシュメモリを応用した補助記憶装置である。
<$Fig:storagecomparison|center|true>フォルダ
「紙挟み」という意味の英単語で、コンピュータの分野では、オペレーティングシステム(OS)の操作画面上で、複数の永続的な操作対象(ファイルやOSの機能など)をまとめて格納・分類することができる名前の付いた保管場所を表す。
コンピュータの利用者に基本的な操作手段を提供するOSのシェルやファイルマネージャが提供するデータの分類機能の一つで、OSの機能や設定情報、コンピュータに繋がれた装置、ストレージやその中のディレクトリやファイルなど、様々な操作対象をグループ分けするための抽象的な保管場所を表す。
典型的にはストレージ(外部記憶装置)上でファイルの保管場所となる「ディレクトリ」(directory)を含むため、その同義語のように用いられることが多い。グラフィック表示(GUI)の操作画面では、原義である紙挟みを模したアイコンで表されることが多い。
フォルダにはシステムによってあらかじめ用意され、あるいはすでに命名済みのものと、利用者が任意に作成して名付け、不要なれば削除することができるものがある。多数の項目を整理する際にはフォルダの内部がさらに複数のフォルダに分かれた階層構造となっている場合もある。上位のフォルダを「親フォルダ」、下位のフォルダを「子フォルダ」あるいは「サブフォルダ」という。
ディレクトリとの違い
OSのファイルシステムによって管理されるストレージ上で、ファイルをグループ分けしてそれぞれ名前をつけて保管することができる格納場所を「ディレクトリ」(directory)という。
UNIX系OSなどではディレクトリはディレクトリとしか呼ばないが、WindowsエクスプローラやmacOSのFinder(ファインダー)ではディレクトリもフォルダの一種として表示・操作するため、これらのシステムではフォルダとディレクトリはほとんど同義語のようにみなされることが多い。
ディレクトリ以外のフォルダの例としては、OSやコンピュータの設定や管理のためのプログラムを集めたコントロールパネル、それぞれの利用者個人に属するファイルやディレクトリを集めたライブラリ機能、圧縮ファイルをあたかもディレクトリのように扱い内部のファイルを一覧したり操作できる機能などがある。
FAT 【File Allocation Table】
米マイクロソフト(Microsoft)社のWindowsシリーズが標準で対応しているファイルシステムの一つ。前身のMS-DOSから使われてきた初期の仕様であるFAT12あるいはFAT16を指す場合と、後に登場したFAT32、exFATなども加えた総称を表す場合がある。
当初はストレージ内でファイルやディレクトリについての情報を記録する特殊なシステム領域の名称だったが、次第にこれを利用して構築されるFATファイルシステムのことを略して単にFATと呼ぶようになった。
FAT系のファイルシステムは仕様が公開されており、管理領域の容量が小さくシンプルなプログラムで高速に読み書きできるなどの特徴がある。Windows自体の標準ファイルシステムはWindows NT系列の製品に由来するNTFSとなって久しいが、現在でも機種やOSをまたいでデータのやり取りをするリムーバブルメディア(USBメモリなど)や、小型の電子機器などで使われるストレージ装置(メモリーカードなど)で根強く使われている。
一方、アクセス権の設定や暗号化などのセキュリティ機能がないことや、大容量の装置では非効率、ファイルやディレクトリの記録日時(タイムスタンプ)がシステムに設定されたタイムゾーンにしか対応していないなどの難点もあり、ハードディスクやSSDなどコンピュータの内蔵ストレージのファイルシステムに用いられることは現在ではほとんどない。
FAT12
1977年に開発された最初の仕様で、同社の「Disk BASIC」の標準ファイルシステムだった。FAT12はクラスタ数の指定に12ビットの整数を用いたことに由来して後から付けられた名称で、当時は単に「FAT」と呼ばれていた。
最大クラスタ数は4,084個、クラスタサイズは512バイト~32KiB(キビバイト)で、最大ボリュームサイズは32MiB(メビバイト)、ファイル数は4,077個まで。標準ではファイル名はいわゆる「8.3形式」(ファイル名本体8バイトまで+拡張子3バイトまで)だが、VFATを適用することで255文字までの「ロングファイルネーム」(LFN)に対応する。
NTFS 【NT File System】
Windows標準のファイルシステムの一つ。ストレージ(外部記憶装置)内部を管理し、ファイルやディレクトリ(フォルダ)を格納する。Windows NTで新たに導入されたためにこのように呼ばれており、それまで標準だった「FAT16」や「FAT32」に替わって標準的に利用されるようになった。
ストレージ上に作成されたボリュームをクラスタと呼ばれる単位で区画分けし、制御情報を記録する領域を設けてファイルやディレクトリを作成できるようにする。クラスタサイズ(アロケーションユニットサイズ)は512バイトから64kB(KiB)まで選択することができる。
クラスタが小さいほど細かいファイルを格納した際の無駄を減らすことができ、大きいほど大容量の装置を扱うことができる。管理できる最大のボリュームサイズはクラスタサイズ次第で、512バイトの場合で16TiBまで、64KiBの場合で256TiBまでとなる。最大ファイルサイズはボリュームサイズと同じである。
ファイルやディレクトリについての情報(メタデータ)を保存するための「フォーク」あるいは「代替データストリーム」と呼ばれる仕組みに対応しており、ファイルのデータ本体と結びつけて、ファイルについての属性情報やアクセス権、サムネイル画像などの情報を格納できる。
ファイル名・ディレクトリ名
ファイル名やディレクトリ名には、日本語などを含むUnicode文字を255文字まで付けることができる。内部的には大文字と小文字は区別して保存されているが、サブシステムによってこれを区別するか同一視するか選択することができ、Win32など通常使用されるシステムでは同一視される。
MS-DOSや初期のWindowsとの互換性のため、これらのシステムの制限である「8.3形式」(ファイル名本体8文字まで+拡張子3文字まで)のファイル名に矛盾なく短縮する機能を持っているが、近年のWindowsではデフォルトでオフに設定されることが多く、次第に使われなくなりつつある。
データ圧縮
ファイルごとあるいはボリューム丸ごとの透過的な圧縮に対応しており、指定すると書き込み時にシステム側で自動的に圧縮、読み込み時に自動的に展開される。利用者やアプリケーションは意識したり特別に対応する必要はなく、非圧縮時と同じように操作できる。
データ圧縮機能とは別に、長い領域が空白(0で埋まっている)になっている大きなサイズのファイル(スパースファイル)を保存する際、空白が連続する部分の保存を省略する(当該部分に内容が書き込まれた時点で保存領域を用意する)機能があり、記憶容量を節約することができる。
高い安定性
ファイルの更新を監視して変更履歴を記録し、不意な電源断などでファイルシステムの記録状態に矛盾が生じた際に記録をたどって修復する「ジャーナリングファイルシステム」としての機能を持つ。データ本体のバックアップは行わず、失われたデータを復元できるわけではない。
「VSS」(Volume Shadow Copy:ボリュームシャドーコピー)機能を使用すると、ある時点でのファイルシステム内の状態を丸ごと写し取ったスナップショットを作成することができ、データの喪失や破損時に特定時点の状態に巻き戻すことができる。
破損して読み書きできなくなった不良セクタを発見すると自動的に別の領域を代替として設定し、破損領域へのアクセスを自動的に誘導してくれる。不良セクタや記録内容の矛盾の検知・修正はドライブのエラーチェック機能やchkdskコマンドで明示的に実行することもできる。
セキュリティ機能
ファイルごと、あるいはディレクトリごとにアクセス制御リスト(ACL:Access Control List)方式のアクセス権を設定でき、システムに登録された利用者や利用者のグループごとに細かくアクセス権を設定できる。
ファイルへのアクセスを記録して後から追跡することができる監査ログ機能もある。ファイルごとあるいはボリューム全体の透過的な暗号化を指定することができ、記録時に暗号化されたデータを書き込むことで、盗難などによる外部からの不正な読み出しを防ぐことができる。
歴史
一般向けのWindowsがWindows 9x系(95/98)、業務用やサーバ用のWindowsがWindows NTとして別系統だった時代に、Windows NT系列の標準のファイルシステムとして開発された。最初のバージョンは1993年にWindows NT 3.51の一部として提供された。
Windows 2000およびWindows XPで全体がNT系列に統合されると、以降はWindowsの標準ファイルシステムの一つとして、主にハードディスクやSSDなど本体内蔵の固定系のストレージ装置に標準で適用されるようになった。現在ではLinuxやmacOSなどWindows以外のOSでも追加のソフトウェアを組み込むことでアクセスできるようになっている。
一方、CDやDVDなどの光学ディスク、USBメモリ、メモリーカードなどWindowsパソコン以外の機器で使用される可能性のある可搬型の媒体では基本的に使用されず、FAT32やexFAT、あるいは媒体規格などで定められたフォーマットが用いられることが多い。
ボリューム
体積、量、塊、多量、~巻、などの意味を持つ英単語。一般の外来語としては、物の量(原義は体積だが日常的には重さや数を指すこともある)や音量、連続した作品の巻数などを表すことが多い。「Vol.」という略号で示されることもある。
ストレージのボリューム
コンピュータのストレージ(外部記憶装置)の管理単位の一つで、オペレーティングシステム(OS)によって区画付けされた、ひとつながりの連続した記憶領域をボリュームという。OSによって識別名を付けられることがあり、これをボリューム名あるいはボリュームラベルという。
ハードディスクやSSDなどの場合、全体を一つのボリュームとする場合と、複数のパーティションに区切ってそれぞれをボリュームとする場合がある。記憶媒体(メディア/ディスク)を着脱できるリムーバブルメディアの場合は、原則として一つのメディアが一つのボリュームとなる。
複数の装置を束ねて一体的に運用するRAIDやディスクアレイなどの場合には、複数の装置の領域を繋ぎ合わせて大きな一つのボリュームを構成することもできる。
ボリュームライセンス
企業や官公庁、学校などで同じソフトウェア製品を大量に導入する場合に、一括して購入することで割引を受けられるような販売形態を「ボリュームライセンス」(volume license)という。
多数のライセンス(使用許諾権)をまとめて提供する方式で、外箱やマニュアル類、記憶媒体(メディア)などの提供数を減らして個別に購入するよりも低価格で販売される。
シーケンシャルアクセス 【リニアアクセス】
複数のデータや記憶領域にアクセスする際に、それらが並んだ順番に連続して読み込みや書き込みを行うこと。
特に、記憶装置が記憶媒体にアクセスする際に、連続した領域を端から順番に読み書きしていくことを指すことが多い。端から順に読み込むことを「シーケンシャルリード」(sequential read)、書き込むことを「シーケンシャルライト」(sequential write)という。
一方、順番とは無関係に飛び飛びにアクセスすることを「ランダムアクセス」(random access)という。装置の種類やデータ構造によって異なるが、一般に同じ量のデータを処理する場合、順次アクセスはランダムアクセスより高速なことが多い。磁気テープのようにランダムアクセスが極端に苦手な装置と、半導体メモリのように両者にあまり速度差が生じない装置がある。
リカバリー 【リカバリ】
復旧、復帰、回復、修復、復元、などの意味を持つ英単語。ITの分野では、故障や何らかの不具合で機能不全に陥った機器やシステム、ソフトウェアを復旧したり初期化することを表すことが多い。
ストレージ(外部記憶装置)について言う場合は、媒体の破損などでデータが正常に読み出せなくなった機器から可能な限りデータを取り出して保全したり、故障した装置を新しいものと交換して残りの装置からデータを復元する作業(RAID等の場合)などを表す。
ソフトウェアについて言う場合は、プログラムや設定の不具合で正常に動作しなくなったオペレーティングシステム(OS)などを消去し、再び導入(インストール)し直して初期状態に戻すことなどを指す。この場合、導入済みのソフトウェアや保存された設定情報、データなどは消去されるため、必要であれば利用者が別の装置への保全などを行わなければならない。
バックアップ
応援、予備(の)、代替(の)、支援、支持、擁護、後援、渋滞、後退などの意味を持つ英単語。ITの分野では、機器の故障などに備えて用意された代替設備や予備品、データの複製などのことを意味することが多い。
単にバックアップといった場合は、データの破損や損失に備えてデータの写しを取って保管する「データバックアップ」のことを指す場合が多い。データをコピーする作業や工程のことをバックアップという場合と、作成されたデータの複製(を記録した装置など)のことをバックアップという場合がある。
コンピュータの記憶装置に保存されたデータを別の装置や記憶媒体へ複製して別に保管するもので、機器の故障や破損、人為ミス、不正行為などによってデータの消失や改変などが起こった場合に、複製した時点のデータに復旧させることができる。
また、「バックアップ回線」「バックアップサーバ」などのように、通常時に使用している機器などが何らかの原因で正常に稼働できなくなった時に、その機能を肩代わりするための機器や設備、施設などのことをバックアップということもある。
世代管理
データの複製を保存するバックアップの手法の一つで、過去の複数の時点のデータを保管しておき、指定した時点のデータを復元できるようにすること。
単純なバックアップ方式では新たに複製を行うと以前に複製したバックアップデータは破棄され、常に最も最近にバックアップしたデータのみを復元することができる。
一方、世代管理バックアップでは新しく複製を作成しても以前に複製したデータも残しておき、復元時には過去のどの時点のデータを復元するか選択することができる。データに問題が生じたが、それに気づかないままバックアップを実行してしまった場合などに、問題が起きる前のデータに戻すことができるようになる。
世代数
世代管理において過去何回分までのデータを残しておくかを「世代数」(保存世代数)という。これを超えて新たに複製を行う場合は最も古い世代のデータが代わりに削除される。
フルバックアップ方式の場合は単純にバックアップの回数が世代数となるが、差分バックアップの場合は一定期間や一定回数ごとに行われるフルバックアップの回数が世代数となる。例えば、毎週1回フルバックアップを取り、これに対して毎日1回差分バックアップを取る場合、週に1回のフルバックアップの時点で世代が更新される。
フルバックアップ 【完全バックアップ】
コンピュータ内のストレージ(外部記憶装置)のデータを複製して破損や消去に備えるバックアップの手法の一つで、すべてのデータの複製を取ること。最も単純で基本的なバックアップ手法である。
バックアップしたいデータをすべて他のストレージ装置に複製することをこのように呼ぶ。複製先にバックアップ時点のすべてのデータが揃っているため、一回の復元操作で任意の(あるいはすべての)データを元に戻すことができる。
何度も繰り返しバックアップを行う場合でも、毎回すべてのデータの対象に複製操作を行う。前回と大半が重複していてもすべて複製し直すため、複製先の保管容量や、処理にかかる時間、装置への負荷は大きく、コストや効率の面では不利となる。
一方、繰り返しバックアップする際にフルバックアップは低頻度で行い、毎回の定期バックアップでは前回のフルバックアップからの変更点(データの追加や更新)のみを記録する方式を「差分バックアップ」(differential backup)、前回の定期バックアップからの変更点のみを記録する方式を「増分バックアップ」(incremental backup)という。
差分バックアップ 【ディファレンシャルバックアップ】
部分バックアップの手法の一つで、繰り返しバックアップを行う際、直近のフルバックアップからの変更点のみを記録していく方式。
定期的に繰り返しバックアップを取る場合、すべてのデータを複製するフルバックアップ(完全バックアップ)を毎回行うと、変更されていない箇所も毎回複製されるため効率が悪く、バックアップ用の保管領域も大量に必要となってしまう。
差分バックアップはそのような場合に効率を改善するために用いられる部分バックアップ手法で、フルバックアップは数回から数十回に一回程度の低頻度で行い、毎回の定期バックアップでは直近(前回)のフルバックアップ以降に追加、上書き、削除された箇所だけを記録する。
変更されていないデータについては毎回の記録は行われないため、所要時間や記憶容量を大きく削減することができる。データを復元するには、ある時点の差分バックアップデータと、その直前のフルバックアップデータがあれば良い。
例えば、毎日一回バックアップを行うシステムで、毎週日曜にフルバックアップを行い、残りの曜日は差分バックアップを行うようにすると、月曜は月曜一日分の変更点、火曜は月曜・火曜の二日分…という具合に差分が記録され、土曜は月曜から土曜までの変更点がすべて記録される。土曜のデータを復旧したければ、日曜のフルバックアップと土曜の差分バックアップが必要となる。
一方、直前の部分バックアップ以降の変更点のみを記録する手法は「増分バックアップ」(incremental backup)という。日曜にフルバックアップするシステムの場合、月曜の記録内容は差分バックアップと同じだが、火曜は月曜からの変更点のみを記録する。差分バックアップより少ない記憶容量で運用できるが、復元のためには直近のフルバックアップ以降のすべての部分バックアップが必要となる。
増分バックアップ 【インクリメンタルバックアップ】
部分バックアップの手法の一つで、繰り返しバックアップを行う際、直前の部分バックアップからの変更点のみを記録していく方式。
定期的に繰り返しバックアップを取る場合、すべてのデータを複製するフルバックアップ(完全バックアップ)を毎回行うと、変更されていない箇所も毎回複製されるため効率が悪く、バックアップ用の保管領域も大量に必要となってしまう。
増分バックアップはそのような場合に効率を改善するために用いられる部分バックアップ手法で、フルバックアップは数回から数十回に一回程度の低頻度で行い、毎回の定期バックアップでは直近(前回)の増分バックアップ以降に追加、上書き、削除された箇所だけを記録する。
前回から変更されていない箇所は記録されないため、所要時間や記憶容量を大きく減らすことができる。ただし、データを復元するには直近のフルバックアップデータと、以降すべての増分バックアップデータが揃っている必要がある。
例えば、毎日一回バックアップを行うシステムで、毎週日曜にフルバックアップを行い、残りの曜日は増分バックアップを行うようにすると、月曜は月曜一日分の変更点、火曜は火曜の変更点…という具合に記録される。土曜のデータを復旧したければ、日曜のフルバックアップと、月曜から土曜までの増分バックアップをすべて揃える必要がある。
一方、直近のフルバックアップ以降の変更点を毎回すべて記録する部分バックアップ手法は「差分バックアップ」(differential backup)という。日曜にフルバックアップするシステムの場合、月曜の記録内容は増分バックアップと同じだが、火曜は月曜と火曜の二日分の変更点を記録する。増分バックアップより容量や時間は余計にかかるが、復元のためには直近のフルバックアップと特定の時点の部分バックアップだけがあれば良い。
IDE 【Integrated Development Environment】
ソフトウェア開発に必要なソフトウェアを一つに組み合わせ、同じ操作画面から統一的な操作法で利用できるようにしたソフトウェアパッケージ。一般的にはコードエディタやコンパイラ、リンカ、デバッガ、テストツール、バージョン管理ソフトなどで構成される。
プログラムのソースコードを記述するためのコードエディタを中心に、ソフトウェアの操作画面の設計や要素の配置、挙動の指定などを支援するGUIデザイン機能、ライブラリや開発中のクラスなどの仕様や内部構造を表示する機能、コンパイラやリンカを呼び出して実行可能ファイルを構築するビルド機能、ステップ実行やインスペクション、エラー箇所のハイライト表示などテストやデバッグを支援する機能などを持っていることが多い。
ソフトウェア開発を支援する補助的な機能として、コードとともにデータやドキュメントなどを一括して管理するプロジェクト管理機能や、ファイルの新旧の版管理や複数人による編集を管理するバージョン管理機能、複数の開発者の連携を補助するチーム開発機能などを持つものもある。
プラグインなどの拡張機構を用いて、後から対応言語や機能を増やすことができるものもある。特定の製品や技術を対象としたプログラムを開発するためのソフトウェア開発キット(SDK:Software Development Kit)が著名なIDEに対するプラグインの形で提供されることも多い。
コードエディタは一般的なテキストエディタとして機能に加え、入力途中の文字列から予約語や関数名、プロパティ名、メソッド名などの候補を推測して自動的に提示してくれるコード補完機能や、予約後や区切り文字などを認識して色分けして見やすくする機能、コンパイルエラーなどが発生した場所をエラーメッセージ等とともに強調表示する機能など、コード記述に特化した便利な機能が盛り込まれていることが多い。
特定の環境や対象、プログラミング言語向けのIDEとして、米マイクロソフト(Microsoft)社の「Visual Studio」(Windows向け)や、米アップル(Apple)社の「Xcode」(macOS/iOS向け)、ジェットブレインズ(JetBrains)社の「IntelliJ IDEA」(Java言語向け)などがよく知られる。オープンソースソフトウェアの「Eclipse」(エクリプス)のように様々な言語や環境で汎用的・横断的に利用されるものもある。
ローコードプラットフォーム 【LCDP】
ソフトウェア開発ツールの一つで、プログラミング言語によるコードをほとんど記述せずにソフトウェアの挙動や処理、操作画面などを作成することができるもの。そのようなツールを用いたソフトウェア開発を「ローコード開発」という。
一般的なソフトウェア開発では、仕様や設計を元に開発者がプログラミング言語を用いてソースコードを記述し、実行や配布が可能な形式に変換して利用者に提供する。開発ツールはコード記述やコンパイル、ビルド、デバッグといった一連の過程を実行あるいは補助することが中心となる。
一方、ローコードツールはグラフィック表示・操作(GUI:Graphical User Interface)を用いた編集画面を中心に、画面上で操作要素や処理対象を配置したり繋ぎ合わせたりしてプログラムの挙動を決めていく。表示画面の設計も実際の画面を見ながら構成することができる。
基本的な処理は画面上の操作で構成可能だが、補助的にプログラミング言語を用いたコードを追加する機能もあり、込み入った処理や自社固有の特殊な処理、外部システムとの連携処理などを行うために独自にプログラムコードを書き入れて実行させることができる。
ローコードツールはプログラミングなどに習熟していない従業員でも扱うことができ、業務現場のニーズに即して迅速に低コストで特定目的・用途のソフトウェアを開発・導入できる利点がある。利用者が自ら開発するケースが多いことを踏まえ、多くの製品は開発環境と実行環境が統合されており、機能追加や修正も現場で対応することができる。
製品の提供方法として、Windowsなど特定のプラットフォーム上で開発・実行できるスタンドアローン型の製品のほか、開発元の運営するクラウドサービス上で提供される「aPaaS」(Application Platform as a Service:サービスとしてのアプリケーションプラットフォーム)型の製品もある。利用者はWebブラウザなどを通じてサービスにアクセスし、システムの開発と利用を行う。
ノーコードプラットフォーム 【NCDP】
ソフトウェア開発ツールの一つで、プログラミング言語によるコードを記述せずにソフトウェアの挙動や処理、操作画面などを作成することができるもの。そのようなツールを用いたソフトウェア開発を「ノーコード開発」という。
一般的なソフトウェア開発では、仕様や設計を元に開発者がプログラミング言語を用いてソースコードを記述し、実行や配布が可能な形式に変換して利用者に提供する。開発ツールはコード記述やコンパイル、ビルド、デバッグといった一連の過程を実行あるいは補助することが中心となる。
一方、ノーコードツールはグラフィック表示・操作(GUI:Graphical User Interface)を用いた編集画面を中心に、画面上で操作要素や処理対象を配置したり繋ぎ合わせたりしてプログラムの挙動を決めていく。表示画面の設計も実際の画面を見ながら構成することができる。
プログラミングなどに習熟していない従業員でも扱うことができ、業務現場のニーズに即して迅速に低コストで特定目的・用途のソフトウェアを開発・導入できる利点がある。利用者が自ら開発するケースが多いことを踏まえ、多くの製品は開発環境と実行環境が統合されており、機能追加や修正も現場で対応することができる。
製品の提供方法として、Windowsなど特定のプラットフォーム上で開発・実行できるスタンドアローン型の製品のほか、開発元の運営するクラウドサービス上で提供される「aPaaS」(Application Platform as a Service:サービスとしてのアプリケーションプラットフォーム)型の製品もある。利用者はWebブラウザなどを通じてサービスにアクセスし、システムの開発と利用を行う。
ツールチェーン 【ツールチェイン】
ある目的を達成するために組み合わせて使用する一連のツール(道具)のセットのこと。IT分野では、ソフトウェア開発のために必要な特定の機能を持つコンピュータプログラムの集合を指すことが多い。
一連の工程の各段階で必要となる単機能のプログラム群を指し、前のツールの出力を次のツールの入力として連続して実行していく関係になっていることからチェーン(chain:鎖)と呼ばれている。
典型的なプログラミング環境におけるツールチェーンの例として、コードエディタ、コンパイラ、リンカ、ライブラリ、デバッガの組み合わせがある。エディタで記述したソースコードをコンパイラがオブジェクトコードに変換し、これをリンカがライブラリと連結するなどして実行可能ファイルを生成、デバッガで不具合箇所を見極めてエディタで修正する、というサイクルで開発が行われる。
EUC 【End-User Computing】
企業などで情報システムを利用して現場で業務を行う従業員や部門(エンドユーザー、ユーザー部門)が、自らシステムやソフトウェアの開発・構築や運用・管理に携わること。
初期のEUC
1970年代後半にこの用語が使われだした頃のコンピュータは操作に専門的な技術を要する大型コンピュータで、業務部門の利用者は電算部門の専門の技術者やオペレータに端末の操作やデータの入出力の依頼をしてシステムを利用していた。
当時のEUCのコンセプトは、コンピュータに扱いやすい表示・操作システムを実装し、データ処理を必要とする利用者自身が端末を操作して様々な処理を実行するというもので、経営者や上級管理職向けのDSS(意思決定支援システム)などの形で結実した。
現在のEUC
1990年代後半頃になるとオフィスで一人一台パソコンが与えられ、従業員が自分で操作するのが次第に当たり前になっていき、通常のシステムの使用に関しては技術部門の仲介は不要になった。当初の意味でのEUCは浸透したと言える。
この頃からEUCの指す意味は徐々に変容していき、情報部門の用意したソフトウェアやパッケージ製品をそのまま利用するのに留まらず、業務に必要な個別のアプリケーションなどを利用者が自ら開発・運用することを指すようになっていった。
業務に必要なITシステムをゼロから構築することという極端な事例は少なく、パッケージソフトのマクロ機能(Excelマクロ等)やスクリプト機能(VBA等)などを利用して簡易な自動処理プログラムを開発したり、最新のIT機器を部署内で独自に導入して既存システムに接続するといった事例が多い。近年では既存システムの定型的・反復的な作業を自動化するRPA(Robotics Process Automation)が注目されている。
この意味でのEUCが無秩序に行われるとIT部門や管理部門の統制が及ばず、思わぬトラブルや多重投資などの問題を引き起こす(シャドーIT問題)ことがあるため、ガイドラインを定めるなど一定のルールのもとで実施する必要がある。
エミュレータ 【エミュ】
ある装置やソフトウェア、システムの挙動を模倣し、その代替として用いることができるソフトウェアなどのこと。そのように擬似的に別の装置やソフトウェアの環境を再現することを「エミュレーション」(emulation)という。
実行形式のコンピュータプログラムの多くは、特定のコンピュータやCPUの機種、ファームウェアやオペレーティングシステム(OS)の種類に依存した仕様となっており、通常は他の機種やソフトウェア環境では動作しない。
エミュレーターは特定の装置やソフトウェアなどの振る舞いを模倣することができる別の装置やソフトウェアで、標的のシステムとまったく同じように動作する。プログラムにとっては本来の実行環境と区別がつかず、別の環境でそのまま実行することができるようになる。
ただし、プログラムやデータの改変や再構成が不要なだけで、利用できる機能に制約が生じたり、性能が本来より劣化したりすることはある。特に、ハードウェアをソフトウェアで再現したエミュレーターは性能が何桁も低下する場合があり、実物と同じように使用することは困難な場合もある。
エミュレーターは異なる機種向けのソフトウェアを利用したい場合や、設計が刷新された新しい機種で古い機種のソフトウェア資産を利用したい場合、種類が異なるコンピュータでソフトウェアを利用したい場合(パソコン上で家庭用ゲーム機用ソフトを遊ぶなど)、異なる機種向けのソフトウェアを開発する場合(パソコン上でスマートフォン向けアプリを開発するなど)などに用いられる。
エミュレーターはソフトウェアとして実装・提供されるものが馴染み深いが、CPUが別の機種のCPUのプログラムをそのまま実行できる機構を内蔵するなど、ハードウェアの形で提供されるものもある。コンピュータの振る舞いを丸ごと模倣するようなエミュレーターは「仮想マシン」(VM:Virtual Machine)とも呼ばれる。
シミュレータ 【シミュレーター】
現実の現象や物体などを模擬的に再現する機能を持った装置やソフトウェア、システムなどのこと。機械操作の訓練、現象の予測や機序の解明などのために用いられている。
対象から特徴的な要素を抽出して模型やデータ構造などの形でモデル化し、実験装置やコンピュータなどを使って模擬的に再現したもので、実物を使わずに様々な条件下での実験や訓練などを行なう。そのような模擬的な再現のことを「シミュレーション」(simulation)という。
実物での検証に大きなコストや時間がかかる工業製品の研究開発・設計や、いきなり実物を扱うと危険を伴うことがある機械の操作や乗り物の操縦の訓練、実地や現物での実験や観察が困難あるいは不可能な物理現象の研究などでよく用いられる。
ICE 【In-Circuit Emulator】
マイクロプロセッサ(CPU/MPU)などを中心とする電子基板や組み込みシステムなどを開発する際に用いられる試験装置の一種。“In-Circuit Emulator” の名称は米インテル(Intel)社の登録商標。
CPUの機能を代替(エミュレーション)する装置で、開発中の基板にCPUの代わりに装着してプログラムの動作検証ができる。実物のCPUではできない検査用の様々な動作に対応しており、プログラムの動作の解析、不具合や欠陥が生じている箇所の特定などに用いられる。
基本的な機能はソフトウェア開発に用いるデバッガ(debugger)に類似している。プログラム実行中のレジスタやメインメモリ(RAM)の内容の表示や任意の箇所の書き換え、プログラム中の任意の箇所で停止するブレークポイント機能、プログラムを一命令ごとに一時停止しながら実行するステップ実行、プログラムのどの箇所をどの順番で実行したか追跡するトレース機能などである。
トレーサ
何らかの対象の移動や変化の追跡や捕捉を行うための装置や物質、仕組みなどのこと。ITの分野では、半導体内部の状態を把握する装置やコンピュータプログラムの実行状態を解析するソフトウェアなどの用例が知られる。
プログラミングツールのトレーサ
プログラムの修正を補助するツールの一種で、プログラムの実行過程を記録して可視化するソフトウェアをトレーサーという。
トレーサー上でプログラムを実行すると、その過程を追跡・記録し、実行された命令を順番に、レジスタや変数の値などの状態と共に表示してくれる。これを見ることで、プログラムが意図したとおりに動作しているかを調べたり、どこに誤りがあるかを発見するのが容易になる。
インスペクタ
調査官、検査官、査察官、監督官、監査役、選挙管理委員などの意味を持つ英単語。ITの分野では何らかの対象の内部状態などを調べる働きをするソフトウェアなどをこのように呼ぶことが多い。
データを編集するソフトウェアなどで、画面上の対象を選択して内部の状態や設定などの詳細を一覧表示などで見やすく整理して表示する機能のことをインスペクターという。
プログラミングツールのインスペクタ
ソフトウェア開発では、実行中のプログラムの変数の値やオブジェクトのプロパティの内容などを表示するものをインスペクターという。
ブレークポイントやステップ実行などと組み合わせ、プログラムの特定の箇所を実行中に内部状態が事前に期待したとおりになっているかを容易に調べることができる。プログラムの問題箇所を探して修正するのを助けるデバッグツールの一種で、コンパイラや統合開発環境(IDE)などに付属することが多い。
Webインスペクタ
Webブラウザなどの開発者向け機能の一つで、表示中のWebページを構成するファイルや、HTMLやCSS、JavaScriptなどのソースコード、各要素のスタイルや属性などの詳細を表示するツールをWebインスペクタあるいは単にインスペクターという。
スナップショット
(銃の)速射、スナップ写真という意味の英単語。ITの分野では、ある時点における対象の全体像を丸ごと写し取ったものを表す。ストレージ上のファイルシステムを丸ごとコピーしたものや、データベースの複製などを指すことが多い。
ストレージ(外部記憶装置)内のすべてのファイルやディレクトリ、データベース内の全データ、仮想化環境(仮想マシン)の実行状態など、刻々内容が変動する何らかのデータ集合について、ある瞬間の状態を丸ごと写し取った複製のことをスナップショットという。
スナップショットを取って保管しておくことで、データが破損・喪失した際に、ある特定の時点の状態を復旧したり、別の機器にデータやシステムの状態を複製・移転することができる。また、後から過去のある時点の状態を参照することもできる。
システムが稼動状態のまま漫然とデータをコピーすると、複製開始から終了までの途中の段階で利用者や他のソフトウェアが一部のデータを書き換えてしまう恐れがあるため、スナップショット作成中は一時的に書き込みを禁止したり、書き込むべき内容を保管しておいて終了後にまとめて反映させるといった機能が提供されることが多い。
ソフトウェアのスナップショット
ソフトウェア開発やプログラミングの分野では、開発中のソフトウェアについて、ある時点におけるソフトウェアを構成するプログラムコードや関連するデータなどのまとまりをスナップショットと呼ぶことがある。
バージョン番号などが付与され、正式に利用者向けに提供される「リリース」(release)とは異なり、主に開発者や熟練利用者向けに、ある日時における最新版を共有するために作成される。最新機能などを試すことができるが、十分なテストなどが行われておらず動作が不安定なことが多い。
画面のスナップショット
パソコンやスマートフォンなどで、ある瞬間の画面全体やソフトウェアの表示状態を画像として取得して保存したものを「画面キャプチャ」「スクリーンショット」などというが、これをスナップショットと呼ぶことがある。“snapshot” の原義の一つに「スナップ写真」があり、これに近い用法である。
アサーション 【アサート】
表明、断言、主張などの意味を持つ英単語。プログラミングにおいて、あるコードが実行される時に満たされるべき条件を記述して実行時にチェックする仕組みをアサーションチェッカという。
開発者はプログラム中の任意の位置にアサーションチェッカを挿入し、その箇所に差し掛かった際に満たされているべき条件を記述する。言語処理系は実行時にアサーションチェッカの記述した条件を評価し、これが満たされていない場合にはエラーや例外を発生させたり、メッセージを表示して処理を中断する。条件評価の詳細や関連する変数の値などの情報を表示する場合もある。
プログラミング言語の仕様・機能の一部や開発支援ツールとしてこれを実行時に自動的にチェックする仕組みが提供されている場合があり、これを「アサーションチェッカ」(assertion checker)という。
アサーションチェッカは開発時のみ使われリリース時には不要なため、アサーションチェッカチェックに対応した言語や処理系ではアサーションチェッカ関連のコードを削除しなくても有効・無効を簡単に切り替えられるようになっていることが多い。
バージョン管理システム 【VCS】
ファイルの変更履歴の保存・管理を行うソフトウェア。管理下のファイルについて、過去の版の参照や、複数の版の比較、差分の検出などを行うことができる。
管理するファイルの内容をいつ誰がどのように変更したのか時系列で記録に残し、過去のある時点の内容を参照したり、現在の版を破棄してその時点の状態に戻したり、別の時点の版との違い(差分)を調べたりすることができる。
主に管理されるのはテキストファイルで、ソフトウェア開発においてコンピュータプログラムのソースコード(プログラミング言語で書かれたプログラム)を管理するのに用いられることが多い。仕様上は画像などバイナリファイルを含む任意の形式のファイルを登録できるようになっていることが多い。
リポジトリ
ファイルシステムと同じように複数のファイルを階層的なディレクトリに整理でき、全体をまとめてプロジェクトとして管理することもできる。ファイルとその変更履歴やバージョン番号(リビジョン)などの管理情報は「リポジトリ」(repository)と呼ばれる一種のデータベースにまとめて集積される。
利用者がクライアントソフトなどを用いてリポジトリからファイルを取り出す操作を「チェックアウト」、編集したファイルをリポジトリに書き戻す操作を「チェックイン」という。
リポジトリをインターネット上のサーバに設置すれば、互いに遠隔地にいる複数人で共同作業したり、広く一般に開発・編集への参加を募ることができる。オープンソースソフトウェアの多くはネット上にリポジトリを設置して内容を公開したり開発への参加を受け付けている。
リポジトリを利用者の手元に複製する方式の分散バージョン管理ツールでは、利用者側に複製されたリポジトリを「ローカルリポジトリ」、プロジェクトを管理する大本のリポジトリを「中央リポジトリ「共有リポジトリ」「リモートリポジトリ」などと呼ぶ。
ブランチとマージ
ファイルやプロジェクトの変更履歴の流れをある時点を起点に分岐させ、派生版を作成することができる。分岐した時系列を「ブランチ」(branch)という。分岐したブランチを再び元の流れに統合(マージ)できるシステムもある。
開発中のソフトウェアからリリース用の版を分岐させて機能追加などを凍結して安定させたり、ある開発プロジェクトの内容を受け継いで別の目的のプロジェクトを立ち上げたりするのに用いられることが多い。
複数人での編集
バージョン管理ツールの多くは複数人が一つのプロジェクトに参加することを想定して開発されており、同時並行で編集を行う際に一貫性を保つ仕組みが導入されていることが多い。
代表的な方式としては、編集時に他の人によるファイルの変更を禁止(ロック)し、編集終了時にロックを解除する方式と、各利用者の手元にファイルを複製してそれぞれ編集し、システムに変更内容を送信して反映(マージ)させる方式がある。前者を集中管理(集中型)、後者を分散管理(分散型)と呼ぶこともある。
主なシステム
著名なバージョン管理ツールにはオープンソースソフトウェアとして公開されているものが多く、集中型の「CVS」(Concurrent Versions System)や「Subversion」(SVN)、分散型の「Mercurial」や「Git」などがよく知られている。米マイクロソフト(Microsoft)社の「Visual SourceSafe」(VSS)のような商用ソフトウェア製品もある。
近年では、簡単な利用者登録でインターネット上にリポジトリを設置して使用することができるホスティングサービスも広く普及しており、多くのオープンソースソフトウェアなどの公開リポジトリが最大手の「GitHub」で運営されている。
アセンブラ
アセンブリ言語で記述されたコンピュータプログラム(ソースコード)を、コンピュータが直接解釈・実行できる機械語(マシン語)によるプログラム(オブジェクトコード)に変換するソフトウェア。アセンブリ言語は命令などの仕様が機械語と一対一に対応する低水準プログラミング言語で、コンピュータのCPU(マイクロプロセッサ)の挙動を開発者が直に指定して処理を記述することができる。
アセンブラはアセンブリ言語で書かれたプログラムを機械語のコード列に変換するもので、この変換工程を「アセンブル」(assemble)という。命令語をCPUの命令コードに置き換えたり、マクロを展開して命令列に置き換えたり、シンボル名を実際の値やメモリアドレスに置き換えたりといった操作を行なう。
一方、機械語との対応関係のない高水準プログラミング言語で書かれたプログラムを機械語に一括変換するソフトウェアは「コンパイラ」(complier)、機械語への変換と実行を並行して進めるソフトウェアは「インタプリタ」(interpreter)という。コンパイラの中には、高水準言語のプログラムをアセンブリ言語の表現に置き換えてからアセンブラで機械語に変換するものも多くある。
なお、開発機とは異なる機種の機械語プログラムを生成するアセンブラを「クロスアセンブラ」(cross assembler)、機械語のプログラムをアセンブリ言語による表現に逆変換するソフトウェアを「逆アセンブラ」(disassembler)という。また、コンパイラの機能の一部として、高水準言語のプログラムの一部として記述されたアセンブリ言語のコードを機械語に変換するものもあり、「インラインアセンブラ」(inline assembler)と呼ばれる。
インタプリタ
人間に分かりやすい高水準プログラミング言語(高級言語)で書かれたコンピュータプログラムを、コンピュータが解釈・実行できる形式に変換しながら同時に少しずつ実行していくソフトウェア。英語の原義は「通訳者」。
人間などがプログラミング言語で記述したソースコードを処理の流れの順に少しずつ読み込んでいき、内容を解析して実行可能なプログラムに変換し、即座に実行する。変換と実行を逐次的に繰り返し行い、処理を進めていく。
コンパイラなどで一括して変換してから実行する方式に比べ、ソースコードを即座に実行開始できるため開発や修正をテンポよく進めることができるが、変換にかかるオーバーヘッドの分だけ実行速度やメモリ使用量では劣る。
また、インタプリタによる実行を前提とする場合はプログラムの配布をソースコードで行うことになるが、環境ごとに変換済みのバイナリコードを用意しなくてよく、インタプリタさえ用意されていれば様々な環境で動作させられる反面、利用者にソースコードを必ず開示しなければならない点が嫌がられることもある(商用ソフトウェアなどの場合)。
いわゆるスクリプト言語や軽量言語(LL)と呼ばれる言語は標準の処理系としてインタプリタが用意されており、すぐに実行できるようになっている。
リンカ 【リンケージエディタ】
ソフトウェアの開発ツールの一つで、機械語(マシン語)で記述されたプログラムを連結、編集して実行可能ファイルを作成するソフトウェア。
プログラミング言語で書かれたソースコードはコンパイラなどによって機械語によるプログラム(オブジェクトコード)に変換されるが、そのままではOSから起動できる実行ファイルとはならない。リンカはオブジェクトコードの収められたファイルを元に様々な処理や変換を行い、OS上で起動可能な実行可能形式のファイルを作成する。
リンカはオブジェクトコード中から呼び出されるコードが収録された他のオブジェクトファイルやライブラリファイルなどを連結あるいは参照し、実行時に適切に呼び出せるよう繋ぎこむ。また、OSからの起動に必要な設定情報や先頭部分の定形コードなどを組み込み、コード中の変数や関数などのアドレス解決(変数名などをプログラム先頭からの相対位置で置き換え)などを行う。
外部プログラムの連結方法には静的リンクと動的リンクの二つがあり、静的リンクの場合はリンカがコード中から参照されるライブラリ関数などすべての機械語プログラムを一つのファイルに格納し、単体で実行可能なファイルを生成する。動的リンクの場合は外部プログラムの連結は実行時に行われるため、リンカは実行ファイルにローダなど外部コードを呼び出す仕組みを組み込む。
ローダー 【ローダ】
コンピュータプログラムの種類や機能の一つで、データやプログラムを外部から読み込む(load:ロードする)もの。対象により「ブートローダ」「画像ローダ」「クラスローダ」などのように呼ぶ。
ストレージ(外部記憶装置)上のファイルに記録された内容をメインメモリ(RAM)に読み出したり、ネットワークを通じて他のコンピュータからデータを受信するソフトウェアや、そのような機能のことを指す。
単純にデータを元の場所から複製するだけの場合もあるが、例えば画像ローダであれば読み込んだ画像データを元に画面に内容を描画するといった後処理まで行う場合もある。
なお、一般的な外来語としての表記は「ローダー」と長音符で終わるが、ITの分野では “-er” 音の長音符を省略する慣習が定着しており、「ローダ」と記されることが多い。
コンパイラ
人間に分かりやすく複雑な機能や構文を持つ高水準プログラミング言語(高級言語)で書かれたコンピュータプログラムを、コンピュータが解釈・実行できる形式に一括して変換するソフトウェア。“compiler” の原義は「翻訳者」。
コンパイラは、プログラミング言語で書かれた「ソースコード」(source code)を読み込んで解析し、コンピュータが直に実行可能な機械語や、それに相当する中間言語などで記述された「オブジェクトコード」(object code)に変換する。この変換工程のことを「コンパイル」(comple)という。
コンパイラが生成したオブジェクトコードはそのままでは実行可能でない場合が多く、リンカなど別のソフトウェアを用いて、起動に必要なコードを追加したり、必要なライブラリなどを結合(リンク)したりして実行可能形式のプログラムとする。コンパイルを含む一連の工程を「ビルド」(build)という。
一方、ソースコードを読み込みながら、逐次的に実行可能コードを生成して実行するソフトウェアを「インタプリタ」(interpreter:「通訳者」の意)という。コンパイルやリンクなどのビルド工程を経ずにソースコードをいきなり実行できるため、スクリプト言語の実行環境としてよく用いられる。
様々なコンパイラ
Javaや.NET言語など、CPUやオペレーティングシステム(OS)の種類に依存しない中間形式でプログラムを配布する言語では、実行時に実行環境固有のコード形式(ネイティブコード)に変換するコンパイラを「JITコンパイラ」(Just-In-Time compiler)あるいは「実行時コンパイラ」という。この方式では、開発時にソースコードから中間形式へ、実行時に中間形式からネイティブコードへ、2段階のコンパイルを行う。
デジタル家電などの組み込みソフトウェアの開発など、開発環境と実行環境が異なる場合、開発環境上で別の環境向けのオブジェクトコードを生成する「クロスコンパイラ」(cross compiler)という。実行プログラムは対象環境に送ってテストや実行を行う。
コンパイラとは逆に、コンパイル済みのオブジェクトコードを解析して元のソースコードに逆変換するソフトウェアを「デコンパイラ」(decompiler)あるいは「逆コンパイラ」という。高水準言語ではソースコードとオブジェクトコードの各要素は一対一に対応しないため、完全な復元は難しい。特に、変数名などのシンボルはコンパイル時に失われるため、オブジェクトコードから取り出すことはできない。
JITコンパイラ 【Just-In-Time compiler】
プログラミング言語の実行環境の機能の一つで、ソースコードや中間コードから機械語への変換処理を実行直前にまとめて行なうもの。通常は開発時に行うコンパイルを実行時に行う。
ソースコードを実行時に逐次的に変換しながら実行するスクリプト言語(インタプリタ型言語)や、中間言語で配布されたプログラムを実行環境側の仮想マシン(VM:Virtual Machine)が解釈して実行する方式の言語(Javaや.NETなど)で、実行速度向上のために用いられる。
CPUやオペレーティングシステム(OS)などのプラットフォームに依存しない形式でプログラムを配布し、実行時にその環境に合ったコードに変換されるという利点は保ったまま、開発時にコンパイラで機械語に変換する場合とほとんど変わらない実行速度を得ることができる。
ただし、実行開始時に変換処理の分だけ待ち時間が生じるのと、変換後のコードを保存しておく必要からメモリ消費量が増えるという欠点もある。また、開発時のコンパイルでは時間をかけて行うことができる最適化処理なども簡略化されることが多い。
クロスコンパイラ 【クロスコンパイラー】
プログラムのソースコードをもとに、開発環境とは異なる機種やオペレーティングシステム(OS)向けの実行可能プログラム(オブジェクトコード)を生成する変換プログラムのこと。開発環境と実行環境が異なるソフトウェア開発(クロス開発)で用いられる。
一般的なソフトウェア開発では、プログラミング言語で書かれたソースコードを、コンピュータで実行可能な機械語のプログラムであるオブジェクトコードに変換して実行可能形式のプログラムを生成する。その際に用いられる変換プログラムを「コンパイラ」(compiler)という。
パソコン向けのプログラムをパソコンで開発する場合など、開発環境と実行環境が一致している場合は開発環境向けのコンパイラを使えば良いが、開発環境と実行環境が一致しない場合は、実行環境向けのプログラムを生成する特殊なコンパイラを用いる。これをクロスコンパイラという。
クロスコンパイラが生成した実行プログラムは開発環境上で直接実行することはできないため、実行環境となるハードウェアに転送して実行したり、開発環境上で実行環境を模したエミュレータや仮想マシン(VM)を用意して、その上で実行する。
クロスコンパイラはターゲットとなる実行環境がソフトウェア開発に適していない場合や、ハードウェア開発が完了する前にソフトウェア開発を開始したい場合などに用いられる。例えば、スマートフォンやタブレット端末、家庭用ゲーム機などで動作するソフトウェアをパソコン上で開発する場合などである。
ジェネレータ 【ジェネレーター】
発電機、発生器、生成元などの意味を持つ英単語。ITの分野では、与えられた条件などに基づいてデータやプログラムコードを自動的に生成するプログラムなどを指すことが多い。
プログラミングの分野では、言語仕様などの一部として規定された特殊な関数やサブルーチンなどの一種で、一定の手順に従って次々に異なる値などを生成して呼び出し元に返すものをジェネレーターということがある。
ジェネレーターは自身の内部の状態(ローカルな変数の値など)を保存し、呼び出される度に現在の状態から導き出される処理結果を返し、自身の状態も更新する。複雑な繰り返し処理などを効率的に記述したり、無限に続く数列を扱う処理などを簡潔に記述することができる。
ネットサービスなどでは、利用者の指定したパラメータなどに基づいて文字列や画像など何らかの特定の形式のデータを生成するシステムやサービスをジェネレーターということがある。例えば、生成AIシステムを応用して利用者が入力した単語やフレーズから想起される画像をAIが生成するサービスなどがある。
プリプロセッサ 【プリコンパイラ】
ソフトウェアの役割による分類の一つで、ある中心的な処理を行うプログラムに対して、その前処理(preprocess)を行うプログラムのこと。プログラミング言語のコンパイラの前処理を行うものが非常に有名。一方、メインの処理に対する後処理を行うものは「ポストプロセッサ」(postprosessor)という。
コンパイラはプログラミング言語で記述されたソースコードを解釈してコンピュータが解釈・実行できるネイティブコードに変換するが、プリプロセッサはその下準備となるソースコードの追加や変換などの処理を担当する。
プリプロセッサへの指示はプログラミング言語本体とは別に規定された特殊な記法(プリプロセッサディレクティブ)を用いて行われる。この指示は処理後のコードからは削除され、残らないようになっている。
よく行われる処理として、外部ファイルの内容を読み込んで指定された箇所に追加(インクルード)したり、コード中の特定の文字列を指定されたものに置き換えたり(定数やマクロの展開)、コードの一部分を指定された条件に従って選択(一方を残して他方を削除)したりといった操作が挙げられる。
C言語のプリプロセッサ
プリプロセッサの利用が盛んなプログラミング言語としてC言語がよく知られている。「#」で始まる行がプリプロセッサへの指示を表し、「#include <外部ファイル名>」で指定したファイルの読み込みおよび展開、「#define 定数名 値」で定数の定義、「#define マクロ名(引数) 式」でマクロの定義が行える。
初期のC++言語やObjective-Cのように、プリプロセッサによって言語仕様を拡張するというユニークな試みも見られた。これは追加仕様がプリプロセッサ指令の形で定義されており、記述されたソースコードは前処理によってC言語による記述に変換され、Cコンパイラでネイティブコードへ変換されるというものである。
ソースコード 【ソースプログラム】
プログラミング言語などの人間が理解・記述しやすい言語やデータ形式を用いて書き記されたコンピュータプログラムのこと。プログラムに限らず、人工言語や一定の規約・形式に基いて記述された複雑なデータ構造の定義・宣言などのことも原始プログラムと呼ぶ場合がある。
コンピュータへの指示や一連の処理手順などをプログラミング言語によって文字データの羅列として表記したもので、そのままではコンピュータ(のCPU)では実行できないため、CPUが直に解釈できる命令コードの体系である機械語(マシン語)によるプログラムに変換されて実行される。
変換後の機械語による実行可能プログラムを「オブジェクトコード」(object code)、「オブジェクトプログラム」(object program)、「ネイティブコード」(native code)、「ネイティブプログラム」(native program)、「バイナリコード」(binary code)などと呼ぶ。
実行可能形式への変換
原始プログラムからオブジェクトコードへの変換はソフトウェアによって自動的に行うのが一般的となっている。アセンブリ言語で記述された原始プログラムを変換することを「アセンブル」(assemble)、そのようなソフトウェアを「アセンブラ」(assembler)という。
アセンブリ言語以外の高水準言語で記述された原始プログラムを一括して変換することは「コンパイル」(compile)と言い、そのようなソフトウェアを「コンパイラ」(compiler)という。実行時に少しずつ変換しながら並行して実行するソフトウェアもあり、「インタプリタ」(interpreter)と呼ばれる。
開発時に原始プログラムから直接オブジェクトコードへ変換せずに、特定の機種やオペレーティングシステム(OS)の仕様・実装に依存しない機械語風の独自言語による表現(中間コード)に変換して配布し、実行時に中間コードからCPU固有の機械語に変換するという二段階の変換方式を用いる言語や処理系もある。
ソースコードの作成
原始プログラムは多くの場合、人間がキーボードなどを操作して文字を入力して記述する。この作業・工程を「コーディング」(coding)という。原始プログラムはテキストデータの一種であるため文書編集ソフトで作成することはできず、テキストエディタや統合開発環境(IDE)に付属する専用のコードエディタなどを用いることが多い。
必ずしも人間が記述するとは限らず、何らかの元になるデータや入力からソフトウェアによって生成したり、別の言語で記述された原始プログラムを変換して生成したり、オブジェクトコードを逆変換して原始プログラムに戻したりといった方法で、ソフトウェアが自動的・機械的に作成する場合もある。
ソースコードの公開・非公開
日本を含む多くの国で原始プログラムは著作物の一種として著作権で保護されている。販売される商用ソフトウェア製品の多くは、原始プログラムを企業秘密として非公開とし、人間に可読でない中間コードやオブジェクトコードによる実行プログラムのみを利用者に提供している。
一方、原始プログラムを公開し、誰でも自由に入手、利用、改変、再配布、販売などができるようにしている場合もある。そのようなソフトウェアを、原始プログラムがオープンになっているという意味で「オープンソースソフトウェア」(OSS:Open Source Software)という。ボランティアのプログラマが個人あるいは共同で開発しているソフトウェアに多いが、企業がOSSを開発・公開している例も多く見られる。
オブジェクトコード 【バイナリコード】
コンピュータプログラムの形式の一つで、コンピュータによる解釈・実行に適した言語やコード体系で記述されたもの。通常は人間が直接記述することはなく、ソースコードから変換して生成する。
コンピュータの中央処理装置(CPU/マイクロプロセッサ)は機種ごとに直に実行できる機械語(マシン語)の仕様が決まっており、機械語による命令を並べたプログラムを目的プログラムという。
物理的なプロセッサの機械語で記述されたものだけでなく、プロセッサをソフトウェア的に構築した仮想マシン(VM:Virtual Machine)向けの中間コードやバイトコードなどによるプログラムも含まれる。
オブジェクトコードの生成
一般的なソフトウェア開発では、人間が読み書きしやすく高度で抽象的な機能を備えたプログラミング言語で「ソースコード」(source code)を作成し、これをコンパイラやインタプリタなどのソフトウェアで目的プログラムに自動変換して実行可能なプログラムを作成する。
目的プログラムはコンピュータが理解できればよいため、容量や処理の効率を高めるためバイナリ形式となっており、直接表示しても人間が読み取ることは難しい。なるべく直接構成・編集したい場合は機械語を人間が読み書きすることができる最低限の文字の並びに置き換えたアセンブリ言語を用いる。
目的プログラムはプログラムの起動に必要な定形コードを先頭に付け足して実行可能ファイルにすることが多いが、実行ファイルに連結して機能を提供するライブラリファイルやクラスファイルなども内部は目的プログラムとなっている。
実行ファイル 【実行可能ファイル】
コンピュータのストレージ(外部記憶装置)などに記録されるファイルの種類の一つで、メインメモリに読み込んで実行できる形式のプログラムファイルのこと。
コンピュータ内部のCPU(マイクロプロセッサ)が直に解釈・実行できる機械語(マシン語)による命令列が格納されている。先頭部分にはプログラムの起動に必要な初期化コードが付加されており、この部分はどのファイルでも共通だが、オペレーティングシステム(OS)ごとに異なっている。
プログラム本体を構成する機械語はプロセッサの機種ごとに固有であり、異なる仕様の機種で直接実行することはできない。ほとんどの実行プログラムにはOSの機能を呼び出すコードが含まれるため、異なるOS上でそのまま実行することも通常はできない。
特定の機械語ではなく、機種に依存しない機械語風の命令形式である中間コードや、スクリプト言語で書かれたソースコードのように、実行環境側の仮想マシン(VM)やインタプリタが機械語への変換を自動的に行うプログラムファイルもロードモジュールの一種とみなす場合もある。
ロードモジュールを作成するには、人間が読み書きしやすいプログラミング言語で書かれたソースコードをコンパイラなどで機械語コード(オブジェクトコード/ネイティブコード)に変換し、リンカなどで必要なライブラリや初期化コードなどを連結する。この一連の工程を「ビルド」という。
Windowsでは拡張子が「.exe」(“executable” の略)になっているものが最も一般的な形式のロードモジュールであるため、「EXEファイル」(エグゼファイル)と呼ばれることもある。大型汎用機(メインフレーム)やオフコンなどの分野では「ロードモジュール」(load module)という呼称が用いられることが多い。
オープンソースソフトウェア 【OSS】
開発者がプログラミング言語などで書かれたソースコードを公開し、自由に取り扱えることを宣言しているソフトウェア。誰でも制約なくソースコードを入手、利用、複製、再配布、改変などをすることができる。
ソフトウェア開発では人間に理解しやすいプログラミング言語などを用いて「ソースコード」(source code)というコンピュータプログラムを作成し、これをコンピュータが解釈・実行しやすい形式のプログラムに変換して実行する。
企業などが製品として開発するソフトウェアなどの場合、ソースコードは企業秘密として公開せず、実行可能プログラムのみを販売する方式が多い。このようなソフトウェアを「プロプライエタリソフトウェア」(proprietary software)と呼び、利用者はソースコードを入手できないか、できても契約により強い制約が課される。
一方、オープンソースソフトウェアではプログラムの著作権者である開発者が著作権の一部の行使を凍結し、誰でも自由にソースコードを入手して、使用だけでなく販売を含む再配布、動作の解析や一部の改変、自作ソフトウェアへの同梱や機能としての組み込みなどを行うことができる。これらは無償で行うことができ、開発者へ問い合わせたり許諾を得る必要もない。
ただし、著作権が放棄されたわけではなく、著作者や利用者の権利や制限などを定めた「オープンソースライセンス」(open source license)という利用許諾契約に基づいて配布される。利用者はソフトウェアの取り扱いに際して、このライセンスに書かれた条項を遵守する法的な義務を負う。
オープンソースソフトウェアは個人や小規模な開発者集団が自作のソフトウェアを善意で公開する例が多く、インターネット上にはボランティア開発者が集う「オープンソースコミュニティ」が数多く存在する。企業などが製品をオープンソース化して普及に努め、法人ユーザーとのサポート契約や関連ネットサービスの利用料などで利益を得るという「ビジネスとしてのオープンソース」も定着している。
LAMP 【Linux+Apache+MySQL/MariaDB+PHP/Perl/Python】
Webアプリケーション環境として人気の高い「Linux」「MySQL」(またはMariaDB)「Apache」「PHP」「Perl」「Python」(のいずれか)の組み合わせ。これらの頭文字を繋いだ略語となっている。
データベースを利用したWebアプリケーションを開発・運用するのに適した、定番のオープンソースソフトウェアの組み合わせを表している。「Linux」はオペレーティングシステム(OS)、「Apache」はWebサーバ、「MySQL」「MariaDB」はリレーショナルデータベース管理システム(RDBMS)、「PHP」「Perl」「Python」はプログラミング言語および実行環境である。
いずれもオープンソースで開発・配布されており、それぞれの分野で最も普及しているソフトウェアの一つである。動的なWebサイトやWebサービスなどの構築に適しており、関連情報や事例、対応ソフトウェアや開発ツールなども豊富である。
これらを個別に入手して同じ環境に導入する必要があるが、OSであるLinux以外は「XAMPP」などの配布パッケージを利用して一括して導入することもできる。また、サーバ向けのLinuxディストリビューションの中にはこれらがあらかじめ同梱されて配布されているものもある。
LAPP (Linux+Apache+PostgreSQL+PHP/Perl/Python)
Webアプリケーションを開発するのに適したオープンソースソフトウェアの組み合わせの一つで、OSの「Linux」、Webサーバの「Apache」、データベースの「PostgreSQL」、プログラミング言語および実行環境の「PHP」「Perl」「Python」(のいずれか)の頭文字を繋いだものを「LAPP」という。LAMPのRDBMSをPostgreSQLに差し替えたもの。
LAMP 【Linux+Apache+MySQL/MariaDB+PHP/Perl/Python】
Webアプリケーション環境として人気の高い「Linux」「MySQL」(またはMariaDB)「Apache」「PHP」「Perl」「Python」(のいずれか)の組み合わせ。これらの頭文字を繋いだ略語となっている。
データベースを利用したWebアプリケーションを開発・運用するのに適した、定番のオープンソースソフトウェアの組み合わせを表している。「Linux」はオペレーティングシステム(OS)、「Apache」はWebサーバ、「MySQL」「MariaDB」はリレーショナルデータベース管理システム(RDBMS)、「PHP」「Perl」「Python」はプログラミング言語および実行環境である。
いずれもオープンソースで開発・配布されており、それぞれの分野で最も普及しているソフトウェアの一つである。動的なWebサイトやWebサービスなどの構築に適しており、関連情報や事例、対応ソフトウェアや開発ツールなども豊富である。
これらを個別に入手して同じ環境に導入する必要があるが、OSであるLinux以外は「XAMPP」などの配布パッケージを利用して一括して導入することもできる。また、サーバ向けのLinuxディストリビューションの中にはこれらがあらかじめ同梱されて配布されているものもある。
LAPP (Linux+Apache+PostgreSQL+PHP/Perl/Python)
Webアプリケーションを開発するのに適したオープンソースソフトウェアの組み合わせの一つで、OSの「Linux」、Webサーバの「Apache」、データベースの「PostgreSQL」、プログラミング言語および実行環境の「PHP」「Perl」「Python」(のいずれか)の頭文字を繋いだものを「LAPP」という。LAMPのRDBMSをPostgreSQLに差し替えたもの。
Linux 【リナックス】
世界で最も普及している、オープンソースのオペレーティングシステム(OS)。いわゆるUNIX系OSの一つで、主に業務用コンピュータシステムやデジタル家電、携帯端末などで利用されている。
主にネットワーク上で他のコンピュータに機能やサービスを提供するサーバコンピュータ用として利用されるが、スマートフォンなどの携帯端末、家庭用ゲーム機やデジタル家電、スーパーコンピュータ、メインフレームまで、様々な種類や用途のコンピュータ製品に組み込まれ広く普及している。一般的なパソコンでも動作するが、パソコン向けOSはWindowsやmacOSなどの製品が強く、熟練者以外はあまり使わない。
非営利団体のリナックス・ファウンデーション(Linux Foundation)が開発を主導し、世界中の有志の開発者たちが共同で開発や修正に取り組んでいる。「GPL」(GNU General Public License)と呼ばれる利用規約(ライセンス)に基づきオープンソースソフトウェアとして無償配布されており、誰でも自由に入手、使用、改変、再配布、自らのソフトウェアへの組み込みなどを行うことができる。
Linuxカーネル
狭義のLinuxは、コンピュータのハードウェアの制御や管理、プログラムの実行制御などを行う中核部分である「Linuxカーネル」(Linux kernel)を指す。
先行するUNIX系OSを参考に設計や仕様が決められたが、既存のソフトウェアのプログラムコード自体は流用せずにゼロから開発されている。開発には主にC言語が用いられ、わずかな手直しで様々なCPUや機種で動作させることができる。
当初は一般的なパソコン製品に搭載されていた米インテル(Intel)社のx86系32ビットCPU(IA-32)向けに開発されたが、徐々に対応機種を増やし、現在では64ビットCPUのx86-64系や、モバイル機器・組み込み機器で一般的なARM系、IBM製メインフレームのz/Architecture系など、20種類を超えるプロセッサに対応している。
全体的な構造としては「モノリシックカーネル」となっており、実用上の性能や限られたメモリ容量でも効率的に動作することを重視している。「カーネルモジュール」と呼ばれるソフトウェア部品の追加や入れ替えにより、用途に応じて柔軟に構成を変更できるようになっている。
Linuxディストリビューション
カーネルだけがあってもそのままでは利用者がコンピュータに導入して操作可能な状態にはできないため、OSとして機能するよう必要なプログラム群をまとめた配布パッケージが作成されており、これを「Linuxディストリビューション」(Linux distribution)という。
ディストリビューションにはカーネルの他に、シェルやライブラリ、コンパイラなどの開発ツール類、テキストエディタ、ブートローダなど、起動や操作、ソフトウェアの導入・実行に必要なソフトウェアが含まれる。用途に応じて、各種のサーバソフトウェアやアプリケーションソフト、GUIを提供するデスクトップ環境(ウィンドウマネージャなど)が同梱されることもある。
Linuxディストリビューションは誰でも自由に開発・配布できるため、個人や数人のグループから企業、大規模オープンソースプロジェクトまで様々な開発主体が様々な機種・用途向けのものを提供している。パソコン向けやサーバ向けとしてはDebian GNU/LinuxやUbuntu Linux、Red Hat Enterprise Linux、CentOS、Fedoraなどがよく知られる。
組み込みLinux
汎用のディストリビューションをパソコンやサーバなどで使用する以外にも、電子機器などのメーカーが自社製品を制御するコンピュータの組み込みOSとしてLinuxカーネルをベースとしたシステムを独自に開発して組み込む事例も数多くあり、単純な普及台数ではそちらの方が多いとも言われる。
テレビやビデオレコーダー、家庭用ゲーム機などのデジタル家電製品の多くがLinuxベースの組み込みシステムを採用している。カーネルの一部を改変してリアルタイムOS化し、乗り物や産業機械などの制御に用いるシステムもある。
最も有名な例としては、スマートフォンやタブレット端末のOSおよびソフトウェア環境として米グーグル(Google)社が主導した開発された「Android」(アンドロイド)がある。Linuxカーネルのカスタム版を基盤としたモバイル機器向けOSで、米アップル(Apple)社のiOSと市場を二分している(汎用プラットフォーム化しているため狭義の組み込みLinuxからは外れているとする考え方もある)。
起源
1991年に当時フィンランドのヘルシンキ大学の大学生だったリーナス・トーバルズ(Linus B. Torvalds)氏が、教育用のシンプルなUNIX系OS「MINIX」(ミニックス)を参考に独自のOSを開発し始めた。
“Linux” の名称は氏のファーストネームと、MINIXを含む当時のUNIX系OSの多くが “~x” (~ックス)というネーミングを好んだ(商標権の問題で「~ UNIX」とは名乗れなかった)ことに由来する。ただし、そのように命名したのは当時の関係者で、本人ではないとされる。
氏は初期のLinuxをGPLによりオープンソースとして公開し、主に大学や研究機関が接続されていた初期のインターネットを通じて様々な人が開発に参加するようになった。カーネル以外に必要なツール類はGNUプロジェクトが開発していたものを取り込むことで、カーネルの開発に集中することができた。
GNU側も独自カーネル(GNU Hurd)の開発が難航していたため、Linuxカーネルを取り込むことで、大目標としていた「GPLで公開可能な完全なOSパッケージ」を作成できるようになり、両者は相互補完的な関係で共に発展・普及していった。
Apache 【Apache HTTP Server】
世界的に最も普及しているWebサーバ(HTTPサーバ)ソフトウェアの一つ。 非営利団体のアパッチソフトウェア財団(Apache Software Foundation)が開発しており、オープンソースソフトウェアとして公開している。
古くから開発・公開されてきた人気の高いWebサーバで、安定性や機能の豊富さ、対応ソフトウェアの多さなどが評価され、企業から個人まで様々な用途で利用されている。LinuxやWindows、macOSを始め様々なオペレーティングシステム(OS)上で動作し、いくつかの著名なOSでは、そのOSでの動作に最適化された高性能なプログラムを利用することができる。
モジュールによる機能拡張
拡張機能をモジュールとして追加できる構造となっており、公式にいくつかの機能が配布されているほか、第三者が自由にモジュールを開発・導入することができる。
特定のプログラミング言語を利用するためのモジュールや、企業が自社製品と連携するためのモジュールなど様々なものが開発されている。「mod_perl」「mod_rewrite」「mod_cgi」など、モジュール名は慣習として「mod_機能名」という形式になっている。
Apacheはオープンソースとしてソースコード自体が配布されているため、実行可能(バイナリ)形式へのコンパイル時にあらかじめモジュールを組み込み、Webサーバ本体に一体化させて動作させる「静的リンク」を行うことができる。別にコンパイルしたモジュールを実行時に連携させる「動的リンク」より導入は手間だが、高速に動作させることができる。
歴史
初版は1995年に公開された。それ以前に普及していた「NCSA HTTPd」というWebサーバの開発が停滞したことから、有志がその不具合の解消や改良を行うパッチ(patch:継ぎ当て)プログラム集として開発した。
名称の由来として、NCSA HTTPdにパッチを継ぎ当てた “A patchy web server” (つぎはぎのWebサーバ)をアメリカ大陸先住民のアパッチ族(Apache)に掛けたものであると説明されることが多いが、当時の開発者グループの中心メンバーだったブライアン・ベーレンドルフ(Brian Behlendorf)氏によれば、“Apache”という名前は突然ひらめいたもので、しばらくしてから別のメンバーにそのような語呂合わせを指摘されたとしている。
Apache Software Foundation
後に同氏を中心に非営利団体のApache Software Foundationが結成され、パッチ集から独立したWebサーバソフトウェアとして全面的に再開発された。同財団はApache以外にもサーバ向けソフトウェアを中心に様々なオープンソースソフトウェアの開発・配布を手がけている。
Apacheをオープンソースとして開発・配布するために考案されたライセンス(利用許諾契約)である「Apacheライセンス」(Apache License)は著名なオープンソースライセンスの一つとして広く普及している。
MySQL
人気の高いオープンソースのリレーショナルデータベース管理システム(RDBMS)の一つ。現在はDBMS最大手の米オラクル(Oracle)社が開発を主催している。
リレーショナルデータベース(RDB)の作成や管理、データの書き込みや読み込みなどを行うためのソフトウェアで、マルチユーザーでの利用、マルチスレッドでの動作に対応し、レプリケーション、トランザクション管理など高度な機能も実装されている。
商用RDBMS製品に劣らない機能や性能を備え、Linuxをはじめとする主要なUNIX系OSやWindows、macOSなど多様な環境に対応している。PostgreSQLと並んで最も人気の高いオープンソースRDBMSの一つで、企業などの情報システムや商用ネットサービスなどでも幅広く採用されている。
GPL(GNU General Public License)に基づいてオープンソースソフトウェアとして公開されており、誰でも自由に開発に参加したり、入手、改変、再配布、自前のソフトウェアへの組み込みなどを行うことができる。デュアルライセンス制を採用しており、組み込んだソフトウェアを非公開とする商用ライセンスを用いることもできる。
ハードディスクなどのストレージ(外部記憶)装置へのデータの読み書き行う部分が「ストレージエンジン」として独立しており、機能や特徴に応じて複数の種類から選べるようになっている。以前はシンプルで高速な「MyISAMエンジン」が標準的に用いられてきたが、近年では堅牢性に優れトランザクション処理に対応した「InnoDB」が用いられることが多い。
歴史
1995年にスウェーデンのTcXデータコンサルト(TcX DataKonsult)社(後にMySQL社に改名)によって最初のバージョンが公開された。2008年に米サン・マイクロシステムズ(Sun Microsystems)社が同社を買収し、2010年にSun社がOracle社に買収されたため、その後はOracle社の所有となっている。
オリジナル開発者のミカエル・ウィデニウス(Michael Widenius)氏はMySQLのコード資産から派生した新しいオープンソースRDBMSの「MariaDB」を開発・公開しており、MySQLから乗り換える事例が増えている。
PHP 【PHP : Hypertext Preprocessor】
Webサーバの機能を拡張し、動的にWebページを生成するために用いられるプログラミング言語の一つ。いわゆるスクリプト言語あるいは軽量言語(LL:Lightweight Language)の一つで、実行環境をWebサーバに組み込んで利用されることが多い。
C言語やJava、Perlの影響を受けた記法や構文を採用した手続き型のプログラミング言語で、平易な仕様で学習しやすく、簡潔な記述でプログラムを開発することができる。
クラスを用いたオブジェクト指向や例外処理などに対応しているほか、標準で外部のデータベースシステム(DBMS)へ接続する機能が提供され、データベースと連携したWebアプリケーションを容易に開発することができる。
実行方式
大きな特徴の一つとして、HTMLファイルの雛形(テンプレート)の中に特殊な記法を用いてサーバ側で実行するプログラムコードを埋め込む形で記述することができる。
このファイルへのアクセス要求があると、WebサーバはPHP側のコードを実行し、実行結果を雛形のHTMLコード中の所定の場所に埋め込んで閲覧者へ送信する。このような仕組みはASP(Active Server Pages)/ASP.NETやJSP(Java Server Pages)などでも採用されている。
PHPの実行環境はWebサーバソフトの拡張モジュールなどとして組み込んで利用されるのが一般的で、CGI/FastCGIやサーバ固有のAPI(ISAPIなど)を通じて起動される。Apache HTTP ServerやMicrosoft Internet Information Services(IIS)など主要なWebサーバの多くに標準で対応しており、PHPで開発されたアプリケーションは様々な環境で同じように稼動させることができる。
フレームワークの利用
PHPによるWebアプリケーションの開発はゼロから独自に行われることもあるが、多くは「フレームワーク」と呼ばれる骨組みを用いて行われる。アプリケーションの基本的な骨格や雛形を汎用的な形にまとめたもので、少ないコード記述で迅速に開発を進めることができる。
多くのフレームワークがオープンソースとして公開されており、長年に渡り開発され続けている著名なものだけでも「Zend Framework」「Laravel」「CakePHP」「CodeIgniter」「Symfony」「FuelPHP」などの種類がある。
パッケージの利用
PHPで記述したプログラムをパッケージとして部品化したり、外部のパッケージを取り込んで利用する機能があり、インターネット上には世界中のボランティア開発者が公開している汎用的なパッケージを集積した「PEAR」(PHP Extension and Application Repository)と呼ばれるサイトが存在する。
標準の開発ツールにはPEARにアクセスしてパッケージを入手・導入するソフトウェアが添付されており、必要な機能を提供するパッケージを取り込んで自分のプログラムに組み込んで利用することができる。また、C言語で開発された拡張モジュールを公開している「PECL」(PHP Extension Community Library)というサービスもある。
歴史
PHPの最初のバージョンは1995年にラスマス・ラードフ(Rasmus Lerdorf)氏によって公開された。PHPという名称は「Personal Home Page Tools」の略とされたが、1998年のPHP 3.0からは「PHP: Hypertext Preprocessor」という表記が用いられている。
公式の処理系は米ゼンド・テクノロジーズ(Zend Technologies)社が開発している「Zend Engine」(ゼンドエンジン)で、オープンソースソフトウェアとして公開されており、誰でも自由に入手、利用、改変、再配布などすることができる。
PostgreSQL 【ポスグレ】
リレーショナルデータベース(RDB)の作成や操作、管理ができるオープンソースのデータベース管理システム(DBMS)の一つ。MySQLと人気を二分するオープンソースRDBMSで、Linuxなど主要なUNIX系OSとWindowsに対応し、機能の豊富さや拡張性の高さに定評がある。
RDBMSとしての基本的な機能として、SQL言語によるデータベースの作成や編集、データの読み書き、サブクエリ、結合、制約、トリガー、トランザクション、レプリケーション、バックアップなどに対応するほか、インデックスやデータ型、演算子、型変換など様々な要素をユーザー定義できる高い拡張性を備えている。
INSERT文とUPDATE文を統合し一文で書けるUPSERT文(指定された条件に一致するレコードが既存ならUPDATE、存在しなければINSERT)など独自の新機能の追加にも熱心で、機能の豊富さから商用DBMSからの乗り換え先としても有力な選択肢となっている。
ストアドファンクション(関数型のストアドプロシージャ)にも対応し、標準ではOracle DatabaseのPL/SQL互換のPL/pgSQL言語が組み込まれているほか、Perl(PL/Perl)やPython(PL/Python)、C言語による開発にも標準で対応し、外部開発の機能を追加すればJavaやJavaScript、R言語、シェルスクリプトなどでも開発できる。
歴史
1970年代にカリフォルニア大学バークレー校で開発されたRDBMSの「Ingres」(イングレス)の後継として1989年に「Postgres」(ポストグレス)が開発された。これは従来のリレーショナルデータベースにオブジェクト指向的な拡張を組み込んでもので、オブジェクトリレーショナルデータベース管理システム(ORDBMS:Object Relational Database Management System)と呼ばれた。
同大でのPostgres研究開発プロジェクトは1993年に終了したが、このときオープンソースとして公開されていたコードを元に有志の開発者グループが後継RDBMSを開発し、1997年に「PostgreSQL」の名称で公開した。バージョン番号はPostgresからの連番となっているためPostgreSQLの最初のバージョンは6.0とされた。
Postgresは商用版の「Illustra」(イラストラ)が当時の米大手DBMS開発元インフォミックス(Informix)社に買収され、同社がIBM社に買収されたことにより、IBM社のデータベースソフトウェア製品の技術基盤の一つとして受け継がれていった。また、Postgresで提唱されたORDBMSという概念に基づく機能はSQL規格の1999年の改訂(SQL99)に大きく取り込まれ、他のRDBMSへも組み込まれていった。
オープンソースライセンス 【OSSライセンス】
ソフトウェアの利用許諾契約書(ライセンス)の一種で、ソフトウェアのソースコードを誰でも自由に入手、利用、改変、再配布等してよいとする内容を示したもの。
ソフトウェア開発では一般に、人間が理解しやすいプログラミング言語を用いて開発者が「ソースコード」(source code)を作成し、これをコンピュータが直に解釈可能な形式(ネイティブコード/実行可能形式)に変換して実行することが多い。
販売されているソフトウェア製品などの多くは利用者に実行形式のプログラムのみを提供するが、ソースコードを公開・配布して誰でも自由に改変や再配布できるようにする考え方があり、これを「オープンソース」(open source)という。
オープンソースライセンスはオープンソースソフトウェア(OSS:Open Source Software)の作者(原著作者)が利用者や他の開発者に対して提示する利用許諾条件をまとめたもので、許可事項や禁止事項、要請事項、免責事項などが含まれる。
ライセンスによって具体的な条件は異なるが、多くに共通する事項として、ソースコードの自由な利用や改変、再頒布(販売を含む)を許可すること、無保証であり損害が生じても作者は免責されること、作者名などの著作権表示を付すこと、再頒布時にソースコードとライセンス文書を添付することなどが定められている。
元のソフトウェアを改変した二次的・派生的ソフトウェアの扱いはライセンスによって異なり、派生物のソースコードを公開してオリジナルと同様のライセンスを適用しなければならない「コピーレフト」(copyleft)を要請するものと、派生物の独占的な利用やソースコードの非公開を認めるものに分かれている。
具体的なライセンスとして、原著作者が自身で作成したオリジナルのライセンスと、多くのソフトウェアに適用できるよう汎用的な条件を記述した著名なライセンスがある。後者としてはGPL(GNU General Public License)やBSDライセンス、MITライセンス、Apacheライセンス、MPL(Mozilla Public License)などがよく知られる。
Linuxカーネル 【Linux kernel】
オペレーティングシステム(OS)「Linux」の中核部分。コンピュータのハードウェア資源を管理し、アプリケーションソフトへの資源の割り当てや調整を行う。
プログラムの起動や実行状態の管理を行い、実行中のプログラム(プロセスという)にCPUの実行時間を細切れにして割り当てる。また、メインメモリ(RAM)を管理し、各プロセスに領域を割り当てたり、終了したプロセスから領域を回収して他のプロセスに再割り当てする。
様々なプログラムが共通して必要とする機能を提供しており、各プロセスから「システムコール」という仕組みで機能呼び出すことができる。コンピュータに内蔵あるいは装着された装置・機器も管理下に置き、それぞれの装置に適したデバイスドライバを通じて各プロセスからその機能を利用できるようにする。
1991年にフィンランドのりーナス・トーバルズ(Linus Torvalds)氏が開発を始めたソフトウェアで、現在では世界中の大勢のボランディア開発者が共同で開発を進めている。「GPL」(GNU General Public License) という利用規約の元でソースコードが公開され、誰でも自由に入手、利用、改変、再配布、自作ソフトウェアや自社製品への組み込みなどを行うことができる。
Linuxカーネルだけでは利用者が操作・使用できるソフトウェアとしては成り立っておらず、操作を受け付けるシェル、各種のツールやユーティリティソフト、ライブラリ、基本的なアプリケーションソフトや開発ツール、デバイスドライバ、インストーラなどを組み合わせて一つのパッケージに仕立てた「Linuxディストリビューション」(Linux distribution)の形で配布または販売されることが多い。
Perl 【Practical Extraction and Report Language】
簡潔な記述や柔軟性、拡張性の高さが特徴のプログラミング言語の一つ。いわゆるスクリプト言語の草分けの一つで、UNIX系OSを中心に広く普及している。
基本的な文法や記法やC言語に似ているが、多様で自由度が高く、記号などを組み合わせた簡潔な記法が用意されている。言語仕様の一部に正規表現を取り込むなど、テキスト(文字)処理のための豊富な機能が用意されている。連想配列(ハッシュ)やリファレンス(変数などのメモリ上の位置を扱う機能)など高度な機能も標準で用意されている。
積極的に新しい機能を取り入れる開発姿勢でも知られ、オブジェクト指向プログラミングを可能にする拡張や、プログラムのモジュール(部品)化およびモジュールの読み込み機能、Unicodeなど多言語環境への対応、スレッド、クロージャ、リフレクション、ガベージコレクションなどが追加された。
Perlモジュールのオープンな集積場所(アーカイブ)として「CPAN」(Comprehensive Perl Archive Network)が用意されており、世界中の開発者がこれまでに開発した様々な機能のモジュールが公開されている。標準の開発ツールの一部としてCPANにアクセスしてモジュールを入手・導入するソフトウェアが提供されており、様々なモジュールを自分のプログラムの一部として取り込むことができる。
公式の言語処理系(「perl」と小文字で表記する)にはソースコードを読み込みながら同時に実行するインタプリタが含まれ、コンパイルやビルドなど手間や時間のかかる作業を省略して記述したプログラムを即座に実行してみることができる。
この処理系はオープンソースソフトウェアとして公開されており、誰でも自由に入手、利用、改変、再配布などすることができる。当初はUNIX系OS向けに開発されていたが、人気の高まりとともにWindowsなど数多くの環境に移植され、様々な機種やオペレーティングシステム(OS)で利用可能となっている。
Perlの最初のバージョンは1987年にラリー・ウォール(Larry Wall)氏が発表したもので、UNIXでの簡易なテキスト処理プログラムやシステム管理プログラムを開発する言語として人気を博した。インターネットが普及し始めると、Webサーバで動的にプログラムを実行して結果をWebページとして送信するCGI(Common Gateway Interface)の開発言語として広く普及した。
Python
簡潔で読みやすい文法が特徴的な汎用の高水準プログラミング言語の一つ。いわゆるスクリプト言語の草分けの一つで、UNIX系OSを中心に広く普及している。近年では初学者向けの学習用途、統計処理やAI関連のプログラム記述用途として用いられることも多い。
基本的な特徴としては、豊富なデータ型とコンテナ型、ガベージコレクション、Unicodeによる多言語対応、プログラムのモジュール(部品)化による他のプログラムへの容易な組み込み、プログラムの仕様の文書化(ドキュメンテーション)を支援する機能などがある。
ユニークな特徴としては、多くの言語では人間にとってプログラムを読みやすくするために便宜的に行われるインデント(字下げ)を言語仕様上の構文の一つとして採用しており、ブロックの範囲を示すのに用いられる。
言語自体の文法や語彙、記法な最小限のシンプルなものに抑えられているが、対照的に、極めて広範囲の分野に渡り豊富な機能を提供する標準ライブラリが用意されている。当初は手続き型言語とオブジェクト指向言語の特徴を備えた言語として設計されたが、関数型言語の要素の多くを取り入れ、様々なスタイルのプログラミングが可能なマルチパラダイム言語として知られている。
他の言語や環境との連携機能も充実しており、Pythonからアクセスできない低レベルの機能をC言語で記述して拡張モジュールとして組み入れる仕組みが提供されているほか、Javaライブラリを利用できる実行環境の「Jython」や、Microsoft .NET環境で.NET Frameworkの機能を利用できる「IronPython」などの処理系もある。
標準の言語処理系(CPython)にはソースコードを読み込みながら同時に実行するインタプリタが含まれ、コンパイルやビルドなど手間や時間のかかる作業を省略して記述したプログラムを即座に実行してみることができる。この処理系はオープンソースソフトウェアとして公開されており、誰でも自由に入手、利用、改変、再配布などすることができる。
Pythonの最初のバージョンは1991年にオランダのグイド・ヴァン・ロッサム(Guido van Rossum)氏によって発表された。現在ではWebアプリケーションの開発用言語として人気が高いほか、データ処理や統計解析などの分野でよく利用されることで知られる。
Ruby
まつもとゆきひろ(Matz)氏が開発を創始した著名なオブジェクト指向プログラミング言語。主な処理系(実行環境)としてソースコードをそのまま実行に移せるインタプリタを採用したスクリプト言語の一種である。
プログラムの書きやすさや読みやすさを重視し、シンプルで洗練された構文や記法を基本としている。既存の様々な言語の要素を取り込み、実用的な用途にも十分使用できる利便性を備えている。
スクリプト言語ながら、クラス定義やMixin、値をすべてオブジェクトとして扱うなどの仕様を備えた本格的なオブジェクト指向言語となっており、プログラムの部品化(モジュール化)や再利用、大規模ソフトウェアの開発などにも適用可能となっている。
他にも、正規表現などテキスト処理が充実しているほか、例外処理、演算子のオーバーロード、クロージャ、イテレータ、ガベージコレクション、マルチスレッドなど豊富な機能や仕様を備えている。
初期には先行するスクリプト言語のPerl(パール)を意識して開発されていたこともあり、UNIX系OSでのシステム管理用スクリプトなどの開発に用いられることが多かったが、21世紀に入るとWebサーバ上で動作するWebアプリケーションの主要開発言語として脚光を浴びた。
特に、Rubyをベースに最小限のコード記述で迅速にデータベース連動Webアプリケーションを開発できる「Ruby on Rails」(ルビーオンレイルズ)は実用的なフレームワークとして広く普及し、後続のWebアプリケーションフレームワークにも多大な影響を与えた。
開発は1995年に始まり、言語仕様は2011年にJIS X 3017としてJIS規格となったほか、2012年にISO/IEC 30170として国際標準化されている。MRI(Matz' Ruby Implementation)やYARV(Yet Another Ruby VM)といった公式の処理系はオープンソースソフトウェアとして公開されている。Javaで実装されたJRuby、.NET Framework向けのIronRuby、macOS向けのMacRuby、組み込みシステム向けのmrubyなど多様な処理系が公開されている。
CPAN 【Comprehensive Perl Archive Network】
プログラミング言語の「Perl」で記述された部品化されたプログラム(モジュール)が公開されている、インターネット上のオープンなアーカイブ。誰でも自由にモジュールを入手することができる。
Perlは書いたプログラムをすぐに実行できるスクリプト言語の草分けの一つで、LinuxなどのUNIX系OSにおけるシステム環境のメンテナンスや、Webサーバ上でリクエストに応じて動的にWebページを生成する仕組みなどで広く利用されている。
Perlにはスクリプトを「モジュール」と呼ばれる部品にする仕組みが用意されており、プログラム上で外部からモジュールを読み込んで機能を呼び出すことができる。CPANはインターネット上のモジュール公開サイトで、誰でも登録されたモジュールをダウンロードして自作のプログラムに組み込むことができる。
モジュールの登録や入手は原則として誰でも可能となっており、世界中のPerlプログラマが様々な分野、機能のモジュールを開発して公開している。開発者はCPANに登録されているモジュールの機能を自ら開発する必要はなく、既存のモジュールを組み込むだけで機能を実現できる。
CPANの利用は専用のコマンド対話型プログラムである「cpan」を通じて行うことができ、CPANサーバからモジュールをダウンロードして自らのPerl実行環境に組み込んで使用可能な状態にすることができる。あるモジュールが別のモジュールの機能を呼び出す依存関係も登録されており、必要なモジュールを容易に知ることができる。
jQuery
Webブラウザ上で動作するJavaScriptライブラリの一つ。ブラウザの種類に依らず簡潔な記述で豊富な機能を活用することができる。オープンソースとして公開・配布されている。
シンプルなコードでWebページの要素に演出効果やアニメーションなどを追加したり、スタイルやイベント起動の設定や変更などを行うことができる。Ajaxによる外部との通信も容易に実装できるほか、様々な機能を実現する豊富な対応プラグインが公開されている。
jQueryオブジェクトとメソッドチェーン
jQueryは独特の記法を使い、複数の処理を容易に組み合わせられるようになっている。機能のほとんどは「$」あるいは「jQuery」という名前(別の名前を指定することもできる)のオブジェクト(これをjQueryオブジェクトという)のメソッドとして定義されている。
最初に$関数にCSSセレクタに似た記法で $(“div.myclass”) のようにページ内の操作したいDOM(Document Object Model)要素を指定すると、その要素を内部に持つjQueryオブジェクトが返されるため、これに実行したいメソッドを指定する。
返り値として同じ要素を持つ処理済みのjQueryオブジェクトが返されるため、さらに何か処理したい場合には続けてメソッドを指定することで、$( セレクタ ).処理1( 引数1 ).処理2( 引数2 ).処理3( 引数3 )…; のように数珠つなぎに処理を記述していくことができる。このような連鎖的な処理の記述様式をメソッドチェーンという。
ユーティリティ関数
jQueryオブジェクトにはスクリプト中から単体で呼び出して使用できる便利なメソッドが多数実装されており、$.メソッド名(引数) という書式で簡単に呼び出すことができる。これをユーティリティ関数という。
これを利用してAjax機能は$.ajaxとしてまとめられており、他にも反復処理を記述する$.each、配列を結合する$.merge、オブジェクトを連結する$.extend、非同期処理を記述する$.Deferredなど様々な機能が実装されている。これらのうちのいくつかはJavaScript規格(ECMAScript)の更新により言語仕様自体に取り込まれたため、今となってはあまり使用する必要がなくなっている。
歴史
2005年1月にジョン・レッシグ(John Resig)氏が最初のバージョンを開発し、オープンソースソフトウェアとして公開した。2012年には新たに設立された非営利団体のjQuery Foundationに移管されたが、同団体は2016年に他の有力JavaScript関連オープンソースプロジェクトと統合されJS Foundation(現OpenJS Foundation)となった。
複雑化する一方のWeb開発を簡潔にするクロスブラウザライブラリとして2010年前後に特に人気が高まった。しかし、機能追加や様々なブラウザとの互換性維持のために次第にファイル容量が増大していき、データ転送量がかさむ点やページの読み込みに時間がかかる点が敬遠されるようになった。
コピーレフト
著作物の権利に関する考え方の一つで、著作物の自由な利用・改変・再配布を認め、また、そこから派生した著作物についてこれらの行為を制限してはならないとするもの。
コンピュータプログラムのソースコードの配布などに際してよく用いられる考え方で、GPL(GNU Public License)などのソフトウェアライセンス(利用許諾契約)がこの考え方を取り入れていることでよく知られる。
著作権(copyright)に反対する権利概念であるため、“right” の反対で “left” という言葉遊び的な名称となっている。シンボルマークも○に「C」を入れた著作権マーク © を左右反転させたものになっている。
著作者によってコピーレフトが宣言された著作物は、誰でも自由に入手、使用、改変、複製、(販売を含む)再配布が可能で、この点は著作権が放棄された著作物などと同様だが、コピーレフトでは原著作物を改変したり組み込んだりした二次的、派生的な著作物について、その作者が第三者による自由な使用、改変、再配布を制限することを禁じ、同じ条件で公開しなければならないと定めている。
例えば、企業がソフトウェア製品を開発する際にコピーレフトのプログラムを複製して組み込むと、自社開発部分を含む製品全体のソースコードをコピーレフトとして公開しなければならないことになる。この点は自社の開発物についての著作権や企業秘密などを守りたい企業などから敬遠される要因となっている。
オープンソースソフトウェアのライセンスではGPLやMPL(Mozilla Public License)がコピーレフトの考え方を取り入れているが、同じGNUプロジェクトのライセンスでもライブラリなどに適用されるLGPL(Lesser GPL/Library GPL)では、リンクによって機能を使用する場合はリンク元のソフトウェアの公開を免除している。MITライセンスやBSDライセンスはコピーレフトではなく、派生物を非公開とすることができる。
マルチライセンス 【デュアルライセンス】
ソフトウェアを複数の異なる利用許諾条件(ライセンス)に基いて配布あるいは販売すること。よく見られる2つの場合を特に「デュアルライセンス」(dual-licensing)という。
ソフトウェアのプログラムを開発した著作権者が、他者にプログラムの利用条件を提示したものを「ソフトウェアライセンス」(software license)という。販売される製品に適用される商用ライセンスや、オープンソースソフトウェアに適用されるオープンソースライセンスなどの類型がある。
通常は一つのライセンスが適用されるが、開発者が二つ以上のライセンスを提示する場合があり、これをデュアルライセンスという。利用形態などによって適用されるライセンスが異なる場合と、利用者が選択肢の中から自由に選べる場合がある。
利用形態などによって異なる場合、例えば、無償で利用できるが派生物のソースコードを公開しなければならないライセンスと、対価の支払によってクローズドな利用を認めるライセンスの2種類が用意される。オープンソースプロジェクトなどでは前者が適用され、企業が製品に組み込んで販売するような場合には後者が適用される。
利用者が選択できる場合、例えば、すでに存在する著名なオープンソースライセンスが複数提示され、どれを適用してもよいという形を取る。利用者は自分の開発しているソフトウェアの一部に組み込みたい場合、そのソフトウェアのライセンスに合わせて適用するライセンスを選択することができる。
GPL 【GNU General Public License】
ソフトウェアの利用許諾条件などを定めたライセンスの一つ。主にフリーソフトウェア(自由なソフトウェア)の開発・配布のために用いられるもので、FSF(Free Software Foundation)が公開している。
もともとFSFが主催するGNUプロジェクトで開発されたソフトウェアの利用条件を提示するために作られたものだが、同プロジェクト以外にも多くのフリーソフトウェア、オープンソースソフトウェアで採用されている。
一般にソフトウェア開発では人間が理解しやすいプログラミング言語でソースコードを記述し、これをコンピュータが解釈可能なネイティブコードなどに変換して実行するが、GPLではこのソースコードの公開を大原則とし、誰でも自由に入手、使用、改変、再頒布(販売も含む)することを認めている。
また、GPLに基づいて公開されているプログラムを改変したり、自らのプログラムの一部として組み込んだ場合など、派生的・二次的なソフトウェアを作成した場合には、これにもGPLを適用して公開しなければならないと定めている。
このような派生著作物にGPLの適用を強制する方式は「コピーレフト」(copyleft)と呼ばれ、他の多くのオープンソースライセンスには見られない特徴的な条件となっている。この点を忌避してGPL以外のライセンスを採用する開発者も多い。
GPLは主として利用者のコンピュータ上で独立に実行されるプログラムに適用することを想定したライセンスだが、GNUプロジェクトでは他の形態のプログラムや著作物にも適用できるよう派生的なライセンスをいくつか用意している。ライブラリ向けの「LGPL」(Lesser GPL)、サーバソフトウェア向けの「AGPL」(Affero GPL)、文書向けの「GFDL」(GNU Free Documentation License)などである。
BSDライセンス 【Berkeley Software Distribution License】
オープンソースソフトウェアを開発・配布する際によく用いられる、利用条件などを定めた利用許諾契約書(ライセンス)の一つ。米カリフォルニア大学バークレー校がソフトウェア配布に用いていたライセンスが広く一般に広まったもの。
何度か改訂されているが、現在最も一般的な版(修正BSDL、3条項BSDLとも呼ばれる)では、「開発者・配布者がいかなる保証も提供しないこと」「損害が生じても責任を負わないこと」「再頒布時に著作権表示とライセンス表示を含めること」「派生物の宣伝に開発者や配布者の名前を無断で使ってはならないこと」を定めている。
派生的著作物との関係
BSDLで公開されたプログラムを改変したり、自らのプログラムに組み込んだ派生的(二次的)な著作物は、ソースコードを公開せずに販売・配布したり、BSDLとは異なるライセンス(独占的なライセンスを含む)で提供することができる。
GPL(GNU General Public License)などのいわゆる「コピーレフト」(copyleft)条項のあるライセンスではこうした行為は禁じられており、派生著作物のソースコードも同じ条件で公開しなければならない。これは商業利用などでハードルとなる場合があるため、この点を好んでBSDLを採用する開発者も多い。
BSDL以外にも、主に非コピーレフトである点でBSDLに似た構成のライセンスは数多くあり、「BSDスタイル」と総称されることもある。著名なものには、アパッチソフトウェア財団(Apache Software Foundation)に由来する「Apacheライセンス」(Apache License)、米マサチューセッツ工科大学(MIT)に由来する「MITライセンス」(MIT License)などがある。
歴史
BSDLは米カリフォルニア大学バークレー校(UCB)で開発・配布されたUNIX系OSおよび関連ソフトウェアである「BSD」(Berkeley Software Distribution)に添付されていたライセンスで、1989年に公開された「4.3BSD Net/1」で初めて採用された。初期の版には派生物の広告に原著作者の表示を義務付ける条項などもあったが、1998年に概ね現在の内容となった。
MPL 【Mozilla Public License】
オープンソースソフトウェアを開発・配布する際によく用いられる、利用条件などを定めた利用許諾契約書(ライセンス)の一つ。Mozilla Foundation(モジラ財団)によって考案された。
著作者がMPLの元に配布しているソフトウェアはソースコードが公開され、誰でも自由に入手して利用することができる。再配布や販売も可能で、自らが開発したソフトウェアの一部として組み込んで使用することも自由である。
他のライセンスに対して特徴的な点は二次的著作物の扱いで、MPLが適用されているプログラムについてはソースコードを添付して公開しなければならない一方、MPL以外のライセンスが適用されるプログラムを同じソフトウェアパッケージに同居させることができる。
これにより、例えば企業がMPLで公開されたプログラムを組み込んだ自社のソフトウェア製品を開発し、自社開発部分のプログラムはソースコードを公開せずに実行ファイルのみを提供する(オープンソース部分はパッケージ内にソースコードを添付する)といった対応が可能となっている。
こうした派生的なソフトウェア(二次的著作物)全体に同じライセンスでの公開を求める「GPL」(GNU General Public License)と、全体を非公開とすることができる「BSDライセンス」などの中間的な特徴を備えており、他のライセンスとの相互運用性に優れている。
MPLは旧ネットスケープ(Netscape)社のソフトウェア資産を引き継ぎWebブラウザなどの開発を行うMozilla Foundationが1998年に公開したもので、最新版は2012年のMPL 2.0である。FirefoxやThunderbirdなど同財団の手掛けるソフトウェアに適用されているほか、多くのオープンソースソフトウェアがMPLおよび一部を改変した派生ライセンスで配布されている。
Apacheライセンス 【Apache License】
オープンソースソフトウェアを開発・配布する際によく用いられる、利用条件などを定めた利用許諾契約書(ライセンス)の一つ。アパッチソフトウェア財団が公表しているもので、同団体が公開しているソフトウェアの多くに適用されている。
何度か改訂されているが、現在主流の2004年に発表されたバージョン2.0では、ソフトウェアを自由に扱って良いこと、再頒布時に著作権表示とライセンス表示を含めること、オリジナルから修正点がある場合には明示すること、作者や著作権者はいかなる責任も負わないことを定めている。
他のオープンソースライセンスにはあまり見られない条項として、作者が自ら権利を有する特許技術を利用してソフトウェアを開発した場合に、利用者に特許の利用を許諾したとみなす(後から利用料の請求や特許権侵害の申し立てはできない)旨の記述がある。
Apacheライセンスで公開されたプログラムを改変したり、自らのプログラムに組み込んだ派生的(二次的)な著作物は、ソースコードを公開せずに販売・配布したり、Apacheライセンスとは異なるライセンス(独占的なライセンスを含む)で提供することができる。
GPL(GNU General Public License)など「コピーレフト」(copyleft)条項のあるライセンスではこうした行為は禁じられており、派生著作物のソースコードも同じライセンスで公開しなければならない。これを避けるためにApacheライセンスを採用する開発者も多い。
Apacheライセンスはアパッチソフトウェア財団(ASF:Apache Software Foundation)が考案し、同財団傘下のソフトウェア開発プロジェクトなどで利用されているもので、最も人気の高いWebサーバソフトウェアである「Apache HTTP Server」などがApacheライセンスのもとに配布されている。
当初は「Apache Software License」(アパッチソフトウェアライセンス)が正式名称だったが、バージョン2.0から「Apache License」(アパッチライセンス)に改称された。カリフォルニア大学バークレー校の「BSD」(Barkeley Software Distribution)プロジェクトで考案された「BSDライセンス」(BSD License)に影響受けており、似た構成の「MITライセンス」(MIT License)などとともに「BSDスタイル」と総称されることもある。
UNIX系OS 【UNIX-like OS】
1969年に当時のAT&T社ベル研究所で開発された「UNIX」(ユニックス)というオペレーティングシステム(OS)に類似する、あるいは共通する仕様を持つOSの総称。
商標上のUNIX互換OS
現在、「UNIX」の商標権は米業界団体The Open Group(オープングループ)が所有している。同団体の定めた「Single UNIX Specification」という仕様を満たし、認証を受けて商標利用のライセンス料を支払った製品のみが公式にUNIX互換であると名乗ることができる。
最も狭義のUNIX系OSの定義で、米オラクル(Oracle)社のSolaris、米HPE社のHP-UX、米IBM社のAIXなど、いわゆる商用UNIXと呼ばれるOS製品などが該当する。
歴史的なUNIX派生OS
歴史的にオリジナルのUNIX開発プロジェクトを受け継いだり、同じ開発者らが立ち上げた派生プロジェクトなどで開発されてきたOSをUNIX系とする考え方もある。いわゆる商用UNIXの多くはAT&T社の「System V」から派生し、仕様の大半を引き継いでいる。
もう一つの系譜としてカリフォルニア大学バークレー校で開発されていた「BSD」(Brrkeley Software Distribution)から派生したOSがあり、FreeBSDやOpenBSD、NetBSDなどのオープンソースのOSに多く見られる。米アップル(Apple)社のmacOS(Mac OS X)も中核部分の一部はBSDを起源とする。
一般的なUNIX系OS
今日一般的にUNIX系と言う場合には、商標上あるいは歴史的にUNIXと直接的な繋がりを持つOSだけでなく、これらに似た仕様や機能、仕組みを持ち、高い互換性を持つOSが含まれる。UNIX系OSで最も普及しているLinuxが該当する。
POSIX互換OS
いわゆるUNIX系OSを含むが、より広い範囲を表す概念として「POSIX互換」がある。POSIX(Portable Operating System Interface)はUNIX系OSに共通するAPI仕様などをIEEEおよびISOが標準化した規格で、ここに規定されたAPIのみを用いて開発されたプログラムはPOSIX対応OS間でソースレベル互換となる。
一般的にUNIX系OSとはみなされないOSの中にも米マイクロソフト(Microsoft)社のWindowsのようにPOSIXに対応しているものがあり、UNIX系OS向けに開発されたソフトウェアの一部が動作するようになっている。
BSD 【Berkeley Software Distribution】
カリフォルニア大学バークレー校(UCB)の開発者グループが開発・配布していた、UNIX系OSおよび関連ソフトウェア群。多くの商用あるいはフリーの派生OSを生み出し、「BSD系OS」と総称される。
最初のBSDはAT&Tベル研究所(当時)が開発したオリジナルのUNIXを改良した1BSDで、1978年に開発され、UCB内や他の大学のコンピュータ科学の研究者らに提供された。その後2BSD、3BSDと版を重ねるにつれ、OSの中核部分だけでなくテキストエディタなど関連するソフトウェアが追加され、有力なUNIX実装の一つとして広まった。
1980年代には米インテル(Intel)社のマイクロプロセッサ(当時の80386)を搭載したパソコン向けにBSD/386(BSD/OS)と386BSDという二つの異なる派生OSが移植され、後者からはFreeBSDなど有力なパソコン向けUNIX系OSが派生することになる。
1992年にはUNIXの権利を持つAT&Tに訴訟を起こされるなどの問題にも見舞われたが、1995年に4.4BSD-Lite Release 2を持ってオリジナルのBSDの開発は終了した。
NetBSDはUNIX系OSで初めて本格的にTCP/IPによる通信をサポートし、主に大学や研究所が参加していた初期のインターネットで広く利用された。「BSDソケット」あるいは「Barkeleyソケット」と呼ばれる仕組みで容易にネットワークを利用するプログラムを作成することができるようにしたのが大きな特徴で、この仕組みは後に単にソケットと呼ばれるようになり他のOSでも標準的に組み込まれるようになった。
BSD系OS
大学でNetBSDを使って学んだ、あるいは開発に参加した学生がコンピュータ業界に広まったことや、現代でいうフリーソフトウェアのように自由に改変や再配布を認める配布条項を適用していたことから、NetBSDから派生した数多くのUNIX系OSが生まれた。
商用OS製品としては、当時の米サンマイクロシステム(Sun Microsystems)社が開発・販売していた初期のSunOSや、米デジタルイクイップメント社(DEC)のUltrix、米ネクスト(NeXT)社のNeXTSTEPおよびOPENSTEPなどがよく知られる。NeXT社の製品からは後に米アップル(Apple)社のMac OS X、現在のmacOSが派生している。
また、米IBM社らが設立した業界団体Open Software FoundationではNetBSDからOSF/1を開発し、これを元にIBM社のAIX、米ヒューレット・パッカード(Hewlett-Packard/現HPE)社のHP-UX、DEC社のDigital UNIXなどが派生した。
フリーソフトウェアやオープンソースソフトウェアとしては、最も普及しているFreeBSDを始めとして、NetBSDやOpenBSDなどが生まれている。これらはパソコン向けのいわゆるPC-UNIXとしてLinuxに次いで広く利用されているほか、ネットワーク機器のOSの基盤として組み込まれることも多い。
BSDライセンス
初期のNetBSDは配布条項などが整備されていなかったが、1989年に公開された4.3BSD Net/1で「BSDライセンス」と呼ばれる利用許諾契約が適用されるようになり、オープンソースソフトウェアの標準的なライセンスの一つとしてNetBSDと無関係なソフトウェアでも広く利用されるようになった。
GPLなどと異なり派生ソフトウェアに同じライセンスを適用することを求めない点が大きな特徴で、BSDライセンスが適用されたソフトウェアは商用や非公開の用途での利用がしやすいとされる。この特徴を持つライセンスを「BSDスタイル」と総称することがあり、ApacheライセンスやMITライセンスなどが含まれる。
FreeBSD
BSDの流れをくむオープンソースのUNIX系OSの一つ。パソコンをはじめ様々な機種に移植されており、フリーのUNIX系OSの中ではLinuxに次いで人気が高い。
負荷が高まっても誤作動や停止が起こりにくい高い安定性が評価されており、大規模なサーバなどでの採用例が多い。主な開発ターゲットは米インテル社のx86系プロセッサを搭載したPC/AT互換機(一般的なパソコンやPCサーバ)だが、これ以外にも標準で様々なプロセッサの機種に対応しており、組み込み機器での利用も活発である。
ディストリビューションと呼ばれる配布パッケージを利用するLinuxとは異なり、OS標準のパッケージにカーネルだけでなく必要な一通りのソフトウェアが揃っている。ただし、Windowsなどに替えて主要なデスクトップ向けOSとなることは目標ではなく、標準ではデスクトップ環境は含まれない。
ソフトウェアの配布や導入を行うためのパッケージ管理には独自の「package」と「ports」と呼ばれる仕組みを用いる。packageは開発側で生成した実行可能形式(バイナリファイル)のソフトウェアを取得・導入でき、portsはソースコードを元にコンパイルなどを行いソフトウェアを組み立てる。portsは通常は手間のかかるソースコードからのビルドを簡単な操作で半自動的に行うことができ高く評価されている。
BSDライセンスと呼ばれる利用許諾契約に基づいてオープンソースソフトウェアとして配布されており、誰でも自由に入手、改変、再配布などを行うことができる。オープンソースのBSD系OSにはFreeBSDの他にNetBSDやOpenBSDがあるが、FreeBSDはパソコンやサーバを中心に最も広く普及しており、対応機器や対応ソフトウェアも最も充実している。
BSDライセンスはGPLなどに比べ制限が緩やかで商用利用しやすいため、パソコンやサーバだけでなく組み込み機器やネットワーク機器の制御用などの用途でも広く用いられている。ソニーのプレイステーション4にFreeBSDの派生OSが組み込まれている事例は特に有名である。
歴史
FreeBSDは1970~90年代にカリフォルニア大学バークレー校(UCB)で開発されていたUNIX系OSの一つであるBSD(Barkeley Software Distribution)から派生した数あるOSの一つである。最初のバージョンはBSDの4.3BSD Net/2と呼ばれるバージョンを元にネイト・ウィリアムズ(Nate Williams)氏、ロッド・グライムス(Rod Grimes)氏、ジョーダン・ハバード(Jordan K. Hubbard)氏らによって開発され、1993年に公開された。
このバージョンはUNIXの権利を持つAT&T社(当時)との法的な紛争に巻き込まれたため、問題がクリアになった4.4BSD-Lite(オリジナルのBSDの最終バージョン)を元に新たにFreeBSD 2.0が開発された。その後はこのバージョンを元に改良、機能追加が続けられている。
BSD 【Berkeley Software Distribution】
カリフォルニア大学バークレー校(UCB)の開発者グループが開発・配布していた、UNIX系OSおよび関連ソフトウェア群。多くの商用あるいはフリーの派生OSを生み出し、「BSD系OS」と総称される。
最初のBSDはAT&Tベル研究所(当時)が開発したオリジナルのUNIXを改良した1BSDで、1978年に開発され、UCB内や他の大学のコンピュータ科学の研究者らに提供された。その後2BSD、3BSDと版を重ねるにつれ、OSの中核部分だけでなくテキストエディタなど関連するソフトウェアが追加され、有力なUNIX実装の一つとして広まった。
1980年代には米インテル(Intel)社のマイクロプロセッサ(当時の80386)を搭載したパソコン向けにBSD/386(BSD/OS)と386BSDという二つの異なる派生OSが移植され、後者からはFreeBSDなど有力なパソコン向けUNIX系OSが派生することになる。
1992年にはUNIXの権利を持つAT&Tに訴訟を起こされるなどの問題にも見舞われたが、1995年に4.4BSD-Lite Release 2を持ってオリジナルのBSDの開発は終了した。
OpenBSDはUNIX系OSで初めて本格的にTCP/IPによる通信をサポートし、主に大学や研究所が参加していた初期のインターネットで広く利用された。「BSDソケット」あるいは「Barkeleyソケット」と呼ばれる仕組みで容易にネットワークを利用するプログラムを作成することができるようにしたのが大きな特徴で、この仕組みは後に単にソケットと呼ばれるようになり他のOSでも標準的に組み込まれるようになった。
BSD系OS
大学でOpenBSDを使って学んだ、あるいは開発に参加した学生がコンピュータ業界に広まったことや、現代でいうフリーソフトウェアのように自由に改変や再配布を認める配布条項を適用していたことから、OpenBSDから派生した数多くのUNIX系OSが生まれた。
商用OS製品としては、当時の米サンマイクロシステム(Sun Microsystems)社が開発・販売していた初期のSunOSや、米デジタルイクイップメント社(DEC)のUltrix、米ネクスト(NeXT)社のNeXTSTEPおよびOPENSTEPなどがよく知られる。NeXT社の製品からは後に米アップル(Apple)社のMac OS X、現在のmacOSが派生している。
また、米IBM社らが設立した業界団体Open Software FoundationではOpenBSDからOSF/1を開発し、これを元にIBM社のAIX、米ヒューレット・パッカード(Hewlett-Packard/現HPE)社のHP-UX、DEC社のDigital UNIXなどが派生した。
フリーソフトウェアやオープンソースソフトウェアとしては、最も普及しているFreeBSDを始めとして、NetBSDやOpenBSDなどが生まれている。これらはパソコン向けのいわゆるPC-UNIXとしてLinuxに次いで広く利用されているほか、ネットワーク機器のOSの基盤として組み込まれることも多い。
BSDライセンス
初期のOpenBSDは配布条項などが整備されていなかったが、1989年に公開された4.3BSD Net/1で「BSDライセンス」と呼ばれる利用許諾契約が適用されるようになり、オープンソースソフトウェアの標準的なライセンスの一つとしてOpenBSDと無関係なソフトウェアでも広く利用されるようになった。
GPLなどと異なり派生ソフトウェアに同じライセンスを適用することを求めない点が大きな特徴で、BSDライセンスが適用されたソフトウェアは商用や非公開の用途での利用がしやすいとされる。この特徴を持つライセンスを「BSDスタイル」と総称することがあり、ApacheライセンスやMITライセンスなどが含まれる。
The Open Group 【オープングループ】
UNIXシステムの標準化を推進する業界団体。各国における登録商標「UNIX」の権利者としても知られる。
1980~90年代にそれぞれ別のUNIX標準を推進していた業界団体「X/Open」と「OSF」(Open Software Foundation)が1996年に合併し、統一されたUNIX標準を推進する業界団体として発足した。本部は米マサチューセッツ州ケンブリッジに置かれ、企業や公的機関など数百の会員で構成される。
UNIX互換オペレーティングシステム(OS)が満たすべき仕様を定めた「Single UNIX Specification」や、UNIX系OSの互換性を確保する「POSIX」などの標準の策定や製品の認証を行っている。「CDE」(Common Desktop Environment)や「LDAP」(Lightweight Directory Access Protocol)などの仕様策定も行っている。
「UNIX」の商標権は旧AT&T社、米ノベル(Novell)社を経てX/Openに移管され、現在はThe Open Groupが保有している。製品名やロゴなどでUNIX互換を謳うにはSingle UNIX Specificationに準拠して、所定の互換性テストに合格して毎年ロイヤリティを支払う必要がある。この認証を受けたOS製品を「商用UNIX」と総称し、米IBM社の「AIX」や米HPE社の「HP-UX」などが知られる。
オープンソースコミュニティ 【OSSコミュニティ】
あるオープンソースソフトウェアの開発や保守、その他関連する活動に携わるに集団や団体。法人格や規約を持ち団体として組織化されたものと、有志の個人がゆるく連帯して活動する形のものがある。
オープンソースソフトウェアはプログラミング言語などで書かれたソースコードが公開されているソフトウェアで、誰でもソースコードを入手して、使用や複製、販売を含む再配布、改変、自作ソフトウェアへの組み込みなどを無償で自由に行うことが許されている。
オープンソースコミュニティはインターネット上で公開されているオープンソースソフトウェアの開発者が集うコミュニティで、分散バージョン管理システムなどを用いて協力して開発を進める。大規模なソフトウェアなどでは寄付などを元に非営利団体を設立して専従メンバーを雇用する場合もあるが、ほとんどは有志のボランティア開発者である。
コミュニティ内では既存バージョンの保守や修正、新バージョンの開発、パッケージや修正パッチのリリース、バグの報告や共有、関連するドキュメントの作成と公開、などの活動を行う。ユーザー会などの形でセミナーやカンファレンスを開催し、オープンソースソフトウェアの普及を促進する活動を行う場合もある。
信頼性 【リライアビリティ】
一定の条件下で安定して期待された役割を果たすことができる能力。機械やシステムの場合は故障など能力の発揮を妨げる事象の起こりにくさ。日常的には「情報の信頼性」というように、信憑性や信用性に近い意味合いでも用いられる。
人工物について信頼性という場合、定められた条件(製造元の指定する定格値など)下で一定の期間(耐用年数など)、期待される機能を提供し続けることができる性質を表す。
修理不能な製品の場合は故障や破損のしにくさがそのまま信頼性とみなされ、平均故障率(FIT:Failure In Time)や平均故障時間(MTTF:Mean Time To Failure)などの指標が用いられる。修理可能な製品では平均故障間隔(MTBF:Mean Time Between Failures)などで表され、保守性(maintainability/serviceability)を含んだ概念となる。
信頼性にいくつかの性質を加えて、システムが期待された機能・性能を安定して発揮できるか否かを検証するための評価項目として用いる場合がある。よく知られるのは信頼性に可用性(Availability)と保守性(Serviceability)を加えた「RAS」で、これに完全性(Integrity)と機密性(Security)を加えたものは「RASIS」という。