PHPローカル開発環境構築

## ローカル開発環境

これは、Mac上でPhpStormを使用したローカルPHP開発環境のセットアップ例です。できるだけ標準ツールのみを使用し、他に影響を与えないようにクリーンに整備することを重視しています。

ローカルで実行するので動作は高速です。開発中のアプリケーション切り替えを最小限にし、統合開発環境(IDE)でより快適で効率的なソフトウェア開発プロセスを体験する事を目指します。

* 特定バージョンのPHPをインストール
* XDebugのインストール
* データベースインストール
* PhpStorm
    * PHP 
    * XDebugのオンデマンドモードの設定
    * DBブラウザ(DataGrip)
    * Git
* ターミナルのプロファイル設定

### PHP

以下のコマンドで[shivammathur/php](https://github.com/shivammathur/homebrew-php)をタップ、PHPバージョンを指定してインストールします。PHP5.6から最新版までがインストール可能です。


```
brew tap shivammathur/php
brew install shivammathur/php/php@8.1
brew install shivammathur/php/php@8.2
```

### XDebug

peclでインストールします。PHP8.0以上か未満かでインストール方法が若干異なります。

[^path]:`$(brew --prefix)`でインテルとAppleシリコンのパスの違いを吸収しています。

#### PHP 8.0以上[^path]

利用可能な最新バージョンがインストールされます。

```
$(brew --prefix)/opt/php@8.1/bin/pecl install xdebug
```

#### PHP 5.6 & PHP 7.x

XDebugのバージョン指定が必要です。[^xdebugver]

```
$(brew --prefix)/opt/php@5.6/bin/pecl install xdebug-2.5.5
$(brew --prefix)/opt/php@7.0/bin/pecl install xdebug-2.7.2
$(brew --prefix)/opt/php@7.1/bin/pecl install xdebug-2.9.8
$(brew --prefix)/opt/php@7.2/bin/pecl install xdebug-3.1.6
$(brew --prefix)/opt/php@7.2/bin/pecl install xdebug-3.1.6
$(brew --prefix)/opt/php@7.3/bin/pecl install xdebug-3.1.6
$(brew --prefix)/opt/php@7.4/bin/pecl install xdebug-3.1.6
```

[^xdebugver]:最新番号はXDebugの[Supported Versions and Compatibility](https://xdebug.org/docs/compat)とPECLの[PHP::xdebug](https://pecl.php.net/package/xdebug)で確認してください。

## PECLパッケージ

その他PECLのパッケージのインストール例です。

[pcov](https://pecl.php.net/package/pcov), [apcu](https://pecl.php.net/package/apcu), [redis](https://pecl.php.net/package/redis), [xhprof](https://pecl.php.net/package/xhprof)

```
$(brew --prefix)/opt/php@8.2/bin/pecl install pcov
$(brew --prefix)/opt/php@8.2/bin/pecl install apcu
$(brew --prefix)/opt/php@8.2/bin/pecl install redis
$(brew --prefix)/opt/php@8.2/bin/pecl install xhprof
```

[memcached](https://pecl.php.net/package/memecachd)

```
brew install libmemcached

brew install pkg-config zlib
yes no | PHP_ZLIB_DIR=$(brew --prefix zlib) $(brew --prefix)/opt/php@8.2/bin/pecl install memcached
```

[imagick](https://pecl.php.net/package/imagick)

```
brew install imagemagick
yes no | $(brew --prefix)/opt/php@8.2/bin/pecl install imagick
```

### PECLインストールトラブルシューティング

```
fatal error: 'pcre2.h' file not found
#include "pcre2.h"
         ^~~~~~~~~
1 error generated.
```

上記のように`pcre2.h`などの`.h`の拡張子のヘッダーファイルが存在しないというエラーが発生した場合は、以下のようにパスを伝えてインストールします。

```
C_INCLUDE_PATH=/opt/homebrew/include pecl install pcov
```

あるいは下記のようにシンボリックリンクを張ります。

```
ln -s /opt/homebrew/opt/pcre2/include/pcre2.h /opt/homebrew/opt/php@8.2/include/php/ext/pcre/pcre2.h
```

また`memcache`の利用には`brew install libmemcached`でlibmemcachedのインストールが必要です。

# DB

dbgine をインストール
https://dbngin.com/

データベースを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940/9a72e57b-6078-5285-13b2-510a321d3b1a.png)

データベース用のターミナルをDBngineから開きます。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940/6624cb09-7611-2592-b944-274b24e0f4a1.png)


このようなexportコマンドと共に開きます。

```
export PATH=/Users/Shared/DBngin/mysql/5.7.23/bin:$PATH
```

前述のターミナルのPHPのexport分と組み合わせることができます。

```
export PATH="$(brew --prefix)/opt/php@8.1/bin/:PATH=/Users/Shared/DBngin/mysql/5.7.23/bin:$PATH"; php -v
```

接続を確認します。

```
mysql -uroot -h127.0.0.1 -P3306
```
## PhpStorm設定

### Xdebugをオンデマンドモードに

XdebugをXDebugを必要な時のみONにするオンデマンドモードの設定を行います。

まず、php.iniの場所を知るために`php --ini`コマンドを実行します。

```
php --ini

Configuration File (php.ini) Path: /opt/homebrew/etc/php/8.1
Loaded Configuration File:         /opt/homebrew/etc/php/8.1/php.ini
Scan for additional .ini files in: /opt/homebrew/etc/php/8.1/conf.d
Additional .ini files parsed:      /opt/homebrew/etc/php/8.1/conf.d/ext-opcache.ini
```

php.iniを編集して、xdebug.soの読み込みをコメントアウトしてXDebugを無効にします。これで普段はPHPはXDebugなしで実行されます。

```
;zend_extension="xdebug.so"
```

次にXDebugが必要なときに使用できるようにPhpStormで[PHPバージョンの指定とXdebugの構成](https://pleiades.io/help/phpstorm/configuring-xdebug.html#integrationWithProduct)を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940/40d003e1-1e39-2bc1-6468-72ae3a7de3ad.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940/0e704223-4f5a-711b-722b-eace33bda318.png)

PHP > Debug

<img width="1109" alt="image" src="https://user-images.githubusercontent.com/529021/225532862-17903d51-b73f-4d50-8856-6d9972f4171d.png">

Composerやコンソールで適宜XDebuOnにする時の使い方は[必要な時のみXDebugをOn](https://qiita.com/koriym/items/29f81514706a39e3b7c1)をご覧ください。

##### ターミナルのPHP

PhpStorm内で開いたターミナルはCLIインタープリターで設定したパスのPHPパスが通っています。確かめてみましょう。

```
 which php
/opt/homebrew/opt/php@8.1/bin/php
```

### DataGrip

データベースブラウズにはPhpStormに統合されている[DataGrip](https://www.jetbrains.com/ja-jp/datagrip/)を使います。[^datagrip]

[^datagrip]:PHPStormは[WebStorm](https://www.jetbrains.com/ja-jp/webstorm/) + DataGrip + PHPプラグインから構成されています。

`表示` > `ツールウインドウ` > `データベース`で開きます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940/9eb0300b-4c08-db09-f18e-4f9ef9a1e455.png" width="50%">


* [MySQLの接続](https://pleiades.io/help/phpstorm/mysql.html)を参照してDBに接続します。
* そのほかの使い方は[データベースツールおよびSQL](https://pleiades.io/help/phpstorm/relational-databases.html) を参照します。
* 他のDBブラウザを使う場合でも、データソースの設定を済ませておくとSQLのコーディングでテーブル名やカラム名の補完が効いて便利です。

### Gitクライント

`表示` > `ツールウインドウ` > `Git`で開きます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940/c9d44c67-c142-5b4d-dbe6-b170ffcaae12.png" width=50%>

Diffも使いやすく、1つのファイルでブロック単位にコミットする事もできます。詳しくは[Gitのマニュアル](https://pleiades.io/help/phpstorm/using-git-integration.html)を参照してください。GitHubとも統合[^github]されています。

[^github]:https://pleiades.io/help/idea/github.html

### PHPStorm補完ショートカットキー

PHPStormの「補完ショートカットキー」を使用可能するための設定をします。このショートカットキーは多用するのですが、Macの「言語変更ショートカットキー」とコンフリクトしていてどちらかの設定を変える必要があります。

* Macのショートカットキーを変えるなら`システム設定 > キーボード > キーボードショートカット > 入力ソース > 前の入力ソース`の`^スペース`を変更します。
* PHPStormのショートカットキーを変えるなら`メインメニュー > コード > コード補完 > 基本`の^Space`を変更します。

### Mac標準ターミナル

（PHPStormのターミナルだけで完結する場合はこのセクションの設定は必要ありません）

ターミナル > 環境設定 > プロファイル で[+]をクリックして特定のPHP環境のパスを有効にするプロファイルを作成します。

シェルタブのコマンドを実行に以下の記述をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940/a4ec3d53-c036-f1d4-036f-ca45d19eb6f9.png)

```
export PATH="$(brew --prefix)/opt/php@8.0/bin/:$PATH"; php -v
```

`ウインドウ`タブでタイトルを`PHP8.1`などと変えます。

ターミナルの新規ウインドウでプロファイルから指定するPHPを選んで開きます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940/bea8b731-a0fc-85b0-02dc-b241809fc349.png" width=75%>

### 設定完了、この次は？

* PHPStormが初めてならば[PHPStorm クイックスタートガイド](https://www.jetbrains.com/help/phpstorm/quick-start-guide-phpstorm.html)に目を通しましょう。
* [ショートカットキー一覧PDF](https://pleiades.io/sites/willbrains.jp/keymap/pdf/shortcut_intellij_mac.pdf)を参考にします。
* 役に立ちそうな[PHPStormプラグイン](https://plugins.jetbrains.com/phpstorm)を探しましょう。
  * [PHP アノテーション](https://plugins.jetbrains.com/plugin/7320-php-annotations)
  * [SQL Optimizer,​ Indexing Advisor](https://plugins.jetbrains.com/plugin/17399-sql-optimizer-indexing-advisor-mysql-postgresql-by-eversql)