[{"data":1,"prerenderedAt":341},["ShallowReactive",2],{"$ft6jtkd6xhw3c":3,"$f22ws3p0tiop0l":263},{"featured":4,"latest":129,"categories":227},[5,14,27,37,48,56,66,76,86,96,106,114,122],{"slug":6,"title":7,"date":8,"excerpt":9,"image":10,"categories":11},"custom-database-tables","Custom DataBase Tables","2015-11-24T02:29:34","You can create the new own table freely in the your WordPress database via this plugin. Then, you can make the management of table or (as view or entry or edit) data in a simple user interface.\\nAlso,","\u002Fassets\u002Fuploads\u002F2016\u002F02\u002Fcdbt-overview.png",[12],{"slug":13,"name":7},"cdbt",{"slug":15,"title":16,"date":17,"excerpt":18,"image":19,"categories":20},"10_php_tips_for_developers","PHP開発者が心得ておくべき10の鉄則","2016-01-11T18:38:09","PHPだけに限った話ではないが、プログラミングを行うに当たって、心得て、準備しておくと失敗が劇的に減る事柄をまとめてある良い記事を見つけたので、私なりの解釈で意訳しつつ、経験則を踏まえてあらためてまとめてみた。 オリジナ…","\u002Fassets\u002Fuploads\u002F2016\u002F01\u002Feyecatch-php-10-tips.jpg",[21,24],{"slug":22,"name":23},"column","コラム",{"slug":25,"name":26},"development","開発関連",{"slug":28,"title":29,"date":30,"excerpt":31,"image":32,"categories":33},"jquery-timeline-v1","2種類の横型タイムラインを簡単に作成できる「jQuery.Timeline」をリリース","2017-05-29T14:55:46","現在開発しているサービスで利用するべく、横型タイムラインを生成できるjQueryプラグインを自作したので、そこだけ単独でリリースしてみた。 ソースコード等はGitHubの方にリリースしてあるので、興味のある方は、そち…","\u002Fassets\u002Fuploads\u002F2017\u002F05\u002Fjquery_timeline_image.png",[34],{"slug":35,"name":36},"jqtl","jQuery.Timeline",{"slug":38,"title":39,"date":40,"excerpt":41,"image":42,"categories":43},"optimize-browser-cache-of-static-resources","更新されたJS、CSS、画像のみブラウザキャッシュを破棄して読み込ませる","2018-01-31T15:47:47","WEBサービスの保守や開発をやっていると、JavaScriptやスタイルシート、画像などの静的リソースを更新した際、しばしば「確認したけど、更新されてないよ」とか云われて、「ブラウザのキャッシュを消してからもう一度見て…",null,[44,47],{"slug":45,"name":46},"codes","コード集",{"slug":25,"name":26},{"slug":49,"title":50,"date":51,"excerpt":52,"image":53,"categories":54},"jquery-timeline","jQuery.Timeline version2 – full documentation","2019-03-04T20:40:48","Plugin Overview The jQuery.Timeline plugin provides you two types of the horizontal timeline. You can create a…","\u002Fassets\u002Fuploads\u002F2019\u002F03\u002Fjquery.timeline_v2.jpg",[55],{"slug":35,"name":36},{"slug":57,"title":58,"date":59,"excerpt":60,"image":61,"categories":62},"released-the-sloth","Released the Sloth of mobile-first CSS micro framework!","2019-04-16T18:04:25","I released the “Sloth” that is mobile-first CSS micro framework. I have long used frontend framewo…","\u002Fassets\u002Fuploads\u002F2019\u002F04\u002Fsloth_doc_head.png",[63],{"slug":64,"name":65},"sloth","Sloth",{"slug":67,"title":68,"date":69,"excerpt":70,"image":71,"categories":72},"challenge-to-conceal-the-wordpress-site","WordPressサイトを徹底的に秘匿化する","2020-02-02T23:59:58","私は自分の個人サイトをはじめ、仕事でもWordPressサイトを運用している。WordPressは気軽にサイトを立ち上げられてカスタマイズも簡単な、素晴らしいオープンソースなのだが、世界中で使われまくっているその知名度…","\u002Fassets\u002Fuploads\u002F2020\u002F02\u002Fshutterstock_1878005929.jpg",[73],{"slug":74,"name":75},"wordpress","WordPress関連",{"slug":77,"title":78,"date":79,"excerpt":80,"image":81,"categories":82},"what-is-forkor","Made a shortened URL app called Forkor","2020-07-07T22:27:01","What’s Forkor? Forkor is a service that provides a shortened URL feature that allows you to redirect any…","\u002Fassets\u002Fuploads\u002F2020\u002F07\u002Fforkor.png",[83],{"slug":84,"name":85},"forkor","Forkor",{"slug":87,"title":88,"date":89,"excerpt":90,"image":91,"categories":92},"manual-about-svg-japan","インタラクティブな日本地図を生成するJSプラグイン「SVG Japan」","2020-11-16T21:19:58","各都道府県をそれぞれ選択・クリック可能なインタラクティブな日本地図を生成するネイティブJavaScript建てのプラグイン「SVG Japan」を作ったので、その紹介と使い方をまとめておく。ちなみにソースコードはgit…","\u002Fassets\u002Fuploads\u002F2020\u002F11\u002Fsvg-japan.png",[93],{"slug":94,"name":95},"svg-japan","SVG Japan",{"slug":97,"title":98,"date":99,"excerpt":100,"image":101,"categories":102},"wp-ignitor-plugin-to-conceal-wordpress-site","WordPressサイトを秘匿化するプラグイン「WP Ignitor」","2021-01-19T15:28:21","以前「WordPressサイトを徹底的に秘匿化する」という記事で、WordPress建てのサイトを秘匿化する方法を取り上げたのだが、あれをサイト構築時に毎度実施するとなるととても労力が必要であった。そこで、もっとお手軽…","\u002Fassets\u002Fuploads\u002F2021\u002F01\u002Fbanner-1554x500-1.png",[103],{"slug":104,"name":105},"wp-ignitor","WPイグナイタ",{"slug":107,"title":108,"date":109,"excerpt":110,"image":111,"categories":112},"tastewp","無料でWordPressサイトを複数作成できるWEBサービス「TasteWP」","2021-03-25T20:21:59","私が日本語翻訳に協力しているWEBサービス「TasteWP」について紹介しようと思う。 https:\u002F\u002Ftastewp.com このサービス、サインアップすることなく無料で自分用のWordPressサイトを作れるとい…","\u002Fassets\u002Fuploads\u002F2021\u002F03\u002FTasteWP_screenshot.png",[113],{"slug":74,"name":75},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":120},"monster-hunter-rise-skill-simulator","モンハンライズのスキルシミュレータを作ってみた！","2021-06-28T20:24:52","コラムで連載していたNintendo Switch版『モンスターハンターライズ』のスキルシミュレータ開発がやっと一段落して一通り完了した。いやぁ、記事書きながら同時並行で開発すると思っていた以上に時間がかかるもんだなぁ…","\u002Fassets\u002Fuploads\u002F2021\u002F06\u002Fmhrss_v100.png",[121],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":127},"comparison-of-javascript-date-libraries","JavaScriptの日時ライブラリを比較してみた","2021-07-28T22:39:19","ネイティブJavaScriptで日時を取り扱う場合、ビルトインされているDateオブジェクトを使うことになるのだが、このDateオブジェクトは取り扱いにクセが多く、直感的に日時を操作できない点でも有名である。そこで、専…",[128],{"slug":25,"name":26},[130,141,153,165,175,184,192,195,198,206,213,220],{"slug":131,"title":132,"date":133,"excerpt":134,"image":135,"categories":136},"pulllog_launched","ガチャ履歴を記録・分析できるWebサービス「PullLog」","2025-08-22T13:05:30","このたび、新しい個人開発サービスとして 「PullLog（プルログ）」 をリリースした。 URLはこちら https:\u002F\u002Fpulllog.net PullLogとは？ PullLogは、ソーシャルゲームのガチャ履歴を記録…","\u002Fassets\u002Fuploads\u002F2025\u002F08\u002Fpulllog_stats_jp.png",[137,140],{"slug":138,"name":139},"industries","プロダクト",{"slug":25,"name":26},{"slug":142,"title":143,"date":144,"excerpt":145,"image":146,"categories":147},"mockapi-php-openapi-schema-generation","モックAPIのレスポンスから OpenAPI 3.0 スキーマを自動生成するPHPツール","2025-04-17T09:31:52","私自身がそうなのですが、OpenAPI仕様書を毎回手作業で書いていて「面倒だな」と思ったことはありませんか？ そんな（私と）あなたにぴったりのツールがあります。 レスポンスの例さえ用意すれば、OpenAPI 3.0 スキ…","\u002Fassets\u002Fuploads\u002F2025\u002F04\u002Fswaggerui-preview.png",[148,151,152],{"slug":149,"name":150},"mockapi-php","MockAPI-PHP",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":154,"title":155,"date":156,"excerpt":157,"image":158,"categories":159},"ambient_playlist_customize","Ambientでメメントモリのラメントプレイヤーを作る","2023-11-30T17:32:39","「Ambient」の最新バージョン 1.2.0で実装した「疑似フェーダー」機能を使って、ソーシャルゲーム「メメントモリ」のYouTube公式チャンネルで公開されているMVを集約したラメント専用プレイヤーを作ってみた。 ラ…","\u002Fassets\u002Fuploads\u002F2023\u002F11\u002Fambient_mememori_1.png",[160,163,164],{"slug":161,"name":162},"ambient","Ambient",{"slug":138,"name":139},{"slug":25,"name":26},{"slug":166,"title":167,"date":168,"excerpt":169,"image":170,"categories":171},"released_ambient_demo_version","Ambientメディアプレイヤーのクラウド版デモを公開","2023-11-22T13:47:36","つい先日「Ambient」の最新バージョン 1.1.0をリリースして、それに合わせてクラウド版デモサイトも公開してみた。 なお、クラウド版デモでローカルのホストコンピュータのメディアを再生するには、そのメディアファイルも…","\u002Fassets\u002Fuploads\u002F2023\u002F10\u002FAmbientMediaPlayer-typologo.png",[172,173,174],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":176,"title":177,"date":178,"excerpt":179,"image":170,"categories":180},"ambient-media-player","YouTubeと自分のPC内メディアを同時に再生できるメディアプレイヤーを作ってみた","2023-10-20T00:00:25","私はよくPCで何か作業をするときには音楽を垂れ流していることが多い。 そういう時にかける曲は、手持ちのアルバムCD等からPCに取り込んだ音源だったり、さらにはYouTubeの動画だったりとメディアや再生環境がバラバラだ。…",[181,182,183],{"slug":161,"name":162},{"slug":138,"name":139},{"slug":25,"name":26},{"slug":185,"title":186,"date":187,"excerpt":188,"image":189,"categories":190},"what-is-the-sunorhc","Sunorhc is a date-time library for JavaScript","2021-08-25T22:55:55","Sunorhc is a lightweight library for handling dates and times for JavaScript. The library wraps a native JavaS…","\u002Fassets\u002Fuploads\u002F2021\u002F08\u002Fshutterstock_1091212919_resized.jpg",[191],{"slug":25,"name":26},{"slug":123,"title":124,"date":125,"excerpt":126,"image":42,"categories":193},[194],{"slug":25,"name":26},{"slug":115,"title":116,"date":117,"excerpt":118,"image":119,"categories":196},[197],{"slug":25,"name":26},{"slug":199,"title":200,"date":201,"excerpt":202,"image":203,"categories":204},"mhrise-skill-simulator-creation-chapter-12","モンスターハンターライズのスキルシミュレータを作ってみる！ 第12回","2021-06-21T13:11:46","今回は「マイセット登録」と護石データの「エクスポート／インポート」機能の追加をしていく。折り良く（悪く？）「FF7リメイク・インターグレード」や「FORTNITEシーズン7」が出たこともあって、そっちをプレイしてたらこ…","\u002Fassets\u002Fuploads\u002F2021\u002F04\u002Fb6ca09e9a7f6faf27641f62dabe64c6ff97b4f326aa478379e3c112aa28eb9ab.jpg",[205],{"slug":22,"name":23},{"slug":207,"title":208,"date":209,"excerpt":210,"image":203,"categories":211},"mhrise-skill-simulator-creation-chapter-11","モンスターハンターライズのスキルシミュレータを作ってみる！ 第11回","2021-06-07T14:52:31","さて、今回はユーザー個別データの管理部分を開発していく予定だが、まずその前にやっておくことがある。 新スキル「風雷合一」に対応する Ver.3.0の大型無料アップデートで追加された新スキルに「風雷合一」というのがある…",[212],{"slug":22,"name":23},{"slug":214,"title":215,"date":216,"excerpt":217,"image":203,"categories":218},"mhrise-skill-simulator-creation-chapter-10","モンスターハンターライズのスキルシミュレータを作ってみる！ 第10回","2021-06-02T00:29:10","今回は、護石管理画面の作成だ。この護石管理では、ユーザーごとに護石の登録を行う機能と、登録した護石を削除する機能を持つ仕様になる。この画面から登録した護石データはデータベースに格納するので、フロントエンド側からのリクエス…",[219],{"slug":22,"name":23},{"slug":221,"title":222,"date":223,"excerpt":224,"image":203,"categories":225},"mhrise-skill-simulator-creation-chapter-9","モンスターハンターライズのスキルシミュレータを作ってみる！ 第9回","2021-05-22T23:56:27","さて、今回はVuexによるデータ・キャッシュの実装だ。一度データベースから読み込んだデータをフロントエンド側で再利用可能なストアに格納することで、データベースへの接続回数を減らしてシステム負荷を下げるとともに、UX的な…",[226],{"slug":22,"name":23},[228,230,232,236,238,239,240,241,242,244,247,248,250,252,254,258,261],{"slug":161,"name":162,"count":229},3,{"slug":13,"name":7,"count":231},7,{"slug":233,"name":234,"count":235},"csnp","Custom Sticky Notes",2,{"slug":84,"name":85,"count":237},1,{"slug":35,"name":36,"count":229},{"slug":149,"name":150,"count":237},{"slug":64,"name":65,"count":237},{"slug":94,"name":95,"count":237},{"slug":74,"name":75,"count":243},37,{"slug":245,"name":246,"count":237},"wpqt","WP Qiita",{"slug":104,"name":105,"count":237},{"slug":22,"name":23,"count":249},29,{"slug":45,"name":46,"count":251},16,{"slug":138,"name":139,"count":253},5,{"slug":255,"name":256,"count":257},"lifelog","ライフログ",64,{"slug":259,"name":260,"count":235},"uncategorized","未分類",{"slug":25,"name":26,"count":262},45,{"type":264,"post":265},"post",{"slug":266,"title":267,"date":268,"excerpt":269,"image":270,"categories":271,"modified":273,"html":274,"tags":275,"related":294,"prev":324,"next":333},"do-unit-test-of-wordpress-plugin-using-wp-cli-and-phpunit-in-xampp-environment","XAMPP環境でwp-cliとphpunitを使ってWordPressプラグインのテストを行う","2016-03-04T19:10:48","以前に書いた「XAMPP環境でphpunitをインストールしてユニットテストを実行する」の記事の続編である。 いやはや…最近、公開しているプラグインの機能が増えて来たこともあってか、ビルドバージョンのアップだけなのに、作…","\u002Fassets\u002Fuploads\u002F2016\u002F03\u002Fshutterstock_218803594_resized.jpg",[272],{"slug":74,"name":75},"2021-05-13T20:17:12","\u003Cp>以前に書いた「\u003Ca href=\"\u002F\u002Fka2.org\u002Fhow-to-install-phpunit-in-xampp-for-windows\u002F\">XAMPP環境でphpunitをインストールしてユニットテストを実行する\u003C\u002Fa>」の記事の続編である。\u003C\u002Fp>\n\u003Cp>いやはや…最近、公開しているプラグインの機能が増えて来たこともあってか、ビルドバージョンのアップだけなのに、作業コストがかなり増大して来た。それもこれも、テスト項目が多すぎて人力試験では手が回らなくなって来たのが原因だ。そのために、試験してるのに品質が上がらず、リリースしてもバグが潰し切れてないということが目立つようになって来た。さすがに、もう一人で試験していても効率が悪くなる一方だ──という判断から、phpunitでのユニットテストを導入することにした次第。\u003C\u002Fp>\n\u003Cp>昨年、WordCampでWordPressコアの開発に参加した際、WordPress環境でphpunit使ってユニットテストしていたので、その時の手順を思い返しながら、\u003Cstrong>Windows（XAMPP）環境下\u003C\u002Fstrong>に、WP-CLIとphpunitを入れてプラグインのテスト環境を構築してみた（いやぁ、WordCamp参加してて本当に良かった…）。\u003C\u002Fp>\n\u003Cp>ただし、最初に結論を書いておくが、\u003Cstrong>Windows環境でWordPress+phpunitの試験環境を構築するのは凄まじく大変である\u003C\u002Fstrong>。まさに茨の道…というか修羅の道に近い（笑）。私も途中で何度か諦めかけたので、素直にVCCWに頼った方が良いだろう。\u003C\u002Fp>\n\u003Cp>この記事はその修羅の道を歩みたいというM的気質の方向けの道しるべとして残しておこう。\u003C\u002Fp>\n\u003Ch2>Windows（XAMPP）環境にWP-CLIをインストールする\u003C\u002Fh2>\n\u003Cp>\u003Ca href=\"http:\u002F\u002Fwp-cli.org\u002F\">WP-CLI\u003C\u002Fa>はコマンドラインからWordPressを操作できるようになるツールである。これを使うとWordPressの本体を含め、プラグインやテーマのインストールやらアップデートなどおよそWordPress環境関連の開発や制御が驚くほど簡単にできるようになる。基本的にコマンドラインから\u003Ccode>wp --[option]\u003C\u002Fcode>のようにして利用できるのも便利なところだ。\u003Cbr \u002F>\nただ、このツールはWindowsには限定的にしか対応しておらず、公式サイトでもWindows環境へのインストール方法が紹介されていない。私の開発環境はWindowsなので、まずはそこを克服する必要がある。\u003C\u002Fp>\n\u003Cp>まず、本体がないと始まらないので、\u003Ca href=\"http:\u002F\u002Fwp-cli.org\u002F\">WP-CLIの公式サイト\u003C\u002Fa>から\u003Ca href=\"\u002F\u002Fraw.github.com\u002Fwp-cli\u002Fbuilds\u002Fgh-pages\u002Fphar\u002Fwp-cli.phar\">wp-cli.phar\u003C\u002Fa>をダウンロードし、ダウンロードした.pharファイルはXAMPPのPHP実行環境（一般的には\u003Ccode>C:\\xampp\\php\u003C\u002Fcode>）に置く。\u003C\u002Fp>\n\u003Cp>その後、同じディレクトリパスに\u003Ccode>wp.cmd\u003C\u002Fcode>を作成して、ファイル内に下記のように記述する。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>@php \"%~dp0wp-cli.phar\" %*\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>この辺はXAMPPにphpunitをインストールする方法と同じである。XAMPPのPHPへのパスの通し方などは「\u003Ca href=\"\u002F\u002Fka2.org\u002Fhow-to-install-phpunit-in-xampp-for-windows\u002F\">XAMPP環境でphpunitをインストールしてユニットテストを実行する\u003C\u002Fa>」の記事を参照してほしい。\u003Cbr \u002F>\nさて、これでWP-CLIが晴れてWindowsのXAMPP環境にインストールされたことになる。さっそくコマンドラインから\u003Ccode>wp\u003C\u002Fcode>コマンドを発行してみよう。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&gt; wp --info\nPHP binary:     C:\\xampp\\php\\php.exe\nPHP version:    5.6.14\nphp.ini used:   C:\\xampp\\php\\php.ini\nWP-CLI root dir:        phar:\u002F\u002Fwp-cli.phar\nWP-CLI global config:\nWP-CLI project config:\nWP-CLI version: 0.22.0\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>──というように表示されれば動作確認はOKだ。\u003C\u002Fp>\n\u003Ch2>プラグイン試験用のWordPress環境をWP-CLIで作る\u003C\u002Fh2>\n\u003Cp>ここからがカオスな領域だ。私も七転八倒した感じなので、もし実際にこの道を歩みたいと思っている方はまず一度この章を最後まで読み切ってから、自分なりのベストプラクティスを考えながら実施することをおススメする。\u003C\u002Fp>\n\u003Ch3>WP-CLIでWordPress環境構築\u003C\u002Fh3>\n\u003Cp>まず、phpunitでユニットテストを行うプラグイン用のWordPress環境はテスト専用として独立させておいた方が良いだろう。ということで、XAMPPのドキュメントルート上にテスト専用のディレクトリを作成し、そこにテスト用のWordPressをインストールすることにした。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash:\">&gt; cd c:\\xampp\\htdocs\n&gt; mkdir test.wordpress\n&gt; cd test.wordpress\n&gt; wp core download\nDownloading WordPress 4.4.2 (en_US)...\nSuccess: WordPress downloaded.\n&gt; wp core config --dbname=wp_unittest --dbuser=root\nSuccess: Generated wp-config.php file.\n&gt; mysql -u root\nMariaDB [(none)]&gt; create database wp_unittest;\nQuery OK, 1 row affected (0.03 sec)\nMariaDB [(none)]&gt; exit\nBye\n&gt; wp core install --url=localhost\u002Ftest.wordpress --title=for_test --admin_user=admin --admin_password=password --admin_email=***@***\nSuccess: WordPress installed successfully.\n&gt; wp scaffold plugin for-unittest-plugin --path=`c:\\xampp\\htdocs\\test.wordpress`\nSuccess: Created plugin files.\nSuccess: Created test files.\n&gt; cd $(wp plugin path for-unittest-plugin --dir)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>これで、XAMPPのドキュメントルート（一般的に\u003Ccode>c:\\xampp\\htdocs\u003C\u002Fcode>）直下の\u003Ccode>test.wordpress\u003C\u002Fcode>フォルダ内にテスト用のWordPressがインストールされ、そのWordPress内にユニットテスト用の「for-unittest-plugin」というプラグインのひな形が登録される。\u003Cbr \u002F>\n最後の\u003Ccode>cd\u003C\u002Fcode>は指定したプラグインのディレクトリ直下に移動するためのコマンドだ。\u003C\u002Fp>\n\u003Ch3>Cygwin編 ─ バッドエンド\u003C\u002Fh3>\n\u003Cp>次に、プラグインを試験するためのWordPress環境を作ってあげる必要がある。これがないと、プラグイン内のソースでWordPressに依存している部分（ファイルパスやテンプレート関数など）がエラーになってユニットテストどころではないのだ。実際、上記のコマンドの後で\u003Ccode>phpunit\u003C\u002Fcode>コマンドでユニットテストを実行してみると、WordPressで定義される定数がないというエラーが出る。\u003Cbr \u002F>\nそんなわけで、ユニットテスト用のWordPress実行環境を構築したいのだが、いかんせん、ユニットテスト用のWordPress環境を構築するためのシェルファイル（WP-CLIの\u003Ccode>wp scaffold plugin\u003C\u002Fcode>コマンドで作成されたプラグインのひな形フォルダ内の\u003Ccode>bin\u002Finstall-wp-tests.sh\u003C\u002Fcode>）がWindows環境では動かせない。Gitのクライアントを入れているとWindowsのコマンドプロンプトでも\u003Ccode>bash\u003C\u002Fcode>が使えるのだが、シェルファイルのパスを通してあげても正常に動作しなかった。\u003Cbr \u002F>\nそこで、Windows上にUNIX（Linux）環境を構築するために\u003Cstrong>Cygwin\u003C\u002Fstrong>をインストールすることにした。\u003C\u002Fp>\n\u003Cp>やってから後悔したが、この時点でXAMPP使っている意味がなくなるのでCygwinへの道はオススメしない…。\u003C\u002Fp>\n\u003Cp>Cygwinのインストールだが、まずは\u003Ca href=\"\u002F\u002Fwww.cygwin.com\u002F\">Cygwinの公式サイト\u003C\u002Fa>から、利用しているWindowsOSの種別（32bitか64bit）に合わせてEXEファイルをダウンロードする。ダウンロードしたEXEファイルを開けばインストーラーが起動するので、後はインストーラーの手順に沿って進めればよい…そう、それでよい…ような気がしたんだが、覚悟してほしい。インストールには個々のネットワーク環境にもよるが、\u003Cstrong>10時間以上かかる\u003C\u002Fstrong>。私の場合、昼の14時に開始して、24時の時点でも終わってなかった（ダウンロードは終わっていたが、インストール中で40%ぐらいの進捗率だった）。そんなわけで、この道を選んだ方はその日の作業継続はあきらめて寝てしまおう（なんちゅー手順だ…）。\u003C\u002Fp>\n\u003Cp>なお、先ごろCygwinの導入から利用法までのクイックリファレンスとして下記の記事を紹介してもらったので、ここに引用しておく（Thanks Marc!）\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fwww.pcwdld.com\u002Fcygwin-cheat-sheet\">Cygwinチートシート\u003C\u002Fa>\n\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cp>さて、次の日になるとおそらくCygwinのインストールが終わっている（笑）。\u003Cbr \u002F>\nこれで\u003Ccode>bash\u003C\u002Fcode>コマンドが実行できるようになっているので、\u003Ccode>install-wp-tests.sh\u003C\u002Fcode>をテキストエディッターで開いて、bashのパスをCygwin側に通してあげる必要がある。Cygwinの実行パスは私の場合64ビットOS版だったので、\u003Ccode>C:\\cygwin64\\bin\u003C\u002Fcode>だった。なのでシェルファイルの1行目のshebangを次のように書き換える。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>#!\u002Fcygwin64\u002Fbin\u002F bash\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>では、さっそくCygwinのターミナルを起動して、\u003Ccode>install-wp-tests.sh\u003C\u002Fcode>を実行してみよう。なぜかWordPressのバージョン指定で\u003Ccode>latest\u003C\u002Fcode>にすると見つからないと怒られたので、\u003Ccode>nightly\u003C\u002Fcode>でやってみた。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$ cd \u002Fcygdrive\u002Fc\u002Fxampp\u002Fhtdocs\u002Ftest.wordpress\u002Fwp-content\u002Fplugins\u002Ffor-unittest-plugin\n$ bash bin\u002Finstall-wp-tests.sh wordpress_test root '' localhost nightly\n$ bash bin\u002Finstall-wp-tests.sh wordpress_test root '' localhost nightly\n$ bash bin\u002Finstall-wp-tests.sh wordpress_test root '' localhost nightly\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>なぜ3回同じコマンドを実行しているかというと、なぜかシェル内で関数化されている各プロセス（\u003Ccode>install_wp\u003C\u002Fcode>と\u003Ccode>install_test_suite\u003C\u002Fcode>と\u003Ccode>install_db\u003C\u002Fcode>）が連続で実行されないからだ。おそらくCygwin側にWP-CLIがインストールされていないため、内部でWP-CLIに依存している処理があって、そこでエラーになって終了されてしまうのかもしれない（よくわからん）。まぁ、bash実行する前にCygwinにWP-CLIをインストールすれば解決するのだろうが、PHPからインストールしないといかんのでさすがにそれはパスした。\u003Cbr \u002F>\nもしCygwin+WP-CLIの環境構築というもう一つの修羅の道を歩みたい方は、下記のページを道しるべにしてみると良いだろう。\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\n  \u003Ca href=\"http:\u002F\u002Fwww.mao-engineer.jp\u002Fblog\u002Fwordpress\u002F1343\">【Windows 編】Cygwin を使用して WP-CLI をインストールする\u003C\u002Fa>\u003Cbr \u002F>\n   \u003Ca href=\"http:\u002F\u002Fwww.mao-engineer.jp\u002F\" title=\"\" class=\"origin pull-right\">Mao PC エンジニア\u003C\u002Fa>\n\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cp>3回目のシェル実行後、\u003C\u002Fp>\n\u003Cpre>\u003Ccode>+ mysqladmin create wordpress_test --user=root --password= --host=localhost --protocol=tcp\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>──と表示されれば、普通はユニットテスト用のWordPressの実装は完了なのだが…Windows環境ではこのままではダメだ。まず、Cygwin経由のbashで展開されるtmp\u002Fフォルダがシステムルートにないので、移動してあげる必要がある。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$ mv \u002Fcygdrive\u002Fc\u002Fcygwin64\u002Ftmp \u002Fcygdrive\u002Fc\u002F.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>これで\u003Ccode>C:\\tmp\\\u003C\u002Fcode>の下にユニットテスト用のWordPressが準備できた。しかし、\u003Ccode>C:\\tmp\\wordpress\\\u003C\u002Fcode>の中身を見てみて欲しい。何も入っていないハズだ。そう、Cygwinでのシェルスクリプト実行ではダウンロードが軒並み失敗している。私の場合、svnリポジトリからのダウンロードは成功していたが、もしもsvnがWindowsにインストールされていない場合はそっちもコケていて、フォルダの中身はすべて空っぽかもしれない…。\u003C\u002Fp>\n\u003Cp>Windows環境ではひな形に同梱されているシェルスクリプトではテスト環境構築をする場合には、Cygwin+WP-CLI環境が必要ということになるのかもしれない（試してないので何とも言えないが）。今さらXAMPPでインストール済みのPHPやらMySQL、それに今回既にインストールしたWP-CLIをさらにCygwin用にインストールし直すのはこの記事の（XAMPPで…という）主旨にマッチしないので却下だ。そんなわけで、このルートは私的にはバッドエンドということで封印することにした（涙）\u003C\u002Fp>\n\u003Ch3>手動編 ─ トゥルーエンド！？\u003C\u002Fh3>\n\u003Cp>気を取り直して、一番やりたくなかった原始的な方法に頼ることにした。つまりは、\u003Ccode>install-wp-tests.sh\u003C\u002Fcode>のシェルスクリプトで実行されるコマンドを手動でやって行く──ということだ。あぁ、まさに修羅の道…。WP-CLIがインストール済みなのが唯一の救いである。\u003C\u002Fp>\n\u003Cp>Cygwin編をやっているといくつかのコマンドは不要になるが、ここではCygwinなんぞないモノとしてシェルスクリプトで実行されるコマンドをすべて順に実行していく。私はPowerShell使いなので、下記コマンドはPS準拠である。\u003C\u002Fp>\n\u003Ch4>1. ダウンロード ～ インストール\u003C\u002Fh4>\n\u003Cp>シェルスクリプトでいうところの\u003Ccode>download()\u003C\u002Fcode>と\u003Ccode>install_wp()\u003C\u002Fcode>の部分だ。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&gt; cd \u002F\n&gt; mkdir -p \u002Ftmp\u002Fwordpress\n&gt; mkdir -p \u002Ftmp\u002Fwordpress-nightly\n&gt; (new-object System.Net.WebClient).Downloadfile(\"https:\u002F\u002Fwordpress.org\u002Fnightly-builds\u002Fwordpress-latest.zip\", \"\u002Ftmp\u002Fwordpress-nightly\u002Fwordpress-nightly.zip\")\n&gt; unzip -q \u002Ftmp\u002Fwordpress-nightly\u002Fwordpress-nightly.zip -d \u002Ftmp\u002Fwordpress-nightly\u002F\n&gt; mv \u002Ftmp\u002Fwordpress-nightly\u002Fwordpress\u002F* \u002Ftmp\u002Fwordpress\u002F\n&gt; (new-object System.Net.WebClient).Downloadfile(\"https:\u002F\u002Fraw.github.com\u002Fmarkoheijnen\u002Fwp-mysqli\u002Fmaster\u002Fdb.php\", \"\u002Ftmp\u002Fwordpress\u002Fwp-content\u002Fdb.php\")\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>ファイルのダウンロードコマンドについては私はPowerShell組込みのコマンドでやったが、もし\u003Ccode>wget\u003C\u002Fcode>使えるならば\u003Ccode>-O\u003C\u002Fcode>オプション付きでやっても問題ない。\u003C\u002Fp>\n\u003Ch4>2. テストライブラリのインストール\u003C\u002Fh4>\n\u003Cp>シェルスクリプトでいうところの\u003Ccode>install_test_suite()\u003C\u002Fcode>の部分だ。要SVNインストール済みのこと。WindowsへのSVNインストールは過去に書いた「\u003Ca href=\"\u002F\u002Fka2.org\u002Fprocedure-of-wordpress-core-contribution-for-windows-pc-users\u002F\">Windows PCユーザー向け WordPressコア修正環境の構築手順\u003C\u002Fa>」を参照してほしい。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&gt; mkdir -p \u002Ftmp\u002Fwordpress-tests-lib\n&gt; svn co --quite https:\u002F\u002Fdevelop.svn.wordpress.org\u002Ftrunk\u002Ftests\u002Fphpunit\u002Fincludes\u002F \u002Ftmp\u002Fwordpress-tests-lib\u002Fincludes\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>もし、コマンドラインでsvnコマンドが使えない場合、作成した\u003Ccode>\u002Ftmp\u002Fwordpress-tests-lib\u003C\u002Fcode>フォルダ内でGUIから右クリックしてチェックアウトしても良い（下図参照）。\u003C\u002Fp>\n\u003Cp>\u003Cimg data-recalc-dims=\"1\" decoding=\"async\" src=\"\u002Fassets\u002Fuploads\u002F2016\u002F03\u002Funittest-svn_checkout.png\" alt=\"SVN Checkout\" \u002F>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&gt; cd \u002Ftmp\u002Fwordpress-tests-lib\n&gt; (new-object System.Net.WebClient).Downloadfile(\"https:\u002F\u002Fdevelop.svn.wordpress.org\u002Ftrunk\u002Fwp-tests-config-sample.php\", \"\u002Ftmp\u002Fwordpress-tests-lib\u002Fwp-tests-config.php\")\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>ここからは\u003Ccode>sed\u003C\u002Fcode>コマンドが使えるかどうかで手順が分かれる（Windows版のGitをインストールしていると\u003Ccode>sed\u003C\u002Fcode>が使える）。とりあえずはコマンドラインで\u003Ccode>sed --version\u003C\u002Fcode>を実行してエラーにならないか確認してみて欲しい。\u003Ccode>sed\u003C\u002Fcode>が利用可能なら、引き続きコマンドラインで下記コマンドを実行していく。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&gt; sed -i \"s:dirname( __FILE__ ) . '\u002Fsrc\u002F':'\u002Ftmp\u002Fwordpress\u002F':\" C:\\tmp\\wordpress-tests-lib\\wp-tests-config.php\n&gt; sed -i \"s\u002Fyouremptytestdbnamehere\u002Fwordpress_test\u002F\" C:\\tmp\\wordpress-tests-lib\\wp-tests-config.php\n&gt; sed -i \"s\u002Fyourusernamehere\u002Froot\u002F\" C:\\tmp\\wordpress-tests-lib\\wp-tests-config.php\n&gt; sed -i \"s\u002Fyourpasswordhere\u002F\u002F\" C:\\tmp\\wordpress-tests-lib\\wp-tests-config.php\n&gt; sed -i \"s|localhost|localhost|\" C:\\tmp\\wordpress-tests-lib\\wp-tests-config.php\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>もし\u003Ccode>sed\u003C\u002Fcode>コマンド実行時にパーミッションエラーが出る場合は、別途、管理者権限でPowerShellを開いて実行すれば問題ない。\u003C\u002Fp>\n\u003Cp>\u003Ccode>sed\u003C\u002Fcode>コマンドを使わずに設定を変更する場合は、直接\u003Ccode>C:\\tmp\\wordpress-tests-lib\\wp-tests-config.php\u003C\u002Fcode>をGUI側から開いてファイルを編集することになる。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F* Path to the WordPress codebase you'd like to test. Add a forward slash in the end. *\u002F\ndefine( 'ABSPATH', '\u002Ftmp\u002Fwordpress\u002F' );\n\n(中略)\n\ndefine( 'DB_NAME', 'wordpress_test' );\ndefine( 'DB_USER', 'root' );\ndefine( 'DB_PASSWORD', '' );\ndefine( 'DB_HOST', 'localhost' );\ndefine( 'DB_CHARSET', 'utf8mb4' );\ndefine( 'DB_COLLATE', '' );\n\n(省略)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>上記のように設定を書き換えればOKだ。\u003C\u002Fp>\n\u003Ch4>3. テスト用データベースの準備\u003C\u002Fh4>\n\u003Cp>シェルスクリプトでいうところの\u003Ccode>install_db()\u003C\u002Fcode>の部分だ。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&gt; mysqladmin create wordpress_test --user=root --host=localhost --protocol=tcp\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>これで完了だ。\u003C\u002Fp>\n\u003Ch2>phpunitを実行してみる\u003C\u002Fh2>\n\u003Cp>長い道のりの末、ようやくWindows（XAMPP）環境でのWordPress+phpunitによるテスト環境の準備ができたので、早速プラグインのユニットテストを試してみよう。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&gt; cd C:\\xampp\\htdocs\\test.wordpress\\wp-content\\plugins\\for-unittest-plugin\n&gt; phpunit\nInstalling...\nRunning as single site... To run multisite, use -c tests\u002Fphpunit\u002Fmultisite.xml\nNot running ajax tests. To execute these, use --group ajax.\nNot running ms-files tests. To execute these, use --group ms-files.\nNot running external-http tests. To execute these, use --group external-http.\nPHPUnit 5.0.10 by Sebastian Bergmann and contributors.\n\n.                                                                  1 \u002F 1 (100%)\n\nTime: 5.7 seconds, Memory: 22.25Mb\n\nOK (1 test, 1 assertion)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>やっと動いた…感無量だ（T△T）\u003C\u002Fp>\n\u003Cp>WordPressの開発って、ホント、Windowsユーザーに過酷な道を強いるわぁ…素直にMACで開発するのが一番なのかもしれない。\u003C\u002Fp>\n",[276,278,280,282,285,287,289,291],{"slug":277,"name":277},"cygwin",{"slug":279,"name":279},"phpunit",{"slug":281,"name":281},"powershell",{"slug":283,"name":284},"svn","SVN",{"slug":74,"name":286},"WordPress",{"slug":288,"name":288},"wp-cli",{"slug":290,"name":290},"xampp",{"slug":292,"name":293},"%e3%83%a6%e3%83%8b%e3%83%83%e3%83%88%e3%83%86%e3%82%b9%e3%83%88","ユニットテスト",[295,302,310,317],{"slug":296,"title":297,"date":298,"excerpt":299,"image":42,"categories":300},"how-to-install-phpunit-in-xampp-for-windows","XAMPP環境でphpunitをインストールしてユニットテストを実行する","2015-11-06T17:20:40","元々、XAMPPにはphpunitがバンドルされているのだが、Pear版の古いバージョンである（PHPUnit-1.3.2とPHPUnit-2.3.6）ため、最新のphpunitでユニットテストを行う場合、改めてインスト…",[301],{"slug":25,"name":26},{"slug":303,"title":304,"date":305,"excerpt":306,"image":307,"categories":308},"procedure-of-wordpress-core-contribution-for-windows-pc-users","Windows PCユーザー向け WordPressコア修正環境の構築手順","2015-11-05T15:30:46","では早速、「コントリビューターデイ」で教わったMac用の手順を、Windowsマシンを作業用PCにしている人向けにコンバートしていきます（ハウツー形式の記事なので、珍しくですます調で書いてます）。 1. WordPres…","\u002Fassets\u002Fuploads\u002F2015\u002F11\u002Fmake_wordpress_core.png",[309],{"slug":25,"name":26},{"slug":311,"title":312,"date":313,"excerpt":314,"image":42,"categories":315},"optimize-the-repository-management-of-wordpress-plugins","WordPressプラグインのリポジトリ管理を最適化する","2015-09-28T17:04:28","CustomDataBaseTables Version2のプラグインを公開するにあたって、ついでに今後の運用がしやすいようにリポジトリの管理フローを自分なりに最適化してみようと思った次第。 ちなみに、現状のリポジトリ管…",[316],{"slug":74,"name":75},{"slug":318,"title":319,"date":320,"excerpt":321,"image":42,"categories":322},"running-mysql57-in-xampp","XAMPP環境で MySQL 5.7 を動かす","2017-06-02T00:42:25","MySQLのJSON型を使って開発をしたい。しかも、XAMPP環境で…！ ──Vagrant + VirtualBox 使えばええやん。 確かにその通りだ。その通りなのだが、私の非力なノートPC（メモリ4GBのWi…",[323],{"slug":25,"name":26},{"slug":325,"title":326,"date":327,"excerpt":328,"image":329,"categories":330},"shortcode-that-can-translate-of-the-post-contents-at-any-time-when-you-need-them","後付けでコンテンツを多国語化できるショートコード","2016-02-19T12:17:38","現在、自分のプラグインのドキュメンテーションをしているのだが、将来的には今書いているドキュメンテーション系のコンテンツは多国語化しようと思っている。 では、いざ多国語化しようとする時に、実際にはどうやってやろうか…と、ふ…","\u002Fassets\u002Fuploads\u002F2016\u002F02\u002Fquick-translate-eyecatch.png",[331,332],{"slug":74,"name":75},{"slug":45,"name":46},{"slug":334,"title":335,"date":336,"excerpt":337,"image":338,"categories":339},"what-to-do-if-search-results-displaying-nothing-when-using-iframe-in-google-adsense","Google Adsenseで検索結果のiframeが表示されない時の対処法","2016-03-09T18:26:27","Google Adsenseの検索ユニットには検索結果の表示方法が3つあり、iframe を使用して自分のウェブサイトに表示する方法を選択して実装した時に検索結果が表示されないという症状に陥いる場合がある。その時の解決方…","\u002Fassets\u002Fuploads\u002F2016\u002F03\u002Fgoogle-adsense-logo.png",[340],{"slug":45,"name":46},1793391397845]