こんにちは、cloudpack小谷松 です。

Laravel5

Laravel5 をイチからインストール!: 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から
Laravel5 をイチからインストール!:  Amazon EC2 でサーバーを立ち上げる (1)

Amazon Linux AMIでいきましょう。
Laravel5 をイチからインストール!:  Amazon EC2 でサーバーを立ち上げる (2)

あとは適宜サーバスペック等を設定。
といってもいじる所は特になく、Security Groupくらいでしょうか。
Laravel5 をイチからインストール!:  Amazon EC2 でサーバーを立ち上げる (3)

  • SSHをMy IPに
  • HTTPをフル解放

適当にpemファイルを設定して起動!
5分ほど待って…
Laravel5 をイチからインストール!:  Amazon EC2 でサーバーを立ち上げる (4)
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

Laravel5 をイチからインストール!:  Laravel5インストール完了
インストール完了!
必要最低限の設定しかしていないので、この設定のままだと問題はあると思いますけど。

触ってみる

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!';
});

Laravel5 をイチからインストール!:  Laravel5で Hallo 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の作成も簡潔で分かり易くなってますね。

以上でルート、コントローラ、ビューが全て設定完了しました。
Laravel5 をイチからインストール!:  Laravel5 view を利用して Hallo world! を表示

コニチワー!!

最も大事な事を忘れないように。。。
Laravel5 をイチからインストール!: Amazon EC2 サーバーの停止
サーバは立ち上げっぱなしだとどんどんお金がかかります。
テストが終わったらしっかりSTOPに。

元記事はこちらです。
Laravel5をイチからインストール!