1. Fendo181

    No comment

    Fendo181
Changes in body
Source | HTML | Preview

この記事には以下の内容が含まれています。

  • Laravel HomesteadによるLaravel5.1の環境構築
  • 環境構築から一通りのLaravelの動作確認
  • local開発環境から実際に公開する迄の設定

開発環境

OS windows8.1 64bit
vagrant ver 1.81
Oracle VM VirtualBox バージョン 5.0.12
git ver 2.8.

既にvagrantとVMが導入されているのを前提で話を勧めます。

LaravelHomesteadtとは?

laravel-homestead1.png

Larabel Homesteadを理解するには公式からの謳い文句を見れば容易に理解できます。

Laravel Homestead(入植農地、「ホームステード」)はパッケージを事前に済ませた、Laravel公式の"box"で、PHPやHHVM、Webサーバー、その他のサーバーソフトウェアをローカルマシンにインストールする必要なく、素晴らしい開発環境を準備できます。オペレーティングシステムでごちゃごちゃになる心配はもうありません! Vagrantのboxは完全に使い捨てできます。何かの調子が悪くなれば壊して、数分のうちにそのboxを再生成できます!

今回はLaravel Homesteadを使いましたが、例えばcent os 6.xに1からComposerで導入する方法や、windowsにxamppを入れてからComposerを導入してからLaravel5を始める方法など、開発環境を用意する方法はLaravel Homesteadだけではないです。御自身の環境に合わせて最適なtoolを使って下さい。

Laravel Homesteadに含まれるソフトウェアは以下になります。

公式より(http://readouble.com/laravel/5/1/ja/homestead.html)
Ubuntu 14.04
PHP 5.6 / 7.0
HHVM
Nginx
MySQL
Postgres
Node (PM2とBower、Grunt、Gulpを含む)
Redis
Memcached (PHP 5.xのみ)
Beanstalkd
Laravel Envoy
Blackfire Profiler

実際に開発環境を立ち上げた際のphpのversionを調べた結果は以下になります。

php
PHP 7.0.3-13+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Xdebug v2.4.0RC4, Copyright (c) 2002-2016, by Derick Rethans
    with blackfire v1.9.2, https://blackfire.io, by Blackfireio Inc.

という事なので今現在のLaravel Homestead5.1を導入すればもれなくphp7の開発環境を整える事が可能です。

Laravel HomeSteadの導入

基本基本[公式]公式をみてそのまま、導入すれば大丈夫です。何かerrorが起きた場合も公式を振り返って下さい。http://readouble.com/laravel/5/1/ja/homestead.html)をみてそのまま、導入すれば大丈夫です。何かerrorが起きた場合も公式を振り返って下さい。

  • 1 vagrantにlaravel homestead boxを追加
vagrant box add laravel/homestead

  • 2 Homesteadリポジトリーをgit cloneしてくる。
git clone https://github.com/laravel/homestead.git Homestead
  • 3 cloneしてきたHomeSeadリポジトリーにint.shを生成
cd Homestead
bash init.sh

すでに~/.homesteadディレクトリーの中にHomestead.yamlファイルがあるなら、init.shスクリプトを実行する必要はありません。しかし、初めてコンピューターにHomesteadをインストールした場合には、新しいHomesteadディレクトリーでbash init.shを実行する必要があります。

細かい点を大分端折ってしまいましたが、以上で一通りの導入は可能となります。
1番目のboxを追加する部分に一番時間がかかった気がします。

設定について

次にHomestead.yamを設定しますが、以下のリンク先の方で詳細に書かれていますので、こちらを参考にして下さい。
Laravel Homesteadを使ってみよう!

Homstead.yamlファイルを探す。

  • ~/.homesteadディレクトリ直下にあります。もし、表示されなければ隠しフォルダの設定をいじって見てください。
cd ~/.homestead/
vim Homestead.yaml

Homestead.ymlの中身

---
//基本ここはデフォルトで大丈夫
ip: 192.168.00.00 //example
memory: 
cpus: 
provider: 

//公開鍵の場所
authorize: ~/.ssh/id_rsa.pub

//秘密鍵の場所
keys:
    - ~/.ssh/id_rsa

//C直下にlaravelのプロジェクトを作成した場合
folders:
    - map: C:/laravel_APP/Homestead/Code
      to: /home/vagrant/Code

//pubicディレクトリの設定
sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public

databases:
    - homestead


etc/hostにIPアドレスを追加

windowsユーザだとわかりにくいですが、hostファイルは:¥windows¥system32¥drivers¥etcにあります。hostファイルを編集する場合は管理者権限に変更してから書き換えて下さい。
hostファイルを開いた後にHomestead.ymlに記載されているipアドレスを以下の様に追加して下さい。

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost
    192.168.00.00   homestead.app  //追加

参考文献

Windows7でhostsファイルを書き換える

以上で一通りの設定は完了しました。
設定完了後はVagrantfileが置かれているディレクトリに移りvagrant upしましょう。

vagrant up

特に問題がなければURLにhttp://192.168.00.00/にアクセスするとLaravelの画像が表示され環境構築が完了しました。お疲れ様です。

Top.png

一応動作確認として~/pubulic/直下に

phpinfo.php
<?php

phpinfo();

?>

とファイルを作ってあげてhttp://192.168.00.00/phpinfo.phpでアクセスしてみてちゃんとphpの情報が出れば大丈夫です。php.png

公開する用の簡単なwebアプリケーション作成

公開するにあたって今回は簡単な簡易掲示板を作成してみます。workディレクトリを作成して、下にindex.phpを作成しましょう。

~/public/work/index.php

index.php
<?php

$dateFile = 'bbs.dat';

session_start(); 

function setToken(){
    $token = sha1(uniqid(mt_rand(),true));
    $_SESSION['token'] = $token;
}

function checkToken(){
    if(empty($_SESSION['token']) || ($_SESSION['token'] != $_POST['token'])){
        echo "不正なPOSTが行われました!";
        exit;
    }

}

function h($s){
    return htmlspecialchars($s,ENT_QUOTES,'UTF-8');

}

if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['message']) && isset($_POST['user'])){

    checkToken();

    $message = trim($_POST['message']);
    $user = trim($_POST['user']);


    if($message !== ''){

        $user = ($user === '') ?'名無しのAさん' :$user;

        $message =str_replace("\t", ' ',$message);
        $user =str_replace("\t", ' ',$user);
        $postesAt=date('Y-m-d H:i:s');


        $newDate = $message ."\t".$user."\t".$postesAt."\n";


        $fp =fopen($dateFile,'a');
        fwrite($fp,$newDate);
        fclose($fp);
    }
} else{
    setToken();
}

