Skip to content

Latest commit

 

History

History
124 lines (111 loc) · 8.81 KB

introduction.md

File metadata and controls

124 lines (111 loc) · 8.81 KB

導入

Webサーバーとは

WebサーバーはWebページを配信するソフトウェア、及びそれが動作しているコンピューターのことを表します。 Webサーバーはサイトの訪問者からページを配信する要求(リクエスト)を受けて、要求されたページを返します(レスポンス)。 このやりとりは、HTTPという通信の約束事に基づいて行われます。 以下では、ソフトウェアの部分に焦点を当てます。

誰が見ても同じページ

もっとも単純なWebサーバーは誰の要求に対しても全く同じページを返します。これを静的(static)なページと言います。 これまで作成してきたウェブサイトは静的なページです。 これをWeb上に公開していたならば、そのサイトに訪問する人たちそれぞれに全く同じページが配信されていたでしょう。 このような単純なWebサーバーのソフトウェアの例として、ApacheやNginxがあります。

よりWebアプリらしく

これに対して、秋学期の勉強会の内容の中心的な部分となるのは、動的(dynamic)なページを返すことです。 これは、訪問者に返すページに、訪問者の入力や訪問者自身の情報に基づいて事前に処理を加えることで実現します。 例えば、Twitterではログインしているユーザーに固有のタイムラインが表示されます。 これは、テンプレートとなるようなページが用意してあり、ユーザーに固有の部分を書き換えてから配信しているのでしょう。 具体的にどのような処理を加えるかはプログラムで記述し、この用途で使われる言語は複数あり、サーバーのソフトウェアも多種多様です。

サーバーサイドとクライアントサイド

動的なページからなるWebサイトの場合、前述の性質から訪問者に表示されるページには2つの段階で処理が加えられることになります。 まず、春学期の勉強会で扱ったJavaScriptで表示されているページに改変を加えることができましたが、この処理は全てクライアントサイド、つまり訪問者のコンピューター上で施されています。 これに対し、秋学期で扱うPHPで記述された処理は、全てサーバー上で施されています。 どのコンピューターで処理を施すかで参照できる情報が違うので、これらの処理ははっきりと区別して考える必要があります。

PHPとは

PHP: Hypertext Preprocessorは、サーバーサイドでページに加える処理を記述するためのオープンソースのプログラミング言語、及びその処理系です。 Hypertext Preprocessorの部分から想像できるように、HTMLに埋め込むように、HTMLに対する処理を記述します。

以下にPHPでかかれたプログラムの例を示します。内容はわからなくてもいいので、雰囲気を感じてもらえれば大丈夫です。

<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($_POST['input'] == 'foo')
      $output = 'bar';
    else
      $output = "???";
  } else {
    $output = "文字列を入力してください。";
  }
?>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body lang="ja">
    <form method="post" action="">
      <label>入力</label>
      <input type="text" name="input">
      <input type="submit" value="送信">
    </form>
    <a href="/foo.php">リセット</a>
    <p><?php echo $output ?></p>
  </body>
</html>

これはフォームに"foo"と入れれば"bar"を表示し、それ以外の文字列を入れれば???と表示するプログラムです。 JavaScriptで表示を書き換えているのではなく、「送信」ボタンを押すたびにページが再読み込みされ、サーバーから返されたページに元から"foo"ないし"???"が書かれています。

採用例

PHPは、企業や団体での採用例だとFacebookWikipediaなどがあります。 Wordpressというブログソフトウェアに使われているため、Wordpressで作られたサイトはすべてPHPで作られています。 この例は溢れかえるほどありますが、一部を取り上げるならクックパッド株式会社の企業サイトやEngadget日本語版があります。

PHPでないと作れないの?

誤解を招く前に記しておきますが、理論上は上記の例に限らずWebサービスであればいかなるものでも作れます。 ある言語では何かが作れて、別の物が作れないということはなく、エンジニアの力量次第ではなんでも作れます。 プログラミング言語自体と、それで表現しようとしている処理は切り離して考える必要があります。 PHP以外にもPythonやRubyなどと使い分けられるのは、開発者や開発チームの好みによることが多いです。

ditterでPHPを採用した理由は、比較的昔からあり幅広く使われている、Webのサーバーサイドの開発に使われる典型的な言語だからです。 PHPでしかditterを作ることができないということはありません。興味のある方は、いつか他の言語にditterを移植されてみてはいかがでしょうか。

データベースとは

データベースは各種データを保管し、その管理をするものです。 主に普及しているリレーショナルモデル(後述)に基づくものの他、オブジェクト指向プログラミング言語のオブジェクトを格納するオブジェクトデータベースや、キー・バリューの対を格納するキー・バリュー型、HTMLに似た構造化された文章として保存するドキュメント指向型のものがあります。

りれーしょなるもでる??

ここでは、現在幅広く使われていて今後の勉強会でも扱うリレーショナルデータベースについて説明します。 リレーショナルデータベースはリレーショナルモデル(関係モデル)という考え方に基づいてデータを管理する方式のデータベースです。 リレーション(関係)はデータの見出しと本体の関係を指し、本体にあるデータの組(タプル)を見出しと照らし合わせることによって、データの組のなかのそれぞれの値が何を表すかが分かる仕組みです。 リレーショナルモデルは、これらのリレーションどうしの演算を定めた数学の考え方で、リレーショナルデータベースで行える種々の操作のもととなるものです。

もうすこし簡単に

上記はややこしいのでもう少しひらたい見方をしてみましょう。 リレーションは簡単に言うと表のようなもので、リレーショナルデータベースはその表のあつまりです。 RDBMS(後述)ではリレーションを表すのにテーブル(表)という言葉が使われるのもこのためです。 (そして、以後はテーブルという言葉を使います。) 次に例を示します。

id user_id text created_at updated_at
1 2 ditterはじめました! 2015-10-03T14:00+0900 2015-10-03T14:00+0900
2 1 @foo おまえもか 2015-10-03T14:00+0900 2015-10-03T14:00+0900
これは後に出てくるditterのポストを管理するテーブルです。 この様に、テーブルは見出しと本体に分かれていて、見出しと各行を照らし合わせることでどの値が何を表しているか分かります。 つまり、行が値の組を表し、列が値の意味を表しています。

リレーショナルデータベースはリレーショナルデータベース管理システム(RDBMS)を通して管理されます。 SQLというデータベース言語を使用してRDBMSに指示を出し、表の定義や表へのデータの追加、削除、データの変更、及びデータの検索が行われます。

MySQL

MySQLとはオープンソースのリレーショナルデータベース管理システム(RDBMS)です。 オープンソースのRDBMSでは一番普及しているものであり、ditterにもMySQLを採用しました。