現役フリーランスエンジニアが運営するテックメディア。日々の業務で得た知識を発信していきます!

  1. バックエンド
  2. 2438 view

人気急上昇中のLaravelをはじめよう!【徹底解説】

最終更新日:2019/10/19

PHPフレームワークとしてメキメキと人気を伸ばしているLaravel。

これから始める人のために動かして覚えるLaravelシリーズを作りました!

動かして覚えるLaravelシリーズ

本記事では、このシリーズの紹介をしながら、Laravelの概要を説明していきます!

Laravelとは?

Laravelは2011年6月に出たPHPフレームワークです。

ほかの流行りのサーバサイドフレームワークと比べてもかなり後発のフレームワークにもかかわらず、人気急上昇中のフレームワークです。

Laravelのよいところはたくさんありますが、特に以下のような特徴が支持されています。

  • コードが読みやすい
  • Web開発に必要な機能を強力にサポートする(フルスタックフレームワーク)
  • 大規模開発にもたえられる

Laravelの人気

Laravelがどれくらい人気か、他のサーバサイドフレームワークと比較してみていきましょう。

PHPフレームワークと比較

他の言語のフレームワークと比較

の2方向から見ていきます!

PHPフレームワークと比較

まずは、他のPHPフレームワークと比較していきましょう。

それでは選手たちの入場です。

主要なPHPフレームワーク

  • Laravel
  • CakePHP
  • FuelPHP
  • Symfony
  • phalcon
  • Codeigniter
  • Zend Framework

PHPはさすが歴史が長いだけあって、いろいろなフレームワークがありますね。

それでは、軽く選手紹介です。

CakePHP

フレームワーク名 CakePHP
誕生 2005年4月
公式サイト https://cakephp.org
GitHubレポジトリ https://github.com/cakephp/cakephp
GitHubスター数 7830

FuelPHP

フレームワーク名 FuelPHP
誕生 2010年10月
公式サイト fuelphp.com
GitHubレポジトリ https://github.com/fuel/core
GitHubスター数 774

Symfony

フレームワーク名 Symfony
誕生 2005年10月
公式サイト http://www.symfony.com
GitHubレポジトリ https://github.com/symfony/symfony
GitHubスター数 20504

phalcon

フレームワーク名 phalcon
誕生 2012年11月
公式サイト https://phalconphp.com
GitHubレポジトリ https://github.com/phalcon/cphalcon
GitHubスター数 9604

Codeigniter

フレームワーク名 Codeigniter
誕生 2006年2月
公式サイト codeigniter.com
GitHubレポジトリ https://github.com/bcit-ci/CodeIgniter
GitHubスター数 7683

Zend Framework

フレームワーク名 Zend Framework
誕生 2006年3月
公式サイト framework.zend.com
GitHubレポジトリ https://github.com/zendframework/zendframework
GitHubスター数 5695

GitHubスターの推移

それでは、比較していきましょう!上位4つのGiHubスターの推移をグラフにしました。

  • Laravel(青)
  • cakePHP(オレンジ)
  • Symfony(緑)
  • phalcon(赤)

Laravel、2位のSymfonyを大きく離して1位に君臨しています。

ここ最近ではLaravel一強と言ってもいいのではないでしょうか。

他の言語のフレームワークと比較

他の言語のフレームワークにも登場してもらいましょう。

  • Ruby on Rails
  • Django
  • Express

こちらもまずは選手紹介から。

Ruby on Rails

フレームワーク名 Ruby on Rails
誕生 2004年7月
言語 Ruby
公式サイト rubyonrails.org
GitHubレポジトリ https://github.com/rails/rails
GitHubスター数 42838

言わずと知れたRubyの超人気フレームワーク。

PHPフレームワークと違って、昔からRuby界ではRuby on Railsが一強状態なのでフレームワーク選定に迷うことが少ないです。
特に日本では大人気。

Django

フレームワーク名 Django
誕生 2004年7月
言語 Python
公式サイト www.djangoproject.com
GitHubレポジトリ https://github.com/django/django
GitHubスター数 40977