$posts=file($dateFile,FILE_IGNORE_NEW_LINES);

$posts = array_reverse($posts);

?>



    <!DOCTYPE html>
    <html lang="ja">

    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <!-- Bootstrap -->
        <link rel="stylesheet" media="screen" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css">
        <title>簡易掲示板</title>
    </head>

    <body>
        <div class="container">
            <h1>簡易掲示板</h1>
            <form action="" method="post">
                message:
                <input type="text" name="message"> user :
                <input type="text" name="user">
                <input type="submit" value="投稿">
                <input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>" >
                <h4>userに何も入力が無ければ「名無しのAさん」で投稿されます。</h4>

            </form>
            <h2>投稿一覧 (<?php echo count($posts); ?>件)</h2>
            <ul>
                <?php if (count($posts)) : ?>
                    <?php foreach ($posts as $post) :?>
                       <?php list($message,$user,$postesAt)=explode("\t",$post); ?>

                       <li><?php echo h($message); ?> <?php echo h($user); ?>-<?php echo h($postesAt); ?></li>

                    <?php endforeach; ?>

                <?php else : ?>
                    <li>投稿はまだありません</li>
                <?php endif; ?>
            </ul>
        </div>


    </body>

    </html>

後は書き込み用のbbs.datを生成します。ディレクトリ構造は以下の様になります。

vagrant@homestead:~/Code/Laravel/public$ tree
├── phpinfo.php
└── work
    ├── bbs.dat
    └── index.php


上手くいけば192.168.00.00/work/index.phpにアクセスする事で下の画面が表示されます。

bbs.png

以上で簡単なwebアプリケーションを作成する事ができました。
次はこれを実際にレンタルサーバを借りて公開しましょう。

作成したwebアプリケーションを公開する

今回レンタルサーバを借りて公開しましたが、すぐに公開したいって方にはHerokuでデプロイしても十分可能です。

初心者でも15分で公開できるHerokuのはじめかた

Herokuで公開する場合、一定時間のアクセスがなければスリープしてしまう為、簡易掲示版の内容を書きこんだbbs.datの中身も全て消えてしまう点に注意して下さい。

Herokuへ定期的にアクセスしてスリープさせないアプリ「heroku patroller」を作りました。
HubotをHerokuのFree dynoに対応させる

レンタルサーバを借りる。

今回レンタルサーバを借りるにあたって、ロリポップ!を選択しました。
R0000000073.jpg

理由としては

  • 登録後10日間は無料で使える
  • 安定性がある
  • 管理画面が見やすい

等々ありますが、初心者である自分にとっても使いやすと思い選択しました。
今回はデータベースを使わないアプリケーションなので、一番安いエコノミープランでいいですが、MySQLと連携させたサービスを考えようとするとライトプラン以上になります。各自好きなプランを選んでドメインを取得して下さい。

詳細は以下のURLからご確認下さい。

ロリポップ!レンタルサーバプラン比較表

また現在ライトプランにおけるPHPのversionは以下になります。
rori_php.png

※ここから先は既にドメンを取得した前提で話を進めます。

