こんにちは、みみです。
21日のWordCamp Haneda コントリビュータディに参加してきました!風船かわいかった!
本当は初日のセッションディからがっつり参加したかったのですが、お家都合で無理だったので、コントリビュータディのみの参加でした。でも超楽しかったー!
スタート前にとろゆにさんとお話していてGutenbergのこととかアレコレ楽しかったのでそのままストーキングしてコアの席に。でもやばいな、まだ新品MBPにVVVどころかVagrantも落としてない(ていうか使う気なかった)なーと思いながらも、面白そうなので、今回はコアに参加してみました。たぶん、Hanedaのゆるさと、前回と違ってお知り合いがたくさん居てくださったからこそできた暴挙。
しかしながら、半ば、前教えてもらったやり方でやればいいかーと舐めてたんですけれど、そうは問屋が降ろさなかった。というお話です。
事前準備はやっぱり大事。コードでWordPressに貢献するための開発環境構築
やはり先ずは公式Handbookを読もう
お急ぎの方のために結論を書いておくと、最近、WordPressのHandbookが充実しまくってきていて、全部Handbookに書いてありますので、
Getting Started – Make WordPress Core
を読み解きながらやっていくのが一番の近道かと思います。まじで。
Gutenberg Handbookと違ってページ全翻訳が効かないのですが、このページ見る人は基本的にPHPな人たちだと思うので部分翻訳で大丈夫なのでは。
公式の推奨はVVV
ここの Setting up a local server にも書いてあるのですが、公式の推奨は Varying Vagrant Vagrants 通称VVVです。Vagrantという仮想環境構築ツールを元にしたWordPress用の環境構築ツール、といえばいいのかな。
でもまあVagrant重いし、
If you already have an environment that includes a webserver with PHP, MySQL/MariaDB and SSH access and you prefer working with that system, it is perfectly fine to decide on using another environment.
PHP、MySQL / MariaDB、SSHアクセスのあるWebサーバーを含む環境がすでにあり、そのシステムで作業することを好む場合は、別の環境を使用することを決定してもまったく問題ありません。
て書いてあるし、オレオレ環境で良いじゃないかと、前教えてもらったやり方をやって、教えてもらったテスト(後述)をやってみたら初っ端から Failure が3つ出てしまったのですが、こんなふわっとした奴が出したエラーなんてまず私自身が信じられないわけですよ。さらにテストのテストでも同じエラーで、あ、9割で新品MBPの設定ミスだと思いました。
というわけで、ビギナー勢が貢献しようとするなら、やっぱり環境を揃えるのは大事ですね。
VVVを入れてみよう
VVVのインストール方法もちゃんと公式Handbookに書いてあります。
Installing VVV – Make WordPress Core
ざっくり書いておくと、
- Vagrant と VirtualBox を最初にインストールしておきましょう。
- vagrant-hostsupdater を入れます
vagrant plugin install vagrant-hostsupdater
git clone -b master git://github.com/Varying-Vagrant-Vagrants/VVV.git ~/お好きなディレクトリ
- VVVを入れたディレクトリに移動。
vagrant up --provision
してコーヒータイム。- passwordを聞かれるので入力。さらに長めのコーヒータイム。
- http://vvv.test みて、oneとtwoの2つの環境ができてるはず。
- trunk(SVNベースのWordPressの開発セットアップ)を有効にするために、vvv-custom.ymlを開いて
skip_provisioning: false
にする。 vagrant reload --provision
コーヒータイム3回目。
これで取り敢えずtrunkは設定完了。のはず。
(Gitの設定は省略…)
テストをしてみよう
テストの方法は
Testing a Patch – Make WordPress Core
から。gruntで色々できるようになっているので使ってみましょう。
が、なかなかテストまでたどり着かない。
それで、話は前後しますが、リーダーであるMikeさんから、コアコントリビュート方法を一通りの説明してもらった後で、じゃあチケットをみて出来そうなのチャレンジしてみてね、と言われまして、とっかかれそうなのが無さそうだったので、私はまずテストをしてみようと思ったんです。
というのも、grunt patch:####
でチケットにアップされているパッチが選べてダウンロードできるようになっているという機能を先ず試してみたーいというミーハー根性だったんですが、それをオレオレ環境でやってみたら先述の通り、エラーが出まして。(その前にphpunitも入れてなかったからそれを入れたり色々したのだけれど。)パッチを当てないプレテストの状態でも同じエラーなので、これはやはりVVVを入れねば、ということでVVVを入れて先述の9の手順まではするっと行けました。が。
$ vagrant ssh
して /vagrant/www/wordpress-trunk/public_html
まで移動してみると、なぜかすでに node_modules
入りのリポジトリになっているのでエラーが出まくります。なのでまずは
$ rm -rf node_modules/
$ rm package-lock.json
してnpm install
し直すところからスタート。
$ npm install -g grunt-cli
をして grunt
も入れておきます。
そして、grunt build
すると、なぜか
ERROR: wp-tests-config.php is missing! Please use wp-tests-config-sample.php to create a config file.
って怒られたので、
$ cp wp-tests-config-sample.php wp-tests-config.php
として、wp-tests-config.php
の中身を書き換えます。
define( 'DB_NAME', 'wordpress_unit_tests' );
define( 'DB_USER', 'wp' );
define( 'DB_PASSWORD', 'wp' );
(これはwp-config.phpの中身見て http://vvv.test/database-admin/ にアクセスして多分このDBかなって推測して入力しました)。
で、一応 vagrant reload
して grunt test
するとオレオレ環境と同じエラーになってしまったのでした。エラーの一部がこちら。
1) Tests_Image_Functions::test_pdf_preview_doesnt_overwrite_existing_jpeg
Undefined index: sizes
/vagrant/www/wordpress-trunk/public_html/tests/phpunit/tests/image/functions.php:620
なので、この辺からは Mike さんが引き取ってくれてエラーを解決してくれました。この今回のリーダーをしてくださった Mike Schroder さんがめっっっっちゃくちゃナイスガイで、厚顔無恥な私の質問に根気強く答えてくださった結果。
$ composer update
して、
$ sudo vim /etc/ImageMagick/policy.xml
の中の <policy domain=“coder” rights=“none” pattern=“PDF” />
をコメントアウトしたらOKということが判明しました。
で、も一回 grunt test
を走らせると、やっと OK (2 tests, 71 assertions)
となりました…!やったねー!やー終わった終わった解散解散…(アレ?)
というわけで一個もパッチテスト出来ず仕舞いでしたが、普段は雰囲気で軽率にコマンドを叩いている勢なので、個人的にはめちゃくちゃ勉強になりました。
おまけ:このエラーの原因のヒントになるチケットが PDF preview images are not generated なので興味がある人はチェック。ImageMagickのpolicy.xmlのアップデートでどうもエラーになっているようです。
Gutenbergの開発環境は別だよ!
すんごく長くなったから、こっちは省略しますが、Gutenbergの開発環境構築は別にあるので、 https://github.com/WordPress/gutenberg/blob/master/docs/contributors/getting-started.md を観てください!私はnvm入れてなかったのでちょっと面倒だったけれど、VVVよりは全然、すんなりセットアップできるはず。
本当は、コントリビュータディ一日だけでも、円卓で食べた餃子の美味しさとか、ツワモノ揃いのLT大会とか、色々とご報告したい、たのしいネタがたくさんあったのでそういうことも書きたかったのですが、テストのテストの話を書いておかないと二度とテストにチャレンジしない気がしたので頑張って書いてみました。あとMikeさんほぼ独り占めしてしまった罪悪感をちょっとでも払拭したい感と…。たぶん、たのしいところは他の人が報告してくれるはず。
というわけで、今は5.2リリース前で急ぎのものはないのですが、GWに私と一緒にのんびりテストを回してみるかという奇特な方はれっつとらい。
もいっこおまけ。
Mikeさんが、教えてくれた次世代?開発ツール(たぶん)
pento/testpress: Tool for helping you get a WordPress Core test environment up and running.
まだ、0.3.1ですが、たのしみです。