Laravel5
個人的に注目しているPHPフレームワーク「Laravel」がバージョン5.0.0をリリースしました。
Laravel4は以前インストールしましたが、今回はサーバの用意からまるっとまとめてみます。
目標
サーバの立ち上げからLaravelのインストール、Hello Worldまで。
環境
サーバ
- Amazon EC2
ミドルウェア・モジュール
必要な情報は公式から
- PHP >= 5.4
- Mcrypt PHP Extension
- OpenSSL PHP Extension
- Mbstring PHP Extension
構築開始
サーバ立ち上げ
AWSコンソールに入ってサーバを立ち上げます。Launch Instanceから
あとは適宜サーバスペック等を設定。
といってもいじる所は特になく、Security Groupくらいでしょうか。
- SSHをMy IPに
- HTTPをフル解放
適当にpemファイルを設定して起動!
5分ほど待って…
Instance State が running に変わりました。起動完了ですね。
適当にInstanceに名前を付けておきますかね、”Laravel5″とかに。
サーバ設定
SSHログイン
サーバ立ち上げ時に作成あるいは設定したpemキーを使ってSSHログインします。
ついでにrootのパスワード設定まではやっておきましょう。
ssh -i /path/to/xxx.pem ec2-user@PublickDNS.ap-northeast-1.compute.amazonaws.com The authenticity of host 'PublickDNS.ap-northeast-1.compute.amazonaws.com (PublickIP)' can't be established. RSA key fingerprint is **:**:**.... Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'PublickDNS.ap-northeast-1.compute.amazonaws.com,PublickIP' (RSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|___|___| https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/ [ec2-user@ip-**-**-**-** ~]$sudo su - Last failed login: Thu Feb 5 04:34:11 UTC 2015 on pts/0 There was 1 failed login attempt since the last successful login. [root@ip-**-**-**-** ~]# passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@**-**-**-** ~]#
これでいいや。
ミドルウェアインストール
それではApache,PHPをインストールしましょう。
環境は以前のインストール時に触れた通りですが下記となります。
PHP5.4以上がapache2上及びコンソール上で動く環境
という事でまずはApache
//インストール済みソフトウェアのアップデート [root@ip-**-**-**-** ~]# yum update -y [root@ip-**-**-**-** ~]# yum install httpd [root@ip-**-**-**-** ~]# httpd -v Server version: Apache/2.2.29 (Unix) Server built: Sep 15 2014 19:41:41
次にPHP、ですが、今回はPHP5.5を入れます。
どこかしらで、Laravelの便利機能artisanコマンドが「PHP5.5以上でないと使えない」と読んだ気がするんですが、今その文献が見つけられず、勘違いっぽいですが一応5.5を入れます。
[root@ip-**-**-**-** ~]# yum install --enablerepo=remi --enablerepo=remi-php55 php php-devel php-mbstring php-mcrypt php-mysql ~~~~ Dependencies Resolved ================================================================================================================= Package Arch Version Repository Size ================================================================================================================= Installing: php x86_64 5.3.29-1.7.amzn1 amzn-main 2.8 M php-devel x86_64 5.3.29-1.7.amzn1 amzn-main 2.6 M php-mbstring x86_64 5.3.29-1.7.amzn1 amzn-main 2.3 M php-mcrypt x86_64 5.3.29-1.7.amzn1 amzn-main 53 k php-mysql x86_64 5.3.29-1.7.amzn1 amzn-main 178 k Installing for dependencies: mysql55-libs x86_64 5.5.40-1.3.amzn1 amzn-updates 813 k php-cli x86_64 5.3.29-1.7.amzn1 amzn-main 2.6 M php-common x86_64 5.3.29-1.7.amzn1 amzn-main 1.0 M php-pdo x86_64 5.3.29-1.7.amzn1 amzn-main 170 k Transaction Summary ================================================================================================================= Install 5 Packages (+4 Dependent packages) Total download size: 13 M Installed size: 38 M Is this ok [y/d/N]: N
--enablerepo=remi --enablerepo=remi-php55
としても、デフォルトのリポジトリ amzn-main
が指定され、PHPのバージョンが 5.3.29-1.7.amzn1 となっていますね。
もちろんこれではLaravelが動かないので、「N」でインストールを中止します。
リポジトリamzn-main を指定しないようにする --disablerepo=amzn-main
オプションを付けて再度実行
[root@ip-**-**-**-** ~]# yum install --enablerepo=remi --enablerepo=remi-php55 --disablerepo=amzn-main php php-devel php-mbstring php-mcrypt php-mysql ~~~~ Dependencies Resolved ================================================================================================================= Package Arch Version Repository Size ================================================================================================================= Installing: php x86_64 5.5.21-1.el6.remi remi-php55 2.6 M php-devel x86_64 5.5.21-1.el6.remi remi-php55 1.2 M php-mbstring x86_64 5.5.21-1.el6.remi remi-php55 961 k php-mcrypt x86_64 5.5.21-1.el6.remi remi-php55 43 k php-mysqlnd x86_64 5.5.21-1.el6.remi remi-php55 3.6 M Installing for dependencies: php-cli x86_64 5.5.21-1.el6.remi remi-php55 3.7 M php-common x86_64 5.5.21-1.el6.remi remi-php55 1.0 M php-pdo x86_64 5.5.21-1.el6.remi remi-php55 112 k php-pear noarch 1:1.9.5-3.el6.remi remi 375 k php-pecl-jsonc x86_64 1.3.6-1.el6.remi.5.5.1 remi-php55 47 k php-pecl-jsonc-devel x86_64 1.3.6-1.el6.remi.5.5.1 remi-php55 25 k php-pecl-zip x86_64 1.12.4-1.el6.remi.5.5 remi-php55 269 k php-process x86_64 5.5.21-1.el6.remi remi-php55 57 k php-xml x86_64 5.5.21-1.el6.remi remi-php55 208 k Transaction Summary ================================================================================================================= Install 5 Packages (+9 Dependent packages) Total download size: 14 M Installed size: 47 M Is this ok [y/d/N]:y
remiリポジトリから、PHP5.5を指定してインストールを行うようになりました。
[root@ip-**-**-**-** ~]# php -v PHP 5.5.21 (cli) (built: Jan 21 2015 15:35:14) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
これでPHPのインストールも完了です。
Laravelのインストール
まずはおなじみ Composer.phar のインストールです。
[root@ip-**-**-**-** ~]# curl -sS https://getcomposer.org/installer | php #!/usr/bin/env php All settings correct for using Composer Downloading... Composer successfully installed to: /root/composer.phar Use it: php composer.phar [root@ip-**-**-**-** ~]# mv composer.phar /usr/local/bin/composer
[ec2-user@ip-**-**-**-** ~]$ cd /var/www/ [ec2-user@ip-**-**-**-** www]$ composer create-project laravel/laravel --prefer-dist Installing laravel/laravel (v5.0.0) [ErrorException] mkdir(): Permission denied // 怒られた!>< [ec2-user@ip-**-**-**-** www]$ sudo chown -R ec2-user:ec2-user /var/www [ec2-user@ip-**-**-**-** www]$ composer create-project laravel/laravel --prefer-dist Installing laravel/laravel (v5.0.0) - Installing laravel/laravel (v5.0.0) Downloading: 100% Created project in /var/www/laravel Loading composer repositories with package information Installing dependencies (including require-dev) ~~~~ Application key [************************************] set successfully.
/var/www/
で実行したら、 /var/www/laravel/public
がドキュメントルートになった感じですね。
[ec2-user@ip-**-**-**-** www]$ sudo vi /etc/httpd/conf/httpd.conf // ドキュメントルートを書き換えて… DocumentRoot "/var/www/laravel/public" // .htaccessを有効かして…# AllowOverride None AllowOverride All // httpd起動! [ec2-user@ip-**-**-**-** www]$ sudo service httpd restart ec2-54-65-235-96_ap-northeast-1_compute_amazonaws_com
インストール完了!
必要最低限の設定しかしていないので、この設定のままだと問題はあると思いますけど。
触ってみる
Hello worldくらいまで触ってみます。
ルーティング
ルーティングファイルの場所が app/Http/routes.php
と変わってますね。
[ec2-user@ip-**-**-**-** www]$ vi laravel/app/Http/routes.php 'AuthAuthController', 'password' => 'AuthPasswordController', ]);
という事で、ルートを軽く付け足してみます。
Route::get('hello',function(){ return 'Hello world!'; });
artisan
Controllerを作成したり、マイグレーションを提供したりと、色々と便利機能の詰まった artisan
コマンドも見てみましょう。
// HogeControllerを作成 [ec2-user@ip-**-**-**-** laravel]$ php artisan make:controller HogeController Controller created successfully.
このコマンドを叩くと、Controllerクラス置き場の app/Http/Controllers/
の下に、 HogeController.php
が自動で作成されます。
中身は、空関数の集まりですが、データのCRUDに適した関数郡が設置されていて、
Route:: resource('hoge','HogeController');
上記ルーティングを app/Http/routes.php
に追記するだけで、/hoge
でアクセスした場合は index()
が動き、/hoge/create
でアクセスした場合は create()
が動き、/hoge
に POST でアクセスした場合は store()
が動くなど、
プログラムの大枠が提供されるようになっています。すてき。
View
LaravelはBladeというテンプレートエンジンを利用しています。
正規表現の置換でテンプレートをコンパイル?出力するから動作が高速だとかなんとか。
個人的にはデザインの共通化も簡単ですてきだと思います。
Viewの置かれるディレクトリは project/resources/views/
です。
先ほど /hoge/
にルートを設定したので、
[ec2-user@ip-**-**-**-** laravel]$ mkdir resources/views/hoge [ec2-user@ip-**-**-**-** laravel]$ vi resources/views/hoge/layouts.blade.php @yield('content') [ec2-user@ip-**-**-**-** laravel]$ vi resources/views/hoge/index.blade.php @extends('hoge.layouts') @section('content')Hello world
@stop
としてビューを作成します。
resources/views/hoge/index.blade.php
の @extends('hoge.layouts')
がベースのレイアウトとなる hoge/layouts.blade.php
のテンプレートを取得して、 hoge/layouts.blade.php
の @yield('content')
の位置に、
@section('content')Hello world
@stop
の中身を出力するって感じです。
BladeはPHPとしては独特な記法にはなってしまいますが、テンプレートの継承って思想が面白くて好きです。
で、コントローラで、先に作ったテンプレートを出力するように追記します。
class HogeController extends Controller { /** * Display a listing of the resource. * * @return Response */ public function index() { return view('hoge.index'); }
viewの作成も簡潔で分かり易くなってますね。
コニチワー!!
最も大事な事を忘れないように。。。
サーバは立ち上げっぱなしだとどんどんお金がかかります。
テストが終わったらしっかりSTOPに。
元記事はこちらです。
「Laravel5をイチからインストール!」