.envの設定

LaravelHomesteadではデフォルトでPHP DotEnvがインストールされています。PHP DotEnvとは何かというと、通常vagrantやxamppでもそうですが、ローカル開発環境時の環境変数をそのままにした状態でいざ、実際の開発環境に持っていくと環境変数が全然あわない問題が発生します。しかもそれが1つのファイルだけだといいですが、複数あると一つ一つのファイルを書き直さないといけない上にバグも生みやすくなります。そこでPHP DotEnvを使う事で、どの環境でも共通の方法で環境変数を参照出来る事が可能になります。

実際に.envファイルを見てみるとわかりやすいです。

.env
APP_ENV=local
APP_DEBUG=true
APP_KEY=****
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=****
DB_PORT=***
DB_DATABASE=****
DB_USERNAME=****
DB_PASSWORD=****

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=***
REDIS_PASSWORD=***
REDIS_PORT=***

MAIL_DRIVER=smtp
MAIL_HOST=***
MAIL_PORT=***
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null


従って今回はローカル開発環境から公開用に設定するのは以下の2項目だけで十分となります。
APP_URLにはアカウント情報からロリポップ!のドメイン名を入力して下さい。

domain_name.png

.env(公開)
APP_ENV=staging /*localからstagingに変更*/
APP_URL=http://abcdef.test.jp/   /* ロリポップ!のドメイン名を入力*/

また今回はMySQLを使ったアプリケーションを紹介しておりませんが、MySQLも同様に御自身の環境に合わせてDB_以下の環境変数を合わせる事でデータベースにアクセスする事が可能となります。

注意
なお、本番環境でDocumentRootの下に.envを置くと、当然ブラウザからアクセスできてしまうので、.envだけ403 Forbiddenになるようにしておくか、DocumentRootの上に置くように設計しておいたほうがいいでしょう。

参考文献

コード改善に役立ちそうなPHPライブラリ・ツール
Laravel 5.0.dev 設定

FTP(公開サーバ)にファイルをコピーする。

ドメイン取得後公開サーバにアクセスします。ソフトウェアなんでもいいです。今回私はアヒルちゃんを使いました。アヒルちゃんをつかって公開サーバにアクセスする方法は以下を参照して下さい。

Cyberduckを使った設定方法をご説明します

コピーするファイルは以下になります。

vagrant@homestead:~/Code/Laravel$ tree -La 1
.
├── app
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── .env
├── .env.example
├── .gitattributes
├── .gitignore
├── gulpfile.js
├── package.json
├── phpunit.xml
├── Procfile
├── public
├── readme.md
├── resources
├── server.php
├── storage
├── tests
└── vendor

以上のファイルをFTPサーバ側にそのままコピーして下さい。
今回は一応わかりやすい様に、worksディレクトリの下にlaravelディレクトリを作りその下にコピーしました。

├── works
│   ├── laravel
        ├── app
        ├── artisan
        ├── bootstrap
        ├── composer.json
        ├── composer.lock
        ├── config
        ├── database
        ├── .env //.htaccesでアクセスしないように設定をして下さい!
        ├── .env.example //コピーしなくてもいい
        ├── .gitattributes  //コピーしなくてもいい
        ├── .gitignore //コピーしなくてもいい
        ├── gulpfile.js
        ├── package.json
        ├── phpunit.xml
        ├── Procfile
        ├── public
             ├── phpinfo.php
             ├── work
                  ├── index.php
                  ├── bbs.dat
        ├── readme.md
        ├── resources
        ├── server.php
        ├── storage
        ├── tests
        └── vendor



一応動作確認としてpublic直下に先ほど作ったphpinfo.phpにアクセスして結果を見てみましょう。
http://ドメイン名/works/laravel/public/phpinfo.php

もしphpのversionが正しく表示できない場合、管理者画面からphpのCGIの設定をいじってみて下さい。逆に正常に表示できればお疲れ様です。これで貴方が製作したwebアプリケーションが世界中の人に公開されました。

試しに
http://ドメイン名/works/laravel/public/work/index.phpにアクセスして先ほど作成した簡易掲示板が表示できている事を確認して下さい。

終わりに

ここまで来れば後はローカルの開発環境と同じようにpublic直下に簡単な練習用のwebアプリケーションを作ったり出来ますが、それだったらわざわざLaravelを導入した意味がありません!。今回はLaravelの機能をゴリゴリ活用したアプリケーションの紹介よりも、webアプリケーションを公開する方法を載せましたが、今後データベースを使った本格的なwebアプリケーションを作る際にはLaravelという素晴らしいフレームワークが大いに役たちます。その前準備としての紹介記事でした。

余談
この記事を書いた筆者は駆け出し中のプログラマーですので至らない部分が多々ありますし、分かりづらい部分が多いと思います..。なのでもし違っていたり、よく分からん!って方は遠慮なくコメントをお願いします。