投稿者「をかもと」のアーカイブ

自作のプラグインに wp-cli コマンドを追加しよう ( WP-CLI Advent Calendar 2014 11日目 )

WP-CLIアドベントカレンダーの11日目です。
昨日は @tecking さんの「bashかわいいよbash-さくらのレンタルサーバでも『WP-CLI』の入力補完機能を」でした。
今回は、自作のプラグインに wp-cli 用のコマンドを追加する方法についてです。
最近、Theme Check プラグインを wp-cli 対応させるコードを書いてプルリクした(まだ、マージされてない)ので、それを元に解説します。
wokamoto/theme-check

実際に追加したのは theme-check.php の下3行と、wp-cli.php です。
続きを読む

Chef で wp-cli を管理するためのレシピ ( WP-CLI Advent Calendar 2014 4日目 )

WP-CLIアドベントカレンダーの4日目です。
昨日は @tecking さんの「レンタルサーバに『WP-CLI』をサクっと入れるシェルスクリプト作ってみたよ」でした。
てわけで、今回の僕の記事はインフラ自動化フレームワーク Chef用の wp-cli レシピについて解説します。
Chef ってなんなの?って人はおググりください。
要するにインフラの構成管理を自動化するためのツールです。

wp-cli のインストールは通常公式サイトにもあるように github で公開されているリポジトリから wp-cli.phar を取ってきて実行権限を与え、パスが通っているところに置いてあげます。

$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/local/bin/wp

ただ、これだと wp-cli のアップデートがあった時に再度手動でダウンロードして置き換えてあげないといけません。
めんどくせーですよね。
そんなわけで Chef の登場です。この github リポジトリを clone して適切にアップデートできるようにレシピを書いてあげましょう。
続きを読む

WordPress JSON REST API に独自の endpoint を追加する

先日、参加してきた WordCamp San Francisco 2014 でも話題になってた WP JSON REST API に独自の endpoint を追加する方法です。
# WordCamp San Francisco とか WordCamp Kansai とかのイベントにも参加してるんですけど、ブログ書いてないすいません

まず WP REST API とは、なんぞやって話ですが
これは、WordPress Ver.4.1 もしくはそれ以降のバージョンで本体に組み込まれる予定の機能です。
現在はプラグインとして提供されていますので、これをインストールすることで利用できるようになります。
WordPress › JSON REST API (WP API) « WordPress Plugins
この API を使うことで、WordPress に関するありとあらゆる操作が REST API 化され、結果が JSON で返ってきます。
例えば、この投稿に関する情報は以下の URL から取得できます。
https://dogmap.jp/wp-json/posts/3136

この API に対して独自の endpoint を追加する方法について解説します。
詳しいことは、以下の URL を参照してください。
Extending the API – WP REST API Documentation
続きを読む

WordPress プロフェッショナル養成読本

WordPress プロフェッショナル養成読本」という本を、@naokomcさん、@428designさん、@masatoshisomeyaさんとかと一緒に書きました。
と言っても、例のごとく出版社の人とは一度も会ったこと無いんですけどね。
もっぱら、やりとりはメールか Facebook だけ。現行の入稿も技評さんの GitLab サーバへの push で送るというリモートワークっぷり。
まったく良い時代になったもんです。
WordCamp Tokyo 2014 の会場内で先行販売されるようですので、そちらに行く予定のある人はぜひー

さて、僕が書いたのは第6章「WordPress ユーザのための Nginx 入門」って所です。
仕事でよく使う Nginx をネタにしてインストールから設定まで、はじめて Nginx 触る人でもなんとか WordPress を動かせるようにするところまではサポートしてるはずです。
(若干、駆け足気味ですが)

以下、僕の章の目次

  • Nginx とは? – Nginx のサーバ構成や特徴
  • Nginx で WordPress を利用するには – インストールと設定
  • Nginx の設定(基本編) – WordPress の運用に役立つ
  • Nginx の設定(応用編) – リバースプロキシ、ロードバランサ

続きを読む

BASHの脆弱性でCGIモードで動いてるPHPにアレさせてみました

タイトルはパクリ
元記事: BASHの脆弱性でCGIスクリプトにアレさせてみました – ブログ – ワルブリックス株式会社

sakura のレンタルサーバが cgi モードで php 動かしてるよなーと思ってテストしてみたらできました。
# テストスクリプトは削除済みです。
続きを読む

WordPress プラグインで使う定数値はヘッダ部分で管理して get_file_data() で取得すると良いと思うけど、どんなもんでしょう

えー、タイトルの通りなんですが WordPress でプラグイン開発している時に非常に便利な関数として get_file_data() ってのがあります。
いま、久しぶりに Codex みたら、ほとんど説明を放棄してますね。
最近出た WordPressプラグイン開発のバイブルっていう本でちらっと触れておいたので、そこから引用します。

