WP-CLI 0.17.1がリリースされた

Version 0.17.1 released | WP-CLIより、

  • wp plugin uninstall --no-deletewp plugin uninstall --skip-delete へ変更することでその利用方法を変更。--no-* はフラグを偽にする引き数の特別なクラスで、--no-delete の挙動はいくつかのリリースで動作していなかった。

他いくつかの修正です。詳しくはVersion 0.17.1 released | WP-CLIご覧くだされ。

10upのWordPressのベストプラクティスから「効率的なデータベースクエリー」の章を訳してみた

10up Engineering Best Practicesの「Efficient Database Queries(効率的なデータベースクエリー)」を訳してみた。おかしなところ、より良い訳、誤字脱字がありましたらお知らせいただきたく候。

なお、この訳文のライセンスは原文と同じくMITです

※冒頭の「パフォーマンス」の部分を追加で訳しました。さんきゅー、ヒッシー!

パフォーマンス

効率の良いコードを書くのは、特にエンタープライズのレベルでは、極めて重要です。高トラフィックな状況用に確実にコードを最適化するため、私たちが採用しなければならない方略やベストプラクティスは多くあります。

効率的なデータベースクエリー

WordPressでクエリーを行う場合、通常はWP_Query オブジェクトを使うべきです。WP_Query オブジェクトは多くの有用な引き数を取り、get_posts()などの他のデータベースにアスセスするメソッドが行わないようなことを裏で行っています。

いくつか重要なポイントをご紹介しましょう:

  • posts_per_page => -1 は使わない。

これはパフォーマンスの低下を招く原因になります。もし10万件の投稿記事があったらどうでしょう?そのサイトをクラッシュさせるかもしれません。例えばもしウィジェットを作成していてあるカスタム投稿タイプのすべてを取得したい場合、状況に応じて適切な上限を決めましょう。

<?php
// Query for 500 posts.
new WP_Query( array(
  'posts_per_page' => 500,
));
?>
  • 相応の理由がない限りは $wpdb もしくは get_posts() を使わない。

じっさいのところget_posts()WP_Queryを呼び出していますが、get_posts() を直接呼び出すとデフォルトではたくさんのフィルターを迂回してしまいます。こうしたものが必要かどうか分からないですか?おそらく必要ではないでしょう。

  • クエリー結果をページ分割する予定がなければ、常に no_found_rows => trueWP_Query に渡すようにする。

これによりWordPressがSQLクエリー上で SQL_CALC_FOUND_ROWS を実行しなようにし、クエリーを劇的にスピードアップします。 SQL_CALC_FOUND_ROWS は、ページ分割用の総ページ数を得るために必要とされるクエリーで列の総数を計算します。

<?php
// Skip SQL_CALC_FOUND_ROWS for performance (no pagination).
new WP_Query( array(
  'no_found_rows' => true,
));
?>
  • タクソノミー は投稿をグループ化もしくは分類するためのツールである。

ポストメタは特定の投稿についての一意な情報を保存します。ポストメタはこのように保存されるため、効率的な投稿の検索には向きません。通常はポストメタで投稿を検索するのは避けるべきです(時には避けられないこともありますが)。使わざるを得ない場合は、メインクエリーではなく、キャッシュされるようにしましょう。

  • cache_results => falseWP_Query に渡すのは通常は良い考えではない。

cache_results => true の場合(キャッシングが有効でオブジェクトキャッシュがセットアップされていれはデフォルトでtrueです)、WP_Query はその他で見つかった投稿をキャッシュします。cache_results => false を使うのが理にかなっているのはとてもまれな場合でしょう(WP-CLIコマンドではありえます)。

  • 多次元クエリーは避けるべき。

多次元クエリーの例には以下が含まれます:

  • 複数のタクソノミーにまたがるタームをベースにした投稿のためにクエリー
  • 複数のポストメタキーへのクエリー

クエリーの追加の次元ごとに追加のデータベーステーブルがジョインされます。その代わりに、クエリーは可能な限り次元の数は最小にし、必要な結果はPHPを使ってフィルタリングするようにします。

以下は2次元クエリーの例です:

<?php
// Query for posts with both a particular category and tag.
new WP_Query( array(
  'category_name' => 'cat-slug',
  'tag' => 'tag-slug',
));
?>

WordCamp サンフランシスコに行ったときに作業ができそうなWifiと電源が使えるカフェを探してさまよった記録

WordCamp サンフランシスコ 2014に行ってきたんだけど、到着したばかりで時差ボケから体調崩してほとんど参加できませんでした(泣)。まぁでも今年は日本からたくさん行ってるんで、たくさんブログ書いてくれるんじゃないか、、、、なぁ?w

で、WordCamp以外の日は(日本時間になるべく合わせて)仕事をしようとして、作業ができそうなカフェをさまよってました。サンフランシスコにはコワーキングスペースもたくさんあるんですけど、ドロップインだとほとんど夕方5時までなんすよ(´・ω・`)。なのでyelpをたよりにいくつかさまようことをもくろんだんですが、結局4つ目のWorkshop cafe が居心地良かったんで、ここ移行はさまよわなかったんですけどね。。

行ったのは結局以下の4つ。

  • 201 Powell St のスターバックス
    • 24時間営業。席少なく、カウンターのみ。電源なし。wifiはフリーだけど、私が行った時は遅かった。けっこういつでも混んでる感じ。
  • Oakside Cafe
    • yelpで日曜の夜3時まで営業って書いてあったので夜の0時くらいにタクシーで行ってみたら閉まってた><。yelpめ!
  • 222 Mason St のスターバックス
    • 日航ホテルの下、201 Powel St.スターバックスのすぐそば。テーブルも少しあって201 Powel St.スターバックスよりは空いていていい感じ。電源なし。
  •  Capital One 360 Café
    • いい感じ。電源とwifiあり。手作りっぽいでかいテーブルに電源タップがある。中途半端なコワーキングw? 昼の12時頃来たら満席だったけど、徐々に席が空いてきた。
  • Workshop cafe
    • 電源コンセントがたくさん! wifiも安定してる。ビールもある! 手前のスペースはフリーだけど、奥のスペースは$2/hrで最初の10時間は無料。SMSを使ったチェックインシステムがある。飲み物もビールとかあるし食べ物も普通のカフェなみでいろいろありそうなので、下手にコワーキングスペース行くよりも良さそう!

10upのWordPressその他の開発に関するベストプラクティスのページが素晴らしすぎる。

世界的に見たらWordPressの開発者で知らない人がいたらその人はモグリじゃないかっていうくらいw、10upっていう会社はWordPress界(だけじゃなくたぶん他でも)では実力と評判を兼ね備えた会社です。

で、宮さんによると、

とのことだったので、どんなんかと見に行ったら、、、こ、こ、これはってくらい重要な点がまとまってて見事でした(まだほんの数ページしか読んでないんですがw)。

英語ですけどすごく読みやすい文章なんで、WordPressのテーマとかプラグンとかの開発者の方は読んどくといいですよ!

WordCamp San Francisco 2014 Code of Conduct (行動規範)の訳

WordCamp San Francisco 2014のサイトにCode of Conductがあったのを見つけたので、訳してみました。

Code of Conductとは「行動規範」のことで、オープンソース界隈ではUbuntuのものが有名です。

内容は本当に「当たり前のこと」ですが、差別を受けた(受けている)側の人たちにとっては心強いものでしょうし、いろいろな国の様々な文化的背景を持つ人たちが協力して何かをする場合、ある種の拠り所となるものだと思います。

Continue reading