前回は PC の基礎的な用語を説明しました。その話をベースに、今回からシステムの基本的な用語について説明します。
以前の記事に添付した図を以下に再掲します。
これはシンプルなシステムにおける各技術を分野名に汎化して置き換えたものです(Chrome → ブラウザ、PHP → プログラム言語 のように)。こちらをもとに各技術を説明していきます。
OS
図には仮想OSと記載がありますが、クラウド上で動作する OS を特に仮想 OS と呼ばれます。みなさんがお使いの PC すべてに搭載されている OS と同様と理解して問題ありません。
OS とは Operating System の略で、PC に電源が入って最初に起動するソフトウェアのことで、他のソフトウェアを制御(起動・操作・停止)したり、ハードウェアからの入力を受付けます。PC の利用に必要な最も根源的なソフトウェア(ミドルウェア)と言えるでしょう。
OS の代表的なものに、Windows、Mac、Linux、iOS、Android があります。ソフトウェアを各 OS で動作させるためには、OS に沿った実装・開発が必要になります。例えば iOS と Android で全く同じアプリでも、プログラムの内容は全く異なるものです。
また、OS をアップデートした際にソフトウェアやマウス、キーボードが動かない、といった現象が起こるのは、OS の振る舞いにソフトウェアやハードウェアが追従していない場合に起こるもので、特に大型のアップデートでは注意が必要です。
Web サーバ
前回サーバの説明をしましたが、サーバの狭義が Web サーバです。かつては、サーバに利用されるマシンを Web サーバと呼ばれていましたが、現在の実務でそのような用途で Web サーバと呼ばれることはなく、少々ややこしいのですが、Web サーバはマシンに Web サーバの機能を提供するソフトウェアを表します。予めプログラムを配置し、クライアントからリクエストを受けると、然るべきプログラムを起動、制御し、クライアントへレスポンスを返します。実際にプログラムを動かすのは Web サーバの仕事です。
Web サーバはどのファイルを公開するか、どのようなリクエストを受付けるか、などをプログラムより上のレイヤでシステムを制御することが可能です。大量のリクエストを送る攻撃(DoS 攻撃)はプログラムではどうすることもできませんが、Web サーバを正しく設定することでブロックすることが可能です。尚、プログラムは Web サーバがサポートしているプログラム言語である必要がありますが、一般的な言語はほとんどの Web サーバでサポートされています。
一時期は群雄割拠の状態だった Web サーバですが、現在初学者が知るべき Web サーバは Apache(アパッチ)と Nginx(エンジンエックス)の 2つのみで充分です。基本的な機能も変わりありません。プログラム初学者、特に PHP を学習する方は動作環境に XAMPP(ザンプ)を使うことが多いと思いますが、こちらは Apache が予め含まれています。体感的にどちらの使用頻度も高いので、もしほかの学習で Nginx を使うことがあったとしても特に問題はないので、どちらかの基本的な仕組みはおさえておきましょう。
データベース
データベースの定義は説明不要だと思いますが、教科書っぽく言うと、データを永続的に保存するミドルウェアと言えます。主にプログラムの要求に応じてデータを返したり、データを登録・更新・削除を実行します。
データベースには大きく RDBMS と NoSQL の 2つに分かれます。各特徴について簡単に説明します。
RDBMS
Relational DataBase Management System の略で関係データベース管理システムなどと直訳されることもあります。略して RDB 或いは単に DB と呼ばれることが一般的です。この場合は RDB(アールデービー)、DB(デービー)と発音することにご注意ください。IT 業界では聞き間違いを防ぐため D をデーと発音することがあり、特に年配の SE は多用します。最近の若いエンジニアはあまりデーデー言わないのですが、、DB に限ってはどの年代でも共通してデービーと発音するので、これはもう暗黙のルールのようなものでしょう。
RDB は SQL で問合せをしたり、スキーマやリレーション、正規化などの概念が存在する、いわゆる一般的なデータベースだと思ってもらえたら OK です。代表的なものに、MySQL、SQLServer、PostgreSQL、Oracle などがありますが、基本的な機能と概念はすべて共通しています。
NoSQL(ノーエスキューエル)
NoSQL を説明するかは悩んだのですが、JavaScript を全面に押し出したシステムではかなり一般的になってきたため、少しだけ触れることにしました。
NoSQL は Not only SQL の略で、RDB のような複雑な機構を一部廃し、厳格な関係性などを持たず、SQL でなく独特の問合せ方法で制御します。RDB と異なる点は多々ありますが、NoSQL の最も大きな特徴が、性能が非常に高い(処理がメチャ早い)ということです。代表的なものに、MongoDB(モンゴデービー)、Redis(レディス)などがあります。NoSQL はその中でも細かくジャンルが分かれるのですが、一旦は早い DB とだけ理解しておいてください。
システムによって、例えばゲームアプリでは、高速で処理が必要な情報(戦闘中のヒットポイントなど)を NoSQL で処理し、そうでないもの(ユーザ情報や支払い)を RDB で処理することが一般的です。用途によって使い分けているというよい例ですね。
次回に続きます。