$plugin_data = get_file_data( __FILE__, array( 'version' => 'Version'));
$plugin_version = $plugin_data['version'];

プラグインやテーマのヘッダー情報を取得するには get_file_data() 関数を使用します。
プラグインの冒頭にはコメント形式でプラグイン名やバージョン、テキストドメインがヘッダー情報として書かれています。
たとえば、プラグインのバージョン情報をこちらから読み出し、wp_enqueue_script() 関数で JavaScript のバージョン情報を変更したり、翻訳ファイルのテキストドメインやドメインパスなどを取得して load_textdomain() 関数で翻訳ファイルを読み込むときに使用できると思います。
プラグインのヘッダー情報を使って一元管理ができるため、ソース中にハードコードする必要がなくなります。
また、他のプラグインやテーマのバージョンに依存するような処理を書きたい場合にも使えるでしょう。

WordPress に最初からついてくるプラグイン Hello Dolly のメタ情報を取得した結果は以下の通りです。

$data = get_file_data( ABSPATH.'wp-content/plugins/hello.php',
	array( 'name' => 'Plugin Name',
		'version' => 'Version',
		'uri' => 'Plugin URI',
		'description' => 'Description',
		'author' => 'Author',
		'author_uri' => 'Author URI',
		'textdomain' => 'Text Domain',
		'textdomain_path' => 'Domain Path',
	));
var_dump($data);
array(8) {
  ["name"]=>
  string(11) "Hello Dolly"
  ["version"]=>
  string(3) "1.6"
  ["uri"]=>
  string(41) "http://wordpress.org/plugins/hello-dolly/"
  ["description"]=>
  string(295) "This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page."
  ["author"]=>
  string(14) "Matt Mullenweg"
  ["author_uri"]=>
  string(13) "http://ma.tt/"
  ["textdomain"]=>
  string(0) ""
  ["textdomain_path"]=>
  string(0) ""
}

実は、この get_file_data() 関数なんですが、WordPress プラグインの規定のヘッダ情報だけでなく、独自にセットした情報も取ってくることができるんです。
続きを読む

WordPress プラグイン開発のバイブル

私が執筆した WordPress 関係の本としては二冊目となる「WordPressプラグイン開発のバイブル」が 7/22 に発売されました。
これは 宮さん西川さん三好さん達との共著になります。

以下に序文を引用します。

WordPressは世界の7,000万サイト以上で使用されており、CMSシェアにして60%にもなる、世界で最も多く使用されているCMSです。
このWordPressのシェアを支えるもっとも大きな要因の1つは、WordPressがオープンソースであるからです。
インターネットの豊かさを支えるものはコンテンツです。
世界中の数々の良質なコンテンツが現在のインターネットの豊かさを形成しており、現在もめざましいスピードで進化しています。
そして、サーバーやミドルウエア、そしてWordPressのようなCMSは、これらのコンテンツをささえるための縁の下の力持ちでしかありません。
しかし、良質なコンテンツを作るには優れたツールが必要で、それらのツールの開発には、膨大なコストが必要です。
そういったコスト負担を分担しあおうという考え方から、私たちのウェブ業界はオープンソースという考え方を取り入れ、積極的に活用するようになりました。
そうした背景の中で、優れたツールが生まれ、それを土台にしてさらに良質なコンテンツが生まれているのが、現在のインターネットです。
さらにいえば、WordPressが採用するライセンスはGPLです。
このGPLライセンスは、ユーザーに対して自由を保証することを主目的としたライセンスであり、ユーザーは利用規約やライセンス条項などを気にすること無く自由な目的に使用することができます。
WordPressはGPLを採用しているからこそ、現在のシェアを獲得していると私たちは考えています。
そんな中で、日本においては、毎月と言ってもいいほどのたくさんのWordPress関連書籍が発売され、イベントやセミナーなども全国各地で毎週のように開催されています。
WordPressコミュニティが開催する公式なイベントWordCampには毎回1000名を超えるほどの参加者が集まるようにもなってきました。
しかしながら、日本国内においてこれらの書籍やイベントがターゲットとする層のほとんどが単なるWordPressユーザーであり、開発者をターゲットとしたものがほとんどありません。
世界中のエンジニアが自らの成果物を無償で公開しだれでも利用可能にするのはなぜでしょうか?
そこには何らかのメリットや意図がかならずあるはずです。
本書は、日本で初めてとも言える開発者をターゲットとしたWordPressの専門書です。
私たちは本書をとおして、開発者からみたオープンソースのメリットをみなさんと共有していきたいと考えています。
そのため、これまでのWordPress本で紹介されてきたようなググれば分かる内容の解説には、それほど重きをおいていません。
それらはWordPressのバージョンアップなどによりすぐに陳腐化していく内容だと私たちは考えており、もっと普遍的な内容を取り扱っていきたいと考えてきました。
たとえば、本書で紹介されているセキュリティ対策やエラー処理は、みなさんが開発するプラグインの信頼性を向上にすくなからず貢献できるはずです。
コーディングスタンダードやPHPunitを使用したテスト方法は、プラグインのメンテナンス性を向上させるための手助けとなります。
WP-CLIやGruntなどのサードパーティーのツールや、Vagrantなどの開発環境は、開発におけるワークフローを劇的に改善するでしょう。
公式ディレクトリへの登録方法や国際化などは、みなさんに世界への扉を開くことになるはずです。
もちろん、WordPress APIにつきましても、極力たくさん網羅できるように努力しました。
日本国内においてはWordPress開発者が十分に多いとはいえません。
本書の重要なターゲットは、既存のWordPressユーザーというよりもWordPressを使ったことがないPHP開発者です。
ある程度経験を積んだプログラマーなら、目次をさっとみただけで、必要なキーワードが手に入ることを目指して書いてきたつもりです。