DjangoはPythonの人気フレームワーク。Pythonがデータ分析やAIで注目され人気が上がると同時にDjangoの人気も加速。

ちなみにPythonフレームワークの中ではFlaskというフレームワークもかなり人気。

Express

フレームワーク名 Express
誕生 2010年1月
言語 JavaScript
公式サイト http://expressjs.com/
GitHubレポジトリ https://github.com/expressjs/express
GitHubスター数 43405

Node上で動くJavaScriptのサーバサイドフレームワーク。

Webフロントエンドと同じJavaScriptで記述できるので大人気。

GitHubスターの推移

こちらもGiHubスターの推移をグラフにしました。

  • Laravel(青)
  • Ruby on Rails(オレンジ)
  • Django(緑)
  • Express(赤)

各代表、一歩も引かない激しいバトルを繰り広げていますが、現在はLaravelがわずかに抜けてる模様。

Webフレームワークの中でもかなり人気と言っていいでしょう。

それにしてもLaravelは他と比較してもかなり後の方に出てきたにもかかわらず、伸びがすごいですね。

Laravelの主要な機能

それでは、Laravelの主要な機能をご紹介していきます。

Laravelにはすばらしい機能がたくさんあるのですが、全部を紹介しているとキリがないので、動かして覚えるLaravelシリーズで紹介している内容をもとに説明していきます!

  • ルーティング
  • コントローラ
  • ビュー
  • マイグレーション
  • モデル
  • リソースコントローラ
  • リクエスト
  • バリデーション
  • 認証機能
  • メール確認機能
  • シーディング
  • 認可

ルーティング

ルーティングとは、ユーザからのリクエストを特定の処理に振り分ける機能です。

ユーザから送られてくる様々なリクエストを解析して、処理を割り振ります。ユーザからのリクエストの道案内のようなものですね。

  • 「最新のブログ記事一覧をみたい」
  • 「ブログ記事を新規追加したい」
  • 「お問い合わせページがみたい」
  • 「コメントを書き込みたい」

ユーザからこのようなリクエストが送られてきたとき、これらを具体的な処理に割り当てるのがルーティングの機能です。

以下の記事でルーティングについて詳しく解説しているので参考にしてください。

コントローラ

コントローラは、ルーティングによって割りふられたあとの処理を担当します。

ルーティングから渡されたリクエストをもとに、他の様々な機能に処理を依頼しながら、最終的にビューやデータをユーザに返します。

例えばブログ記事を新規投稿する処理を考えてください。

  • 「ぷろぐらみんぐ始めました」というタイトルで「Hello World!」 という内容で投稿したい!

というユーザのリクエストがあったとします。

これに対して、コントローラは以下のような処理を担当します。

  • タイトルと本文を抜き出してデータベースへの保存を依頼する
  • 投稿に成功したら、投稿成功画面を返す

コントローラにはなるべく具体的な処理は書かずに、他の適切な機能に割り振るのがよいとされているので、ルーティングのあとの司令塔のようなものと捉えることができます。

以下の記事でコントローラについて解説しているのであわせてご覧ください。

ビュー

LaravelにはBlade(ブレイド)という高機能なテンプレートエンジンが備わっています。

テンプレートエンジンの図

テンプレートエンジンとは、データをテンプレートと合体させてユーザに見せる見た目を作る仕組みです。

例えばブログ投稿システムの場合、データというのは記事タイトル、本文のようなものです。

ブログ記事によってデータは違いますが、表示するべきレイアウトは同じなのでそのレイアウトをテンプレートとして用意しておきます。

LaravelのBlade(ブレイド)は表示するべき記事タイトルと本文を個別記事用のテンプレートに流し込み、最終的にユーザに届ける見た目を構成してくれます。

LaravelのBlade(ブレイド)については以下の記事にまとめたので、参考にしてみてください。

マイグレーション

マイグレーションとは、データベースの構造(スキーマ)をソースコードで管理することができる機能です。

本来はデータベースの構造はSQLベースで記述されることが多いですが、Laravelの場合はPHPベースで管理することができます。

「ソースコードで管理すると何がいいの?」

と思われる方のために図を用意しました。

