はじめに
初めまして。配配メール開発課 Jazumaです。 今回はPHPのフレームワークLaravelの環境構築~基本機能の動作確認を行います。
Linux環境での作業を前提としていますのでWindowsやMacではこの記事の手順でLaravelの環境構築をすることができません。予めご了承ください。
Laravelとは
Laravelは2011年にリリースされたオープンソースのPHPフレームワークであり、認証・データベースへのアクセス・入力値のチェックなどWeb開発に必要な機能が一通り備わっています。 Laravelの特徴として、MVCモデルが採用されているということが挙げられます。
MVCモデルとはアプリケーション開発によくある処理をModel、View、Cotrollerの3つに分類して実装する手法です。 Model、View、Controllerはそれぞれ次のような機能を持ちます。
M: Model... データ処理をする。 取得したデータをControllerに渡す機能も持つ。
V: View... ユーザに表示する画面。Controllerにリクエストを送ったり、Controllerが送ったレスポンスを画面に表示する。
C: Controller... Viewからリクエストを受け取る。また、Modelから受け取った処理の結果をViewに対してレスポンスとして渡す機能を持つ。
MVCモデルは機能ごとにクラスが明確に分かれているため保守性の高いプログラムを簡単に書くことができるというメリットがあり、Laravelも例外ではありません。
Laravelのメリット
Web開発をするにあたって、Laravelには以下のようなメリットがあります。
- 学習コストが比較的低い
前述の通りLaravelはMVCモデルに準拠しているため、どのファイルにどのような処理を書けばよいのか非常にわかりやすく、文法も単純なものが多いです。 そのため初心者でもWebアプリを効率的に開発することができます。
- Webアプリに必要な機能を簡単に実装できる
Laravelでは認証・エラー処理などのWebアプリケーションに不可欠な機能を簡単に実装することができます。例えば、「ユーザがリクエストしたページが存在しない場合に404エラーページを返す」という処理は404.blade.phpというViewファイルを作成するだけで実装できてしまいます。フレームワークが裏側でよしなにやってくれるというわけですね。この他にもコマンドを実行するだけで認証機能の実装に必要なControllerやViewファイルが作成されるなど、Web開発をスムーズに進めることができます。
- コマンドが豊富
LaravelにはArtisanというコマンドラインツールがデフォルトで備わっておりコマンドラインからControllerやModelを作成したり、データベースを操作したりすることができます。
artisanコマンドの一例を以下に示します。(これらはほんの一部分にすぎません。 artisanコマンドの一覧が見たい時はphp artisan listを実行します。)
php artisan serve # ビルトインサーバを起動する php artisan make:model[controller] [ModelやController名] # Model[Controller]を作成する php artisan tinker #コマンドライン上でLaravelのプログラムを実行するモードを起動
動作環境
私は以下の環境で作業を行っています。
Laravelの環境構築
まずは以下の手順でLaravelの環境構築を行います。
PHPのインストール
LaravelはPHPのフレームワークですので使う前にPHPをインストールする必要があります。 既にPHPがインストール済みの場合はこの手順は省略しても問題ありません。
以下のコマンドでPHPをインストールします。
#add-apt-repository コマンドをインストール $ sudo apt-get install software-properties-common \ # PHPをインストールするするためのppa:ondrej/phpリポジトリを追加 add-apt-repository ppa:ondrej/php \ # パッケージを最新化 sudo apt update \ # PHPをインストール apt-get install php7.4
php -vコマンドを実行してバージョンが表示されていれば正確にインストールされています。
PHP 7.4.7 (cli) (built: Jun 12 2020 07:44:38) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.7, Copyright (c), by Zend Technologies
Laravelのインストールや動作に必要なモジュールのインストール
Laravelの公式Webサイトでは、Laravelを使うために以下のようなPHPのモジュールが必要になると書かれています。
BCMath PHP Extension
Ctype PHP Extension
Fileinfo PHP extension
Mbstring PHP Extension
OpenSSL PHP Extension
PDO PHP Extension
Tokenizer PHP Extension
ZIP PHP Extension
初期状態ではBCMath, Mbstring, XMLがインストールされていません。また、後述するComposerでLaravelのインストーラコマンドを実行するにあたってzip拡張機能が必要になるので合わせてインストールします。
$ sudo apt-get php7.4-bcmath php7.4-mbstring php7.4-xml php7.4-zip
このとき、各種モジュールのバージョンは必ずphp本体のバージョンと揃えるようにしてください。(モジュールのバージョンを指定しないことが原因でエラーがよく発生します)
モジュールがインストールできたらphp -mコマンドで正しくパッケージがインストールできているか確認します。
$ php -m [PHP Modules] bcmath ctype fileinfo json mbstring openssl PDO tokenizer xml zip
(見やすくするために必要なモジュールのみを記載しています。)
Composerをインストールする
ComposerとはPHPで開発するのに必要なパッケージやライブラリの依存関係を解決してくれるツールです。例えばLaravelでの開発にパッケージAが必要でパッケージAの導入にはパッケージBが必要でパッケージBを使うにはパッケージCが...というようなことになった場合、Composerがないとそれらを1つ1つインストールしなければなりません。このようなやり方ではインストール漏れやパッケージ毎のバージョン違いでエラーが発生しやすいです。
それに対して、Composerを導入していればパッケージAをインストールするとそれを使うのに必要なパッケージBやCを自動でインストールしてくれる上、バージョン管理も勝手にやってくれます。このような利点からComposerはPHPの各種フレームワークで開発する場合ほぼ必ず導入されており、LaravelでもComposerが活用されています。
以下のコマンドでComposerをインストールします。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"
カレントディレクトリにComposerがインストールされますが、のちの手順を簡略化するためにパスの通っているディレクトリに移動させます。
sudo mv composer.phar /usr/local/bin/composer
Laravelのインストール・プロジェクトの作成
Composerの配置が完了したら以下のコマンドでLaravelのインストーラをダウンロードします。
$ composer global require "laravel/installer"
Laravelインストーラのダウンロードが終わり次第、.bashrcを編集してComposerのvendor/binディレクトリにパスを通します。
$ vim ~/.bashrc export PATH="$PATH:$HOME/.config/composer/vendor/bin"
パスを通せたら、Laravelのプロジェクトを作成するためのディレクトリを作り、そのディレクトリに移動してLaravel new コマンドを実行します。
$ mkdir Laravel_app $ cd Laravel_app $ Laravel new sample_app . . - Installing ralouphie/getallheaders (3.0.3): Downloading (100%) - Installing guzzlehttp/psr7 (1.7.0): Downloading (100%) - Installing guzzlehttp/promises (1.4.0): Downloading (100%) - Installing guzzlehttp/guzzle (7.2.0): Downloading (100%) - Installing dnoegel/php-xdg-base-dir (v0.1.1): Downloading (100%) - Installing nikic/php-parser (v4.10.2): Downloading (100%) - Installing psy/psysh (v0.10.4): Downloading (100%) - Installing laravel/tinker (v2.5.0): Downloading (100%) . . . Package manifest generated successfully. 72 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan key:generate --ansi Application key set successfully. Application ready! Build something amazing.
Laravel newコマンドでアプリケーションの開発に必要なパッケージが自動でインストールされていきます。 これでLaravelの開発をする準備ができました。
「Application ready! Build something amazing.」というメッセージが表示されたらLaravel_appディレクトリで以下のコマンドを実行してLaravelのバージョンを確認してみましょう。
$ php artisan -v Laravel Framework 8.16.1
Laravelの環境構築が無事完了しました。ここから先ではいよいよLaravelの機能を使っていきます。
Laravelの基本機能確認
ビルトインサーバの起動
LaravelではWebサーバを構築しなくても備え付けのサーバ(ビルトインサーバ)によってWebアプリケーションの動作確認をすることができます。(ビルトインサーバはセキュリティや機能面で実用には堪えません。あくまでも開発中の動作確認に使うくらいの使用感です)
以下のコマンドを実行してLaravelのビルトインサーバを起動します。
$ php artisan serve Starting Laravel development server: http://127.0.0.1:8000 [Mon Nov 30 20:47:59 2020] PHP 7.4.12 Development Server (http://127.0.0.1:8000) started
ブラウザの検索窓にlocalhost:8000
と入力してアクセスします。
上の画像のようにLaravelの起動画面が表示されれば成功です。
ルーティングの設定
ルーティングとは「このURLを呼び出したらこのコントローラを呼び出す」というようにURLとコントローラの対応付けをすることです。Laravelではroutes/web.php
でルーティングを設定します。
web.php
はデフォルトでは以下のようになっています。(コメント部分は省略)
<?php use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('welcome'); });
上記のルーティングの内容を簡単にまとめると、「第一引数のURLがgetメソッドで呼ばれたときに第二引数内の関数を実行する」というものです。ここでは '/'、つまりホーム画面(localhost:8000)にアクセスしたときにwelcome.blade.php
という名前のViewファイルを返す処理になっています。
先ほどビルトインサーバを起動した際にこのルーティングが呼び出されたというわけですね。
続いて実際にルーティングを定義してみましょう。web.php
を以下のように編集します。
<?php use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('welcome'); }); //追記部分 Route::get('/hello', function () { return 'hello'; });
新しく追加したルーティングは、'/hello'というURLをgetメソッドで呼び出すと'hello'という文字列を画面に表示するという内容です。Viewファイルではなく単に文字列を返すのは実用的ではありませんが今回は動作確認のためにこのような処理になっています。
それでは実際にlocalhost:8000/hello
にアクセスしてみます。
上の画像のようにhelloと表示されていれば成功です。
コントローラの作成
続いてコントローラを作成します。コマンドラインから以下のコマンドを実行します。
$ php artisan make:controller HelloController Controller created successfully.
コマンドラインに上のようなメッセージが表示されていれば成功です。Laravelが自動でコントローラクラスのファイルを作成してくれます。
Laravelではコントローラクラスはapp/Http
直下にControllerクラスのファイルが作成されます。
app/Http
ディレクトリ直下にHelloController.php
というファイルが作成されていることを確認しましょう。
無事作成されていますね。
続いてHelloController.php
を以下のように変更します。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { //新規追加のメソッド public function index() { return "hello, world"; } }
詳細は後述します。
さらに、web.php
の内容を変更します。
<?php use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('welcome'); }); //変更箇所 Route::get('/hello', 'App\Http\Controllers\HelloController@index');
ルーティングの内容を「'/hello'がgetメソッドで呼び出されたら HelloControllerのindexメソッドを呼び出す」というように変えています。
HelloController.php
のindexメソッドはhello, worldという文字列を返すという処理を行うので、先ほどと同じようにlocalhost:8000/hello
にアクセスしてhello, worldと表示されていればokです。
Viewファイルの作成
Controllerの次はViewを触っていきます。
resources/views
ディレクトリの下にhello.blade.php
というファイルを作成し、次のような内容にします。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> {{$message}} </body> </html>
次にコントローラクラスに手を加えます。冒頭で書いたようにLaravelはControllerからViewファイルを呼び出すという処理の流れになっていますので、コントローラ側でViewファイルを呼び出す処理を実装しなければなりません。indexメソッドを次のように書き変えてください。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { public function index() { //変更箇所 $message = "Hello Laravel!!"; return view('hello', ['message' => $message]); } }
変数$message
にHello, Laravel!!という文字列を代入しています。これはLaravel固有の記法というわけではなく、PHPそのものの文法です。
return文ではviewメソッドを返しており、第一引数でhello.blade.php
を返すようにしています。
少し複雑なのが第二引数の['message' => $message]
という部分です。
これはViewファイルに配列でパラメータを渡すための引数で、ここではmessageというパラメータに上で宣言した変数$message
の値をセットしています。
つまり先ほどお見せしたhello.blade.php
内の$messageというパラメータにはHello, Laravel!!という文字列がセットされているというわけですね。(Viewファイルの$messageはあくまでもパラメータであり、HelloController.php
で宣言した変数$message
そのものではありません。)
それではlocalhost:8000/hello
にアクセスしてみましょう。
上の画像のようにHello, Laravel!!と表示されているでしょうか?
最後にViewファイルの文法について簡単に解説したいと思います。
<body> {{$message}} </body>
$message
を囲んでいる二重括弧 {{ }} にはどのような意味があるのでしょうか。大きく分けて2つの機能があります。1つはパラメータにセットされている値を展開するという機能です。この二重括弧をつけていないとHello, Laravel!!という文字列ではなく、$messageという文字列がそのまま出力されてしまいます。
もう1つはセキュリティ対策の機能です。{{ }} で囲まれたパラメータは単にその値が展開されるだけではなく、内部的にはhtmlentities()
関数に渡されて値が表示されます。これにより、「<」や「&」などの特殊な意味を持つ文字がエスケープされて単なる文字として出力されます。
特殊文字が自動でエスケープされるため、XSS攻撃(悪意を持ったユーザがjavascriptやhtmlタグを入力して他のユーザのブラウザで実行させる攻撃)を大きな手間をかけることなく防ぐことができます。(XSSの詳細はこちら)
基本的な文法に沿って実装すれば意識せずともセキュリティ対策ができているというのもLaravelの大きな魅力です。
終わりに
Laravelを使うと簡単かつ安全にWebアプリケーションを開発することができるということを体感していただけたのではないでしょうか。 今回は紹介することができませんでしたがこの他にも認証機能の実装や、データベースの操作も非常にスムーズに行うことができます。
まだまだLaravelには便利な機能がありますので、また機会がありましたらご紹介したいと思います。
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com