続きを読む

dogmap.jp を t1.micro から t2.micro に変更してみました

AWS から 7/2 に新しいインスタンスタイプ T2 インスタンスがリリースされました。
【AWS発表】バースト可能な性能を持つ新しい低コストEC2インスタンス

dogmap.jp は、網元の実証実験も兼ねて、網元の t1.micro インスタンスで稼働させているのですが、アクセスが集中して負荷が高まってバーストした後、一定時間極端に性能が悪化するという問題がありました。
# これは t1.micro インスタンスの特性です。
これ結構辛くて、表側では Nginx のリバースプロキシキャッシュでなんとか凌いでいても、WordPress のダッシュボードにアクセスできないとかの状況に陥ることがしばしばあったんですよね。

T2インスタンスでも t1.micro 同様に負荷がかかったときに自動的にバーストします。
ただし、バースト可能な時間には制限があって、これを管理するために新たに CPU Credit という仕組みが追加されました。
簡単に言うと

  • 負荷が高くなく CPU がベースライン性能にとどまっている場合、CPUクレジット残高が貯まっていく
  • 負荷が高まった場合、CPUクレジットを消費してバーストする
  • 1CPUクレジットで1分間バースト可能
  • CPUクレジット残高が無くなった場合は CPU 性能はベースライン性能にとどまる
  • 未使用のCPUクレジットは、最大24時間有効

という感じらしいです。

名前 vCPUs ベースライン性能 1時間あたりのCPUクレジット
t2.micro 1 10% 6
t2.small 1 20% 12
t2.medium 2 40% 24

CPUクレジット残高については、Cloud Watch で確認することができます。
「CPU Credit Usage (使用量)」「CPU Credit Balance (残高)」という項目が追加されているので、そちらを参照してください。

2014-7-18 追記
Amazon MarketPlace からも HVM 版の網元AMIが利用できるようになりました。
WordPress powered by AMIMOTO (HVM)
t1.micro などの m1 インスタンスなどの HVM に対応していないインスタンスタイプはご利用になれません。
そちらが必要な場合は、従来の PVM 版をご利用ください。
続きを読む

WordPress でデータ連係するときのスニペット

実は、今夏にSBクリエイティブさんから発売される予定の「WordPress Plugin 本(タイトル仮)」を宮さん西川さん三好さん達と書いてました。
宮さんはすでにリーク済みですね。
管理画面におけるエラーメッセージの表示 | firegoby

僕が担当したのは、17章目の「プラグインクックブック」がメインになります。
ここでは WordPress プラグイン作成時に使ってるコードをサンプルコードとして提示して、それを説明するって感じで書いてます。
編集の人にも「一部公開しても良いよー」って言われたので、一部を公開しますね。

続きを読む

GitLab を Amazon Linux にインストールする

オープンソースの Git リポジトリ管理システム GitLab を Amazon Linux にインストールしたので、手順をメモ。
といっても、ほとんど以下の URL を参考にしたので、ここではインストール時に引っかかった注意点など
Amazon Linux 2013.09 に GitLab6.1 をインストール – OTメモ帳

ところで digitalcube って会社では、様々なプロダクトがインストール済みの AMI を AWS Marketplace で公開してるんだけど、ここでも GitLab が公開されてるから、インストールが面倒な人はそこから起動した方が良いと思うよ(ステマ)。
AWS Marketplace: Search Results

GitLab も、今日公開されたし – GitLab on AWS Marketplace
Marketplace 版の GitLab は、初期アカウントは admin@local.host でパスワードは起動したインスタンスのインスタンスIDになってます。
GitLab の起動に時間がかかるので、最初 503 ステータスが返ってくるかもだけど、ちょっと待ってから再試行すれば GitLab のログイン画面が表示されるので、試してみてください。

続きを読む