2024年4月13日土曜日

「Okayama WordPress Meetup #9 | プラグインアップデートを学ぼう」に参加して #wordpress #okayamawpmeetup

私にとって WordPress Meetup への参加について、東京の次に遠い場所となる岡山県にやってきました。岡山県といえば、2019年に別のイベントで訪れて以降、2度目になります。

今回は懇親会も参加する日帰りということもあり、観光できる時間は岡山駅に到着する11時半から、Meetup が始まる13時半までの最長2時間。あちらこちらいくには少し時間が心もとないため、昼食に「デミカツ丼」を食べることを主軸に考えました。観光については一番最後に紹介します。


プログラム



自己紹介



オーガナイザーのお一人から Meetup に関する説明。
その後、参加メンバーの自己紹介タイムとなった。20名弱参加と部屋がいっぱいになるぐらい参加していました。台湾から参加された方もいたのに驚きました。久しぶりにあった方もいて楽しかったです。

以下、筆者が発表者からきいた内容の備忘録です。したがって必ずしも筆者の意図した通りの内容になっているかどうかの保証はありません。
筆者のコメントは、 先頭に # をつけています。

プラグインアップデートの仕組み(假谷さん)



発表資料(Googleスライド)

プラグインについて自動更新が無効状態なのに、更新されているという現象が発生。なぜか、そのことを調べてみたことを発表してみたい。
過去にも Ninja Forms Contact Form(2022年6月) や Loginizer(2020年10月) で強制アップデートはあったらしい。

アップデートの概要(コア、テーア、プラグイン、翻訳がある)

バージョンチェックと処理の流れを知るには、 wp_cron について知る必要あり。

WP Control というプラグインをインストールすると、ツール > Cronイベントから WordPress の Cron がどのように動いたのかをチェックしたり、設定できる。

# 以下、筆者のローカル環境でインストールしてみたときのスクリーンショット




取得したデータは、transient と呼ばれる内部キャッシュに保存される。
wp_optionsの _site_transient_update_plugins に保存される。
更新頻度は12時間ごと。

開発元が公式リポジトリに反映させても、WordPress側ではまだ見えていない可能性がある(12時間に1度の更新頻度からか)

即時反映させるための対処方法としては、ダッシュボードの更新にある「確認してください」をクリックすると更新されるようだ。


#上記は筆者のローカル環境。そういえば最近更新していないので WordPress のバージョンがちょい古ですね (^^;

wp_maybe_auto_update 関数などを使えば、強制アップデートをかけることができるのでは?

AUTOMATIC_UPDATER_DISABLED 定数で全自動更新を無効化できる。
wp_config.php に
define('AUTOMATIC_UPDATER_DISABLED', true);
として追加する。

あるいはフックで追加することも可能

UpdateURI の仕組みが WordPress 5.8 で導入された。これは、プラグイン側の情報に、ダウンロードする場所を指定するための機能があるということ。たとえば GitHUBからプラグインをダウンロードなどできるようだ。

公式リポジトリに公開しないようなプラグインや、公式プラグインをやめてしまって他の人が同名のプラグインで作成しても勝手に置き換わるようなことがなくなるメリットもあるようだ。
もちろんデメリットとしては更新の仕組みは自前で用意する必要がある。

# Introducing “Update URI” plugin header in WordPress 5.8 – Make WordPress Core

WordPress 6.5 より、Requires Plugins を定義することで、プラグインの依存関係の設定ができるようになった。
# Contact Form 7 がある前提で、そのプラグインを拡張するプラグインをつくるときに必要なのでありがたいですね!

# 参考:Introducing Plugin Dependencies in WordPress 6.5 – Make WordPress Core

こちらを設定していると、依存関係のあるプラグインが無効化できなくなる模様。
#つまりは、
プラグインA
 ┗ 依存プラグイン B
の場合、依存プラグインのほうで Requires Plugins として プラグインAを設定していた場合、依存プラグイン Bを無効化してからでなければ、プラグインAが無効化できないということか。
また、依存プラグイン Bは、プラグインAをインストールしていないと、インストールできないというメッセージがでてくるのではないかと推測(未検証ということ)。

