SREチームの金澤です。
Lancers(ランサーズ) Advent Calendar 2018 7日目の記事になります。
昨日は、odrum428さんの「slackで動くピアボーナス機能を実装した話」でした。
今年は、Lancers以外のAdvent Calendarも参加させていただいてます。(以下)
- PHP Advent Calendar 1日目
- CakePHP Advent Calendar 5日目
- SRE Advent Calendar 5日目
- PHP Advent Calendar 7日目
- CakePHP Advent Calendar 7日目
5日同様、PHP Advent Calendar 7日目との掛け持ちにしようと思っていたのですが、それができないことがわかり、新しいネタをひねりだすことに。。
ということで、WordPressネタを書かせていただきました。
WordPressのYARPPプラグイン
ランサーズでは、10個以上のサービスをWordPressで運用しています。
そのうち、以下のサービスについては、Yet Another Related Posts Plugin(YARPP)を利用しています。
YARPPは、投稿した記事のキーワードを解析し、記事を表示する時に関連記事やキーワードを表示することができるプラグインです。
例えば、以下のページの右側に表示される情報は、YARPPプラグインが生成しています。
https://lohai.jp/teshio/
MySQLの全文検索機能
このプラグインは、MySQLの全文検索機能を使っています。
この全文検索機能は日本語の形態素解析まではサポートしておらず、英語のような単純なスペース区切りの文章が対象になりますが、YARPPプラグインはこれを利用して解析を行っています。
MySQLのストレージエンジン
MySQLは、大きく2つのストレージエンジンをサポートしています。
MyISAMとInnoDBです。
MyISAMは、古くからサポートされているストレージエンジンで、高速な処理が可能ですが、トランザクションをサポートしていません。
InnoDBは、現在主流のストレージエンジンで、トランザクションをサポートしています。
そして、MySQLの全文検索機能は永らくMyISAMしかサポートしていませんでした。
同様に、YARPPプラグインもMyISAMしか対応していませんでした。
※InnoDBの場合、管理画面上で動作しない旨の警告が表示されます。
WordPressのサーバー拡張
ランサーズのWordPressサーバーは、最初はAWSのEC2を1台で運用していました。
しかし、事業拡張に伴い、様々なサービスをWordPressで構築することになり、アクセス数も増えてきたため、徐々にサーバーリソースが足りなくなり、AWSのマネージドサービスと連携したサーバー拡張を行いました。
※この時の詳細な内容はエンジニアブログの以下にまとめています。
AWSでWordPressのスケールアウト
その過程で、EC2内にインストールしていたMySQLをRDSに引っ越すことになりました。
しかし、RDSのMySQLはInnoDBしかサポートしていません。
(MyISAMが使えないわけではないですが、サポート対象外になります。)
RDSに移行するのであれば、DBの全テーブルをInnoDBに全て移行しておきたいところですが、ここでYARPPプラグインがネックになりました。
MySQL InnoDBの全文検索サポート
しかし、MySQLもバージョン5.6.4からInnoDBの全文検索機能(InnoDB FTS)がサポートされるようになりました。
MyISAMの全文検索同様、SQLのMATCH~AGAINST構文で利用することができ、互換性があります。
YARPPは世界的にそこそこ有名なプラグインなので、InnoDBへの対応が期待されていました。
Title and body indexes with InnoDB
https://wordpress.org/support/topic/title-and-body-indexes-with-innodb/
Support for InnoDB with full-text index
https://wordpress.org/support/topic/support-for-with-full-text-index/?replies=4
しかしながら、対応される様子はありませんでした。
YARPPプラグインのInnoDB対応
RDSへの移行を進めるため、YARPPプラグインに手をいれてInnoDB対応をすることにしました。
この時の詳細は、以下の記事に記載しています。
http://qiita.com/yKanazawa/items/70686b13b17e7bd2e9e6
プラグインのマージを依頼
YARPPプラグインのInnoDB対応に需要があることは分かっていたので、この修正をプラグインの作者にマージしてもらおうと思いました。
GitHubであれば、
– 本家からFork
– 修正してPull Request
– レビューしてもらい、OKならマージして取り込み
のようなフローになるので、そのイメージでWorpressコミュニティ周りを調査し始めました。
その結果、WordPressは未だに、SVNで管理していることが分かってきました。
http://core.svn.wordpress.org/
そして、WordPressプラグインはTracで管理されているようでした。
https://plugins.trac.wordpress.org/
YARPPのフォーラムを見つけたので、見よう見まねでマージを依頼してみました。
https://plugins.trac.wordpress.org/ticket/2655
ソースの差分はGitHub上に提示するというドロくささ。
https://github.com/yKanazawa/yet-another-related-posts-plugin/pull/1/files
その結果
めでたくマージされ、YARPPプラグインはInnoDB対応の最新版になりました!
と言いたいところでしたが、結局、なしのつぶてで、マージされることはありませんでした。
そして、2018/10/23にYARPPプラグインは見事に廃止となりました。
https://wordpress.org/plugins/yet-another-related-posts-plugin/
もはや、WordPressのサイトからこのプラグインをダウンロードすることはできなくなりました。
とはいえ、今も現役で利用しているので、こっそりとメンテナンスは続けていきたいと思います。
もはや本家もないし、GitHubのマージボタンに手を伸ばし、自分のMasterに取り込み完了。
https://github.com/yKanazawa/yet-another-related-posts-plugin
※追記:2019/5に復活したようです。
お知らせ
2019年1月26日(土) に行われるPHPカンファレンス仙台に登壇します。
https://phpcon-sendai.net/2019/
Track C 10:25-10:55
AWSでWordPressのスケールアウト
この記事でもお話していました、WordPressのスケールアウトについて、最新情報とセキュリティ対策を交えてお話する予定です。
地元開催なので楽しみにしています。