第1回 Webサーバから始めよう
竹下 肯己
株式会社 qnote
2009/10/2
開発者として常にプログラマに徹してしまっていないだろうか。そうすると、どうしてもサーバ知識が不足しがちになる(編集部)
プログラマの弱点(?)
- - PR -
ある程度の規模の開発プロジェクトでは、上流工程と下流工程、開発担当とサーバ担当、さらに開発担当のなかでもバックエンドのロジック担当とフロント周りの担当など、分業体制で進めていくのが一般的です。
ここまできっちりと分業されていない場合でも、コーディングはプログラマが行い、本番向けのサーバ構築などは詳しい人に任せてしまうといったことは多々あります。
こういった分業体制はもちろん理に適ったことなのですが、開発者が常にプログラマに徹してしまっていると、どうしてもサーバ知識が不足しがちになります。アプリケーションを動作させるために必要な最低限の環境を自分のPC上に整えたら、あとはひたすらコーディングの日々といったことの繰り返しになるので、なかなかサーバ知識が深まりません。
その結果、開発中やリリース後に問題が発生した場合に、アプリケーション本体以外に原因があっても特定できなかったり、特定できてもどう対処して良いか分からず対応に時間がかかってしまったりといったことにもなりがちです。
Webアプリケーションは、非常に多くのサービスに依存しています。ネットワーク上からサーバを特定する名前解決の仕組みや、アクセス制御の仕組み、Webブラウザの要求に応じるWebサーバやアプリケーションサーバ、プログラミング言語のエンジン、ときにはデータベースサーバやメールサーバなど、さまざまなサービスの組み合わせで、ようやくWebアプリケーションが成立するのです。
Webアプリケーションを作っていて、「うまく動かない」「動くことは動くがパフォーマンスが極端に悪い」「プログラミングだけでは実現困難な要望が出てきた」「動作状況をログで確認したい」といった場合、サーバ知識があればずっとスマートに対処できる場合があります。
本連載では、サーバに関して「なんとなく分かっている」「プログラマに徹している限り困らない程度には知っている」というような状態のまま日々を過ごしてしまい、不安や危機感を抱いているWeb系開発者のために、あらためてサーバに関する知識を深めてもらえるよう、さまざまなサーバアプリケーションの導入や便利な利用法、プログラムとの連携方法などを紹介していきたいと思います。
なお、解説はLinuxやWindowsなどのサーバをベースに行いますが、サーバOSの導入手順に関しては割愛しています。Linuxは CentOS の5.3を、Windowsは Windows Server 2003を前提に解説します。
また、Linuxサーバへは直接またはSSHなどでログインしてroot権限で作業可能であること、Windowsサーバへは直接またはリモートデスクトップなどでログインして管理者権限で作業可能であることを前提とします。
プログラミング言語はPHPを例として解説する予定です。
Webアプリケーションが動くまで
Web系開発者なら、おおまかに、クライアントからサーバに要求があって、サーバ上で要求に応じた処理がされて、結果がHTMLやJavaScriptでクライアントに返されて、それをクライアント側でWebブラウザを利用して閲覧するといったイメージはお持ちだと思います。
最初はそれだけでも十分だったりしますが、実際に開発を進めていくと、期待したとおりに動かないとか、開発環境では動くのにお客さんのところでは動かないといった問題に突き当たり、おおまかなイメージだけでは説明できない事態に遭遇することがあります。このようなとき、プログラム本体しかイメージできていないと、なかなか原因を特定できません。
まずは、WebブラウザとWebサーバ以外の主要な登場人物をいくつか取り込んで、Webアプリケーションの動作イメージを描いてみましょう。もちろん、あまりに詳細にし過ぎると訳が分からなくなってしまいますので、適度に端折ることも必要です。