質疑応答


質問)過去にも Ninja Forms Contact Form(2022年6月)Loginizer(2020年10月) で強制アップデートはあったらしいと話されていたのが、結局それはどういうことでそうなったのか。

回答)API 経由で強制されたのかもしれない、そうした記事を読んだような気もするが不確か。
#後日、発表者の方より Managing Your Plugin's Security (developer.wordpress.org)の情報をもらいました。これによれば、プラグインの脆弱性が WordPress セキュリティ チーム によって発見されると、プラグイン作成者に連絡して修正を促されたり、修正や更新される可能性があるということ。また「Automatic Plugin Security Updates」にあるように、WordPress 3.7 以降は、深刻な脆弱性をもつプラグインについて自動更新させる仕組み(メールでの連絡と審議プロセスが上記リンク先に書かれてます)を用意しているということですね。

プラグインアップデートで気をつけていることトラブル事例紹介(井元さん)



発表資料(Googleスライド)

コアのバージョンアップは、メジャーバージョンアップと、マイナーバージョンアップがある。

バージョンは3つの数字で構成されている(6.4.3 など)。

6.4.3 というバージョンの場合、6.4 までがメジャーバージョン、6.4.3 の 3 がマイナーバージョンと呼ばれている。

マイナーアップデートは、おもにバグ修正、パフォーマンス向上、セキュリティパッチなどが多く、アップデートによるサイトへの影響はほどんどない。それに加えてメジャーアップデートは、大きな変更がされる場合もあり、サイトへの影響もそれなりにある可能性がある。
# プラグインやテーマ、テーマ内のカスタマイズ部分などが非対応でサイトが動かなくなるとか
プラグインは、wo-content > plugins フォルダに保存されている。

プラグインアップデートで気をつけること

1. WordPress のバージョンと互換性があるか

#公式プラグインの情報は下記より確認できる
互換性がない場合、有効化できない、動作しないなどの警告がでたりする。

2. PHPのバージョンと互換性があるか

こちらについては、サーバーの PHP が古すぎて最新 WordPress が動作しない、あるいはWordPress が古すぎて 最新 PHP では動作できない場合があるので注意

3. メンテナンスがされていないプラグインかどうか

最終更新日がある程度あたらしいかどうか。
それだけでは判断せず、メンテナンスがされているか銅かを調べる。
あまり更新頻度が不要なプラグインがあって、メンテナンス頻度が低い場合(メンテナンスはされている)もあるので注意。


# 筆者の公式プラグイン(WP ADD MIME TYPES)などの場合、仕組みが単純(管理画面に力をいれているが)のため、それほど大きなメンテナンスが不要。そのため、思い起こしたときに検証済み情報を更新しているので最終更新日がある程度期間があいてしまっているが、実際には、いくつかの常に最新している WordPress の本番環境で動作させているので、そういう意味では常にメンテナンスはしている状態ではある。またプラグインサポートに書いてもらうと、毎日チェックしているので対応したりしている(いまのところ、ほぼ海外からのリクエストばかりですけど)。

4. functions.php に気をつけよう

自作フックなどを作っていた場合、その仕様が変更になったりなどして動かなくなる可能性があるので注意。

なぜアップデートが必要なのか


1. 脆弱性に対する対応

脆弱性をついてデータの盗聴(情報漏洩)、改ざん(加害者になってしまうおそれあり)、破壊(金銭的な被害を受ける)等いろいろな影響をうける可能性がある

2. 最新バージョンとの乖離

たまにしかアップデートしないと機能が大きく変化してしまっているので、問題がでやすく修正も難しくなってしまうおそれがある。

#あといくつか説明されていた。

アップデートの手順


1. バックアップ

プラグインアップデートによってサイトに影響(サイトが動かない、データがおかしくなる等)がでる可能性がある。したがってまず最初にするのはバックアップすることが大事である
もとにもどせるように練習しておくことも大事

