Webフレームワークをベースにアプリケーションを作る

Webでページを公開するということ

『HTMLとCSSを覚えて、書いたページをFTPでサーバーにアップロード。 自作のWebページをインターネットで公開し、情報発信できるようになりました!』

おめでとうございます! インターネットの利用者側から発信者側に移行する大きな一歩を踏み出すことに成功しましたね。

今の情報発信はブログ全盛時代で、Webサイトの立ち上げはとても楽になりました。 大手のブログサービスは、パソコンがなくともスマートフォンが使えれば記事投稿もカンタン。 WYSIWIGエディタでHTMLを知らなくても書けてしまいます。

とはいえ、HTMLやCSSを勉強する段階ではパソコンのテキストエディタでぽちぽちタグを打っていきますね。 パソコンのWebブラウザで表示するだけならHTMLファイルをダブルクリックするだけで済みますが、インターネットにアップロードすれば手持ちのiPhoneのSafariでどんな風に表示されるか確認できます。

CSSのメディアセレクタでレスポンシブ対応にしたり、JavaScriptライブラリで動きのあるWebページも自由に作れるようになっています。 アイデアと時間があればいくらでも作り込めます。

Webページに変化を加えたくなったら

さて、公開したWebページを更新するには、HTMLファイルを書き換えなくてはいけませんね。 「私のホームページ」には一言メッセージ欄があるとして、これを書き換えるにはHTMLタグに囲まれたたくさんのテキストの中から更新したい箇所を見つけ編集します。 1000行のHTMLファイルだったして、更新していきたいコンテンツは数十行程度かもしれませんが、毎回この作業を繰り返します。 誤ってHTMLタグの閉じ括弧を削ったりするとページのレイアウトが崩れるので、慎重に慎重にやるんですね。

こんなところに神経を使いたくないので、HTMLとコンテンツのファイルを分けたくなってきます。 WebブラウザからリクエストがあるたびにHTMLをその都度生成するようにすれば、これは実現できそうです。 そのためのツールとして、PHPやPython、Rubyなどのサーバーマシン上で動くスクリプト言語を使います。

『じゃあ、比較的簡単そうなPHPを勉強してみようか』と入門書を買って勉強します。 アクセスカウンタやアンケート、お問い合わせフォームを作ってみて、プログラミングが少し理解できたかもしれません。 WebデザイナーならWordpressカスタマイズに手を出し始める方も多いでしょう。 Webプログラマを目指したり、この時点でプログラミングの面倒さより面白さを強く感じた人は、その次はデータベースを使った本格的なWebアプリケーションに挑戦しようかなと考えたりします。

「フレームワーク」=「アプリケーションの骨格」

いよいよWebプログラミングの次の一歩を踏み出そうというとき、是非知っておいてほしいのが「Webフレームワーク」です。 フレームワークとは「アプリケーションの骨格」となるプログラムで、アプリケーションを作るときによく必要とされるライブラリや、典型的なプログラムの構造を提供してくれるものです。

Webフレームワークは、Webアプリケーションを作る際の土台・基礎となるものです。 フレームワークには初級〜中級レベルのプログラミング概念が詰まっています。 一通りのモダンな機能がそろったWebアプリケーションを作るには、入門レベルで勉強したプログラムの何十倍、何百倍の量のコードを書くことになります。 それだけの複雑で大きなプログラムを書くには、洗練された仕組みをベースにした方が賢いわけです。

CMSで作るか、Webフレームワークで作るか

ブログやWebサイトを構築する際によく使われるWordpress(ワードプレス)、これはCMS(コンテンツ・マネージメント・システム)というジャンルのWebアプリケーションです。 Wordpressはカスタマイズ可能で高機能な管理画面がついていて、世界中で最も使われています。 「プラグイン」と「テーマ」という拡張のための2つの仕組みがあり、内部では「フィルタ」というイベントをフックする機能で既存の動作を拡張できるようになっています。 そのため、「WordpressもWebフレームワークである」と言うことができます。

それでは、Webアプリケーションを作ろうとするとき、WoredpressなどのCMSをベースに作るのとWebフレームワークをベースに作るのとではどちらが良い選択となるのでしょうか?

