PHP初心者は最低限これはやっとけ - 開発に入る前編

主に経験談。
PHP初心者が初めて自分で何かするとか業務で何かするとかいうレベルを想定。

# 準備

## PHP7.0を選べ

PHP5.5は[2016/07/10にサポート期限が切れた](http://php.net/supported-versions.php)。
2016/07/10時点では、今からサーバ構築するならPHP7.0を選択すべきだ。

新規開発なら、もうPHP7.0を使ってもいいだろう。速いし。
使用予定のフレームワークがPHP7に対応していない等の理由があるならば、PHP5.6を選択する余地もあるだろう。
5.6と7.0以外のバージョンは、現時点ではそもそも選択肢に入れるべきではない。
HHVMとかは理解ってる人が選ぶものだから、ここを見てるような人は選択しなくていいぞ。

クラウドではない方のレンタルサーバにありがちなCentOSは未だにPHP5.3がデフォルトだが、最低限[セキュリティフィックスのバックポート](http://qiita.com/nanasess/items/4248b2dc63a035c2933e)はなされているので、一応はそのまま使っても問題ない。
ただ配列短縮構文やクロージャ、トレイトといった最近では普通に使われている機能がないのと、あとregister_globals/magic_quotesという核地雷が眠っているので、可能な限り避けるべきだ。

最近始めたレベルでいきなりサーバ構築に関われることはそうそう無いだろうが、こういうところで進言したりしておくと上司受けがよくなるかもしれないぞ。
まあ、一度構築したら[動いてる鯖には触らない](http://qiita.com/rana_kualu/items/c16fb18948ce6f0a66af)なんてところでは選択の余地がないけどな！

## IDEを使え

ファイル数個で済む規模であればともかく、普段は特別な理由の無い限り統合開発環境-IDEを使うべきだ。
補完やエラー検出、インデント等の基本機能だけでも、存在するだけで圧倒的に開発効率が違うぞ。

### Eclipse ( Pleiades )

最も歴史のあるIDEのひとつで、とにかくワンパッケージでなんでもやってくれる。
なので導入は楽なのだが、そのぶん設計が古かったり動作が重かったりと、今から見れば他の選択肢に比べて一歩劣ってしまうのは否めない。

### PHPStorm

非常に評判がよい、というかあまりによすぎて逆に胡散臭く感じてしまうレベルのエディタだ。
有料かつ公式に日本語対応してないので、使い始めるのに敷居があるが、使い慣れるととても便利なようだ。
30日無料体験版があるので試してみるといいだろう。

### Visual Studio Code

最近手を出してみたのだが、かなり使い勝手がいい。
無償、日本語対応、安心のMicrosoft製で敷居も低く、おそらく私は今後これをメインで使っていくだろう。

### PHPエディタ

実は現状メインで使っている。
テキストエディタ感覚で恐ろしく気軽に使えるので、ちょっとした内容ならとりあえずこれだけで完結できる。
ただ整形機能がないのと、開発が完全に終わってしまっているため、今から使い始めるべきではない。

### その他

VimとかEmacsとか言ってくる輩はスルーしていいぞ。

## gitを使え

mergeとかGit flowとかそういうのは後でいい。
とりあえずcommitだけは最低限使えるように覚えておけ。
commitは要するにその時点のフルバックアップだ。
何かあったとき、すぐその場所まで戻ることができるぞ。
多少慣れてきたらbranchとかstashとかに手を出してみるといいぞ。


# 開発に関して

## コメントを書け

コード三日会わざれば刮目して見よ、という諺がある。[^1]
三日前に自分が書いたコードは、他人が書いたコードと同様に理解不能、という意味だ。

つまりコメントを書くのは、他の誰でもない自分のためだ。
そしてもちろん他人のためだ。
何度意味のわからないコードをコメント無しで書いてきた奴をぶん殴ろうと思ったことか。

そういうところに限ってblameしてみたら自分の名前だったりする。

### PSR-5

PSR-5 PHPDoc Standardというコメントの標準仕様があるので、基本はそれに従って書くとよいだろう。
ただ毎回律儀に[PSR-5に準拠すると死ぬ](http://qiita.com/rana_kualu/items/8b2d9d42b81e9f6f0fd1)ので、ある程度は端折っても構わない。
最低限必要なのは概要と@param、@return、@deprecated、@overrideだ。
@paramで引数、@returnで返り値の型と概要を記載する。
古くなったりして今後使ってほしくない、削除する予定のメソッドには@deprecatedを記載する。
そして既に@deprecatedが付いているものは使ってはいけない。
親クラスのメソッドをオーバーライドする場合は@overrideだ。

## コメントを消せ

```php
	/*
		TODO: ○○を実装する
		→○○を実装した
	*/
```

こんなコメントを残しておく意味は1ミリたりとも無いぞ。
迷わず消せ。
以下のように書き換えるだけでもいいぞ。

```php
	/*
		○○を行う処理
	*/
```

また、誤っているコメントも問答無用で消していい。
間違っているコメントは、コメントが書かれていないことより有害だ。
そして可能なら正しいコメントに書き換えるのだ。

## アノテーションコメントを使え

コメント中にTODOとか書いておくとIDEによってはハイライト・検索してくれる。
この機能、PHPに限らず広く使われているのだが、由来がいったい何処から来ているのかはよくわからなかった。

### TODO

しなければならないことを記述。
とりあえずダミーで固定値を返すメソッドを作っておいて(スタブと言う)、ちゃんとした中身は後から実装する、等の用途に使う。
もちろん実装完了したらコメントは削除しなければならない。

### FIXME

とりあえずコードを書いたけど間違ってるから修正必須、という場合に使う。

### XXX

コードが間違ってるはずなのに何故かだいたい動く、といった場合に使う。
FIXMEとXXXの使い分けは微妙なので、どちらか一方だけにしておいてもいいだろう。

これ以外にもアノテーションコメントはたくさんあるが、どうせ使い切れないので気にしなくていいぞ。

## テンプレートエンジンを使え

`こんにちは、<?php echo htmlspecialchars($hoge); ?>さん。`

とか書いてあるソースは全部窓から投げ捨てていいぞ。
引数が足りないとかそういう意味ではなく、もはやこういった処理はユーザ側で行うべきではないという話だ。
ここでいきなり一足飛びにフレームワークに行っても問題はないのだが、その前に多少は素のPHPにも慣れておいたほうがいいだろう。

### Smarty

`こんにちは、{$hoge}さん。`

### twig

`こんにちは、{{ hoge }}さん。`

Smartyはデフォルトでは|escapeが必要だが、何も言わずに[$default_modifiersを指定しておく](http://www.smarty.net/docs/ja/variable.default.modifiers.tpl)。
テンプレートエンジンでビューの切り分けができるようになったらフレームワークに進め。

## フレームワークは有名なものを選べ

Webサービスでは、数こそ力だ。
マイナーなものは、いくら先進的で革命的でも、そもそもWeb上に情報が無い。
使いこなすには、自分で調べて作っていかなければならないが、そんなものはアーリーアダプターにでも任せておけばよい。
もしくは、ある程度力が付いてきてからの次のステップだ。
特に要件で指定されているわけでもないかぎり、[有名なもの](https://www.google.co.jp/trends/explore?hl=ja#q=laravel,+cakephp,+zend+framework,+codeigniter,+symfony&geo=JP&cmpt=q&tz=Etc/GMT-9&tz=Etc/GMT-9)を選んでおけ。

### CakePHP

何故か世界的にどんどんシェアが減っているのだが、日本ではまだトップシェアだ。
特に他のFWを選ぶ理由がないのであれば、とりあえずこれを選んでおけばいいぞ。

### Laravel

アメリカでは他の全FWをぶっちぎって圧倒的人気のFW。
英語が読めるのなら、これを選択しておいて間違いはないぞ。
個人的にはあまり好きではないのだが、まあ個人的嗜好はどうでもいいだろう。

### Symfony

最初に覚えることがかなり多めで、導入の敷居は高い。
そのかわり、使い慣れたら便利な機能が多く、FWに乗っかっておけば開発は楽になる。
初めてのFWにはあまり向いていないだろう。

### Zend Framework

FWとして使うのはやめておけ。
一部分だけをライブラリとして使うといった用途にはそこそこ便利だから、あくまでサブとして考えるといい。

### CodeIgniter

使ったことないので不明。識者求む。

### WordPress / Movable Type

これらはCMSであってFWではないのだが、実際似たようなものだ。
自由度はあまり高くないが、定型的なサイトを非常に簡単に作ることができる。
あまり込み入った処理を必要としないのであれば、わざわざFWを使う必要もなく、これらを選んでおけばよい。

### その他

Phalconとか言ってくる奴らは聞き流しておけ。

## エラーメッセージを見ろ

PHPのエラーメッセージは極めて親切だ。
発生したファイル名と行番号、そして原因まではっきり書いてある。
発生した行と原因の行がかけ離れているなんてこともあまりない。
メッセージを読むだけで発生するエラーの半分以上は解決する。

## 公式マニュアルを見ろ

はっきりいって、PHPの資料で一番参考になるのは[公式マニュアル](http://php.net/manual/ja/index.php)だ。
碌にドキュメントの整備もされていない言語も多い中、PHPのマニュアルは異常なまでに充実している。
わからないことも大抵は公式リファレンスと、User Contributed Notesのうちスコアが+のものを見れば事足りるぞ。
あとバグっぽい挙動があったら[Bug Tracking System](https://bugs.php.net/)を調べればだいたい書いてある。
解決しているかどうかは微妙。

## ググれ

公式でわからなければググって調べる時だ。
ただしググって引っかかるPHPの記事はピンキリのキリ側が非常に多いので、有用な記事か否かの見極めには知識が必要となる。
実際に動かしたり、複数のサイトを見比べたりして、間違いがないか調べることが必要だ。
以下、有名どころの技術コミュニティなどを挙げる。

### Stack Overflow

世界的に最も有名なコミュニティのひとつだ。
たまにおかしな答えが紛れ込むことがあるが、基本的には参考にして問題ない。
日本語版はあまり人がいないようだ。

### Qiita

Qiitaの記事は基本的に高品質なので、参考にしても大抵は問題ない。
間違っていればツッコミが入るからな。
ただしContributionが1、2桁の投稿者、ストックが0や1の記事には注意が必要だ。

### PHP Pro

回答者がいない。

### Yahoo!知恵袋、OKWAVE

見るな。

### 個人サイト

人によって非常にレベルの差が激しいので、外れを引くと地雷まっしぐらだ。
こればっかりは玉石を見極める実力を付けるしかない。
概ねの傾向として、サイトのレイアウトやコードのマークアップが崩れているサイトは駄目だと思っておいて間違いない。
逆に綺麗だからといって信用できるわけではないが。

## コピペするな

ググったサイトのコピペはNG。

## その他

困ったらとりあえずvar_dump()しとけ。


[^1]: ない