ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

Labels:  Aurora, AWS, MySQL, OSS, PHP, RDS, WordPress 投稿者:kanazawa

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

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年1月26日(土) に行われるPHPカンファレンス仙台に登壇します。

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

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

ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
ご興味がある方は、以下URLよりご応募ください。


【中途採用】
サービスリードエンジニア
テックリード(アーキテクト)
フロントエンドエンジニア
サーバーサイドエンジニア
業務エンジニア(社内システム基盤・基幹システム)

【インターン・学生バイト】
19新卒対象サマーインターン
エンジニアインターン

その他採用情報

関連記事

PHPカンファレンス2018に登壇しました

SREチームの金澤です。 Lancers(ランサーズ) Advent Calendar 2018 16日目の記事になります。 2018/12/15(土)に、PHPカンファレンス2018に登壇させていただきました。 登壇内容 ランサーズのCakePHP1.3 → …

事業の多角化を支えたランサーズ的SRE術
事業の多角化を支えたランサーズ的SRE術 | TECH PLAY 勉強会

こんにちは、ランサーズでSREチームのエンジニア(内定者インターン)をしているIZUMIRUです。 今回は、2018年2月20日(火) 19:30-21:45に、TECH PLAY SHIBUYAで開催された ランサーズ株式会社主催の勉強会である『事業の多角化 …

Vuls祭り#5でLTしてきました!

こんにちわ。皆さんお元気ですか!!! SREのあだちん(@adachin0817)です。 毎年Vuls祭りが行われるのですが、今回始めて運営チームの委員長をやらせていただきました! 今回は令和一発目のVuls祭り#5でLTしてきましてので、スライドぜひご覧くだ …