ランサーズ(Lancers)エンジニアブログ > AWS > Aurora > WordPressのプラグインを改造して本家に取り込んでもらおうと思った話

WordPressのプラグインを改造して本家に取り込んでもらおうと思った話

kanazawa|2018年12月07日
Aurora

SREチームの金澤です。
Lancers(ランサーズ) Advent Calendar 2018 7日目の記事になります。

昨日は、odrum428さんの「slackで動くピアボーナス機能を実装した話」でした。

今年は、Lancers以外のAdvent Calendarも参加させていただいてます。(以下)

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に復活したようです。

YARPP – Yet Another Related Posts Plugin

お知らせ

2019年1月26日(土) に行われるPHPカンファレンス仙台に登壇します。

https://phpcon-sendai.net/2019/
Track C 10:25-10:55
AWSでWordPressのスケールアウト

この記事でもお話していました、WordPressのスケールアウトについて、最新情報とセキュリティ対策を交えてお話する予定です。
地元開催なので楽しみにしています。