CMSは企業やコミュニティの情報提供やブログなどの文章・画像コンテンツを発信するWebサイト構築のためにあります。 用意されている拡張の仕組みも、この枠内に限定されている場合が多いですので、ソーシャル性の高いシステムやスマートフォンと連携するWebサイトを構築するには不向きと言えます。 CMSが持つ以上の機能を望むのであれば、Webフレームワークを選んだ方がよいケースが多いです。

何故、PHPにはたくさんのWebフレームワークがあるのか

PHPのWebフレームワークを探し始めると、いくつもの名前が出てきます。 CakePHP、FuelPHP、Symfony、Yii、Phalconなどこの10年の間にたくさんのWebフレームワークが誕生しました。 なぜこれほどの数のフレームワークが存在するのでしょうか?

現代主流のPHPのバージョンは5で、5.0がリリースされたのは2004年7月です。 その頃のPHPはまだ洗練されていなく、RubyやPythonなどのサーバーサイドスクリプト言語と比べると言語機能が劣っていました。 モダンなプログラミング機能が搭載され、第一線のスクリプト言語たちに肩を並べ始めたのはPHP5.3〜5.4の頃です。 それまでの間、足りないプログラミング言語機能や表現力を補っていたのがWebフレームワークだったのです。 ベストプラクティスがなかった頃、Webフレームワークはオリジナリティある独自の実装を提供していました。

WebフレームワークをはじめるのにLaravelがいい理由

2015年現在、PHPのバージョンは5.6になり、PHP5.4が十分浸透したためWebフレームワークはこぞってPHPのミニマムバージョンを5.4にし始めています。 独自実装はPHPの提供する言語機能に置き換えられ、またパッケージ管理にPHP界で事実上標準となっているComposer(コンポーザー)を採用したことで、フレームワーク間の差異が少なくなってきました。 その中でもWeb版MVCパターンをベースとしたフレームワークは特に似てきています。

MVCパターンを採用したフレームワークの中でも、2013年にリリースされたLaravel4(ララベル)は最も早くPHP5.4+Composerをベースとしたフレームワークです。 GitHubを中心としたオープンな開発コミュニティも活発で、リリースのペースもとにかく早いです。 Laravelは世界レベルで最も注目されています。 世界で注目が集まっているLaravelは、昔のPHPプログラムとは別ものとも思えるエレガントで信頼性の高いプログラムを書くことができます。

コマンドライン環境に慣れよう

