Laravelフレームワークとは
Laravelフレームワークの概要
日本で最も広く使われているWordPress(CMS)やEC-CUBE(ECサイト)などはWebプログラミング言語PHPで開発されています(図1.1)。
このようにWebサービスではよく使われているPHPですが、Webアプリケーションを効率的に開発するためのWebアプリケーションフレームワークと呼ばれているものが多数あります。本書で学ぶ「Laravel」はMicrosoftの.NETの開発に関わっていたTaylor Otwell氏によって開発され、PHPの世界で最も人気のあるフレームワークの1つです(図1.2)。
もともとPHPには「Symfony」という人気のWebアプリケーションフレームワークが存在しますが、それを土台に作成されたのが「Laravel」です。
Google TrendsでWebアプリケーションフレームワークの人気度の動向を調べてみました(図1.3、2020年7月現在)。一番上の青線がLaravelになります。人気のあることがわかります。
フレームワークとは
フレームワークを使わないでPHPを使うプログラマーは、基本的にほとんどゼロの状態からプログラミングをして作っていきます。プログラミングの内容は、1ファイルに長く記述していく人、モジュール化(関数)する人、オブジェクト指向(クラス)を取り入れる人など、いろいろな作り方ができるのがPHPのよさでもあります。そのいろいろな作り方ができることから初心者から上級者まで幅広く使われています。
しかし、複数人でチームを組んで開発する場合には、このPHPの自由さが「規則性のないコード」を生産していきます。チームでの規則を決めてもPHPはコードを書けばそのプログラムは動いてしまうので、作りやすい方法で規則を無視して作成してしまう人も稀に出てきます。このようなことを防ぐにはどうすればよいでしょうか? もっと細かい規則が最初から決まっていて、その通りに組めれば楽なのに……。
そこで「フレームワーク」の出番です。
最初から便利な枠組み、関数、クラスなど必要な処理が用意されています。「フレームワーク」は、その用意されているものを使うだけでさまざまな機能を実装できるので、使い方(実装の仕方)だけ覚えれば誰でも簡単にプログラムを作れるのがよいところです。ただし、素のPHPと違い自由度は低く、関数、クラス、メソッドの名前など、「フレームワーク」の規則にしたがわないと動作しません。その代わりに「フレームワーク」は実装の負荷軽減、保守性、セキュリティ、規則性あるコード、可読性が確保できるという特長があります。
Laravelの特徴
Laravelには次のような特徴があります。
- 他のフレームワークに比べると学習コストが低い
- コードが読みやすく記述量が少ない
- 強力で簡単に記述できる入力チェック
- ログイン認証(ユーザー登録・認証など)
- ページネーションの簡単設置(2箇所の記述で可能)
- 本番環境へのアップロードが他のフレームワークに比べて簡単
これらの特徴の中で、何と言っても一番は「学習コストの低さ」です。他の言語(Python、Ruby、Javaなど)のフレームワークでWebアプリケーションを作成したとします。その場合、本番環境(さくらインターネット、Microsoft Azure、Amazon AWSなど)へのデプロイを考慮すると、プログラミング言語以外のサーバー等の知識・技術が必要になります。PHPの場合は通常のWebサイトのアップロードのように、HTML/CSS/JavaScriptをアップロードする感覚で本番環境にアップロードすることで動作させることが可能です。
Laravelのヘルパー関数
Laravelのヘルパー関数とは、Laravelフレームワークで用意されているとても便利な関数です。PHPネイティブの関数とは別の関数になります(参考:Laravel Documentation:Helpers)。
MVCパターンとは(一般的なフレームワーク)
PHPフレームワークである「Laravel」は他のフレームワークと同様にMVCパターンという「Model・View・Controller」の3つの主要パーツで構成されています。MVCパターンは図1.4の3種類のプログラムで構成されています。
初心者の方がMVCを理解するのは、簡単なことではありません。
初心者の段階では「表示・データ・制御と分けているのだな」という程度の理解で進んでいくべきでしょう。フレームワークの概念を理解しようと思うなら、実際にコードを打ちながら進んだ方が明らかにスキルアップし、知識は後で紐付いてきて理解も深まります。頭の片隅に図1.4を入れておいて、ステップバイステップで進めながら「Model・View・Controller」を1つ1つ紐付けていきましょう。
MVC
前述したMVCについてもう少し詳しく解説します。
Mode(lモデル)
Webシステムのデータを扱う本体部分になります。Webシステムの中でデータ連携処理などをモデルが扱います。データベースからの必要な情報の抽出、登録、更新、削除などを行うのが主な処理内容です。
モデルは、基本的に「/app/」内に作成します。
View(ビュー)
表示領域を担当するのがビューになります。コントローラ・モデルの実行結果をViewで受け取ります。ビューが受け取ったデータを元にHTMLを生成し、ブラウザで表示するHTMLを出力します。
ビューは、基本的に「/resources/views/」内に作成します。
Controller(コントローラ)
コントローラの役割は、モデルとビューの制御です。リクエストされたURLやフォームの入力値にしたがい処理を実行します。
コントローラは、基本的には「/app/Http/Controllers/」内に作成します。
ルート定義
ルーティングと呼ばれており、URLと処理を紐付けする役割をしています。
コラム LaravelはMVCではない?
Laravel開発者のTaylor Otwell氏は「LaravelはMVCではない」とコメントしています。MVCという概念にとらわれず自由に書けるように作られているのがLaravelの特徴とも言えます。
対象読者について
本書は、一度Laravelのフレームワークについて学んでみたい方や、PHPの基礎を身に付けて次に何を学ぶかを考えている方など、Laravelの初心者から中級者の方に向けて執筆しています。
特に「Laravelのフレームワークを体系的に勉強しようとしたけど難しかった」という方や、「Laravelのフレームワークの勉強方法がわからない」という方に向けて、必要な内容を絞り解説しています。「これからLaravelのフレームワークを勉強したい」という方におすすめの勉強方法は、「読みながら作る」の流れで習得することです。
本書はそのような方に向けて、ステップバイステップ形式の構成になっていますので、本書の順番に操作し、作りながら進むことで、Laravelフレームワークでの基本的な「登録・表示・更新・削除」の処理を理解できます。また、PHPを学んでいるときには出てこなかったLinuxコマンドや、Laravelのartisanコマンドは何回も出てきますが、作りながら慣れていきましょう。
フレームワークを学ぶ意義
Webサービスを作ることになると、必ずバリデーション(未入力チェック、文字数チェック等)、ログイン認証、セキュリティ対策、記述コードの統一性など、考えることが増え、それに合わせてコードの量も増えてきます。当然、把握する内容や心配ごとも多くなります。そこで、フレームワークの出番です。フレームワークを使うことで、それら多くのことを解消できます。
学習コストについて
世の中の多くのプロダクトはフレームワークを使って構築されているケースが多いです。フレームワークの学習コストは低くはありませんが、覚えれば便利で開発も圧倒的に早くなります。
フレームワークは最初の学習コストが高いため、そこを乗り越えられないケースが多いようです。筆者もフレームワークを最初の習得時期は、学習コストの高さに悩まされた1人です。しかし、継続することで少しずつ慣れて「こういうものか」と理解できました。
本書を一度読み理解できるほどフレームワークの習得は簡単ではありません。最初のフレームワークを起動して表示するところまでは、3回は繰り返してください。3回繰り返したら、その後はどんどん読み進めてください。最初の3回繰り返す理由は「環境構築、コマンド、インストール、フレームワークの動作確認」に慣れてほしいからです。プログラミングとは違う体験ですので、まずは慣れることが重要です。そこさえ慣れてしまえば、すぐにプロジェクトを作ることが可能になります。
フレームワークで作っていると「なぜか動作しない」といった、原因不明で動作しないときがあります。不具合の特定ができないで何日も過ごすのであれば一旦削除し、プロジェクトを作り直す方が早かったりします。コマンドや操作は毎回同じですので、慣れてしまえば10分程度で作れるようになります。
かくいう筆者も最初は、laravel.comや世界、日本のドキュメントサイトを見て学びました。筆者なりに解釈し、フレームワーク初心者に向けてシンプルなアプリが作れるようになるところまでを解説しています。フレームワークは難しいですが、昨今のWebサービスを作る上では必要な技術なので、ぜひ習得しましょう。