Symfony Advent Calendar 2015の21日目の記事です。
昨日はimunewさんの「Doctrine DBALで取得したデータをキャッシュする」でした。

普段Zshを利用しているのですが、そんなにZsh力に自信がないので、設定周りはPreztoというフレームワークにお任せしています。

Prezto

PreztoはZshの設定を管理するフレームワークです。
Zshの設定を管理するフレームワークというと、もっとも有名なのが、Oh My Zshだと思います。
自分も一時期使っていたのですが、若干動作がもたつくのと、自分にはあまりに多機能すぎる気がして、動作が軽いと評判のPreztoに落ち着いています。
実際に使ってみると立ち上がりやコマンド補完がOh My Zshよりも若干軽く感じます。

Oh My ZshのSymfony2プラグイン

Oh My Zshには、Symfony2のコマンド入力をサポートしてくれるSymfony2プラグインが存在します。
https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/symfony2/symfony2.plugin.zsh

簡単なスクリプトではありますが、エイリアスやコマンド補完など、とても便利な機能を提供してくれます。
Preztoを使っていても、是非同じ体験をしたいのですが、残念ながらデフォルトでは用意されていません。

しかし、安心してください!

Preztoでは、Oh My Zshでいうところのプラグインのことをモジュールと呼ぶのですが、モジュールの追加はとても簡単です。
Oh My ZshのSymfony2プラグインに関していえば、ファイルをリネームするだけで簡単にPrezto用モジュールへポートすることが出来ます!

Preztoのインストール

READMEに書いてある通り、以下のコマンドを実行すればOKです。

$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
$ setopt EXTENDED_GLOB
$ for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
    ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
  done

既にzshrcやzshenvなどのzsh関連の設定ファイルが存在する場合は退避しておくことをオススメします。

Symfony2プラグインのダウンロード&リネーム

Oh My Zshのsymfony2プラグインを直接ダウンロードします。

$ mkdir $HOME/.zprezto/modules/symfony
$ cd $HOME/.zprezto/modules/symfony
$ wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/plugins/symfony2/symfony2.plugin.zsh

Preztoのモジュールはinit.zshというファイル名にしなくてはいけないので、リネームをします。

$ mv symfony2.plugin.zsh init.zsh

モジュールを有効にする

# $HOME/.zpreztorc

 zstyle ':prezto:load' pmodule \
   'environment' \
   'terminal' \
   'editor' \
   'history' \
   'directory' \
   'spectrum' \
   'utility' \
   'completion' \
-  'prompt'
+  'prompt' \
+  'symfony'

これでOh My ZshのSymfony2 Pluginと全く同じ機能が使える様になります。
なんと1行も変更することなく、利用することができます!
素晴らしいですね!

自分用にカスタマイズする

Oh My ZshのSymfony2のプラグインはちょこちょこ更新されてはいますが、ここ最近はエイリアスが増えていく程度なので、自分用にカスタマイズしてしまうのも良いかなと思います。
ちなみに自分は以下のようにカスタマイズしたものを利用してます。

# $HOME/.zprezto/modules/symfony/init.zsh

_symfony_console () {
  echo "php $(find . -maxdepth 2 -mindepth 1 -name 'console' -type f | head -n 1)"
}

_symfony_get_command_list () {
   `_symfony_console` --no-ansi | sed "1,/Available commands/d" | awk '/^  ?[a-z]+/ { print $1 }'
}

_symfony () {
   compadd `_symfony_get_command_list`
}

compdef _symfony '`_symfony_console`'
compdef _symfony 'app/console'
compdef _symfony 'bin/console'
compdef _symfony sf

#Alias
alias sf='`_symfony_console`'
alias sfcc='sf cache:clear'
alias sfsr='sf server:run -vvv'
alias sfcw='sf cache:warmup'
alias sfdc='sf debug:container'
alias sfdr='sf debug:router'
alias sfgb='sf generate:bundle'

エイリアスの部分だけ自分用に変更してあります。

まとめ

Symfonyで開発していると、コマンドを叩くことが非常に多いと思います。
長いコマンドがなかなか覚えられない」「入力するにがとにかく面倒」などと感じている人は、これらのツールの導入を検討してみては如何でしょうか。

明日は fknsy さんです!