Vimとボクと、ときどき、PHP

Vim好きなエンジニア(主にPHP開発)が不定期に技術情報やネタを書いていくブログです

Home » VimでのPHP開発環境

VimでのPHP開発環境

既にたくさんの人が紹介されているので今更感はありますが、実質的に初投稿になりますので、私のPHP開発環境を晒してみようと思います。

 

OS

Linux Mint 17.1 Rebecca です。Windows嫌いなんで。
Excelファイルを編集しなきゃいけないとか、どうしてもWindowsでなければならない時もあるので、デュアルブートにしてます。

 

Vim

まずこれが無ければ話にならない。PHP開発以外にも、作業の99%はVimに依存してます。Vim使わないのはWebブラウジングくらい。
この記事もVimで書いてたりします。

ノーマルなVimでもいいんですが、私はkaoriyaパッチを当てて自分でコンパイルしたVimを使っています。WindowsでもCygwin入れてコンパイル。自分のPC以外で作業しなきゃならない時だけ、香り屋さんで配布していただいているやつをダウンロードしてきます。(たいていWindowsなので)

 

各種Vimプラグイン

現時点で自作も含めて64個のプラグインを使っていますが、PHP開発に必須なものだけ紹介します。

 

シンタックスハイライト・インデント

色って重要ですよね。真っ黒なソースって見る気もしないですよね。
香り屋さん配布のVimに添付されてるやつをコピーして使ってます。ノーマルVimにもついてくるのかな?

 

カラースキーマ – solarized