上図のすべての要素が常に必要というわけではありませんし、ハードウェアやソフトウェアの構成もさまざまですが、主要な登場人物を図で表すと概ねこのようになります。ここに描かれていない新たな登場人物が出現した場合には、上図のどのあたりでどのような仕事をしているのか思い描いてみると良いでしょう。
図を見ても分かるように、名前解決やアクセス制御といったアプリケーション以前の部分で問題が起きている(あるいは設定が間違っている)ときに、アプリケーションの中身を必死でデバッグしてみても、いつまでも原因にたどり着けません。
目の前で起きている現象を見て、上図のどの辺りに原因がありそうかをある程度見極め、その周辺をログなどを頼りに調べるというのが問題解決の手順になります。
まずはWebサーバから始めよう
さて、では具体的なサーバアプリケーションの紹介に入ろうと思います。どこから手を付けるか……といえば、これはやはりWebサーバでしょう。先ほどの図に表現されているWebアプリケーションをめぐる登場人物のなかでも、Webサーバはまず主役といって差し支えありません。
Webサーバの代表選手といえばApacheです。Apacheに関しては、Linuxサーバを前提に解説します。CentOSをインストールする際に一般的なサーバアプリケーションを一緒にインストールしていれば、Apacheはすでに導入済みです。CentOSの5.3ではApacheの2.2.3が同梱されています。
Apacheが導入されていない場合には、RPM【*1】のパッケージを、yum【*2】を利用して簡単にインストールすることができます。また、ソースコードを入手してコンパイルし、インストールすることも可能です。
【*2】 yumとは、RPMによるアプリケーションパッケージの管理をより簡単に行うためのツールです。パッケージの所在(インターネット上のどこにアクセスすれば入手できるか)や依存関係なども考慮してインストールが実行されます。RedHat Enterprise LinuxやCentOS、Fedoraなどのディストリビューションで利用可能です。
RPMでのインストール
まずは、Apacheがすでにインストールされているかどうか確認してみましょう。インストール済みの場合は、パッケージ情報が表示されます。インストールされていない場合は何も表示されません。
まだApacheがインストールされていない場合は、yumを利用してインストールしてみましょう。
ここでは、「httpd*」とすることで関連パッケージもまとめてインストールしています。実行後に再びrpmコマンドで確認してみると、例えば以下のように表示されます(yumがインストールすべきパッケージを判断するため、Linuxのディストリビューションやバージョンにより表示結果は異なります)。
httpd-manual-2.2.3-22.el5.centos.2
httpd-2.2.3-22.el5.centos.2
httpd-devel-2.2.3-22.el5.centos.2
なお、すでにインストール済みのRPMのApacheをアンインストールしたい場合(別のバージョンをインストールしたい場合や、ソースからインストールしたい場合など)には、「yum remove httpd*」とすることで、Apacheに依存しているパッケージも含めて削除できます(実行前に削除対象となるパッケージが一覧表示されますので、よく確認した上でアンインストールします)。
RPMのApacheを導入した場合、以下のようなディレクトリ構成となりますので、確認しておきましょう(これもLinuxのディストリビューションやバージョンにより異なります。またApacheのバージョンによっても異なる場合があります)。
/etc/httpd/
|- conf/ 設定ファイルの設置先
|- conf.d/ 分割された設定ファイルの設置先
|- logs ログファイルの出力先(/var/log/httpdへのシンボリックリンク)
|- modules Apacheの拡張モジュール群の設置先(/usr/lib/httpd/modulesへのシンボリックリンク)
|- run サーバプロセスのプロセスIDファイルの生成先(/var/runへのシンボリックリンク)
/var/www/
|- html コンテンツの設置先となるドキュメントルート
|- cgi-bin CGIの設置先
|- error エラーページの設置先
|- icons Apacheが表示するページで利用されるアイコン画像の設置先
|- manual マニュアルページの設置先
/usr/sbin/httpd Apacheのサーバプログラム本体
/usr/sbin/apachectl Apacheの制御スクリプト
/etc/rc.d/init.d/httpd Apacheの制御スクリプト(システムから制御するためのスクリプト)1/2 |
| Index | |
| Webサーバから始めよう | |
| Page1 プログラマの弱点(?) Webアプリケーションが動くまで まずはWebサーバから始めよう RPMでのインストール |
|
| Page2 ソースからのインストール Apacheの起動と確認 |
|
| いまさら聞けない!? Web系開発者のためのサーバ知識 |
| Mac OS X関連記事 |
| プログラマーを引き付けるMac OS Xの魅力 続々移行するそのワケとは Mac一筋という熱狂的なユーザーだけでなく、「面白いことをしたい」と考えるエンジニアもMac OS Xを利用し始めている。いったいなぜだろう |
|
| Mac OS XでAMP構築 3通りの方法で整備できる開発環境 Mac OS Xの上にWebアプリケーションの定番、AMP(Apache+MySQL+PHP)環境を3通りの方法で導入してみましょう |
|
| Mac OS Xで動かす軽量プログラミング言語 導入からPHP拡張モジュール組み込みまで Leopardでは、インストール直後からいくつかの軽量プログラミング言語が利用できます。早速試してみませんか? |
|
| Objective-Cは特殊な言語? Cocoaの素、Objective-Cを知ろう(1) iPhone用アプリケーション開発で注目を集める言語「Objective-C」。C++とは異なるC言語の拡張を目指したこの言語の基本を理解しよう |
|
| Mac内にPHP4、5、6を同居させるコツ Mac OS X+PHPでオールインワン環境(インストール編) PHP4の開発は終了したが、移行の問題は残されている。異なるバージョンのPHPをスムーズに切り替えるには? |
|
TechTargetジャパン
- 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます - 実例アプリで学ぶ“Railsらしさ”の基礎 (2011/5/26)
Ruby on Railsで書かれた実例アプリを取り上げて、初心者が陥りがちなコードの書き方を指摘します。より「Railsらしい」コードとは?
|
|

