PHP Slim3フレームワークのサンプルアプリを作ろう（1. skeleton project）

# はじめに
PHP Slim3フレームワークの勉強のため、
Slim公式のユーザーガイドにある[skeleton project](https://github.com/slimphp/Slim-Skeleton)のサンプルアプリを作成します。


# 前提
下記記事で構築した環境を前提とします。

- Windows10にVagrantをを入れてCentOS7をインストールしよう([1](https://qiita.com/erik_t/items/d7f7abbf7deafa4c6fe4)、[2](https://qiita.com/erik_t/items/909efb63fd389f486ec3)、[3](https://qiita.com/erik_t/items/2e3c43cfe8731621b82d)、[4](https://qiita.com/erik_t/items/8d006b599815c8fbf38b)、[5](https://qiita.com/erik_t/items/9fbe7b5630b1f62893a1)、[6](https://qiita.com/erik_t/items/11f24633f4248e4f33f0)) 
- ローカルでLAMP環境を構築しよう（[0](https://qiita.com/erik_t/items/9c7c49db061a250cbc32)、[1](https://qiita.com/erik_t/items/e36235896b327f5cb461)、[2](https://qiita.com/erik_t/items/8dc3f2a5e8e8c9376e27)、[3](https://qiita.com/erik_t/items/617503557020a4a6ba82)、[4](https://qiita.com/erik_t/items/a898d0f547bff6b3d8ff)）
- [CentOS7にComposerをインストールしよう](https://qiita.com/erik_t/items/0b3492f38f6cd8605a4c)

# 使用ツール
- Tera Term

# PHP Slim3フレームワークとは？
PHPのマイクロフレームワークのひとつ。
必要最低限の機能のみを提供し、その分速度が出るようにデザインされた軽量なフレームワークで、
同時アクセス数が比較的多く見込まれる場合に使用されるケースが多いそうです。

# slim/slim-skeletonパッケージとは？
今回作成する[skeleton project](https://github.com/slimphp/Slim-Skeleton)のサンプルアプリは
slim/slim-skeletonパッケージを使用して作成します。
slim/slim-skeletonパッケージはプロジェクト構成のひな型です。


# 手順
[1. 専用のユーザーを作成](https://qiita.com/erik_t/items/23cc9df2154e80aa137e#1-%E5%B0%82%E7%94%A8%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E4%BD%9C%E6%88%90)
[2. プロジェクトディレクトリを作成](https://qiita.com/erik_t/items/23cc9df2154e80aa137e#2-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90)
[3. プロジェクトを作成](https://qiita.com/erik_t/items/23cc9df2154e80aa137e#3-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90)
[4. アプリケーションを動作させてみる](https://qiita.com/erik_t/items/23cc9df2154e80aa137e#4-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%8B%95%E4%BD%9C%E3%81%95%E3%81%9B%E3%81%A6%E3%81%BF%E3%82%8B
)

# やってみよう
## 1. 専用のユーザーを作成
Composerを`root`ユーザーで操作することは推奨されていないので、
以下のコマンドで`slimuser`というユーザーを作成します。

```
useradd slimuser
```
作成した`slimuser`に以下のコマンドで切り替えます。

```
su slimuser
```
## 2. プロジェクトディレクトリを作成
slimuserユーザーが作成されると
`/home/`ディレクトリ内に`slimuser`ディレクトリが作成されます。
その中に以下のプロジェクトディレクトリを作成します。

```
/home/slimuser/projects/slim/
```
## 3. プロジェクトを作成
上記で作成した`slim`ディレクトリまで移動します。

```
cd /home/slimuser/projects/slim/
```
以下のコマンドを実行します。
（補足：コメントで[@nunulk](https://qiita.com/nunulk)さんにアドバイスいただきました。
以下のコマンドだと、最新のバージョン（現在だとSlim4）のスケルトンがインストールされてしまうので、
Slim3のバージョンを指定したコマンドを実行してください）



```:最新スケルトン
composer create-project slim/slim-skeleton Slim-Skeleton
```

```:Slim3スケルトン
composer create-project "slim/slim-skeleton=~3.1" Slim-Skeleton
```


`Slim-Skeleton`ディレクトリが生成されました。

```
/home/slimuser/projects/slim/Slim-Skeleton
```
`Slim-Skeleton`ディレクトリ内には以下のようなファイル群が生成されます。

```
[slimuser@localhost Slim-Skeleton]$ ls -la
total 92
drwxrwxr-x  8 slimuser slimuser   232 May 29 07:04 .
drwxrwxr-x  4 slimuser slimuser    50 Jun  1 00:27 ..
-rw-rw-r--  1 slimuser slimuser   927 Jul 22  2019 composer.json
-rw-rw-r--  1 slimuser slimuser 68825 May 29 07:04 composer.lock
-rw-rw-r--  1 slimuser slimuser   583 Jul 22  2019 CONTRIBUTING.md
-rw-rw-r--  1 slimuser slimuser   343 Jul 22  2019 docker-compose.yml
-rw-rw-r--  1 slimuser slimuser    34 Jul 22  2019 .gitignore
drwxrwxr-x  2 slimuser slimuser    38 May 29 07:06 logs
-rw-rw-r--  1 slimuser slimuser   189 Jul 22  2019 phpunit.xml
drwxrwxr-x  2 slimuser slimuser    40 Jul 22  2019 public
-rw-rw-r--  1 slimuser slimuser  1249 Jul 22  2019 README.md
drwxrwxr-x  2 slimuser slimuser    90 Jul 22  2019 src
drwxrwxr-x  2 slimuser slimuser    25 Jul 22  2019 templates
drwxrwxr-x  3 slimuser slimuser    24 Jul 22  2019 tests
drwxrwxr-x 19 slimuser slimuser   279 May 29 07:04 vendor
```
## 4. アプリケーションを動作させてみる
今回は、PHPのビルトインWebサーバーを使用して表示します。
以下のコマンドを実行します。
`192.168.33.60`部分は各自の環境に置き換えてください。

```
php -S 192.168.33.60:8080 -t public public/index.php
```
下記が表示されたらブラウザで`http://192.168.33.60:8080`を開いてみてください。

```
[slimuser@localhost Slim-Skeleton]$ php -S 192.168.33.60:8080 -t public public/index.php
PHP 7.1.33 Development Server started at Fri May 29 10:02:43 2020
Listening on http://192.168.33.60:8080
Document root is /home/slimuser/projects/slim/Slim-Skeleton/public
Press Ctrl-C to quit.
```

このように大きくSlimとブラウザに表示されます。
![skeleton-project2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/e74f8a65-2ca5-47b8-ca35-c830cb6f6459.png)

`http://192.168.33.60:8080/cat`を開くと、"Hello cat!"と表示されます。
"cat"部分は好きな単語で大丈夫です。
![skeleton-project3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/19648fee-11d0-72d3-5f11-1411ee54ed8b.png)


### コマンドのオプションの解説
①-S 192.168.33.60:8080
ビルトインWEBサーバをこのURL（192.168.33.60:8080）で立ち上げるという意味です。
②-t public public/index.php
ドキュメントルートや読み込むファイルを指定します。

このオプションの使い方がわからず、apacheのDocumentRootに
プロジェクトを置こうとしたけど、rootユーザーじゃないと権限の問題で置けなくて、
どうすればいいかだいぶ途方に暮れていました。

PHPのビルトインWebサーバーではなく、apacheを使用する手順については、
PHP Slim3フレームワークのサンプルアプリをApacheで動かそう([1](https://qiita.com/erik_t/items/20e93326d66d943dcb36)、[2](https://qiita.com/erik_t/items/91addfbd9cb44676d281)、[3](https://qiita.com/erik_t/items/608ef6c060efc6162400))を参照してください。

# 参考サイト
[slimphp/Slim-Skeleton](https://github.com/slimphp/Slim-Skeleton)
[私家版 Slim Framework チュートリアル (1) 〜 特徴と準備編](https://qiita.com/nunulk/items/4b5c15f13ade660cafbc)
[PHP マイクロフレームワーク Slim インストール](http://kz-engineer-scrap.hatenablog.com/entry/2017/12/02/022454)
[PHPのマイクロフレームワーク「Slim」を使ってみたら本当にスリムだった話](https://www.cloudot.co.jp/3702/)
[PHPのSlimフレームワークを試してみる](https://simple-it-life.com/2016/10/02/slim/)

# 関連ページ
## Windows10にVagrantをを入れてCentOS7をインストールしよう
[1. VagrantインストールからVagrantfileを設置まで](https://qiita.com/erik_t/items/d7f7abbf7deafa4c6fe4)
[2. 仮想マシンの操作](https://qiita.com/erik_t/items/909efb63fd389f486ec3)
[3. WinSCP、Tera Termに秘密鍵でログイン ](https://qiita.com/erik_t/items/2e3c43cfe8731621b82d)
[4. WinSCP、Tera Termにrootユーザーでパスワードログイン](https://qiita.com/erik_t/items/8d006b599815c8fbf38b)
[5. zip/unzipをインストール](https://qiita.com/erik_t/items/9fbe7b5630b1f62893a1)
[6. Vagrantにて仮想環境を配布](https://qiita.com/erik_t/items/11f24633f4248e4f33f0)

## ローカルでLAMP環境を構築しよう
[0. 事前準備](https://qiita.com/erik_t/items/9c7c49db061a250cbc32)
[1. Apacheをインストール](https://qiita.com/erik_t/items/e36235896b327f5cb461)
[2. MySQLをインストール](https://qiita.com/erik_t/items/8dc3f2a5e8e8c9376e27)
[3. PHPをインストール](https://qiita.com/erik_t/items/617503557020a4a6ba82)
[4. ファイアウォールとか停止する](https://qiita.com/erik_t/items/a898d0f547bff6b3d8ff)

## Composerをインストール
[CentOS7にComposerをインストールしよう](https://qiita.com/erik_t/items/0b3492f38f6cd8605a4c)

## PHP Slim3フレームワークのサンプルアプリを作ろう
1．skeleton project
[2-1. First Application Walkthrough Getting Set Upまで](https://qiita.com/erik_t/items/9e9f6c93d2403ac90242)

## PHP Slim3フレームワークのサンプルアプリをApacheで動かそう
[1. VirtualHost使用](https://qiita.com/erik_t/items/20e93326d66d943dcb36)
[2. DocumentRoot使用](https://qiita.com/erik_t/items/91addfbd9cb44676d281)
[3. Alias使用](https://qiita.com/erik_t/items/608ef6c060efc6162400)