2. プラグインの互換性の確認

バージョンアップによってどのような影響がでるのか事前に調べておく
利用している WordPress や PHP バージョンとの互換性

3. テスト環境でプラグインをアップデートする

できるだけ本番サイトと同じ状況を作るのが大事
# たとえば同一サーバーで別サブドメインなど( example.com なら demo.example.com にクローンして BASIC認証でロック(HTTP Authプラグイン等)しておくとよいかと。クローンサイトが Googleクローラーに検知されると SEO的にまずいため)
# あるいはパソコンにローカル環境( Local のようなツールをつかう ) とか

たとえばサイトをテスト環境にクローンして、全部最新にアップデートして問題が生じたところをどうなおすのか確認したりすることもある。

プラグインをアップデートしたことでおかしくなった事例


事例1)class、id の相違による見た目の崩れ

プラグイン側が出力する HTML(本体のほうでも)の class、 id、あるいはそもそも構造がかわってしまう場合もある。

こうした場合には、出力された HTML をみるとプラグイン側が CSS を追記していたので、それにあわせて CSSを調整するのが簡単。

プラグイン側も readme (プラグインのアップデート履歴として表示される)で class 変更した、CSS追加したなどを書いておくのがよいと想う。

事例2)サイトが見れなくなり、 WordPress の管理画面に入れなくなる

深呼吸して、サーバーのエラーログをチェックしてみる。
今回の事例では、下記が気になるところ。
PHP Parse error: syntac error
プラグイン/includes/mail.php on line 555

PHP上で深刻なエラーがでている。
該当ファイルの 555 行が問題となっている。

ということがわかる。もちろん PHP をよく知っている人なら見ていったらよいが、とりあえずはサイトの状況をみるのがよい。事例ではプラグインが要求しているのが WordPress 6.3 以降、PHPは 7.4以上。しかし サイトは、WordPress 6.2.4、 PHP 5.6.x だった。つまりは PHPが古すぎるなど乖離しすぎているのが問題。

# PHP 5.6系と 7.4.系はもう相当変化があるので、動かないことは自明といってもよい。
# WordPress の話ではないが、経験したことだと pukiwiki plusという wiki系ツールが、 5.4 以降に関数が廃止されてしまって動かなくなったなど割と致命的なこともあった。

デバッグモードを有効にするとより詳細がわかる場合もある。

wp-config.php に
define ( 'WP_DEBUG', true );
をいれる。

ただ本当に大量に警告がでたりするので、テストしおわったら無効化しておくこと
/* define ( 'WP_DEBUG', true ); */
のように /* と */ でくくった間は無効化できる。

質疑応答


質問)テスト環境の公開設定をどうしているか

回答)レンタルサーバーでは、大抵は初期ドメインと独自ドメインの2つはあるはずなので、初期ドメインにクローンして、そちらにはBASIC認証をかけているケースもある。

質問)アップデートをかけるときに、1つずつサイトにログインしてアップデートしているのか集中管理をしているのか

回答)1つずつログインして確認してからアップデートしている

#WP-CLIなどのツールを使う場合もある
#筆者は、過去に何度かそうしたやり方について WordCamp や Meetup などで発表したことある

アップデートについて話し合う会



グループに分けて話し合い
4人ぐらい

それぞれどのようなアップデートの方法をしているのか、熱く話し合いつつ、その後岡山での食事についてで盛り上がった。
「鉄板ポテトサラダ」なるものは岡山県民も知らないとか。たしかに検索しても出てこない。訪れた方から、暖簾に「鉄板ポテトサラダ」がある写真を提示されていたが、ちょっと気になりますね。岡山駅の南側の商店街にあったとか。