別にPHP開発に必須ではないんですが、色って重要でs(ry。
基本はsolarizedを使ってますが、気分次第で違うのに変えるためにhybridとか複数用意してます。どれにしようか迷う場合は、カラースキーマをランダムに変更するプラグイン(自作)で適当に変更。

 

neocomplete.vim

有名すぎて紹介する必要もないでしょう。ネオコンです。以前はneocomplcacheを使ってましたが、+Luaでコンパイルしなおしてこちらにしました。速いらしいです。
PHPの関数名とかを補完できるので便利。バッファ内の文字列を動的に拾って候補にあげてくれるので、変数名のタイプミスで1時間くらいデバッグで悩むこともなくなりました。
これも「PHP開発」に限って必須ではないんですが、無いと生きていけないので。

 

neosnippet.vim

よく使う構文とかをテンプレート形式で登録しておいて入力できる、いわゆる「スニペット」を扱えるプラグイン。いつからか、デフォルトのスニペットが別プラグイン(neosnippet-snippets)に分離されたので、忘れずにセットで入れましょう。
これだけでも十分に便利なんですが、少し工夫して自分用のスニペットを作ると開発速度が更に3倍になります(当社比)。そのへんはまた後日書きます。

 
ここまでが絶対必須。特にneocomplete.vim+neosnippet.vimが無い環境は、もはや考えられない。(勝手に「ネオコンビ」と呼んでます)
ネオコンビの導入前が↓です。処理内容は気にしないでください。見て分かる通り、なんじゃこりゃです。変数名はわざと長めにしてます。
php_before
まぁ、色のついたテキストエディタと同じですね。

ネオコンビ導入後はこうなります↓
php_after
あんまり恩恵を受けているように見えませんが、ifの展開あたりは便利さを感じてもらえるんじゃないでしょうか。
PHP以外の言語のスニペットもあるので、ifとかforのブロックを{}で囲むのかbegin-endだったかって考える必要はありません。とりあえずifって打って展開すればいいんです。シェルスクリプトの

if [ … ]; then

fi

とか、結構忘れますよね。

また、導入後のgifで in_array を入力する部分でもやってますが、neocompleteはいわゆる「曖昧検索」ができます。たとえば「in_array」を入力する場合は、「inar」と入れても候補に出てきます。これの何が便利かって、「あれ?htmlspecialcharsって間にアンスコ入ったっけ?(html_special_charsだっけ?)」みたいなときでも、とりあえず「htmlsp」くらいまで入れれば補完候補に見つかります。
もっと言うと、「あれ?sys_get_tmp_dir()だっけ?sys_get_temp_dir()だっけ?それともsys_tmp_dir()?」みたいなときも、「systm」とか適当に入力すれば、正解の「sys_get_temp_dir」が候補に出ます。うん、便利。

ネオコンボもそうですが、他にもShougoさん作のプラグインをいろいろ使わせていただいてます。ああいう人を神と呼ぶんでしょうね。

 
ここより下は、絶対ではないですが必須に近いものたちです。

 

vim-ref

VimでPHPのヘルプをひけるプラグインです。「この関数の戻り値の型って何だっけ?」なんてときにサッとヘルプを見れます。Vim内で完結するので、いちいちブラウザで検索して・・・とかやらずに済みます。
Lynxなどのテキストブラウザが別途必要ですが、Linuxならapt-getとかでいつも通りにインストールしてください。Windows版もありますよ

 

smarty-syntax

テンプレートエンジンにSmartyを使っているので、こちらも必須。
実はVimがデフォルトで対応している(香り屋Vimにシンタックスプラグインとかが入ってる)んですが、なんか微妙な部分があったのでこれを入れました。何があったかは忘れましたw

 

tcomment_vim

ファイルタイプに合わせて適切なコメントアウトをしてくれるプラグイン。PHPとSmartyはもちろん、多数の言語のコメントアウトに対応してます。範囲選択してブロックコメントにすることもできます。「Smartyなのに // でコメントアウトしとるやん!」という、あるあるストレスから解放されたい方には特にオススメです。
この系統のプラグインを入れる利点は、「どんなファイルタイプでも同じ操作でコメントアウトできる」ということ。PHPは // で、Smartyは {* … *} で、VimScriptは ” で・・・と、ファイルタイプごとにコメントの形式を考えずにすむのは、小さいようですごく大きな効率化です。

ただ、PHPとHTMLが混ざった形で書いていると、HTMLのコメントにしたいのにPHPの // が入ったりします。改善方法求む。

 

splitjoin.vim

複数行になっているものを1行にまとめたり、その逆ができるプラグイン。
たとえばこれを↓

$arr = array('aaa', 'bbb', 'ccc');

こうしたいとか↓

$arr = array(
    'aaa',
    'bbb',
    'ccc',
);

これを↓

<div><span>ほげほげ</span></div>

こうしたいとか↓

<div>
    <span>
        ほげほげ
    </span>
</div>

よくありますよね。これをコマンド1つで、インデントも含めてきちんと整形してくれます。もうEnterしてタブ入れて・・・なんてやらなくていいです。逆に1行にまとめるのも、コマンド1つでやってくれます。

分かりにくいと思うのでgif動画を見てください。

arrayの場合↓
splitjoin_php

HTMLの場合↓(もちろんXMLでもできるはず)
splitjoin_html

 

vim-watchdogs

言語ごとのコンパイラやlintツールと連携して、構文チェック等をやってくれます。私はファイル保存時と、一定時間カーソルが動かなかった場合にチェックが走るよう設定してます。
これまで、PHPで処理書いて開発サーバにアップして、さて動作確認じゃーって思ったらカッコの閉じ忘れエラーとかよくやってたんですが、これを導入すればそんなミスは無くなります。
ただ、PHPの場合は関数に与える引数の数が違ってもエラーにはならなかったりするので、そういうのは見つけられません。言語仕様なので仕方ないですね。カッコやセミコロン忘れをチェックしてくれるだけでも非常にありがたいです。
拡張性も高いので、よくある「コーディング規約に従っているかチェックする」ツール類と連携させることもできます。
同じようなプラグインでsyntasticというのもあります。これはこれで使いやすく、良プラグインだと思いますが、私がwatchdogsを選んだ理由は「非同期にチェック」してくれるところ。lintツールによっては時間がかかるものもあり、ファイルを保存してからチェック完了まで待たされるのがストレスでしたが、watchdogsにしてからだいぶ緩和されました。

 

こんなところですかね。
それぞれのプラグインで便利設定とか小ネタもあるんですが、書き疲れたので後日今後のネタとして温存しておくことにします。

Name of author

Name: よーすけ

Short Bio: 主にPHP開発をやってる社内PGです。

One thought on “VimでのPHP開発環境

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です