[忙しい人向け] PHPフレームワークSlimを使ったアプリをHerokuで公開してみる


## まえがき
昨年春に[Heroku](https://id.heroku.com/login)でPHPの本格サポートが始まり、もうすぐ一年が経過しようとしています。
出遅れた感がかなりありますが、Slimフレームワークを使ったアプリをHerokuで公開するまでの流れを、簡単にまとめてみました。

![heroku.png](https://qiita-image-store.s3.amazonaws.com/0/57284/9bf437a7-fc12-cbad-4198-91a71f2399f0.png "heroku.png")

## こんな人向け

* 何かしらのフレームワークでアプリケーションを作ったことがある
* PHPでフレームワーク使って何かアプリを作ってみたい
* どうせならローカルでないところで動かしたい
* Herokuってよく聞くけど、何それおいしいの？

※なお、Slim自体の解説はあまりしてませんm(__)m

## 作るもの
よくあるHello World!を表示します。

![skitch.png](https://qiita-image-store.s3.amazonaws.com/0/57284/0085a492-85c5-48c1-ef31-9ed93e949776.png "skitch.png")



## 動作環境
Yosemiteなmacでしか動作確認してないです。
Linuxでもいけるはず。

## 超忙しい人はこれやればおｋ

前提条件が整っていれば、2分くらいで幸せになれます。
ゆっくり進む人はこの節はスルーしてください。

### 前提条件
* gitコマンドがインストールされている
* heroku周りの↓設定が済んでいる
    * アカウントがある
    * herokuコマンドがインストールされている
    * SSH鍵が設定されている

### 実際にやってみる
↓をターミナルにコピペすればおｋです。

```
# 作業ディレクトリの名前を、適当に設定してください
# ここでは"sample"としてみます
DIR="sample"

# ひな形をclone
git clone git@github.com:tatsuya-yokoyama/slimSample.git ${DIR}

# ディレクトリ移動
cd ${DIR}

# herokuにappを作成
# それと同時にremoteにherokuの追加もしてます
heroku create

# herokuにpush
git push heroku master

# 勝手にブラウザを立ち上げてherokuのappのurlにアクセス
heroku open

# ブラウザを見て幸せになる＼(^o^)／
```

## 超忙しいわけではない人は、これやればおｋ

### 1.準備
#### gitコマンドのインストール
インストールされてない人はgoogle先生に聞いてくださいm(__)m

#### heroku周りの設定
↓サイトを参考にSSH鍵の設定まで終えてくださいm(__)m
[初心者でも15分で公開できるHerokuのはじめかた](http://developers.mobage.jp/blog/how-to-use-for-beginners-heroku)

### 2.作ってみる
github上にcloneして動かすだけのテンプレを用意しました。
流れとしてはgit cloneしてそれをheroku上で動かします。
herokuで動かす前にビルトインサーバーでも動作確認も紹介します。
ソースコードの解説は、現状ほとんどしてません。

```
# 作業ディレクトリの名前を、適当に設定してください
# ここでは"sample"としてみます
DIR="sample"

# ひな形をclone
git clone git@github.com:tatsuya-yokoyama/slimSample.git ${DIR}
```

clone先のディレクトリに移動してls打ってみると、
こんな感じになっているかと思います。

```
yokoyama@Boson:~/php/sample (master)$ ls -ltr
total 2096
drwxr-xr-x  6 yokoyama  staff      204  1 19 23:10 vendor
drwxr-xr-x  4 yokoyama  staff      136  1 19 23:10 templates
drwxr-xr-x  4 yokoyama  staff      136  1 19 23:10 lib
drwxr-xr-x  5 yokoyama  staff      170  1 19 23:10 htdocs
-rw-r--r--  1 yokoyama  staff       58  1 19 23:10 config.php
-rwxr-xr-x  1 yokoyama  staff  1048676  1 19 23:10 composer.phar
-rw-r--r--  1 yokoyama  staff     7863  1 19 23:10 composer.lock
-rw-r--r--  1 yokoyama  staff      157  1 19 23:10 composer.json
-rw-r--r--  1 yokoyama  staff       43  1 19 23:10 Procfile
```

それぞれ少し解説してみます。

* vendor
    * composerでインストールされるライブラリファイル 
* templates
    * テンプレートエンジン[Twig](http://twig.sensiolabs.org/)使ってます
    * Twitter社が提供しているCSSフレームワーク[Bootstrap](http://getbootstrap.com/)使ってます
    * lib/Controller配下と同じ構成でテンプレファイルを追加していくことを推奨です

* lib
    * 新しいページを足す時、サーバーサイドは主にここをいじります
* htdocs
    * ここがドキュメントルートです。index.phpとかcssとかおいてあります。
* composer.*
    * パッケージを管理するcomposerまわりの設定です。とりあえずあまり気にしなくてよいです。

* Procfile
ドキュメントルートを定義しています。今回は↓にあるように、htdocsをドキュメントルートに設定しています。
その前のapacheうんたらは、WEBサーバーの設定で、現状は気にしなくてよいです。Nginxを使うこともできます(らしい)

```php:Procfile
web: vendor/bin/heroku-php-apache2 htdocs/
```

### 3.ビルトインサーバーでアクセスしてみる
PHPでは組み込みでWEBサーバーが入っているので、
↓のように実行した後に、ブラウザで[ここ](http://127.0.0.1:8080)にアクセスすると見れます。
なお、phpコマンドを実行したコンソールをcmd+cなどで中断すると、
見れなくなります。
イチイチherokuにpushして動作確認してると、
開発効率悪いので、開発時はこの方法で挙動を確認するのがよさそうです。

```
cd htdocs
php -S 127.0.0.1:8080
```

### 4.Herokuでアクセスしてみる
あとは、Herokuに突っ込んだらおｋです。

```
# 作業ディレクトリに移動
cd ${DIR}

# herokuにappを作成
# それと同時にremoteにherokuの追加もしてます
# git config -l | grep remote
# とか打ってremoteの確認をしてみるとよいかも
heroku create

# herokuにpush
# originではなくてherokuです
git push heroku master

# 勝手にブラウザを立ち上げて
# herokuのappのurlにアクセスするコマンドです
heroku open

# ブラウザを見て幸せになる＼(^o^)／
```
### 5.色々追加してみる
あとは、皆さんの好きなようによしなに修正お願いします。
google先生に聞きつつ、修正したらgit push heroku masterすればおｋです。
需要あれば、何か解説記事追加します。


## 参考サイト
* [clone元のgithub](https://github.com/tatsuya-yokoyama/slimSample)
* [初心者でも15分で公開できるHerokuのはじめかた](http://developers.mobage.jp/blog/how-to-use-for-beginners-heroku)
* [簡単！３分でGithub上のレポジトリをherokuにpushする方法](http://dqn.sakusakutto.jp/2012/04/github-heroku-push.html)
* [Webアプリエンジニア養成読本のサンプルアプリ](https://github.com/uzulla/Tinitter)