IT総合情報サイト | NO1.Web
LAMP とは
- 2009年5月 7日 17:56
LAMP(ランプ)とは、OSであるLinux、WebサーバであるApache HTTP Server、データベースであるMySQL、スクリプト言語であるPerl、PHP、Pythonを総称した頭文字から成る造語である。動的(ダイナミック)なウェブコンテンツを含むウェブサイトの構築に適した、オープンソースのソフトウェア群である。これらは、それぞれ独自に開発されたものである。
この起源は、1998年にドイツのコンピュータ雑誌であるC'tにてM. Kunzeが提唱したのが始まりである。
類似用語は以下の通り
AMP
LAMPからLinuxを除いたもの
LAPP
LAMPのMySQLの代わりにPostgreSQLのもの
FLAP
LAMPのMySQLの代わりにFirebirdのもの
WAMP
LAMPのLinuxの代わりにMicrosoft Windowsのもの
MAMP
LAMPのLinuxの代わりにMacintoshのもの
mamp.infoから提供されているパッケージ
SAMP
LAMPのLinuxの代わりにSolarisのもの
BAMP
LAMPのLinuxの代わりにBSDのもの
LAMR
LAMPのPerl、PHP、Pythonの代わりにRubyのもの
XAMPP
apachefriends.orgから提供されているパッケージ
WISP
WISA
マイクロソフトがLAMPに対抗するために示した言葉。Windows、IIS、SQL Serverと、PHPまたはASP.NETから成る。
この起源は、1998年にドイツのコンピュータ雑誌であるC'tにてM. Kunzeが提唱したのが始まりである。
類似用語は以下の通り
AMP
LAMPからLinuxを除いたもの
LAPP
LAMPのMySQLの代わりにPostgreSQLのもの
FLAP
LAMPのMySQLの代わりにFirebirdのもの
WAMP
LAMPのLinuxの代わりにMicrosoft Windowsのもの
MAMP
LAMPのLinuxの代わりにMacintoshのもの
mamp.infoから提供されているパッケージ
SAMP
LAMPのLinuxの代わりにSolarisのもの
BAMP
LAMPのLinuxの代わりにBSDのもの
LAMR
LAMPのPerl、PHP、Pythonの代わりにRubyのもの
XAMPP
apachefriends.orgから提供されているパッケージ
WISP
WISA
マイクロソフトがLAMPに対抗するために示した言葉。Windows、IIS、SQL Serverと、PHPまたはASP.NETから成る。
- Comments (Close): 0
- TrackBack (Close): 0
Apache とは
- 2009年5月 7日 17:55
Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、世界中でもっとも使われているWebサーバソフトウェアであり、大規模な商用サイトから自宅サーバまで幅広く利用されている。単にApacheとも称されている。
開発は、Apacheソフトウェア財団のApache HTTPサーバプロジェクトで行われている。Apacheライセンスの下でソースコードが公開および配布されており、代表的なオープンソース・ソフトウェアの一つである。
1995年当時WebサーバソフトウェアはCERN(ヨーロッパ素粒子物理学研究所)が開発したものとNCSA(アメリカ国立スーパーコンピュータ応用研究所)が開発したものの二種類があったが、NCSAのものは初めてCGIを採用するなど、非常に普及していたが、その後ほとんどメンテナンスが行われなくなり、放置されていた。そこで、何人かの有志が改良とサポートを行うためのグループを作り、自分たちをApache Groupと名付けた。しかし、彼等もその後プロジェクトに興味を失ってしまい、再度放置されかけた。そのため、1999年にユーザーの一人だったBrian Behlendorfが自分のサーバを使ってユーザーのためのメーリングリストを立ち上げた。これが現在のApacheソフトウェア財団の母体になっている。ただし、現在のApacheのソースコードはApacheソフトウェア財団によって完全に書き換えられており、NCSAのものは残っていない。
なお、Apacheの名前はNCSAのWebサーバソフトウェアに多くのパッチを当てた為、パッチだらけのサーバ「A Patchy Server」が訛ってapache になったというのは間違い(伝説)である。これについてApacheソフトウェア財団の共同創立者、Lars Eilebrecht は次のように述べている。
The name Apache also makes a cute pun on a patchy web server - server made from a series of patches - but this was not its origin.
実際は文字通りネイティブ・アメリカンのアパッチ族への尊敬の念に由来する。
「Apache=A Patchy Server」説はあまりにも広く信じられている「気の利いた駄洒落」なので、Apacheソフトウェア財団もむきになって否定したりはしていないようだ。
開発は、Apacheソフトウェア財団のApache HTTPサーバプロジェクトで行われている。Apacheライセンスの下でソースコードが公開および配布されており、代表的なオープンソース・ソフトウェアの一つである。
1995年当時WebサーバソフトウェアはCERN(ヨーロッパ素粒子物理学研究所)が開発したものとNCSA(アメリカ国立スーパーコンピュータ応用研究所)が開発したものの二種類があったが、NCSAのものは初めてCGIを採用するなど、非常に普及していたが、その後ほとんどメンテナンスが行われなくなり、放置されていた。そこで、何人かの有志が改良とサポートを行うためのグループを作り、自分たちをApache Groupと名付けた。しかし、彼等もその後プロジェクトに興味を失ってしまい、再度放置されかけた。そのため、1999年にユーザーの一人だったBrian Behlendorfが自分のサーバを使ってユーザーのためのメーリングリストを立ち上げた。これが現在のApacheソフトウェア財団の母体になっている。ただし、現在のApacheのソースコードはApacheソフトウェア財団によって完全に書き換えられており、NCSAのものは残っていない。
なお、Apacheの名前はNCSAのWebサーバソフトウェアに多くのパッチを当てた為、パッチだらけのサーバ「A Patchy Server」が訛ってapache になったというのは間違い(伝説)である。これについてApacheソフトウェア財団の共同創立者、Lars Eilebrecht は次のように述べている。
The name Apache also makes a cute pun on a patchy web server - server made from a series of patches - but this was not its origin.
実際は文字通りネイティブ・アメリカンのアパッチ族への尊敬の念に由来する。
「Apache=A Patchy Server」説はあまりにも広く信じられている「気の利いた駄洒落」なので、Apacheソフトウェア財団もむきになって否定したりはしていないようだ。
- Comments (Close): 0
- TrackBack (Close): 0
オブジェクト指向 とは
- 2009年5月 7日 17:54
オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方である。英語の object-oriented (直訳は、「対象物志向の」・「目的重視の」という意味の形容詞) の日本語訳である。
オブジェクト指向は、当初プログラムの構造をオブジェクト群の相互作用とおよびその雛形であるクラス群の関係として捉え、プログラムコードを書き表すオブジェクト指向プログラミング (OOP; object-oriented programming) から始まっているが、その後、システム開発における要求分析フェイズにおいて、開発しようとする対象領域の構成要素をオブジェクトとして発見・定義していくオブジェクト指向分析 (OOA; object-oriented analysis) 、システムの動作や構造をオブジェクトとクラスとして記述するオブジェクト指向設計 (OOD; object-oriented design) のための、技術としても広く発展・普及することとなった。
オブジェクト指向の枠組みが持つ道具立ては、一般的で強力な記述能力を持つ。特に複雑なシステム記述、巨大なライブラリ(特に部品間で緊密で複雑な相互関係を持つもの)の記述においては、現実問題としてオブジェクト指向の考え方は必須であるといえる。
オブジェクト指向分析が提唱される以前には、システム分析のレベルにおいては、データ構造を中心としたシステムの分析技法である構造化技法が存在した。
また、プログラミングのレベル (プログラミングパラダイム) では、プログラムの実行の流れを決められた制御構造の組み合わせとして書き下す構造化プログラミングや、カプセル化を促すモジュールプログラミング、多態に対応するデータ指向プログラミングという技法が存在していた。
これらに対し、オブジェクト指向手法はそれらを一般化しさらに推し進めたものであるという考え方がある。
オブジェクト指向分析やオブジェクト指向設計に基づいてシステムを実際に開発する際には、オブジェクト指向プログラミング言語 (OOPL; object-oriented programming language) を用いる必要は必ずしもない。ただし、オブジェクト指向によるシステム分析結果を実装するには、プログラム構造とのセマンティクスギャップが少ないオブジェクト指向プログラミング言語を用いるのが普通である。
なおオブジェクトという用語は時に「もの」という直訳語で認識される場合があるが、英語のobjectには「目的語」、または「目的となる対象物」という意味がある。従ってオブジェクト指向は本来「述語(機能)よりもその対象を中心に据える」というニュアンスをもつ用語である。
オブジェクト指向は、当初プログラムの構造をオブジェクト群の相互作用とおよびその雛形であるクラス群の関係として捉え、プログラムコードを書き表すオブジェクト指向プログラミング (OOP; object-oriented programming) から始まっているが、その後、システム開発における要求分析フェイズにおいて、開発しようとする対象領域の構成要素をオブジェクトとして発見・定義していくオブジェクト指向分析 (OOA; object-oriented analysis) 、システムの動作や構造をオブジェクトとクラスとして記述するオブジェクト指向設計 (OOD; object-oriented design) のための、技術としても広く発展・普及することとなった。
オブジェクト指向の枠組みが持つ道具立ては、一般的で強力な記述能力を持つ。特に複雑なシステム記述、巨大なライブラリ(特に部品間で緊密で複雑な相互関係を持つもの)の記述においては、現実問題としてオブジェクト指向の考え方は必須であるといえる。
オブジェクト指向分析が提唱される以前には、システム分析のレベルにおいては、データ構造を中心としたシステムの分析技法である構造化技法が存在した。
また、プログラミングのレベル (プログラミングパラダイム) では、プログラムの実行の流れを決められた制御構造の組み合わせとして書き下す構造化プログラミングや、カプセル化を促すモジュールプログラミング、多態に対応するデータ指向プログラミングという技法が存在していた。
これらに対し、オブジェクト指向手法はそれらを一般化しさらに推し進めたものであるという考え方がある。
オブジェクト指向分析やオブジェクト指向設計に基づいてシステムを実際に開発する際には、オブジェクト指向プログラミング言語 (OOPL; object-oriented programming language) を用いる必要は必ずしもない。ただし、オブジェクト指向によるシステム分析結果を実装するには、プログラム構造とのセマンティクスギャップが少ないオブジェクト指向プログラミング言語を用いるのが普通である。
なおオブジェクトという用語は時に「もの」という直訳語で認識される場合があるが、英語のobjectには「目的語」、または「目的となる対象物」という意味がある。従ってオブジェクト指向は本来「述語(機能)よりもその対象を中心に据える」というニュアンスをもつ用語である。
- Comments (Close): 0
- TrackBack (Close): 0
スクリプト言語 とは
- 2009年5月 7日 17:52
スクリプト言語(-げんご、scripting language)とは、アプリケーションソフトウェアやソフトウェアツールの動作内容を、台本(Script)のように記述するための、簡易的なプログラミング言語である。
上記の意味より、さらに転じて、比較的単純なプログラムを記述するための、簡易的なプログラミング言語全般をいう。動的型付け言語をスクリプト言語と呼ぶ定義もある。ただし、厳密な定義ないし区別は存在しない。いずれの場合も、多くはインタプリタ方式を採用している。
前者の例としては、UNIXのシェルに対するシェルスクリプト、Emacsに対するLISP、Webブラウザなどに対するJavaScriptが挙げられるだろう。
後者の例としては、PerlやPHPが挙げられる。Perlは、その初期においては、テキスト処理ツールの動作を記述するという前者の意味が強かったが、近年では主にCGIを利用して動的なWebサイト(掲示板など)を構築するためのプログラミング言語として、後者の意味の点で発展したといえるだろう。
なお、大変まれながら、特定のソフトウェアを実装するために使用したプログラミング言語のことを、スクリプト言語と呼ぶことがあるので注意したい。この意味では、「記述言語」と呼ぶ方が望ましい。たとえば、UNIXの記述言語はC言語である、といえる。
次のような定義もありえる。あるプログラム全体のビルドをやり直すことなく、ある機能を付け加えることを可能とするために用いる言語のこと。たとえばEmacsに新しい機能を付け加えるために用意されたのがEmacs Lispであり、HTTPサーバに機能を付け加えるために考えられたのがSSIやPHPである。これらは多くの場合インタプリタ方式で動作するが、Emacsの場合のようにコンパイルして高速に動作させる機構を有しているものもある。
スクリプト言語という名前は、いくつかの基本機能を順にならべて新しい機能を定義することだけでも十分に有用であることから、「台本記述」といった意味合いでつけられたものであろう。Flashで使用されるActionScriptがスクリプト言語と呼ばれるのは、まさに「台本」を記述するからであろう。しかし、簡易に動作を記述するだけではない。多くのスクリプト言語が十分に複雑な動作が記述できるよう、プログラミング言語としてのデータ構造記述、制御構造記述能力を備えている。
上記の意味より、さらに転じて、比較的単純なプログラムを記述するための、簡易的なプログラミング言語全般をいう。動的型付け言語をスクリプト言語と呼ぶ定義もある。ただし、厳密な定義ないし区別は存在しない。いずれの場合も、多くはインタプリタ方式を採用している。
前者の例としては、UNIXのシェルに対するシェルスクリプト、Emacsに対するLISP、Webブラウザなどに対するJavaScriptが挙げられるだろう。
後者の例としては、PerlやPHPが挙げられる。Perlは、その初期においては、テキスト処理ツールの動作を記述するという前者の意味が強かったが、近年では主にCGIを利用して動的なWebサイト(掲示板など)を構築するためのプログラミング言語として、後者の意味の点で発展したといえるだろう。
なお、大変まれながら、特定のソフトウェアを実装するために使用したプログラミング言語のことを、スクリプト言語と呼ぶことがあるので注意したい。この意味では、「記述言語」と呼ぶ方が望ましい。たとえば、UNIXの記述言語はC言語である、といえる。
次のような定義もありえる。あるプログラム全体のビルドをやり直すことなく、ある機能を付け加えることを可能とするために用いる言語のこと。たとえばEmacsに新しい機能を付け加えるために用意されたのがEmacs Lispであり、HTTPサーバに機能を付け加えるために考えられたのがSSIやPHPである。これらは多くの場合インタプリタ方式で動作するが、Emacsの場合のようにコンパイルして高速に動作させる機構を有しているものもある。
スクリプト言語という名前は、いくつかの基本機能を順にならべて新しい機能を定義することだけでも十分に有用であることから、「台本記述」といった意味合いでつけられたものであろう。Flashで使用されるActionScriptがスクリプト言語と呼ばれるのは、まさに「台本」を記述するからであろう。しかし、簡易に動作を記述するだけではない。多くのスクリプト言語が十分に複雑な動作が記述できるよう、プログラミング言語としてのデータ構造記述、制御構造記述能力を備えている。
- Comments (Close): 0
- TrackBack (Close): 0
PHP とは
- 2009年5月 7日 17:52
PHP: Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)とは、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。
PHPは、HTML埋め込み型のサーバサイド・スクリプト言語として分類される。この言語処理系自体は、C言語で記述されている。
ウェブサーバ上で動作し、ウェブサーバ上の文書が要求されるたびに、この文書に記述されたPHPのプログラムを実行し、その結果をウェブブラウザに対して送信する。
ウェブブラウザに送信されるデータは通常のHTMLであり、PHPのプログラムを含まない。この点でHTML埋め込み型のクライアントサイド・スクリプト言語(JavaScriptなど)と本質的に異なっている。
平易な文法のため初心者でも習得しやすく、また大規模な開発にも多く用いられている。多くのフレームワークやライブラリが存在し、開発の手助けとなっている。
数多くのオープンソースウェブアプリケーションに利用されている一方、しばしば脆弱性の報告がなされ、過去に深刻なセキュリティホールが何度か報告されている。
PHPはCommon Gateway Interface (CGI) をサポートしており、CGIをサポートするWebサーバ上でPHPスクリプトを実行することができる。この他にもFastCGIを通じてWebサーバから起動したり、利用するWebサーバがモジュール機構を提供していれば、モジュールとしてWebサーバに組み込んだ状態で動作させることが可能である。その為、phpモジュールに脆弱性があった場合、簡単にWebサーバの権限を奪取され、サーバを破壊されることもある。
PHPは、PHP4以降Zend Engineをスクリプト言語を処理するエンジンとして利用している。Zend Engineは、PHP3の開発者によって設立されたZend Technologies Ltd.により開発されたソースコードが公開されているスクリプティングエンジンで、PHP5ではZend Engine 2.0になった。Zend Engineは基本的に1つのプロセスがインタプリタのコンテキストを1つだけ持つものとして設計されている。したがってマルチスレッドを用いたスクリプティングはサポートしていない。
Zend Engineを除くPHP本体は、PHP組み込み関数の実装を含むほか、Webサーバやコマンドラインインターフェイスとスクリプティングエンジンの間を仲介するSAPI (Server API)レイヤ、マルチスレッドで動くWebサーバのモジュールとして利用される場合にグローバル変数のセマンティクスを提供するTSRM (Thread Safe Resource Manager)、さまざまなプラットフォームの入出力機構やAPIの差異を吸収するためのStreamsレイヤから成る。
開発者はSAPIの提供するSPIを実装することで、さまざまなWebサーバのモジュールとしてPHPを動作させることができる。標準では以下のWebサーバ用のSAPIが提供されている。
PHPを動作させる方法には、実行ファイル形式(CGI / FastCGI)、モジュール形式(mod_php / ISAPI)がある。どの形式を使用するかはWebサーバにより異なる。一例を挙げるならば、Apacheで動作させる場合はmod_phpを使用し、IISで動作させる場合はISAPIを使用し、lighttpdで動作させる場合はFastCGIを使用し、AN HTTPDで動作させる場合はCGIを使用する(いずれも代表例であり、他の形式でも動作させることは可能だが、実例は少ない)。
PHPにおいては一般的に実行ファイル形式よりもモジュール形式の方が高速に動作するとされる。そのためApacheとmod_phpの組み合わせがよく用いられている。ただし実行ファイル形式でもFastCGIを使用することによりモジュール形式と並ぶパフォーマンスを出すことも可能である(例えばlighttpdとFastCGIの組み合わせ)。
PHPにはWindows、UNIXなどのオペレーティングシステムに対応した処理系が存在する。一部の組み込み関数はプラットフォームごとに挙動が違うため、スクリプトによっては移植作業が必要になる場合がある。
また、多くのDBMSへのインターフェイスを標準で備えており、DBMSとの連携にも高い力を発揮する。
HTML埋め込み型の処理系としては他にASP、JSPなどがある。
PHPには様々な付加機能がPEARというオンラインライブラリ集でモジュールとして提供されており、同名のツールを使って導入/管理が出来る。Perlで言うCPANと同じ役割を持っている。
PHPは、HTML埋め込み型のサーバサイド・スクリプト言語として分類される。この言語処理系自体は、C言語で記述されている。
ウェブサーバ上で動作し、ウェブサーバ上の文書が要求されるたびに、この文書に記述されたPHPのプログラムを実行し、その結果をウェブブラウザに対して送信する。
ウェブブラウザに送信されるデータは通常のHTMLであり、PHPのプログラムを含まない。この点でHTML埋め込み型のクライアントサイド・スクリプト言語(JavaScriptなど)と本質的に異なっている。
平易な文法のため初心者でも習得しやすく、また大規模な開発にも多く用いられている。多くのフレームワークやライブラリが存在し、開発の手助けとなっている。
数多くのオープンソースウェブアプリケーションに利用されている一方、しばしば脆弱性の報告がなされ、過去に深刻なセキュリティホールが何度か報告されている。
PHPはCommon Gateway Interface (CGI) をサポートしており、CGIをサポートするWebサーバ上でPHPスクリプトを実行することができる。この他にもFastCGIを通じてWebサーバから起動したり、利用するWebサーバがモジュール機構を提供していれば、モジュールとしてWebサーバに組み込んだ状態で動作させることが可能である。その為、phpモジュールに脆弱性があった場合、簡単にWebサーバの権限を奪取され、サーバを破壊されることもある。
PHPは、PHP4以降Zend Engineをスクリプト言語を処理するエンジンとして利用している。Zend Engineは、PHP3の開発者によって設立されたZend Technologies Ltd.により開発されたソースコードが公開されているスクリプティングエンジンで、PHP5ではZend Engine 2.0になった。Zend Engineは基本的に1つのプロセスがインタプリタのコンテキストを1つだけ持つものとして設計されている。したがってマルチスレッドを用いたスクリプティングはサポートしていない。
Zend Engineを除くPHP本体は、PHP組み込み関数の実装を含むほか、Webサーバやコマンドラインインターフェイスとスクリプティングエンジンの間を仲介するSAPI (Server API)レイヤ、マルチスレッドで動くWebサーバのモジュールとして利用される場合にグローバル変数のセマンティクスを提供するTSRM (Thread Safe Resource Manager)、さまざまなプラットフォームの入出力機構やAPIの差異を吸収するためのStreamsレイヤから成る。
開発者はSAPIの提供するSPIを実装することで、さまざまなWebサーバのモジュールとしてPHPを動作させることができる。標準では以下のWebサーバ用のSAPIが提供されている。
PHPを動作させる方法には、実行ファイル形式(CGI / FastCGI)、モジュール形式(mod_php / ISAPI)がある。どの形式を使用するかはWebサーバにより異なる。一例を挙げるならば、Apacheで動作させる場合はmod_phpを使用し、IISで動作させる場合はISAPIを使用し、lighttpdで動作させる場合はFastCGIを使用し、AN HTTPDで動作させる場合はCGIを使用する(いずれも代表例であり、他の形式でも動作させることは可能だが、実例は少ない)。
PHPにおいては一般的に実行ファイル形式よりもモジュール形式の方が高速に動作するとされる。そのためApacheとmod_phpの組み合わせがよく用いられている。ただし実行ファイル形式でもFastCGIを使用することによりモジュール形式と並ぶパフォーマンスを出すことも可能である(例えばlighttpdとFastCGIの組み合わせ)。
PHPにはWindows、UNIXなどのオペレーティングシステムに対応した処理系が存在する。一部の組み込み関数はプラットフォームごとに挙動が違うため、スクリプトによっては移植作業が必要になる場合がある。
また、多くのDBMSへのインターフェイスを標準で備えており、DBMSとの連携にも高い力を発揮する。
HTML埋め込み型の処理系としては他にASP、JSPなどがある。
PHPには様々な付加機能がPEARというオンラインライブラリ集でモジュールとして提供されており、同名のツールを使って導入/管理が出来る。Perlで言うCPANと同じ役割を持っている。
- Comments (Close): 0
- TrackBack (Close): 0
SQL とは
- 2009年5月 7日 17:50
SQL(エスキューエル)は、リレーショナルデータベース管理システム (RDBMS) において、データの操作や定義を行うためのデータベース言語(問い合わせ言語)である。リレーショナルデータベースの関係モデル(リレーショナルモデル)における演算体系である、関係代数と関係論理(関係計算)にある程度基づいている。 データベース言語国際標準としてのSQLは何かの略語ではない[1]。
SQLは、シークェル と読まれることもある。これは、SQLの元となったデータベース言語が、IBM社が開発したRDBMSの実験実装である System R の操作言語「SEQUEL (Structured English Query Language)」であったことが由来である。
SQLに対しては、関係代数と関係論理に忠実に準拠していないとして批判する意見がある(The Third Manifesto - クリス・デイト、ヒュー・ダーウェン)。
当初はリレーショナルデータベース管理システム (RDBMS) に端末から直接命令を発行することを想定していたため、制御文法の仕様が存在しなかった。このため、SQLは「宣言型プログラミング言語」と分類される。これに対し、COBOLやC言語などは「手続き型プログラミング言語」と分類される。
その後、手続き型プログラミング言語(母言語)からリレーショナルデータベースへのアクセスを行えるようにするため、母言語のソースコードにSQL文を記述し、プリプロセッサによってSQL部分を母言語のソースコードに変換してデータベースアプリケーションを開発する方式が普及した。これを「埋め込みSQL」(Embedded SQL/ESQL) と呼び、後にANSIにより仕様が標準化された。
暫くの間、データベースアプリケーションは、RDBMSベンダーが製品に同封したユーティリティや埋め込みSQLにより開発されてきたが、マイクロソフト社がC言語からAPIレベルで統一したソースコードを記述し、クライアント・サーバ型アプリケーションシステムの構築に有用である仕組み「Open Database Connectivity」(ODBC) を発表し、その有用性からANSIではODBC仕様を参考に「SQL/CLI」という仕様を標準化した。
埋め込みSQLやODBCの普及により、オンライントランザクション処理向きのSQLアクセス方法は確立されたが、バッチ処理性能向上の必要性が求められるようになった。
ある表(テーブル)の内容を編集して別の表に格納する大量データの更新処理などをデータベースエンジン内部で処理プログラムを実行し、入出力 (I/O) のほとんどをデータベース内部で完結することにより、クライアント側とのデータ通信によるオーバヘッドを削減することでバッチ処理性能を向上させる「ストアドプロシージャ」が考え出された。
ストアドプロシージャは、同じくデータベース内部に定義し、データベースに発生したイベントの内容に応じて任意の処理を実行する機能である「データベーストリガ」とともに、標準SQL仕様に採用され、SQL:1999 (SQL99) 規格の永続格納モジュール (SQL/PSM) として標準化された。
しかし、標準化される以前から各リレーショナルデータベース管理システム (RDBMS) ベンダーがデータベースエンジン内部で制御文法を記述し実行できるように独自の拡張が行われていたため、ストアドプロシージャの処理ロジック記述文法はそれ以前に標準化されたSQL文法と比較して著しい非互換が認められるため、アプリケーションソフトウェアの移植性・開発生産性・保守性を損なう場合がある。
各RDBMSベンダーによる、制御構文を含む独自SQL文法には以下のようなものがある。これらの仕様には、文法単位の独自追加だけでなく、命令やデータ型の非互換も存在するため注意が必要である。
SQLを対話的に実行する場合、リレーショナルデータベース管理システム (RDBMS) に付属するコマンドラインタイプのアクセスユーティリティを利用するのが一般的である。SQL文を記述したテキストファイルをスクリプトとして実行し、バッチ的に実行することが可能なものもあり、広く利用されている。RDBMSごとに、そのユーティリティ固有の命令を備えているものもあるため、データベースを扱うアプリケーションソフトウェア開発の初心者はその命令もデータベースエンジンが解釈するSQL文法のひとつであると間違って覚えてしまい、ODBCやJDBCなどAPIからSQLを実行したときのエラーの原因が理解できずに混乱することもある。
ユーティリティ固有の文法で誤解しやすいものには、データベースでSQL文の文末に指定する文字である。全データベース共通では「;」、Oracle Database の ユーティリティであるSQL*Plusで、ストアドプロシージャの定義や無名PL/SQLブロックを発行するときに文末行に指定する「/」 や、Sybase/SQL Serverのisql/osqlではすべてのSQL文の文末行に指定する「GO」などがある。このなかでもっとも間違えやすいのが「;」である。これは、一般的なSQL教科書でも構文の終端文字として例が記載されているが、標準SQLの構文の終端文字ではない。
SQLは、シークェル と読まれることもある。これは、SQLの元となったデータベース言語が、IBM社が開発したRDBMSの実験実装である System R の操作言語「SEQUEL (Structured English Query Language)」であったことが由来である。
SQLに対しては、関係代数と関係論理に忠実に準拠していないとして批判する意見がある(The Third Manifesto - クリス・デイト、ヒュー・ダーウェン)。
当初はリレーショナルデータベース管理システム (RDBMS) に端末から直接命令を発行することを想定していたため、制御文法の仕様が存在しなかった。このため、SQLは「宣言型プログラミング言語」と分類される。これに対し、COBOLやC言語などは「手続き型プログラミング言語」と分類される。
その後、手続き型プログラミング言語(母言語)からリレーショナルデータベースへのアクセスを行えるようにするため、母言語のソースコードにSQL文を記述し、プリプロセッサによってSQL部分を母言語のソースコードに変換してデータベースアプリケーションを開発する方式が普及した。これを「埋め込みSQL」(Embedded SQL/ESQL) と呼び、後にANSIにより仕様が標準化された。
暫くの間、データベースアプリケーションは、RDBMSベンダーが製品に同封したユーティリティや埋め込みSQLにより開発されてきたが、マイクロソフト社がC言語からAPIレベルで統一したソースコードを記述し、クライアント・サーバ型アプリケーションシステムの構築に有用である仕組み「Open Database Connectivity」(ODBC) を発表し、その有用性からANSIではODBC仕様を参考に「SQL/CLI」という仕様を標準化した。
埋め込みSQLやODBCの普及により、オンライントランザクション処理向きのSQLアクセス方法は確立されたが、バッチ処理性能向上の必要性が求められるようになった。
ある表(テーブル)の内容を編集して別の表に格納する大量データの更新処理などをデータベースエンジン内部で処理プログラムを実行し、入出力 (I/O) のほとんどをデータベース内部で完結することにより、クライアント側とのデータ通信によるオーバヘッドを削減することでバッチ処理性能を向上させる「ストアドプロシージャ」が考え出された。
ストアドプロシージャは、同じくデータベース内部に定義し、データベースに発生したイベントの内容に応じて任意の処理を実行する機能である「データベーストリガ」とともに、標準SQL仕様に採用され、SQL:1999 (SQL99) 規格の永続格納モジュール (SQL/PSM) として標準化された。
しかし、標準化される以前から各リレーショナルデータベース管理システム (RDBMS) ベンダーがデータベースエンジン内部で制御文法を記述し実行できるように独自の拡張が行われていたため、ストアドプロシージャの処理ロジック記述文法はそれ以前に標準化されたSQL文法と比較して著しい非互換が認められるため、アプリケーションソフトウェアの移植性・開発生産性・保守性を損なう場合がある。
各RDBMSベンダーによる、制御構文を含む独自SQL文法には以下のようなものがある。これらの仕様には、文法単位の独自追加だけでなく、命令やデータ型の非互換も存在するため注意が必要である。
SQLを対話的に実行する場合、リレーショナルデータベース管理システム (RDBMS) に付属するコマンドラインタイプのアクセスユーティリティを利用するのが一般的である。SQL文を記述したテキストファイルをスクリプトとして実行し、バッチ的に実行することが可能なものもあり、広く利用されている。RDBMSごとに、そのユーティリティ固有の命令を備えているものもあるため、データベースを扱うアプリケーションソフトウェア開発の初心者はその命令もデータベースエンジンが解釈するSQL文法のひとつであると間違って覚えてしまい、ODBCやJDBCなどAPIからSQLを実行したときのエラーの原因が理解できずに混乱することもある。
ユーティリティ固有の文法で誤解しやすいものには、データベースでSQL文の文末に指定する文字である。全データベース共通では「;」、Oracle Database の ユーティリティであるSQL*Plusで、ストアドプロシージャの定義や無名PL/SQLブロックを発行するときに文末行に指定する「/」 や、Sybase/SQL Serverのisql/osqlではすべてのSQL文の文末行に指定する「GO」などがある。このなかでもっとも間違えやすいのが「;」である。これは、一般的なSQL教科書でも構文の終端文字として例が記載されているが、標準SQLの構文の終端文字ではない。
- Comments (Close): 0
- TrackBack (Close): 0
UNIX とは
- 2009年5月 7日 17:48
UNIX (ユニックス) とは、マルチタスク、マルチユーザー機能を有するオペレーティングシステム (OS) の一種、またはこれから派生した一連のOSの総称である。
主に企業や教育機関における研究で、または安定性や高い情報セキュリティが要求されるサーバを提供する目的で使われる。
ミニコンピュータ(ミニコン)やワークステーション用のOSとして広く採用され、メインフレームの一部やスーパーコンピュータにも用いられている。1990年代の80386発売以降、Linux、FreeBSDなどの『PC-UNIX』の公開、および、アップルのMac OS XのコアとしてUNIXが採用されたことにより最近では個人レベルで使用されることも多くなった。
現役のOSとしては比較的長い歴史を持ち、優れたパフォーマンス、堅牢性を持つ。
UNIXの中核を成すカーネルは大部分がC言語で記述されている。その結果、異なるプラットフォームに対する移植性が高いこと、また、可読性が高いため、機能の改変を行なうことが比較的容易なことで知られている。
現実には、UNIXは以下に示す4種類の条件をひとつでも満たすOSを指す言葉として使われている。
UNIXの商標を管理する団体The Open Groupより、同団体が定義したSingle UNIX Specificationを満たすことの認証を受けたOS。
ベル研究所で開発されたオリジナルのUNIX及び、オリジナルのUNIXの派生OSとしてベルの認可を得た過去のOS。
オリジナルのUNIXを起源にもつOS。
POSIXなどのUNIXに関連する規格をみたす、UNIX互換なOS。
しかしながら現在、UNIXの公式な定義は、1のみである。アメリカや日本を含む多くの国においては、UNIXはThe Open Groupの登録商標であり、1を満たすOSのみがUNIXを名乗ることができる。そのため、その他の条件に当てはまるものはUnix系やUnixライクと呼ばれることもある。
また、かつてAT&TがUNIXという言葉の使用に細かい制限をかけたために、Un*xなどといった呼び換えがされることもある。
主に企業や教育機関における研究で、または安定性や高い情報セキュリティが要求されるサーバを提供する目的で使われる。
ミニコンピュータ(ミニコン)やワークステーション用のOSとして広く採用され、メインフレームの一部やスーパーコンピュータにも用いられている。1990年代の80386発売以降、Linux、FreeBSDなどの『PC-UNIX』の公開、および、アップルのMac OS XのコアとしてUNIXが採用されたことにより最近では個人レベルで使用されることも多くなった。
現役のOSとしては比較的長い歴史を持ち、優れたパフォーマンス、堅牢性を持つ。
UNIXの中核を成すカーネルは大部分がC言語で記述されている。その結果、異なるプラットフォームに対する移植性が高いこと、また、可読性が高いため、機能の改変を行なうことが比較的容易なことで知られている。
現実には、UNIXは以下に示す4種類の条件をひとつでも満たすOSを指す言葉として使われている。
UNIXの商標を管理する団体The Open Groupより、同団体が定義したSingle UNIX Specificationを満たすことの認証を受けたOS。
ベル研究所で開発されたオリジナルのUNIX及び、オリジナルのUNIXの派生OSとしてベルの認可を得た過去のOS。
オリジナルのUNIXを起源にもつOS。
POSIXなどのUNIXに関連する規格をみたす、UNIX互換なOS。
しかしながら現在、UNIXの公式な定義は、1のみである。アメリカや日本を含む多くの国においては、UNIXはThe Open Groupの登録商標であり、1を満たすOSのみがUNIXを名乗ることができる。そのため、その他の条件に当てはまるものはUnix系やUnixライクと呼ばれることもある。
また、かつてAT&TがUNIXという言葉の使用に細かい制限をかけたために、Un*xなどといった呼び換えがされることもある。
- Comments (Close): 0
- TrackBack (Close): 0
LINUX とは
- 2009年5月 7日 17:46
Linux(読み方は後述)とは、一般的にはUNIXライクなコンピュータ用オペレーティングシステム(OS)の一群を指し、厳密にはそのうちのOSカーネル (Linuxカーネル) のことである。
現在では、パーソナルコンピュータに限らず、携帯電話のような組み込みシステムからメインフレームやHPCC等のスーパーコンピュータまで、幅広く応用されている。
Linuxとは本来、OSの基盤となる中核ソフトウェア「カーネル」のみを指す呼称であるが、今日ではこのLinuxカーネルにGNU Projectのソフトウェアや、X Window Systemなど別のプロジェクトやライセンスのもとで開発が行われたソフトウェア製品群をパッケージ化し、Linuxカーネルと同時に配布するLinuxディストリビューションを指して、単にLinuxと呼ぶこともある。
Linuxカーネルを用いて構築されたOS環境は、一般的にはUNIX系OS、UNIX互換OS等として分類される。ただし厳密には、UNIXの標準的なAPIなどを定めた仕様であるPOSIXをおおむね満たしているものの、たとえ実質的にPOSIXを満たしていたとしてもほとんどのディストリビューションがPOSIX自体を取得していない[注釈 1]こと、UNIXの商標を取得していない(商標UNIXではない)こと、既存のUNIXからのforkやソースコードの流用等も行われていない(血統上のUNIXでもない)ことなどから、本来のUNIXと混同して扱うことは適切ではない。
かつては「ハッカー(クラッカーの意味ではない)のOS」としてのイメージが強かったが、最近ではユーザーフレンドリーなデスクトップ環境が充実し、さらにシステムやソフトウェアパッケージ等の管理システムも発達し、グラフィカルなラッパー等が充実した結果システムの保守運用も容易なものとなったため、それまで縁遠いものとされてきたエンドユーザーの一部にも普及し始めている。
日本国内ではLinux初心者のことを慣用的にタコと呼ぶ場合がある。これは現在では必ずしも罵倒語や蔑称ではなく、対外的には愛称に当たるものとして定義されている[1]が、タコと呼んだり呼ばれることを嫌う向きも少なからずある。そのルーツとして、Linuxの国内における普及の最初期の段階では日経MIX(パソコン通信の大手商用ホスト、およびそのサービス)がLinuxユーザーコミュニティの総本山的な存在だった時期が存在しており、この日経MIXを中心に、スキルや教養、一般常識等が伴わない「(いろいろな意味で)至らない個人」を「タコ」と称して、罵倒したりからかったりしていた文化(BBS文化)の流れを汲んでいる。「タコは叩いて育てる」などのスローガンはその典型と言えよう。
Linuxはリーヌークス、リナックス、リヌックス、リヌクス、ライナックス、リーナクス等様々な読み方をされている。開発者であるスウェーデン系フィンランド人リーナス・トーバルズ本人のスウェーデン語の名前に由来していることから、スウェーデン語の発音「リーヌークス」と表記するのが正しいとされているが、リーナス個人が英語を母語とする文化圏の出身ではないため、「どのように呼んでもらっても構わない」としている。ただしインターネット上に公開されている、本人の英語の録音では「リヌックス」と発音されている。[2]
日本では各種の読み方が混在していたが、日本で最初のLinux専門誌LINUX JAPANが「リナックス」の読み方を採用し、一般誌が同名称に追従した事から、この読み方が一般に広まった。しかし、日本Linux協会の正確な読みは「にほんりぬっくすきょうかい」である。
後付けではあるが、LinuxをLinux Is Not UniXの略としたり、LINus UniXの略としたりする者もいる。
現在では、パーソナルコンピュータに限らず、携帯電話のような組み込みシステムからメインフレームやHPCC等のスーパーコンピュータまで、幅広く応用されている。
Linuxとは本来、OSの基盤となる中核ソフトウェア「カーネル」のみを指す呼称であるが、今日ではこのLinuxカーネルにGNU Projectのソフトウェアや、X Window Systemなど別のプロジェクトやライセンスのもとで開発が行われたソフトウェア製品群をパッケージ化し、Linuxカーネルと同時に配布するLinuxディストリビューションを指して、単にLinuxと呼ぶこともある。
Linuxカーネルを用いて構築されたOS環境は、一般的にはUNIX系OS、UNIX互換OS等として分類される。ただし厳密には、UNIXの標準的なAPIなどを定めた仕様であるPOSIXをおおむね満たしているものの、たとえ実質的にPOSIXを満たしていたとしてもほとんどのディストリビューションがPOSIX自体を取得していない[注釈 1]こと、UNIXの商標を取得していない(商標UNIXではない)こと、既存のUNIXからのforkやソースコードの流用等も行われていない(血統上のUNIXでもない)ことなどから、本来のUNIXと混同して扱うことは適切ではない。
かつては「ハッカー(クラッカーの意味ではない)のOS」としてのイメージが強かったが、最近ではユーザーフレンドリーなデスクトップ環境が充実し、さらにシステムやソフトウェアパッケージ等の管理システムも発達し、グラフィカルなラッパー等が充実した結果システムの保守運用も容易なものとなったため、それまで縁遠いものとされてきたエンドユーザーの一部にも普及し始めている。
日本国内ではLinux初心者のことを慣用的にタコと呼ぶ場合がある。これは現在では必ずしも罵倒語や蔑称ではなく、対外的には愛称に当たるものとして定義されている[1]が、タコと呼んだり呼ばれることを嫌う向きも少なからずある。そのルーツとして、Linuxの国内における普及の最初期の段階では日経MIX(パソコン通信の大手商用ホスト、およびそのサービス)がLinuxユーザーコミュニティの総本山的な存在だった時期が存在しており、この日経MIXを中心に、スキルや教養、一般常識等が伴わない「(いろいろな意味で)至らない個人」を「タコ」と称して、罵倒したりからかったりしていた文化(BBS文化)の流れを汲んでいる。「タコは叩いて育てる」などのスローガンはその典型と言えよう。
Linuxはリーヌークス、リナックス、リヌックス、リヌクス、ライナックス、リーナクス等様々な読み方をされている。開発者であるスウェーデン系フィンランド人リーナス・トーバルズ本人のスウェーデン語の名前に由来していることから、スウェーデン語の発音「リーヌークス」と表記するのが正しいとされているが、リーナス個人が英語を母語とする文化圏の出身ではないため、「どのように呼んでもらっても構わない」としている。ただしインターネット上に公開されている、本人の英語の録音では「リヌックス」と発音されている。[2]
日本では各種の読み方が混在していたが、日本で最初のLinux専門誌LINUX JAPANが「リナックス」の読み方を採用し、一般誌が同名称に追従した事から、この読み方が一般に広まった。しかし、日本Linux協会の正確な読みは「にほんりぬっくすきょうかい」である。
後付けではあるが、LinuxをLinux Is Not UniXの略としたり、LINus UniXの略としたりする者もいる。
- Comments (Close): 0
- TrackBack (Close): 0