VimからPHPUnitを実行する
必要なもの
quickrun
vimproc
quickrunのインストール
.vimrcに
Bundle 'git://github.com/thinca/vim-quickrun' Bundle 'git://github.com/karakaram/vim-quickrun-phpunit'
を追加し、
:BundleInstall
するだけ。
vimprocのインストール
.vimrcに
Bundle 'git://github.com/Shougo/vimproc'
を追加し、
:BundleInstall
続いてコンパイルを行う。
$ cd $HOME/.vim/bundle/vimproc/ $ make -f make_unix.mak .vim/bundle/vimproc/autoload/ の下に vimproc_unix.so ができていればOK $ ls -la $HOME/.vim/bundle/vimproc/autoload/vimproc_unix.so -rwxr-xr-x. 1 keynodes wheel 19354 8月 25 01:24 2012 /home/keynodes/.vim/bundle/vimproc/autoload/vimproc_unix.so
quickrunの設定
ここからが本題
$ vim $HOME/.vim/userautoload/quickrun.vim
http://www.karakaram.com/vim/quickrun-phpunit/を参考に、コメントを適度に追加
"-------------------------------------------------- " コマンドのグループ化 "-------------------------------------------------- augroup QuickRunPHPUnit " グループのコマンドを初期化 autocmd! " BufWinEnter バッファがウィンドウに表示された後 " BufNewFile 存在しないファイルの編集を開始する " => *Test.php 新規/編集で開いた時、filetype を phpunit にセットする autocmd BufWinEnter,BufNewFile *Test.php set filetype=phpunit augroup END "-------------------------------------------------- " quickrun設定 "-------------------------------------------------- let g:quickrun_config = {} let g:quickrun_config['_'] = {} " runnerにvimprocを設定。phpunitの実行中にVimがフリーズしなくなる let g:quickrun_config['_']['runner'] = 'vimproc' let g:quickrun_config['_']['runner/vimproc/updatetime'] = 100 "-------------------------------------------------- " filetype:phpunit の時の設定 "-------------------------------------------------- "-------------------------------------------------- " 通常の表示(横分割して結果表示) "let g:quickrun_config['phpunit'] = {} "let g:quickrun_config['phpunit']['outputter/buffer/split'] = 'vertical 35' "let g:quickrun_config['phpunit']['command'] = 'phpunit' "let g:quickrun_config['phpunit']['cmdopt'] = '' "let g:quickrun_config['phpunit']['exec'] = '%c %o %s' "-------------------------------------------------- "-------------------------------------------------- " ステータスラインの下に結果を表示 let g:quickrun_config['phpunit'] = {} let g:quickrun_config['phpunit']['outputter'] = 'phpunit' let g:quickrun_config['phpunit']['command'] = 'phpunit' let g:quickrun_config['phpunit']['exec'] = '%c %o %s' let g:quickrun_config['phpunit']['outputter/phpunit/height'] = 3 let g:quickrun_config['phpunit']['outputter/phpunit/running_mark'] = 'running...' let g:quickrun_config['phpunit']['outputter/phpunit/auto_open'] = 0 "--------------------------------------------------
実行
PHPUnitのテストコードをVimで開いている状態で 「\r」でいつでもPHPUnitを実行、結果をステータスラインの下で確認。
エラーが出た場合、:lw (:lwindow)コマンドでロケーションリストを開くことができる。
ハイライトの設定
VimではデフォルトでPHP用のハイライトをしてくれているが、PHPUnitのコードは新たにfiletype:phpunitを設定しているため
PHPのハイライトが適用されない。
ファイルタイプ別のハイライトは
$VIMRUNTIME/syntax/*.vim で定義されていて、
$HOME/.vim/syntax/*.vim でその設定を上書きできる
PHPUnitで使うテストコードもPHPとしてハイライトをしたいので、コピーして使うことにする。
まずは$VIMRUNTIMEの値を確認し
:echo $VIMRUNTIME /usr/share/vim/vim72
コピーする
[root@localhost ]# cp /usr/share/vim/vim72/syntax/php.vim /home/keynodes/.vim/syntax/phpunit.vim
Key mappingの設定を確認する
いつも新しいプラグインを入れて、.vimrcにショートカットキーを割り当てる記述をするときに、どのキーが空いてて、どのキーがデフォルトで埋まってて、どのキーに自分がキーを割り当てたか、がすぐにわからなくて悩む。
そんな時は↓
:h index.txtでVimデフォルトで割り当てられていないかを確認後、
:verb mapで自分またはプラグインが割り当てていないかを確認すればおk
参考:http://vim-users.jp/2010/05/hack148/
map コマンドモードのキーマップ
imap 入力モードのキーマップ
cmap コマンドラインにカーソルがあるときのキーマップ
:maps * a
↑の意味は
(1)モード
s セレクトモード
(2)展開前の文字列
(3)展開後の文字列
* 再マップされません。つまり、noremap 系で定義された Key mapping です。 @ バッファローカルなマップです。<buffer> 付きで定義された Key mapping です。 & スクリプトローカルなマップだけが再マップされます。<script> 付きで定義された Key mapping です。
verbose ではキーマップがどこで定義されたかが確認できる。
:verbose maps * a Last set from ~/.vim/bundle/neocomplcache-snippets-complete/autoload/neocomplcache/s ources/snippets_complete.vim
Jenkinsのインストール
やること
Javaのインストール
Jenkinsのインストール
参考、というかここに全て書いてあったり
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+RedHat+distributions
Javaのインストール
JenkinsはJava上で動作するので、まずはJavaをインストールする
[root@localhost ]#yum install java-1.6.0-openjdk
インストールの確認
[root@localhost ]#java -version java version "1.6.0_22" OpenJDK Runtime Environment (IcedTea6 1.10.6) (rhel-1.43.1.10.6.el6_2-i386) OpenJDK Client VM (build 20.0-b11, mixed mode) OpenJDK Client VM (build 20.0-b11, mixed mode)
Jenkinsのインストール
[root@localhost ]#yum install jenkins
で最新版がインストールされるが、たまに最新版が見つからずインストールに失敗することがある。
こんな風に。(8/20 23:45時点)
Error Downloading Packages: jenkins-1.478-1.1.noarch: failure: jenkins-1.478-1.1.noarch.rpm from jenkins: [Errno 256] No more mirrors to try.
http://pkg.jenkins-ci.org/redhat/ にパッケージの一覧があるので新しいものからいくつか試してみる。
jenkins-1.478-1.1.noarch.rpm 2012/08/20 46.5M ←見つからず
jenkins-1.477-1.1.noarch.rpm 2012/08/08 46.5M
jenkins-1.476-1.1.noarch.rpm 2012/08/06 46.5M
[root@localhost ]#yum install jenkins-1.477-1.1
iptablesの設定変更
iptablesの設定を追加する。Jenkinsはデフォルトでは8080ポート。
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # 外部からのTCP80番ポート(HTTP)へのアクセスを許可 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT # 外部からのTCP443番ポート(HTTPS)へのアクセスを許可 -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited # for Jenkins -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
iptablesを再起動
[root@localhost ]# service iptables restart iptables: ファイアウォールルールを消去中: [ OK ] iptables: チェインをポリシー ACCEPT へ設定中filter [ OK ] iptables: モジュールを取り外し中: [ OK ] iptables: ファイアウォールルールを適用中: [ OK ]
PHPUnitとか、その他ツールのインストール
pearチャンネルの登録
pear channel-discover pear.phing.info pear channel-discover pear.pdepend.org pear channel-discover pear.phpmd.org pear channel-discover pear.phpunit.de pear channel-discover components.ez.no pear channel-discover pear.phpdoc.org
Phing
Phingとは・・?Apache Ant というJAVAのビルドツールのPHPクローン
参考:Phingについて PHPUnit – The PHP Testing Framework
[root@localhost ~]# pear install phing/phing [root@localhost ~]# phing -v Phing 2.4.12
PHP_Depend
[root@localhost ~]# pear install pdepend/PHP_Depend [root@localhost ~]# pdepend --version PHP_Depend 1.0.7 by Manuel Pichler
PHPMD
[root@localhost ~]# pear install phpmd/PHP_PMD [root@localhost ~]# phpmd --version PHPMD 1.3.3 by Manuel Pichler
phpcpd
[root@localhost ~]# pear install phpmd/PHP_PMD [root@localhost ~]# phpcpd -v phpcpd 1.3.5 by Sebastian Bergmann.
phpDocumentor
[root@localhost ~]# pear install phpdoc/phpDocumentor-alpha [root@localhost ~]# phpdoc --version phpDocumentor version 2.0.0a10
PHP apc Xdebugのインストール
PHPと各種ライブラリのインストール
yum --enablerepo=remi,epel,rpmforge install php php-mbstring php-devel php-pear php-mysql php-gd php-mcrypt php-pcre php-xml
インストールに必要なパッケージをインストール
PECLを使うためにmake, gcc、APCインストール時にpcre-develが必要になる。
yum --enablerepo=remi,epel,rpmforge install make gcc pcre-devel
他にも後々必要になると思われるパッケージをここでまとめてインストールしておく。
(minimalでインストールしているのでほとんど何も入っていない状態)
yum --enablerepo=remi,epel,rpmforge install readline-devel curl-devel ImageMagick ImageMagick-devel yum --enablerepo=remi,epel,rpmforge install wget rsync subversion git
APCのインストール
いくつか入力を求められるが全てデフォルトで設定
pecl install apc
インストール完了後に出るメッセージにしたがって設定ファイルを編集する
Build process completed successfully Installing '/usr/lib/php/modules/apc.so' Installing '/usr/include/php/ext/apc/apc_serializer.h' install ok: channel://pecl.php.net/APC-3.1.9 configuration option "php_ini" is not set to php.ini location You should add "extension=apc.so" to php.ini
/etc/php.ini には、
; Note: packaged extension modules are now loaded via the .ini files ; found in the directory /etc/php.d; these are loaded by default.
とあるので、apc用の設定ファイル(apc.ini)を作り、extension=apc.so も含めて管理する。
extension=apc.so apc.enabled=1 apc.shm_segments=1 apc.shm_size=128M apc.ttl=7200 apc.user_ttl=7200 apc.num_files_hint=1024 apc.mmap_file_mask=/tmp/apc.XXXXXX apc.enable_cli=1
タイムゾーンの設定
date.timezoneの設定をしないと、Warningが発生するのでphp.iniに設定しておく。
PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in Unknown on line 0
vi /etc/php.ini
[Date] ; Defines the default timezone used by the date functions ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone date.timezone = "Asia/Tokyo"
Xdebugのインストール
pecl install xdebug
インストール完了時に下記メッセージが出るので、APCと同様にxdebug.iniを作る
Build process completed successfully Installing '/usr/lib/php/modules/xdebug.so' install ok: channel://pecl.php.net/xdebug-2.2.1 configuration option "php_ini" is not set to php.ini location You should add "extension=xdebug.so" to php.ini
remote_host にはXdebugを利用するクライアント、今回だとホストOSのWMnet8のIPアドレスを設定する。
extension=xdebug.so zend_extension=/usr/lib/php/modules/xdebug.so xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_host=192.168.136.1 xdebug.remote_port=9000
apacheを再起動して・・
[root@localhost ]# /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
確認
[root@localhost ]# php -i | grep xdebug PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0 PHP Warning: Module 'xdebug' already loaded in Unknown on line 0
インストール時に出た「You should add "extension=xdebug.so" to php.ini」はウソってことか・・
Xdebug: Documentation にも
> Note: You should ignore any prompts to add "extension=xdebug.so" to php.ini ― this will cause problems.
とあった。
extension=xdebug.so の設定を削除し、apacheを再起動
- extension=xdebug.so
再度確認
[root@localhost ]# php -i | grep xdebug xdebug support => enabled
apacheのインストール、設定とSELinux
Apacheの起動
# service httpd start httpd を起動中: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
起動はできるが、上記エラーが出る。ServerNameを設定しなさい、という事らいしい。
- #ServerName www.example.com:80 + ServerName www.example.com:80
もしくは
sed -i 's/#ServerName www.example.com:80/ServerName www.example.com:80/' /etc/httpd/conf/httpd.conf
SELinuxを無効化
SELINUXの値をenforcingからdisabledにする
vi /etc/sysconfig/selinux
SELINUX=disabled
システムを再起動すると変更が反映される(あとで再起動)
ファイアウォールの設定変更
まずは設定の確認
[root@localhos]# cat /etc/sysconfig/iptables # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
HTTPとHTTPSを許可する
vi /etc/sysconfig/iptables
# 22番ポート(ssh)の下に下記を追加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # 外部からのTCP80番ポート(HTTP)へのアクセスを許可 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT # 外部からのTCP443番ポート(HTTPS)へのアクセスを許可 -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited