日記

日々のことと、Python/Django/PHP/Laravel/nodejs などソフトウェア開発のことを書き綴ります

Laravel 5.1 入門記 その1(セットアップ編)

本業のお仕事に時間を取られて、なかなか取りかかれなかったけど、 Laravel 5.1 にこれから入門してみたいと思う。

とりあえず攻略本としては、これ

laravel.com

オフィシャルなドキュメントを元に粛々と基本的なことを試していくつもり。 自分用の備忘録なので、雑な感じなのは悪しからず。

ちょっとその前に

Laravel はいま一番流行っている PHP の Web アプリケーションフレームワークで、モダンな開発が出来るらしい。概要を読むと、ファサードがなんとか色々書かれて居るけど、PHPer じゃないので良く分からない/(^O^)\

まぁ、PHP は何となく読めるし、なんとかなるでしょ。なるはず!

あと入門記で、5.1 を選んだのは LTS を掲げられていたこと。2年くらいは開発を続け、3年間はセキュリティパッチを提供するよ、と書かれて居たから。プロダクションに投入する時には重要ですよね。

それではセットアップを行っていきます。

Setup

必須要件
  • PHP >= 5.5.9
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension

以上が必要らしい。 前回 Composer 入門時に使った vagrant仮想マシンを継続して使おう。

PHP の準備

と言うわけで、順々にパッケージをインストールしていく。

と思ったら、apache module を入れた時点で、色々なものが入ったらしい。 よって次のパッケージだけインストールした。

sudo apt-get install php-mysql

これで PDO も入ります。

MySQL の準備

MySQL サーバを準備します。今回は同じ仮想サーバにインスコ

sudo apt-get install mysql-server mysql-client

途中、MySQL の root パスワードを聞かれるので適当に設定。 続いて、 MySQL の設定ファイルを変更する。

sudo vi /etc/mysql/my.cnf

以下を追加。(それぞれのセクションに追記なので注意)

[client]
default-character-set = utf8

[mysqld]
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

設定出来たら、MySQL を再起動

$ sudo service mysql restart

続いて、MySQL に新しいデータベースを作成

$ sudo mysql -u root -p 

MySQL のコンソールにログインし

mysql> create database laravel character set utf8 collate utf8_general_ci;

今回は root でアプリケーションからもログインするので、これで MySQL の準備は完了。

Laravel の準備

ドキュメントによると、 Via Laravel InstallerVia Composer Create-Project の二つのやり方が書かれていた。むつかしい…。

Composer に入門したばかりなので、まずは Via Composer Create-Project というやり方を試したいと思う。

global 環境に Composer をインストールしているわけではないので、昨日と同じディレクトリで実行する。composer.phar が無かったら、昨日の Composer の入門記事

tnamao.hatenablog.com

を見てください。 さて、ドキュメントにならって Composer を実行します。

./composer.phar create-project laravel/laravel --prefer-dist

実行には暫くかかります。待っていると…

The following exception is caused by a lack of memory and not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details
PHP Fatal error:  Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///home/vagrant/php/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:974

メ、メモリが足りなーい!/(^O^)\

仕方が無いので、仮想マシンからログアウトして

$ vagrant halt

そしてメモリの割り当てを変更する。

$ vi Vagrantfile

46 行目から 52 行目を書き換える。元は 1024MB の割り当てだったようだ。

  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM: 
      vb.memory = "2048"
  end 

そして、 仮想マシンを起動してログイン

$ vagrant up
$ vagrant ssh

そして、再度 composer create-project を実行する

$ cd php
$ ./composer.phar create-project laravel/laravel --prefer-dist

今度こそ出来たー! なんかよく分からないけど、以下のような出力がされていた。

Writing lock file
Generating autoload files
> php artisan clear-compiled
> php artisan optimize
Generating optimized class loader
> php artisan key:generate
Application key [irZBf7sdXE9BAu2PVBeQnJxqlHpke90i] set successfully.

ls してみると laravel というディレクトリが出来ていて、中を見ると…

$ ls laravel/
app      bootstrap      composer.lock  database     package.json  phpunit.xml  readme.md  server.php  tests
artisan  composer.json  config         gulpfile.js  phpspec.yml   public       resources  storage     vendor

色々できていた。

Configuration

Installation - Laravel - The PHP Framework For Web Artisans

config ディレクトリに何やら設定ファイルが入っていると書かれている。 順々に見ていきます。

Directory Permissions

storage と bootstrap/cache に write パーミッションを設定しないといけないらしい。 では実施します。

$ cd laravel
$ chmod 777 storage
$ find ./storage -type d -exec chmod 777 {} \;
$ chmod 777 ./bootstrap/cache/
$ chmod 666 ./bootstrap/cache/services.json 

ファイルを調べていて気がついたのだが、 create-project を行った時には、.gitignore ファイルまで作るのね…。

Application Key

Composer Create-Project か Laravel Installer を使った場合は、既に作られてるよ。とのこと。

あー、さっきの

> php artisan key:generate
Application key [irZBf7sdXE9BAu2PVBeQnJxqlHpke90i] set successfully.

これか。 そして生成されたキーは .env に書き出されていると。

$ cat .env
APP_ENV=local
APP_DEBUG=true
APP_KEY=irZBf7sdXE9BAu2PVBeQnJxqlHpke90i

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

確かに入ってた。

If the application key is not set, your user sessions and other encrypted data will not be secure!

セッションデータの暗号化に使っているらしい。 さっきの .env を見るとメッセージキューを使う処理もデフォルトサポートなのかな。少し楽しみ。

Additional Configuration

Laravel はあまり設定することが無いけど、 config/app.php は見ておいたほうが良いらしい。中でも timezone と locale は自分のアプリケーションに合わせて設定してねとのこと。 timezone は Asia/Tokyo 、locale は ja にしておいた。

Pretty URLs

なんのこっちゃ、というセクションだけど、URL設定方法が書かれていた。 Apache であれば、 laravel/public ディレクトリに .htaccess は設置済みなので公開設定するだけ nginx であれば、以下の設定のみらしい。

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

ん?あれ? php-fpm とか無くて動くのか…? まぁ、とりあえず動かすのは Apache なのでスルーします。

Vagrant のポートフォワード設定を忘れていたので SSH はログアウトします。

$ vagrant halt
$ vi Vagrantfile

25行目付近のコメントアウトを外します。

config.vm.network "forwarded_port", guest: 80, host: 8080

これを戻したら、再び vagrant up して、ホストマシン上のブラウザで http://localhost:8080/ にアクセスすると、Laravel 5 のロゴが見えました!\(^o^)/

意外と時間が掛かるので、今回はここで一区切り。 次は Environment Configuration から。

追記

セットアップ以降も色々書いてます。

Laravel 入門記の記事一覧は こちらから