ソースコードで管理するメリットはたくさんあるのですが、以下の点が重要です。

  • 1.Gitなどのバージョン管理システムで管理できる
  • 2.コマンド実行によってデータベースのスキーマを簡単に更新することができる
  • 3.ロールバック機能でデータベースのスキーマを元どおりに戻せる

マイグレーションを使わなかった場合、データベースを更新するために更新用のSQLを流さないといけません。

チーム開発の場合、そのSQLファイルを全員に共有して、実行してもらうようアナウンスする必要があるでしょう。これはアナウンスする側もされる側も非常に手間ですよね。

マイグレーション機能を使うことにより、コマンドを1行実行するだけで最新のデータベーススキーマにアップデートしたり、元どおりに戻したり(ロールバック)することができます。

マイグレーションコマンド

php artisan migarate

ロールバックコマンド

php artisan migrate:rollback

マイグレーション機能よって、チーム開発でもデータベーススキーマの変更が容易に行えるのです。

マイグレーションについては以下の記事で詳しく解説しているので、気になる方はあわせてご覧ください!

モデル

LaravelにはEloquentモデルという機能が備わっています。

Webアプリケーションでは基本的には、データベースにアクセスする際にSQLを用いますが、EloquentはSQLを直接書くことなくデータベースの操作を行う仕組みです。

Eloquentを使うことで以下のようなメリットがあります。

  • 簡潔で分かりやすい記法でデータベースにアクセスできる
  • タイムスタンプの管理など、定型的な機能を自動でサポート
  • 特定のデータベースに依存しない

Eloquentについては以下の記事で詳しく解説しているので、ぜひ一度ご覧になってください!

リクエスト

LaravelはHTTPリクエスト情報を取得するための強力なRequestクラスを持っています。

本来、自前の実装でユーザからの多様なリクエストをさばくのは非常に骨が折れる作業です。

LaravelのRequestクラスはユーザからのリクエストをきれいな記述でさばける優れものです。

以下の記事にRequestのさばき方について具体例とともに解説しているのであわせてご覧ください!

バリデーション

ユーザから送られてくるリクエストは、かならずしも開発者が想定したものとは限りません。

ユーザが間違えて送ってくる場合もあれば、時には悪意のある人間が攻撃を仕掛けてくることもあります。

Laravelにはユーザから送られてきたリクエストの妥当性を検証するためのバリデーションという仕組みがあります。

バリデーション機能によって、ユーザに適切なアラートを出してあげたり、アプリケーションのセキュリティを確保したりすることができます。

以下の記事でバリデーションについて詳しく解説しているのであわせてご覧ください。

認証機能

Laravelにはコマンド一発でアプリケーションに必要な認証機能を瞬時に用意することができます。

php artisan make:auth

これを実行するだけで以下のような機能がそろってしまいます!

ユーザ新規登録機能

ログイン機能

パスワードリセット(リマインド)機能

このような機能を自力で実装するのはかなり大変なので、非常にありがたいですね。

もちろん、作りたいアプリケーションによってカスタマイズすることもできます。

以下の記事に認証機能について詳しく解説しているのでぜひお読みください。

メール確認機能

Laravelのバージョン5.7からメール確認機能を簡単に実装できるようになりました。

ユーザにメールアドレスで新規登録をしてもらう時、ユーザが入力したメールアドレスがほんとうにユーザのものか確認するために、以下の順を踏むことが必要です。

  • 1.会員登録の時にユーザにメールアドレスを入力してもらう
  • 2.入力してもらったメールアドレスに確認用メールを送る
  • 3.ユーザがメールの中にあるメール確認用リンクをふむとメールアドレス確認完了

けっこう複雑なフローなので自力で実装するとまあまあ大変です。

以下の記事にメール確認機能の設定方法を詳しく解説しているのでぜひご覧ください。

シーディング

シーディングはアプリケーションに必要なデータや、テスト用のデータをデータベースに簡単に追加できる機能です。

例えばブログ投稿システムのページング機能を作りたいとします。

1ページ10件だとすると、たくさんのサンプルデータを作らないと実装できませんが、一つ一つデータを追加していくのは面倒です。