「えっ、あの黒い画面・・・(´・д・`)」でおなじみのコマンドライン環境。 node.jsベースのツールが普及してきて、フロントエンドエンジニアも使う時代になってきました。

Windowsだと「コマンドプロンプト」、Macだと「ターミナル」というPC購入時から入っているアプリケーションです。 アプリケーションメニューの中を探してみてください。アクセサリとかユーティリティとかのフォルダにひっそり入っています。 起動してみると、文字だけの画面。 最初は無愛想に感じられてうわっと思うかもしれませんね。

「CUI(コマンドユーザーインターフェース)」とも呼ばれるコマンドライン環境は、コンピュータの初期から存在する人間がコンピュータと対話するためのものです。 今でもサーバーへのリモートアクセスの手段としてSSH(Secure SHell)が欠かせませんし、何十年という時の流れの中でたくさんのコマンドラインプログラムが生まれてきました。 そのプログラム資産は今の時代でも使われ続けていて、コンピュータを使う全ての人が間接的に恩恵を受けているのです。 そして、今立ち上げたコマンドライン環境ですぐに使いはじめることができます。

コマンドラインプログラムの一つ一つは小さな機能なのですが、それを自由に組み合わせてさまざまな応用が効く柔軟なアーキテクチャを持っています。 PHPスクリプトはWeb画面を生成するためだけではなく、コンピューターの定型処理を記述してコマンドライン環境で動作させることもできるのです。 LaravelやCakePHP、Symfony、Ruby on RailsなどのモダンなWebフレームワークはみなコマンドラインプログラムを提供していて、PHPソースを生成したりデータベースのテーブルを作成したりできますし、アプリケーション独自のコマンドを追加することも可能です。

PHPの新しい言語機能を知ろう

PHP5.0からオブジェクト指向プログラミング(OOP/ウープ)機能が追加されました。 「クラス」は変数とメソッド(関数とほぼ同等のもの)をグループ化します。 クラスはオブジェクトの雛形としての意味があり、new演算子を使用して変数とメソッドを内包した「オブジェクト」を生成できます。 また、「クラス継承(extends)」という機能で、複数のクラス間で共通の変数・メソッドをくくり出すことができます。 クラス継承をうまく使うと、重複コードを減らせることができたり、再利用可能な部品を作ることができたり、アプリケーションの世界に新しい概念・用語を導入することができます。

PHP5.3から追加された「クロージャ」は、無名関数とも呼ばれるもので、名前をもたない関数です。 クロージャは変数に入れたり関数のパラメータに渡すこともできるので、プログラム内を自由に持ち運ぶことができます。 JavaScriptでは多用されている言語機能です。

PHP5.4から追加された「トレイト」は、オブジェクト指向プログラミング機能のクラス継承を使わずに、クラスに変数やメソッドを追加することができます。 クラスツリー上、全く無関係な2つのクラスに同じ変数・メソッド群を簡単に追加できるようになります。

PHP5.4から追加されたショート配列構文[]は、今まで配列を生成するのにarray(1, 2, 3)と書いてきたものを、[1, 2, 3]という直感的な書き方ができるようになりました。

フレームワークの機能・用語を知ろう

Webブラウザにページを表示するためには、HTTPという通信プロトコルでサーバーにアクセスします。 アクセスはGETPOSTPUTDELETEなどのHTTPメソッドとURLのセットで表され、ApacheNginxなどのWebサーバープログラムを介してあなたのWebアプリケーションに届きます。 「ルーティング」は、HTTPアクセスを振り分け、対応する処理にマッピングする機能です。

多くのWebフレームワークはアプリケーションの設計パターン「MVCパターン」を採用しています。 MVCとは、データベースのテーブルをPHPで扱えるようにする「モデル」、HTMLテンプレートの「ビュー」、HTTPアクセスに対応するプログラムコードの集合である「コントローラー」のそれぞれの頭文字を取った名称です。

データベースのテーブル定義(スキーマ)にバージョン管理機能をつけた「マイグレーション」や、SQLをPHPプログラムとして書ける「クエリービルダー」などもあります。

フレームワークが提供するサービス(PHPオブジェクト)を名前でアクセスできるようにした「サービスコンテナ(サービスロケータ)」はWebフレームワークを支える重要な機能です。

Laravel 4とLaravel 5

2014年6月にLaravel 4.2がリリースされました。 そして2015年2月にLaravel 5.0がリリースされました。 このメジャーバージョンアップは、アプリケーションのディレクトリ構造が大きく変更されたり、カーネル(Kernel)やミドルウェア(Middleware)といった新しい概念が追加されました。 その結果、4.2ベースで書いたプログラムはそのまま5.0で動作させることができません。

また、4.2ではPHP名前空間を意識しなくてもアプリケーションを書くことができたのですが、5.0は最初からアプリケーションにPHP名前空間が設定されています。 覚えることが増えたLaravel5は、どちらかというと中級〜上級者向けのフレームワークと言えます。

Webフレームワーク初心者は、Laravel 4.2でWebフレームワークをしっかり学び、2,3本アプリケーションを作ってみて物足りなくなってきたらLaravel 5や他のWebフレームワークにトライするのがいいでしょう。

LaravelではじめるWebフレームワークの世界

Laravelを使うと、モダンなPHPプログラムが書けます。

読みやすく美しいPHPプログラムの世界を、Laravelで始めましょう!

情報源ですが、まずは公式ドキュメントを一通り見ましょう。 日本語訳もあります。

英語かつ有料ですが、チュートリアルビデオのLaracastsは公式ドキュメントを補完する資料です。

インターネット上には日本語のLaravel記事も増えてきました。

2015年4月には書籍「Laravelエキスパート養成読本」も発売されました。

ユーザーグループLaravel Tokyoでは定期的にLaravelのセミナーやイベントを開催しています。 過去のイベント履歴を見てください。

Laravelのプライベートレッスン(マンツーマン)もやっています。 興味がある方はお問い合わせ・お申し込みフォームから連絡してください。

Laravel 5.1 体験ハンズオンセミナーも開催しました。

バックエンドエンジニアを抱える企業向けに、「Laravelプログラマ短期育成講座」(株式会社ストレートスピリッツ提供)もあります。 興味がある方はお問い合わせ・お申し込みフォームから連絡してください。