みなさんこんにちは。フロイデの吉谷です。
このコラムでは、「クラウド全盛時代における、効率的なPHP学習方法」というタイトルのもと、PHP 未経験者も無理なくPHPについて触れることで楽しくPHPのスキルを習得していただけるような学習方法のご紹介に努めてまいります。また、最新のPHP フレームワークやクラウドサービスのトピック及びその活用方法について積極的に触れ、なかなか現場だけでは習得できない最新の技術情報についてもお伝えす ることで、現役のPHPエンジニアの方々の知識向上のお手伝いをさせていただきます。
“効率的でない”PHP学習方法の例
それでが、まずは最初に、良くはまりがちな「効率的でない」PHPの学習方法について、ご紹介させてください。
例)汎用系システムの構築を行っているAさんは、華やかでかっこいい感じのするWeb系に異動したくたまりませんでした。そこで上司に異動を認めてもらえるよう、Aさんは、
「よし、今日からPHPプログラミングの勉強をしよう!」
と、書籍を購入して、意気揚々と勉強をはじめました。
家に帰り、Aさんは書籍の冒頭の文章を読み上げます。
「PHPとは、 PHP: Hypertext Preprocessorの略で、サーバサイド・スクリプト言語です。」
さ すがにAさんはエンジニアなので「PHP: Hypertext Preprocessor」の再帰的頭字語(その正式名称の中にそれ自身が含まれている頭字語を指す。自己言及型頭字語とも)では混乱しませんでした。で すが、「サーバサイド・スクリプト」という聞きなれない言葉に少々ひるみます。真面目なAさんはその単語について検索エンジンを使用して調べます。する と、「Webサーバ上で動作し、Webサーバ上でプログラムの実行が要求されるたびに、結果をウェブブラウザに対して送信するようなプログラム」という回 答が得られました。Aさんはなんとなく意味は理解できているのですが、念の為、「Webサーバ」についても調べてみました。すると以下のような回答がか えってきました。
「WWWシステムにおいて、情報送信を行うコンピュータ。また、WWWによる情報送信機能を持ったソフトウェア。Webサーバ は、HTML文書や画像などの情報を蓄積しておき、Webブラウザなどのクライアントソフトウェアの要求に応じて、インターネットなどのネットワークを通 じて、これらの情報を送信する役割を果たす。」
この時点で、「WWWシステム」、「HTML」と、Aさんが調べないといけないワードは2つに増え ました。いえ、まだ「サーバサイド・スクリプト」や「Webサーバ」もまだしっかり理解できているわけではないのですから、正確には4つ、です。まだ1 ページどころか1文しか読んでないのに。Aさんの最初の熱い気持ちは、すっかり冷めてしまいました。
まずは動かしてみる。勉強するのはその後。
こ の例は、大変ありふれた挫折のパターンです。ここで大切なのは最初の目的を「学習すること」でははなく「動くWebシステムをつくり、動かしてみる」こ と。PHPに限らずエンジニアとして必要とされる技術を身につけるには、まずは自身の手を動かして何らかのシステムをつくりあげ、さまざまな技術を体感す ることが大切です。学習はその後にしたほうが、学習の過程で得た知識が、より自分の中でリアリティのあるものになります。
では、PHPで効率よく「動くWebシステムをつくり、動かす」ための有効な方法は何があるでしょうか?それは「フレームワークの導入」です。
私がまだWeb黎明期のころ、Webシステムの開発を何度も繰り返していたときに良く感じていたのですが、異なるシステムでも、ページ遷移・ブラウザからのリクエスト情報の取得・セキュリティ対策・データの抽出・表示・その他共通する部分は、実は大変多いのです。
そんなWebシステムの同じような部分はあらかじめ出来た物を使って作業の効率化を図るという考えからフレームワークは生まれました。
そ の後、フレームワークは目覚ましい発展を遂げます。特にRubyOnRailsというフルスタックフレームワークが誕生してからは、フレームワークは生産 性向上のみならず、保守や運用も視野に入れた、統合的な開発運用環境としても捉えられるようになりました。そして、現在、多くのフレームワークは、Web アプリケーションを構成するのに不可欠なコードを自動生成する「ジェネレータ」を備えるようになりました。ジェネレータを使うと、データベースを使用した 簡単なWebアプリケーション位ならばコードを1行も書かずに作ることも可能です。
ですので、私たちが「動くWebシステムをつくり、動かす」ことを目的としてフレームワークを使って開発を行う際にジェネレータを使用すれば、1行もプログラミングコードを入力しなくても、とりあえず動くWebアプリケーションを構築することができてしまうわけです。
プログラミングはしなくていい?!フレームワークを使用して、まずは動くアプリを構築。
PHPの勉強をするのに「プログラミングはしなくていい」というのは、ずいぶん乱暴な話だと感じるかもしれません。
実際、PHPのプログラミング学習において、フレームワーク及びジェネレータをどの時点で取り入れるかは、意見が分かれるところです。ですが私は、できるだけ早い時点での導入をおすすめします。
なぜなら、ジェネレータから生成されるソース一式を解析することで、シンプルかつ模範的なMVCデザインパターンのWebアプリケーションの基本構造を効率よく理解することができるからです。
「そうはいっても、本当にプログラムを1行も書かなくてPHPを理解できるのか?」
と思われるかもしれません。が、まずは、ジェネレータでWebアプリケーションを生成してひとしきり動かしたら、それを解析し、さらに自分で必要な機能、必要な機能、例えばユーザー認証などの機能を付け足していく形で進めてください。
ようは、全く料理が出来ない人が、料理を学ぶにあたって、まずはインスタントラーメンを作成するようなものです。インスタントラーメンの作成手順は、
・お湯をわかす
・麺を放り込む
だ けで、これだけではとても料理とはいいがたいです。が、出来上がるものは、立派な食品です。そしてここから「ラーメンに卵を乗せる」「七味や様々なスパイ スを使用する」「炒めて焼きラーメンにする」等、勉強しながらアレンジを加えていけば、おのずと料理の力もついてきます。
ジェネレータが生成したソースをもとに、MVCデザインパターンを理解する。
フ レームワークのジェネレータが生成したソースを解析するうえで避けて通れないのが、MVCデザインパターンです。MVCは、 Model,View,Controllerを示します。Model(モデル)はデータベースとの接続やデータ加工、処理などを行う部分。 Controller(コントローラ)はアプリケーションの制御を司る部分。View(ビュー)はHTMLなど、Webページの部分です。
ほとん どのフレームワークで提供されているModel(モデル)には、O/Rマッピングツールが内包されています。なので、プログラマはModel(モデル)を 利用すると、シンプルなシステムであれば、データベース接続やSQL発行、SQLインジェクションなどをあまり意識することなく開発することが可能になり ます。
Controller(コントローラ)は、ページごとの遷移をコントローラ経由で集中管理することで、ページ遷移の構造が複雑化することを防ぎます。
View(ビュー)は開発の効率化のため複数のWebページの共通部分からなる「テンプレート」を提供します。テンプレートを利用することで、データ部分と見た目を分離することで、プログラマとデザイナの作業分担をはっきりさせることができるようになっています。
現在、かなりの数のWebシステムがMVCデザインパターンにのっとって構築されています。MVCデザインパターンが好まれているのは、フレームワーク有 するジェネレータを使用しての自動プログラミングに適しているのももちろんですが、各モジュールが比較的整然と分かれ、プログラムの見通しがよくなるこ と、将来的にView(ビュー)を修正したときにModel(モデル)やController(コントローラ)部分への影響が比較的すくなくなることなど も挙げられます。 現在使われているフレームワークも、ほとんどがこのMVCデザインパターンにのっとって構築されていますので、フレームワーク有するジェネレータが生成し たソースを解析することで、効率よくMVCデザインパターンを理解することができるようになるわけです。
PHP初心者におすすめのフレームワークとは?!
簡 単にWebアプリケーションを構築できて、MVCデザインパターンにも触れることができる「フレームワーク」。是非すぐにでも使用してみたいところです が、現在、PHPでは様々なフレームワークが提供されております。PHPフレームワークを勉強しようと考えている方にとっては、どれを使ってみたらいいの か悩ましい状況だと思いますが、私は、CakePHPかPhalconのどちらかをおすすめします。両方ともジェネレータ機能をもつ、優れたフレームワー クです。CakePHPは日本語の書籍や入門サイト等が充実しています。PhalconはC言語で製作された非常に高速なフレームワークで、今後の需要の 拡大が期待されています。
いろいろなフレームワークに触れてみて、その面白さを体験していただき、「よし!基本からしっかりと押さえよう!」と 思われた方は是非トレーニングにご参加ください。独学とトレーニングでは、習熟度に差が出ます。仕事で使う場合は、漏れがないように体系立てた学習をト レーニングで学ばれた方が、確実であり、時間面でもコスト面でも効率的です。それにもしつまずいても、講師がいるのでその場で解決できます。皆様と教室で お会いできることを楽しみにしております。
次回予告
次回は、CakePHPかPhalcon のような個別のPHPフレームワークについて、歴史や動向も含めて、もう少し詳しくご説明します。自分の使用する
フレームワークの背景がわかると、よりWebアプリケーションを身近に感じられるようになります。
吉谷 愛 氏
フロイデ株式会社 代表取締役
「最 新のアーキテクチャを追及し続ける技術者集団」を目指す、フロイデ株式会社代表取締役社長。現在は、自身のCOBOLからRailsまでの非常に幅広い開 発経験や、学生や未経験社員への技術指導経験を糧に、技術講師としてソフトウエアエンジニアの育成に注力している。2013年06月より、初心者向けの 「はじめようRuby on Rails開発!」シリーズを考案。“技術者の立場にたった、技術者の心に火をつける”熱い講義をモットーとしている。