MacにCakePHPを入れたい

MacでCakePHPを使ったWebアプリ開発をしたいので手順を調査
スーパーしょしんしゃなので当たり前のこともいちいちメモしています

# 環境状況
- Mac OS Catalina 10.15.2
- HomebrewでPHP, composer, Apacheをインストール済み
    - PHP7.3


# 調べてわかったこと
- CakePHPは依存性管理ツールcomposerを使ってインストールする（公式より）
- MacでCakePHPのインストールをすると「**intl**がない」と言われがち
    - 今はHomebrewでintlをインストールはできないので`brew install intl`が書いてあったらスルー[^1]
- **mbstring**と**simplexml**はHomebrewでインストールしたPHPなら初めから入ってそう（[参考 - Qiita](https://qiita.com/saken649/items/1a1d5083cb30c2b55f58)）

# 必要なもの
[公式](https://book.cakephp.org/3/ja/installation.html)より

- HTTP サーバー（Apache）
- PHP 5.6 以上 (PHP 7.4 も含む)
- mbstring PHP 拡張
- intl PHP 拡張　← 実際いなかったのでインストールした
- simplexml PHP 拡張

## intlのインストール

[【pecl?brew?】MacのPHPのintlインストール方法 | Suwaru](https://suwaru.tokyo/%E3%80%90peclbrew%E3%80%91mac%E3%81%AEphp%E3%81%AEintl%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95/)

0. `$ php -m | grep intl` → ない
1. PATHが通っているか確認 → 通ってなかった（`$ which php` → `/usr/bin/php`）
2. PATHを通す（`$ export PATH=/usr/local/bin:$PATH`）
3. Terminalを開き直す ※やってない
4. PHPを上書きで設定し直す（`$ brew link --force php@7.3`）
5. 確認 ↓

```terminal
$ which php
/usr/local/bin/php

$ php -m | grep intl
intl
```
出ました～

### 「PATHを通す」について
PATHを通すの意味がよくわかっていなかったけど、
**コマンド検索パス(コマンドサーチパス)[^2]を追加すること**らしい
`$ which ○○`で○○コマンドの実行ファイルがどこに格納されているのか確認できる
（[参考 - Qiita](https://qiita.com/soarflat/items/09be6ab9cd91d366bf71)）
PATHの通し方については以下参照
[macでPATHを通す方法 | Qiita](https://qiita.com/k3ntar0/items/eb8cdbd8eba9da388def)


# 手順
## 公式のやり方
一旦整理
バージョンはCakePHP3.8

[クイックスタートガイド](https://book.cakephp.org/3/ja/quickstart.html)
[インストール](https://book.cakephp.org/3/ja/installation.html)
※内容はほぼ一緒

### 1. PHPのバージョンを確認
```terminal
$ php -v
```
PHP 5.6 (CLI) 以上がインストールされていることを確認

### 2. Composerのインストール
[公式](https://getcomposer.org/download/)だとMacでのインストール方法がよくわからなかったので、**Macのやり方**で調べて頻繁に見かけたものを記載
→ 公式のやつでもできそう？（[参考 - Awesome Blog](https://awesome-linus.com/2019/02/26/composer-install/)）

```terminal
$ # curlコマンドでComposerインストーラを取得
$ # インストーラをPHPで実行
$ curl -sS https://getcomposer.org/installer | php

$ # composerコマンドとして利用できるようにするためにフォルダ移動
$ mv composer.phar /usr/local/bin/composer

$ # ターミナルを再起動

$ # きちんとできているか確認
$ which composer
$ composer -V
```
※Homebrewでインストール（`brew install composer`）した場合、PATHを通すのは勝手にやってくれてるっぽい

#### ☆ curlコマンド
HTTPアクセスをしてコンテンツを取得できるコマンド
Linuxに入っている`wget`コマンドのMac版
（[参考 - hydroculのメモ](https://hydrocul.github.io/wiki/commands/curl.html)）

#### ☆ -sSオプション
ダウンロードの進捗状況は表示させないが、エラーがあればメッセージを表示する
（[参考 - とあるプログラマの資産形成ブログ](https://evisu0414.com/engineer/engineer007/)）

### 3. CakePHPプロジェクト作成
CakePHPの新しいアプリケーションを作成
プロジェクトを作成したい場所で以下のコマンドを実行

```terminal
$ php composer.phar create-project --prefer-dist cakephp/app:3.8 プロジェクト名

$ # Composerにパスが通ってる（コマンドとして使えるようにしてある）場合は以下でも可能
$ composer self-update && composer create-project --prefer-dist cakephp/app:3.8 プロジェクト名
```
`$ composer 〜`の方で実行
<details><summary>実行結果（折り畳み）</summary><div>

```terminal
You are already using composer version 1.9.2 (stable channel).

Installing cakephp/app (3.8.0)
  - Installing cakephp/app (3.8.0): Downloading (100%)         
Created project in my_app_name
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 78 installs, 0 updates, 0 removals
$ # 以下略
```
</div></details>

> 一度 Composer がアプリケーションの雛形とコアライブラリーをダウンロードしたら、 インストールした CakePHP アプリケーションを Composer から操作できるように しておくべきです。 必ず composer.json と composer.lock ファイルは残しておきましょう。

だそうです
はて

### 4. インストールの確認（サーバ接続）

#### 開発用サーバの場合
デフォルトホームページを確認してインストールが正しいことを確かめるために、開発用サーバーを起動する

```terminal
$ # （3.で作成したプロジェクト）
$ cd /path/to/our/app　

$ bin/cake server
```
<details><summary>実行結果（折り畳み）</summary><div>

```terminal
Welcome to CakePHP v3.8.8 Console
---------------------------------------------------------------
App : src
Path: /Users/ユーザ名/my_app_name/src/
DocumentRoot: /Users/ユーザ名/my_app_name/webroot
Ini Path: 
---------------------------------------------------------------
built-in server is running in http://localhost:8765/
You can exit with `CTRL-C`
[Thu Jan 23 23:22:18 2020] [::1]:49580 [200]: /css/base.css
[Thu Jan 23 23:22:18 2020] [::1]:49582 [200]: /css/style.css
[Thu Jan 23 23:22:18 2020] [::1]:49583 [200]: /css/home.css
[Thu Jan 23 23:22:19 2020] [::1]:49585 [200]: /img/cake.logo.svg
[Thu Jan 23 23:22:19 2020] [::1]:49587 [200]: /font/cakedingbats-webfont.woff2
[Thu Jan 23 23:22:20 2020] [::1]:49594 [200]: /favicon.ico
```
</div></details>


→ http://localhost:8765/ にアクセス[^4]

（追記）
`$ cd /path/to/our/app`やったら、「そんなものはない」と言われたので、
後述のように作成したプロジェクトに移動しました

#### 公開用サーバの場合
**http://www.example.com**でアクセスできるようにする
→ Apacheでやる場合は**`DocumentRoot`を変更する権限**が必要になる（かも）

インストール時に指定したフォルダは以下のような構成になる

```terminal
/my_app_name/
    bin/
    config/
    logs/
    plugins/
    src/
    tests/
    tmp/
    vendor/
    webroot/ ←←← DocumentRootになるやつ
    .gitignore
    .htaccess
    .travis.yml
    composer.json
    index.php
    phpunit.xml.dist
    README.md
```
Apacheを利用している場合は以下のように指定
`$ DocumentRoot /my_app_name/webroot`
→ Webサーバが正しく設定されていれば  http://www.example.com からCakePHPアプリケーションにアクセスできる

※[開発用サーバ](#開発用サーバの場合)の`$ bin/cake server`実行結果で
> DocumentRoot: /Users/ユーザ名/my_app_name/webroot

とあるので、開発用サーバを既に動かしていたらDocumentRootの指定いらない？

### 5. mod_rewriteの設定
リンク切れを解消するために設定する
必須なのかがよくわからない
難しかったので自分がぶち当たるまでは放置


## その他調べて出てきた方法

### ■ 起動の確認方法
```terminal
$ # 起動の確認（別ターミナルで行う）
$ curl -I  http://localhost:8765/

$ # ポート番号の確認（別ターミナルで行う）
$ lsof -i:8765
```
終了は`Ctrl+ C`
（[参考 - Qiita](https://qiita.com/yukibe/items/9e0553e3de06cad25370)）

# うまくいったら
データベース接続に進む
→ [進んだ](https://qiita.com/nanatsu/items/eec31c62617a48cbdff2)


[^1]: PHP関連のformulaeが大幅に変更されて、"homebrew/php"がなくなったかららしい
[^2]: シェルがコマンド実行ファイルを探しに行くパス
[^3]: プロジェクトの名前。適宜変更させる
[^4]: CakePHPのポート番号は"8765"