アップデートについては、内部的なサイトなら強制的にバックアップして自動更新して、問題あったらいってくれという感じでいけるかもしれない(WP-CLIなどを使って)。あるいは自身がすべて管理しているサイトでも可能かもしれない。しかしながら、テーマのみ管理や、WordPress のシステムメンテナンスだけしている顧客ということになるとそうした放任的なやり取りはなかなか厳しい。そうなると1つずつ影響がないかどうか調べた上で、個別アップデートが必要になってくるかも。サーバー1つに1サイトだと話は簡単だが、実際にはなかなかそうしたことは難しい。

懇親会



懇親会では、WordPress の話だけでなく岡山在住の方々と、岡山の観光地は?みたいな話で盛り上がりました。「醍醐桜」などは、車をチャーターしていく必要があるようですが、Meetup をそこでやってバスをチャーターしてみては!なんて話も面白かったですね。

で、かなり最終に近い新幹線+京都の在来線に気分良く載っていたのですが、同じ座席の切符をもつ乗客が出現。??と思っていたら、ちょうど降りないといけない京都をすぎて、名古屋に向かっていたのでした。

えっ、帰れるの!?とおもって、車掌さんに相談。


余裕であると言われましたが、なんと静岡駅で不審者が線路に立ち寄ったということで30分ぐらいの遅延が!? 京都駅まで戻れたとして、そこから在来線がないのでは?!とか、Google Mapで調べると、米原で一泊する情報しかないとかでドキドキしていましたが、なんとかギリギリ、こだまにのればギリギリなんとかなることがわかり、安心。 Google Map も後から情報が更新されて、こだまの次の「のぞみ」にのれば帰ることができそうでした。最終的には名古屋駅についた段階で、30分ぐらい遅延が生じていて、「のぞみ」「ひかり」では帰れないことに。ギリギリ「こだま」が遅延していなかったので、こちらで京都に変えることができ、地下鉄の最終電車(23:47)に乗ることができました。

いずれにせよ、今後は岡山から京都は1時間程度でつくので、絶対にねないようにしないといけないと思ったのでした。またもう30分ぐらい早い便(20時ぐらい)には新幹線にのるとなお安全ということと、飲み過ぎは厳禁ということも心に刻んだ一日となりました。

観光



岡山駅にきたら、とりあえず桃太郎銅像のところにフラフラといって写真を撮る。これはまぁ鉄板的な定番でしょう。


昼前に岡山駅に到着。早速路面電車にのって城下下車。PITAPAが使えたのが助かりました。先頭のところの運賃箱の下側にあるタッチして入る感じになります。


城下から降りて街並みをみると、かなり直線的に長い道路だなと思いました。


雅芳(がほう)(Google Map)で「デミかつ丼セット」を食べるんだ!と強い気持ちで訪れました。カツ丼 野村とまよったのですが混んでそうだったので、こちらを選択しました(次回機会があれば野村のほうにもいってみたい)。岡電にのりたかったので岡山駅から城下で下車しましたが、歩いて17分でもいけます。12時前についたときには満席でしたが、少しまっていると後からきた人と相席でもよいならということで、座敷に案内していただきました。デミかつ丼については、期待していた通りデミグラスソースがたっぷりとのったとんかつとご飯は、なかなか相性がよかったです。


西川緑道公園を目指してあるいていくと、商店街を通過。そのあたりの街並みも楽しいですし、脇道的なところでも直線的な長い道路になってますね。なかなか壮観。


大通りを歩道橋からみた感じが、左上の写真。右側は、西川緑道公園のところにある下石井公園。


ここから岡山駅までブラブラと散策したのでした。桜があるかなーとおもったら、それほどでもなかったですね。


暑い!暑いので、イオンモール横にある岡山駅の地下道を通って岡山駅へ。


地下で初めてストリートピアノのライブを見かけました。子どもも含めて何名な並んでました。


妻からのリクエストは、廣榮堂のきびだんご、古見屋羊羹の高瀬舟羊羹。これらのミッションは岡山駅2Fのお土産屋でクリアしました。高瀬舟羊羹については、おみやげ街道のところの大手まんぢゅう付近にありました。

2024年4月13日 @kimipooh

0 件のコメント:

コメントを投稿