ラベル WordPress Advent Calendar の投稿を表示しています。 すべての投稿を表示
ラベル WordPress Advent Calendar の投稿を表示しています。 すべての投稿を表示

2018年3月13日火曜日

【備忘録】nginx 1.13.9 で実装された http2_push_preload を WordPress で使ってみよう!

WP-CLI チームメンバーとして有名な宮内氏が作成した

についての情報をキャッチしたので、実際に試してみました。
ちょっと戸惑った点もあったので、本ブログにて備忘録として残しておきます。

準備


  • nginx 1.13.9(CHANGE LOG
  • PHP 7 以降
  • WordPress 4.9 以降
  • https://◯◯ なサイト
です。準備については割愛します。
また、macOS のターミナルからチェックする方法として、Homebrew をインストールしているなら
  • brew install nghttp2 
として nghttp コマンドをインストールしておくと便利です。

Server PUSH の概要


情報は古いですが、
にわかりやすく解説されているかなぁと思います。
また、
も分かりやすいかも。ようするに、リクエストされたファイル内で別ファイルを読み込んでいると、1ファイルずつやりとりせずに、一括でやってしまえという考え方。

HTTP2_PUSH で動作確認


まずは WordPress 内の1ファイルを対応してみましょう。
別に WordPress 内である必要はありません。

server{
    listen 443 ssl http2;
    ...

    location / {
      ...
      ...
      proxy_buffer_size   128k;
      proxy_buffers   4 256k;
      proxy_busy_buffers_size   256k;
      http2_push_preload on;

      http2_push /wp-content/themes/△△/top_bg.jpg;
      ...
     }
}

nginx の server 直下か、location 内に、ファイルごとに http2_push で指定します。
※ この技術は https かつ HTTP/2.0 を有効にしたサイトじゃないとダメです。
※ WordPress だと管理画面だけ https の場合もあるので、サイトまるごとでなくてもいけるとは思います。

いずれも Chrome の Developer Toolsを開いて、Networkにて確認しています。
その際、キャッシュを無効にするために「Disable cache」にチェックをいれています。


設定前
Intiator = (index)

設定後
Intiator = Push / (index)


もし nghttp をインストールしてしているなら
nghttp  -nv  https://◯◯/  | grep PUSH_PROMISE
のように、サイトトップで読み込まれる https://◯◯/wp-content/themes/△△/top_bg.jpg について、Server Push に対応している表示がされます。

なおディスクキャッシュが優先されるようで、キャッシュされていたら Push は出てきませんね。 

ということで、1ファイルごとの設定は使えたので Server Push は使えてるということになります。あとは、 http2_push_preload のほうを利用できるように WordPress に組み込みます。http2_push_preload のほうは、適切な Link ヘッダーを出せばいいので、それをやってくれるプラグイン「HTTP/2 Server Push」(宮内氏作成)をインストールします。

HTTP/2 Server Push プラグインの概要


このプラグインは、ソースlib/function.php を見てみると
  1. wp_enqueue_style と wp_enqueue_script で読み込まれた CSS と JavaScript を読み取って Link ヘッダーを出す
  2. フィルタフック「http2_server_preload_items」で指定したファイル
    ※ https://github.com/tarosky/http2-server-push-preload の Customizing 参照
を読み取って LINK ヘッダーを吐き出すようです。
なので、テーマによって style.css に @import とかで CSSを読み込ませていると、「1」には引っかからないので、「2」で個別指定する必要があります。

HTTP/2 Server Push プラグインのインストール


  1. https://github.com/tarosky/http2-server-push-preload/releases より  http2-server-push-preload.zip をダウンロードする
  2. 展開したフォルダを、WordPress のプラグインフォルダへ入れる
  3. WordPress 管理画面より、「Http2 Server Push」 プラグインを「有効化」する

とまぁこれが一般的かと思いますが、composer と WP-CLI が導入されているサーバーだと(※注意:下記の方法だと、 nightly バージョンになりました。管理画面のプラグインやテーマの更新から安定版への更新 0.5.0 が出来ました)

cd WordPressのインストールフォルダ
cd wp-content/plugins
git clone https://github.com/tarosky/http2-server-push-preload
cd http2-server-push-preload
composer install
cd ../../../
wp plugin activate http2-server-push-preload

なんかで、ソースをダウンロードしてインストールして WP-CLI でプラグインを有効化するまでをコマンドラインで出来ます。

動作確認


※ここでは、macOS 10.13.3 にいれた valet 環境を使って WordPress をインストールし、試しています( https://demo.test )。

brew upgrade nginx
sudo brew services restart nginx 

として、nginx 1.13.9 をインストールして nginx を再起動しておいてください。
そして、 $HOME/.valet/Nginx/demo.test の server セクションに
  
のように、 
      proxy_buffer_size   128k;
      proxy_buffers   4 256k;
      proxy_busy_buffers_size   256k;
      http2_push_preload on;  
を追加しておきます。
そして
sudo brew services restart nginx 
をして nginx を再起動しておきます。
※ valet については【備忘録】 wp valet new コマンドで Error establishing a database connection が出る あたりを参考にしてみてください。


Chromeで サイトにアクセスして、Developer Tools を開きます。
Network タグで「Disable cache」にチェックをいれて、サイトを読み込み直します(Command+r)。
すると、下図のように CSSやJavaScript ファイルの Intiator が「Push」となっていたらOK。


そして、http2-server-push-preload プラグインを無効にすると下図のように、Push ではないことが確認できるはずです。


ただし、テーマによって style.css に直書きとか、@import を使ってCSSを読み込んでいると、このプラグインの対象外になります。その場合には、管理画面で試してみて下さい。大抵のプラグインは、CSSやJavaScriptを読み込む時に、正しい手順をしていると思うので、うまくいくはずです。まぁ最悪サイトそのものには適用できなくても、管理画面は適用できて速くなる!ってことはあるかもしれませんね。

2018年3月13日 @kimipooh

2017年10月15日日曜日

第69 回 WordBench 大阪「WordPress ログインに Google 認証を使ってみよう」で登壇して #wbosaka #wordpress #google


今回は登壇者として参加しました。
セッションとハンズオン合わせて 3時間ほど時間をもらっていましたが、みんな優秀で 1時間強でセッションとハンズオンが終わってしました @@!
ハンズオン自体はおかげさまで好評だったようで、それぞれの実環境やクライアント環境で導入するというと言ってくださった方々がいたのでやったよかったかなと思います。

雨が降る中、会場となるファーストサーバー大阪本社へ、参加登録していただいた19名(内メンターが2名)について、全員参加していただきました。ありがとうございます!




登壇者って凄いのって思われるかもしれませんが、WordBench 勉強会に関してはそうでもありません。発表することでより深く WordPress について勉強することができるので、◯◯についてもっと詳しくなりたいな!と思ったら、発表者になってみるのもよいですよ!昔、「1週間後にクライアントに納品する WordPress はあるけれど、手持ちには 静的HTMLで作ったデータしかない、どうやって WordPress にしたらいいですか」を参加者に聞くために登壇者になった強者もいました。実際その場で逆ハンズオン(参加者が登壇者に教えていく)をしたわけですが、そういうのもありじゃないかなーと思います。

今回の反省点はこれだけ時間的余裕があるなら、「WordPress のローカル環境を手軽に作成してみよう!」なんてのを合わせてやってもよかったなぁと思いました。人によっては vagrant 環境を以前入れていたが、久しぶりに動作させようとすると動かなかったりした方もおられました。ので、そういうのを合わせてやるといい感じかなと。また機会があれば、WordCamp 等でやってみたいですね。

特に今回のために、 MAMP にコマンド一発で WordPress をインストールしたり、削除したりするツール(GitHUBで公開)を作成したので、MAMPとツールを使ったハンズオンもよいかなと思いました。ただMacしか試してないので、今回のように参加者全員が Mac ユーザーでないかぎり、Windows のことを考えないといけないので、そこはいろいろ試さないといけませんよね。

スライド




セッションとハンズオンの内容もすべて網羅しています。
これを見れば問題なく導入可能かと思います。
ただ2,3戸惑った方がおられたので、そのケースについて下記の紹介しておきます。

スライド19〜21において、Google Developer Console (Google Cloud Console内)のAPI設定におけるいろいろなケースについて紹介しています。
そこで漏れていたのが、ポート指定されたURLです。

http://localhost:8888/demo/  の場合にはどういう指定がしたらよいか


認証済みのJavaScript生成元:http://localhost
認証済みのリダイレクト URI:http://localhost:8888/wp-login.php


となります。
認証済みのJavaScript生成元については、 http://localhost:8888 をいれて保存すると自動的に、http://localhost に修正されます。

Appendix. WP-CLI コマンドで WordPress の自動メンテナンス


時間が余ったので何名かとこの話題について話しました。
ssh ログインが出来るサーバー なら出来る可能性があります。
実際には、WP-CLIコマンドをインストールできて(パスのある場所にダウンロードした WP-CLIを置くだけでいい)、cronが使えたら完璧です。当方は AMIMOTO のマネージドホスティングを使ったりします。ssh でログインできれば大抵のところはインストールできるんじゃないでしょうか。
それができれば上記のように、コマンド一発で、WordPressのバックアップ > プラグイン更新 > 本体更新を自動化できるので、多数の WordPress のメンテナンスを抱えている方々にとっては管理がとても楽になります。

wp @all  core version

なんてのを手持ちの Mac なんかでターミナルから叩くだけで、設定した全サイトの WordPress のバージョン情報が出てきます。これって深刻なセキュリティ脆弱性が報告された際、メンテナンスが必要な WordPress にログインしなくても、それぞれの現在のバージョンが一括で表示できるので超便利ですよ!

これもハンズオンしたら面白いかもしれませんね!

昼食&懇親会


昼食は会場であるファーストサーバー大阪本社から近い所にあるガストで肉を食べました。

ちょっと肉がかたい感じがしましたが、まぁやすいのでそれもまたよし。

懇親会は、GOTENさんが音頭を取って開始!懇親会費は1000円なり〜


結構はやくおわったせいで、ピザがなかなか届かずに、お菓子と飲み物で楽しく歓談できました!


2017年10月15日 @kimipooh

2017年7月4日火曜日

【注意】WordPress プラグイン「Responsive Lightbox by dFactory」にXSS脆弱性あり(要更新)

JVN#39819446
WordPress 用プラグイン Responsive Lightbox におけるクロスサイトスクリプティングの脆弱性 が出てるよ〜うち入れてたっけ?

という同僚の声が聞こえてきたので、早速先日導入した WP-CLIのエイリアス機能を使って調べてみました。
手持ちのMacマシンから、

  1. ターミナル起動
  2. script check-plugins-wps.txt
  3. wp @all plugin list
  4. exit

で、check-plugins-wps.txt をテキストエディタで開き、lightboxは使われていないことを確認。

  • wp @all plugin list |grep lightbox 

だけでもいけるが、じっくり見たほうが良さげかなぁと思って一度ファイルへプラグインリストを書き出してみた。

プラグインアップデートは、

wp @all  plugin update responsive-lightbox 

をすれば一発でできちゃいますね!
このアップデート状況を保存しておきたければ、 script を使って

script update-responsive-lightbox.txt
wp @all  plugin update responsive-lightbox 
exit

ってしておけば、exitするまでにターミナルに出てくる文字や入力した文字も含めて、 update-responsive-lightbox.txt に保存できるから、後から見直すのが楽です。

もし該当プラグインが入ってなければ、
Warning: The 'responsive-lightbox' plugin could not be found.
Error: No plugins updated.
が出るので一括でやってしまっても問題なし。

便利なエイリアスについては


に纏めてます。

2017年7月4日 @kimipooh

2017年6月14日水曜日

【備忘録】PHP 7.1.x で、PHP Fatal error: Uncaught Error: [] operator not supported for strings エラーがでたら・・・

手持ちの MAMP 環境を久々に更新し、PHP 5.6.30 / 7.1.1 へ切り替える設定にしました。現在のメイン PHP 利用環境は、7.0.x 系なのですが、そろそろ 7.1系でもテストしないとなぁと思い立ちました。 WordPress 4.8 でましたしね!

で、自前開発のWordPress プラグインも 最近出した Google Calendar List View 以外、 7.1系でチェックするのサボってました @@!

ということで環境変更です・・・完了。

そしてテスト開始。最初に遭遇したのが、

Uncaught Error: [] operator not supported for strings エラー


でした。
これは、 $sample[] = $sample_data; など、配列にデータを追加するに当たって、配列の初期化の型がおかしい場合におきるようですね。PHP 7.0.x まではエラーにはなりませんでした。

PHP 7.0.x まで許容


$sample = "";
$sample[] = $sample_data;

PHP 7.1.x より


$sample = array();
$sample[] = $sample_data;

ということだったのです。これは早速自前プラグインを修正し、かつ コードチェックしてくれる TRAVIS-CI の方も 7.1 を追加しないとですね〜。

ってことで手持ちのプラグインについて、 WordPress 4.8 と PHP 7.1 で動作チェック完了し、アップデート完了。

2017年6月14日 @kimipooh

2014年12月14日日曜日

WordPressで、新画像認証システム「Google's No CAPTCHA reCAPTCHA」を使ってみよう! #wpacja2014

またまた登場しました、WordPress Advent Calendar 2014 の14日目担当の木谷(@kimipooh)です。
前回は


という日英でやりました。
今回も日英で頑張ってみたいと思います。

2014年12月3日、Googleからロボットよけ(スパム対策、セキュリティ対策等)の新しいreCAPTCHAのAPIが発表されました。

従来の視認がほとんど出来なくなっていた画像認証文字からおさらばできる仕組みになっているようです。なんといっても「私はロボットではありません」のチェックをいれるだけですしね。

となると使ってみたくなりますよね? 使いたくてウズウズしてきたそこのあなた、使ってみてはどうでしょう?

で実際にどうやって使うのかというと、No CAPTCHA reCAPTCHAというのが2014年12月10日にアップされていて(早い...)、これを利用するのが手っ取り早い方法です。

No CAPTCHA reCAPTCHAプラグインの利用方法

2014年12月9日火曜日

他のプラグイン内に埋め込んだContact Form 7ショートコードを、Contact Form 7テンプレートに使うには #wpacja2014

 初めまして! WordPress Advent Calendar 2014 の9日目担当の木谷(@kimipooh)です。

さて、まず最初に本記事の英訳版を作成したことをお知らせします。

この記事自体は、結構前に仕上げていて8日になって、明日公開だよなぁ、、、これって結構面白いから英訳してみようかなぁ、、とかいうノリでやってしまったのでした。それほど高い英語能力はないのですが、正しく意味が通じたらいいかなと。

WordPress Advent Calendarは昨年初参加し、今年はネタがないよなぁと思っていたら、一つ思いついて実践してうまくいったので、それをネタに今年も参加してみました! 昨年公開したものは、「カレンダープラグイン「The Event Calendar」での日付降順処理 #wpacja2013」です。これは新サイトを立ち上げ時など、いまでも重宝してますし、こういったイベントで整理して発表することって後々まで役に立つんだなぁとしみじみと思い返しました。WordPressコミュニティとしては、WordBench京都大阪をフラフラ〜としてます。

前置きがいつも長くなってしまうのですが、そろそろ本題に入りたいと思います。
とてもわかりにくいタイトルですよね、、、。どう表現したらよいのかわからないので、そうなってしまいました。そもそもこんな需要あるのか!?という問題は、とりあえず脇においておきましょう。こういうことも出来るよっていう感じです。

How to use the Contact Form 7 shortcodes embedded in the other plugin shortcode for Contact Form 7 template. #wpacja2014

Nice to meet you!
I'm Kimiya Kitani (@kimipooh) who takes charge of 9th in WordPress Advent Calendar 2014 in Japan.


 In last year, I joined the WordPress Advent Calendar for the first time. Fortunately, I can also find out the interesting idea in this year, so I'm also joining.  The last year's idea is "How to code the descending order for "The Event Calendar" plugin (The article is here, but this is in Japanese).  This coding is very useful for displaying the event information in the descending order. WordPress Advent Calendar 2013, Thank you for giving me good opportunity. Then, I have been joining the local WordPress communities (WordBench Kyoto and WordBench Osaka) in Japan.

Well, do you think that the title is difficult? Can you understand what's purpose?
I think that this is special case, so I would like to explain by using the concrete example.