そこでシーディング機能の出番です。

シーディング機能を使えば、一気にデータを登録することができます!

シーディング機能の詳しい解説については以下の記事にまとめたので、あわせてご覧ください。

認可

認可というのはあるデータに対するアクセス権限を制御することです。

ブログシステムを例に挙げて説明します。

図のように以下の登場人物がいます。

  • Aさん
  • Bさん
  • Aさんが投稿した記事(リソース)

Aさんの記事は一般公開されているので、Aさん、Bさんがその記事を見る権限があります。

一方で編集したり削除したりする権限はどうでしょう。

もちろん、Aさんの投稿をAさんが編集したり、削除したりするのは自由ですが、Bさんが勝手に編集したり、削除するのは禁止しなければなりませんね。

Laravelではこういったアクセス制御をわかりやすく記述することができます。

以下の記事に認可の実装方法をまとめたのであわせてご覧ください。

Laravelの環境構築

それではLaravelを実際に動かしてみましょう。

以下の2つの方法をご紹介します。

  • Laradockで環境構築する手順
  • 自作の環境で動かす

LaradockでLaravelを動かす

Laradockとは?

Laradockは、Docker用のLaravel開発環境です。

主要なWebサーバ(Apache、Nginxなど)やデータベースなどを多数サポートしており、使いたいものを自由に選択して選べるのが特徴です。

これからの手順では、Dockerはインストールされているものとして進めるのでまだインストールしてない方はしてください!

Macの方は以下のリンクからインストールできます。
https://hub.docker.com/editions/community/docker-ce-desktop-mac

Windowsの方は以下のリンクからインストールできます。
https://docs.docker.com/docker-for-windows/install/

Laradockで環境構築する手順

まずは適当に作業ディレクトリを作ります。

今回はlaradock-workspaceという名前にします。

mkdir laradock-workspace
cd laradock-workspace

まずはLaradockをクローンしましょう。

git clone https://github.com/Laradock/laradock.git
cd laradock

laradockのディレクトリに入って以下を実行します。

docker-compose up -d nginx mysql

かなり時間がかかりますが、気長に待ちましょう。

終わったら以下のコマンドでLaravelプロジェクトを作成します。

docker exec -it laradock_workspace_1 bash
composer create-project laravel/laravel laravel-app

こちらも結構時間がかかりますが、終わると以下のようなディレクトリ構成になっています。

/laradock/.envAPP_CODE_PATH_HOSTの値を以下のようにします。

APP_CODE_PATH_HOST=../laravel-app/

この後以下のコマンドでrestartします。

docker-compose stop
docker-compose up -d nginx mysql

http://localhost にアクセスしてみましょう!

以下のように表示されれば成功です。

自作の環境で動かす

動作環境について細かいカスタマイズをしたい場合は自作した環境で動かすこともできます。

以下の記事はDockerで自作環境を作る方法について詳しく解説しているので興味ある方はあわせてご覧ください!

まとめ

本記事ではLaravelの概要から、環境構築手順までをざっくりとご紹介しました。

なかなかのボリュームになってしまいましたが、本記事でご紹介した内容はLaravelのほんの一部でしかありません。

本記事が、広大で奥深いLaravelの世界に足を踏み入れるきっかけになれば幸いです!

The following two tabs change content below.
WINDII

WINDII

WINDII(ウィンディ)は、フリーランスエンジニアが運営するテックメディアです。 日々の業務で得た知見を、皆さんに役立つコンテンツにして発信していくので応援よろしくお願いします! また、Slackで無料コミュニティも運営しています。たくさんのエンジニアが参加していて、プログラミングの相談や雑談などをしている楽しいコミュニティなので、興味ある方はぜひお気軽にご参加ください。 Slackコミュニティはこちらから

バックエンドの最近記事

  1. 人気急上昇中のLaravelをはじめよう!【徹底解説】

  2. Laravelの認可を理解して実装してみよう!

  3. Laravelのシーティング(Seeding)機能をマスターしよう!

  4. Laravelのメール確認機能を設定してみよう!

  5. Laravelの認証機能を設定してみよう!

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP