ウェブデザイナーになるには

WebデザイナーやノンプログラマーにおすすめしたいPHPの勉強法

作成日:2011年05月23日(月)

まったくプログラムの下地がない人がPHPの入門書を読むと挫折する。筆者はプログラミングの下地がないノンプログラマーでPHPの勉強をやみくもに独学ではじめた。PHPの本は何冊買ったかわからない(洋書も含めて40冊以上は買ってきた)。買っては挫折の繰り返しだった。現在てもとに残ったのは数冊である。以下は、今後PHPを完全な独学で勉強したい人のためのメモである。

良本でプログラミングの下地をつくる

最初のコツはいきなりPHPの本に手を出さないことである。とくに初心者の方がネックになるのは条件分岐、ループ、配列あたりである。このあたりはPHP以外の本で定評のある本を読んで基礎を固めておきたい。

新版Perl言語プログラミングレッスン入門編』か『初めてのプログラミング 第2版』のどちらかを読んでおこう。前者はPerl、後者はRubyの本であるがPHPでも基礎は同じで役に立つ。

とくに『新版Perl言語プログラミングレッスン入門編』の練習問題はよく出来ている。またループや正規表現の説明が丁寧でわかりやすい。この本の著者である結城浩さんは丁寧な書き手である。

TRONという国産OSをつくった坂村健さんの『痛快!コンピュータ学 (集英社文庫)』も必読である。コンピューターの歴史や基本的な仕組みが学べる良書。しかも文庫なのでリーズナブル。

他にもプログラミングの基礎をかためる良い本はある。あげてゆくと、どんどんプログラミング全般の話になり、PHPから離れてしまうので別の機会でまとめたい。

良いPHPの入門書が少ない事情

本題からそれるが、なぜPHPで良い入門書が少ないかを述べておこう。入門書の厚さは400ページくらい、値段も3,000円以下くらいでださないと売りにくい(本当は1,000ページくらいのPHPの入門書がでればよい、実際Amazon.comで一番売れているPHPの入門書は1,000ページ)。取り次ぎ(本の問屋)にも嫌がられ、本屋の棚に置いてくれない。

この販売サイドの制約の中でPHPとMySQLを無理矢理いれてしまうと、浅く広い内容になってしまう(正直浅い内容であればネットの情報で十分である)。浅く広くだと基礎がかたまらない本ができてしまう。ある人は「入門書なのに門すらくぐらせてくれない」と表現した。実際、門すらくぐれない入門書は多い。ただ、キーワードを並べた表面的な本が量産される。

浅く広くだと、プログラミンングの基礎、HTTP、正規表現、データベースのテーブル設計などは簡単な記述におわってしまう。後で紹介するが、PHPの入門書を買うときのコツはPHPだけにしぼった本を選ぶことである。

HTTPの入門レベルを知ろう

PHPはサーバーサイド(Webサーバーの中で動作する)言語である。その際にネックになるのはHTTPプロトコルの理解である。特にヘッダー情報の理解である。WebブラウザーとWebサーバーはHTTPプロトコルに基づいて通信をおこなう。WebブラウザーはリクエストしWebサーバーはレスポンスするのだが、この通信は一回限りの通信であり、ともにデータ本体を送る前にヘッダー情報をおくっている。

このヘッダーの意味が分からないとクッキー、セッション、header関数の意味や動作がわからなくなる。これらはPHPの入門書では詳しく解説されていない。クッキーあたりで挫折するPHP入門者は多い。『3分間HTTP&メールプロトコル基礎講座』くらいのレベルの入門書で十分なので一冊よんでほしい。

viエディタやUNIXコマンドは入門レベルでもよいのでしっておく

ある有名な私立大学の情報処理系の学部では最初に必修でUNIXコマンドを習う。これは理にかなっているカリキュラムである。

PHPのようなサーバーサイドの言語の場合、PHPのインストールなどの環境構築は基本的にUNIXコマンドでおこなうからである。Windowsだから関係ないよという方もいるかもしれない。でも最後はWebサーバーに配置するのでUNIXコマンドは避けて通れない。

WindowsのかたはVMware Playerをインストールして、linux系のOSをいれて早速UNIXコマンドの練習をしてほしい。MacであればMacで標準ついているターミナルでUNIXコマンドの練習はできる。

viエディタは独特なテキストエディタで設定ファイルを修正するのにUNIXコマンドから呼び出してつかう(コンソールの中がいきなりテキストエディタに切り替わるのが、最初勉強したときは衝撃だった)。たいていはUNIXコマンドの入門書に使い方は、収録されている。設定ファイルが修正できるくらいのスキルでまずは十分である。

MacでPHPを独学されるかたは、MySQL絡みで予期しないエラーがおこる。XAMPPのような便利ツールをつかっていても、ターミナルでUNIXコマンドをたたいて、viエディタでMySQLの設定ファイルを修正する場面が多くはないがでてくる。

先日、あるイーコマース実装の本で勉強しているときに実際、MySQLのメモリーエラーがおこった。直接MySQLの設定ファイルをテキストエディタで開いても直せず、ターミナル経由で、root権限でviエディタで設定ファイルを直した。

本当は安いVPSサーバーをかりて、ユーザーの追加、sshの設定、Apache、PHP、MySQLのインストールを自分でコマンドをたたいてインストールするとよい。筆者は、アメリカのSlicehostという低価格のVPSサーバーを月20ドルで借りて勉強した。Slicehostは無料のチュートリアルが充実していて、初心者でもWebサーバー構築ができる。一度、サーバー構築をしたくらいでは覚えるものではないが、困ったときにこの経験は役に立つ。

ようやくPHPの入門書を読む

ここまでがPHPを習うまでの基礎体力、土台つくりである。ここでPHPの入門書を紹介したい。

Webサイト制作者のための PHP入門講座』である。6章、7章はCodeIgniteryというフレームワークを使っているので、初心者は5章まで読むだけで十分である。本書のよいところはPHPだけに絞ったところである。開発環境のインストールから始まって丁寧な構成になっている。一冊目のPHPの入門書向け。

Head First PHP & MySQL』である。この本は待望の翻訳本。内容が濃く、実践的でたのしい。翻訳が大阪弁になっている(!)。なんと入門書なのにSNSサイトまでつくる。オライリーのHead Firstシリーズは入門書なのにレベルが高い。でもどこで手を動かしたらよいのかがややわかりにくいのが難点である。途中、ダウンロードしたソースコードを比べないと進められない箇所がある。またHTMLとPHPが複雑にまざる箇所が難所である。HTMLは相当慣れておく必要があるだろう。

ブログをつくってみよう

ここらへんでアウトプットをしておきたい。題材はブログをおすすめしたい。カテゴリーで記事が分類される仕様である。例えば、以下の手順でつくってみよう。

  1. データベースにまず記事を管理するテーブルをつくろう。
  2. 記事一覧(記事の見出し)が表示するページをつくろう。
  3. 記事の見出しをクリックすると、記事の詳細ページにかわるように。
  4. 管理画面をつくる(記事の新規・編集・削除)
  5. データベースにカテゴリー用のテーブルをつくる
  6. ブログのサイドバーにカテゴリー一覧を表示
  7. カテゴリー名をクリックすると、カテゴリーに属している記事が一覧表示
  8. 管理画面にカテゴリーの追加、編集、削除機能を追加。記事の新規、編集にもカテゴリーが選べるように追加する。

ここまで自力で書ければ入門レベルは卒業で、基礎レベルにはいったといえる。余力があれば、画像のアップロード、日付一覧と日付による記事一覧、コメント、RSS出力、ページング、カテゴリーの並び替え機能も追加する。このあたりまでつけると基礎〜中級レベル(実務レベル)だろう。WordPressのデータベースのテーブル設計をみたり、ソースコードを読んでいくのも勉強になる。

PHPの基礎固めに役に立つ本

以下紹介する本は入門書ではないが、PHPの基礎を固めるのにおすすめの本である。

PHPの最初の開発者Rasmus Lerdorfが書いた『プログラミングPHP 第2版』はPHPの聖書のような存在。ある程度書けるようになった時点で一度は通読しておくとよい(残念ながら、必読文献ではない)。

パーフェクトPHP』は現役エンジニアが書いた本で実務でPHPを書いている人向け。和書ではもっともレベルが高い本だ。

自分で作る blog ツール』は2005年にでた本でおそらく絶版だろう。この本はPHPだけでブログをつくる本でデータベースをあえてつかわず外部テキストに記事を保存している。今読み返しても良い内容で勉強になる。セキュリティ処理、トラックバック、RSSの出力、記事の索引の作り方など参考になる。

はじめてのPHP 言語プログラミング入門』はPHPの言語仕様にしぼった内容で、言語仕様に関してはRasmus Lerdorf本、パーフェクトPHP以上の濃さである。あまり知られていないのが残念である。

正規表現、データベースは別途勉強が必要

正規表現とデータベースはともにPHPの本で少しでてくる。それぞれ独立した分野なのでそれぞれ専門書による勉強が必要である。データベースはテーブル設計(正規化)とSQLの両方の勉強が必要である。『正規表現クックブック』、『Head First SQL 』、『SQL ゼロからはじめるデータベース操作』をおすすめしたい。

正規表現もデータベースも習得するのに数年はかかることは覚悟しておきたい。ただどちらも実務数年レベルのエンジニアが苦手としているジャンルであることも知ってほしい。実務レベル数年でSQLや正規表現をスラスラかける人はあまりいないだろう。正規表現、データベースは地道かつ継続的に勉強が必要。

PHPは実際、習得するのは難しい

PHPは簡単だという人がいるが、実際には習得には厄介で複雑である。道のりも長い。

PHPは言語だけの勉強ではなく、周辺技術の習得が必要だからである。UNIXコマンド、viエディタ、HTTP、データベース、正規表現などの勉強である。今回はふれなかったが、オブジェクト指向、フレームワーク、デザインパターン、JavaScriptも必要になる。

追記2

はてなブックマークで800を超えるusersの方にブックマークしていただきました。ありがとうございます。

はてなブックマークのコメントで「人それぞれ、習得する期間は違う。とにかく手を動かして、プログラム動かすしかないよね。」といただきました。ありがとうございます。まさにそう思います。私の場合、遅くて鈍いのでいつも挫折がデフォルトです。本選びもだいたい失敗です。負け癖がついています。私のように技術を習得するのに何年もかかる人もいるし、人それぞれです。でも大事なのは失敗を恐れずコードを書いてみることです。はじめからこれを書いておけばよかったw

今回改めて感じたのは、PHPユーザーの裾野の広さです。私のようなWebデザイナーもSQLに苦しみながらも頑張ってつかっていますし、symfonyを使って大規模開発をしているかたもいます。私自身、フロントエンド開発の方が好きで、PHPは好きではないのですが、仕事上はまだまだお世話になりそうな言語です。実際、ここ5年くらいはPHPのおかげで職を得て食えてきました。

今回の記事でいろんな人を知り、意見をいただきました。知っていただく機会をいただいたはてなさん、厳しいコメントをいただいた皆様、Tweetしてくれた皆様に感謝します。また、私が勉強できるのもPHPの黎明期からphp.netの翻訳や開発ツールの支援をされてきた方のおかげです。最初に買ったPHP4の本、マンモス本はいまだに捨てられません。

追記

はてなブックマークで急にとりあげていただきありがとうございます。この追記を書いている時点で380usersをこえています。1ヶ月以上前に書いた記事でアクセスはほとんどない記事だったので、忘れたころの反響に素直に驚いています。

「回り道すぎる」「挫折すんじゃね?」「この記事のとっつきにくさすごい。これ読んでもノンプログラマがPHP覚えようという気持ちにならなさ感すごい。」「本質がズレている。このプロセスができるぐらいモチベーションが続く人なら、なんでもマスターできるかと。」「初心者に対して最初からハードルを上げるのはどうか」とご批判もいただいています。まったくごもっともです。いま、記事を読み返すと誤解を与えてしまった部分もあり、ここに記事に対して補足します。また極論だということも素直に認めます。


まず私自身、気持ちだけはあるのですが、なんでもマスターできていませんw。むしろ習得は他人より鈍く遅いです。理解力が低く、なかなか頭にはいりまません。

HTTPとUNIXコマンドの勉強はさわりだけでも十分です。HTTPは超入門書を数時間読書、UNIXコマンドも基本コマンドを1度たたいて経験しておく程度で十分でしょう。HTTPは存在だけでもアバウトでしっておけば、クッキーやセッションなどの理解が違ってきます。UNIXコマンドは入門段階では不要かもしれませんが、一度経験しておけば、エラーの際に役に立ちます。

プログラミングの基礎自体もPHPで良い本があれば紹介するつもりでしたが、和書に限っていえばPerl、Ruby、Java、Cなどで良書があるのが私の結論です。なぜ分かりやすい本がPHPでないのかという理由も記事本体で書きました。私自身、PHPの入門書で挫折した経験をもちます。洋書でよければいきなりPHPで良い本を紹介できます(先ほどおススメの洋書はTwitterでかきました)。

坂村健さんのコンピューター本は文庫ですが、短時間で読める本ではないです。でも基本的なコンピューターの仕組みや歴史にふれると勉強のモチベーションがちがってきます。

さらに大事なことですが、PHPを勉強する際にこの通りの順番で勉強する必要はありません。あくまで一意見、極論として割り引いて参考にしてください。

みなさまの勉強のモチベーションをさげてしまうとしたら、この記事は失敗です。このサイトは独学を支援するサイトですので。


↑このページの上に戻る