PHPを学ぶときに確認すること


この記事の内容は2016年9月現在のものです。

[新しい言語を学ぶときに確認すること](http://qiita.com/magnolia_k_/items/dd41fef72b74c170e665)にインスパイヤされて。

* [Perlを学ぶときに確認すること - Qiita](http://qiita.com/magnolia_k_/items/adec6f9cab63756d91fe)

## セットアップ方法

### バージョンについて

2016年9月現在のPHPの現行安定版は7.0系。学習用途および新しいプロジェクトを開始するときには**7系の最新版を利用すること**。古い保守版として5.6系があるが、こちらは既存のプロジェクトが7系対応してない場合に選ぶこと。

### macOS(OS X)

```sh
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php

# PHP 7.0 (Apache抜き・phpdbg入り)
brew install php70 --with-phpdbg --without-apache
# よく利用されるモジュール
brew install php70-intl php70-ast
# デバッグ用 (任意)
brew install php70-xdebug php70-timecop
```

### APT(Debian GNU/Linux, Ubuntu)

UbuntuはXenial(16.04LTS)以降、Debianは次期版(Stretch, 2017年頃リリース?)以降でPHP7が標準インストールされる。

```sh
sudo apt install php php-intl php-xdebug php-ast php-readline
```

### Yum(CentOS, Fedoraなど)

[簡単！CentOS 7.1にPHP7.0をさくっとyum installする方法 · DQNEO起業日記](http://dqn.sakusakutto.jp/2015/12/centos7_yum_install_php70.html)を参照のこと。

### Windows

公式の実行バイナリ配布は[PHP For Windows](http://windows.php.net/download/)にある。また、[XAMPP](https://www.apachefriends.org/jp/index.html)といふ統合パッケージもある。

しかし現実のPHPサービスはもっぱらLinuxやFreeBSDなどのUNIX系のOSで動作するので、WindowsにXAMPPでがんばるよりもVagrantを使ってLinuxを動かした方が良い。

### [Vagrant](https://www.vagrantup.com/) + [VirtualBox](https://www.virtualbox.org/)

開発用の仮想環境を作る。WindowsやMacのマシンでもLinuxが動かせる。

* [rlerdorf/php7dev: Documentation for the php7dev Vagrant box image](https://github.com/rlerdorf/php7dev)
* [Laravel Homestead](https://laravel.com/docs/5.3/homestead)
	* [Laravel Homesteadを使ってみよう！ - Qiita](http://qiita.com/syossan27/items/0104615e5f9ae26f0720)
	* [Windows10でLaravel Homestead環境構築 - Qiita](http://qiita.com/ricoirico/items/9745160bcf9983fa30ad#_reference-276cb57227a68049a712)

### [phpbrew](https://github.com/phpbrew/phpbrew)

[phpbrew/phpbrew #INSTALL](https://github.com/phpbrew/phpbrew#install)に従って`phpbrew`コマンドをインストール。

```sh
phpbrew install 7.0 +default +intl
```

### [madumlao/phpenv](https://github.com/madumlao/phpenv) + [php-build](https://github.com/php-build/php-build)

[anyenv + phpenv + php-build が便利すぎる件](http://www.slideshare.net/y-uti/anyenv-phpenv-phpbuild)を参照。[riywo/anyenv: all in one for **env](https://github.com/riywo/anyenv)でまとめて導入できる。

## パッケージ（ライブラリ）マネージャーの使用方法

PHP標準添付のPEARとコミュニティベースの[Composer](https://getcomposer.org/)がある。

### Composer

[Introduction - Composer](https://getcomposer.org/doc/00-intro.md)に従ってインストール。[Packagist](https://packagist.org/)でパッケージの検索。

`composer require xxxxx/yyyyy`でプロジェクト内に依存パッケージのインストール。`composer global require xxxxx/yyyyy`でプロジェクトに依存しないインストール。

### Packagist.jp

packagist.orgのミラーサイトである[Packagist.JP](http://packagist.jp/)を利用することで、日本からではComposerが遅い問題を緩和できる。詳しくは@Hirakuの[光遅い問題を克服してcomposerを10倍速くした話 - Mercari Engineering Blog](http://tech.mercari.com/entry/2016/02/01/164829)を参照。

### PEAR

[PEAR](http://pear.php.net/)はPHP標準のリポジトリ/パッケージ管理ツールだが、現在はほとんど利用されない。

## REPL(対話シェル)

現在は[PsySH](http://psysh.org/)が主流。

インストール方法などは[PHPを「シェル化」する [psy/psysh] - 超PHPerになろう](http://cho-phper.hateblo.jp/entry/2015/11/10/031000)に書いた。

## Webサーバー

伝統的にはApacheにインストールする方法が利用されてきた。

しかしローカルマシンで開発する際などにはわざわざApacheのようなサーバーをインストール／設定する必要はなく、[ビルトインウェブサーバー](http://php.net/manual/ja/features.commandline.webserver.php)で簡易的な開発をすることができる。

## エディタの設定

PHPファイルの標準的な拡張子は`.php`。最近のお作法では`.class.php`とかは流行ってない。

### Emacs

EmacsにはPHP用の編集モードは標準添付されてない。その代り[ejmr/php-mode](https://github.com/ejmr/php-mode)が活溌に開発されてる。

### Vim

標準でPHPに対応。

詳細な設定などは[VimでPHP開発環境を作成 - Qiita](http://qiita.com/NanohaAsOnKai/items/0188fb3b60e8a79656a0)を参照。

### [PhpStorm](https://www.jetbrains.com/phpstorm/)

IntelliJ IDEA系列のPHP専用IDE。有償。[PhpStorm | サムライズム](http://samuraism.com/products/jetbrains/phpstorm)などで購入。年間サブスクリプションで、継続するとお安くなるしくみ。

### VisualStudio Code

PhpStormほどじゃないけど、標準設定でそこそこいい感じ。ただし型推論やオブジェクトのメソッド名やプロパティ補完はない。

### Eclipse (PDT)

[PDT: Eclipse PHP Development Tools](http://www.eclipse.org/pdt/)と呼ばれるPHP開発用の環境がある。オブジェクトのメソッド名の補完が機能する。

動作にはJavaが必要で、[java.com](https://www.java.com/ja/)から入手できる。`brew cask install java`でもインストールできる。あなたとジャバ。

### NetBeans

機能については[NetBeans IDE - PHP開発](https://netbeans.org/features/php/index_ja.html)を参照。メソッドやプロパティの補完など機能する。

<del>NetBeans IDE 8.1ではPHP 5.6までの対応なので注意</del> <ins>PHP 7対応の[NetBeans IDE 8.2 Release Information](https://netbeans.org/community/releases/82/)が2016年10月3日にリリースされた</ins>。

Eclipseと同様にJavaが必要で、[java.com](https://www.java.com/ja/)から入手できる。`brew cask install java`でもインストールできる。あなたとジャバ。

## 実際のコードを書く

### 基本的な文法

* (ちょっと古い) [PHP基礎文法最速マスター - Shin x blog](http://www.1x1.jp/blog/2010/01/php-basic-syntax.html)
* [PHP: PHP マニュアル - Manual](http://php.net/manual/ja/)
	* [PHP: 言語リファレンス - Manual](http://php.net/manual/ja/langref.php)
	* [PHP: 関数リファレンス - Manual](http://php.net/manual/ja/funcref.php)

書籍でおすすめできるのはいまのところあまりない。

### テストコードの書き方

* [PHPUnit](https://phpunit.de/) - xUnit系。定番中の定番
    * [PHPUnit マニュアル – PHPUnit 用のテストの書き方](https://phpunit.de/manual/current/ja/writing-tests-for-phpunit.html)
* [phpspec](http://www.phpspec.net/en/stable/) - BDD
    * [知らないうちにphpspecがすごいことになっていた件 - iakioの日記](http://iakio.hatenablog.com/entry/2014/03/07/013452)
* [Codeception](http://codeception.com/) - 複合的なテスティングフレームワーク
* [Peridot](http://peridot-php.github.io/) - BDD
    * [PHPの今風なテストフレームワーク「Peridot」の普及活動 - Qiita](http://qiita.com/ktty1220/items/d859599b73a3c999fc66)

## 情報リソース

### 言語やライブラリのリポジトリへのアクセス方法を確認する

#### [PHPマニュアル](http://php.net/manual/ja/)

PHPマニュアルの日本語は、おそらく英語版の次くらゐにメンテナンスされてるので読まない手はない。

#### [Awesome PHP](https://github.com/ziadoz/awesome-php)

定番ライブラリとか情報源のまとめ。

#### [PHP: The Right Way](http://ja.phptherightway.com/)

PHPのベストプラクティス集。中級者以上は必読。

### [PHPのタイムライン - 大チェッカー](https://daichkr.hatelabo.jp/antenna/960669575395980280)

PHPに関する雑多な記事のフィード

### そのほか

* [PHP internalsのRFCやMLをウォッチする - Qiita](http://qiita.com/masakielastic/items/a3080c7744f1be97a17c)
* [PHP7で変わること - hnwの日記](http://d.hatena.ne.jp/hnw/20150525) - PHP7での変更点のまとめ


## コミュニティ

### 勉強会/イベント

* [PHP勉強会@東京](https://phpstudy.doorkeeper.jp/)
* [PHP BLT](http://phpblt.connpass.com/)
* [Kansai PHP Users Group](https://kphpug.doorkeeper.jp/)

### オンライン

* [日本語で PHP の話をする Slack のグループを作ったよ【参加者募集】 - 頭ん中](http://www.msng.info/archives/2016/02/phpusers-ja-on-slack.php)