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

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新卒対象サマーインターン
エンジニアインターン

その他採用情報

関連記事

thumbnail
AWSのEC2 API Toolsをインストールなしで利用する方法

こんにちは、ランサーズ インフラ担当のkeiです。 本日は、EC2 API Toolsをインストール作業をすることなく利用する方法をご紹介します。 ランサーズでは、試験環境から本番環境までAWS上でサーバ運用をしており、 先日、Amazon様の事例紹介ページに …

ランサーズ開発ランチ(Lunchers#3)~ねこもり高橋さん PHPバージョンアップ編~

エンジニアのshinです。 ランサーズでは4月から、ゲストを招いてランチを食べながら話をするランサーズ開発ランチ(Lunchers)という取り組みを実施しています。 5/16に実施した第3回の内容をご紹介します。   第3回のゲスト紹介 合同会社ねこ …

ランサーズ リリースシステム 〜 Jenkins + Fabrics

こんにちわ。エンジニアの こじま です。 今回は,ランサーズのリリースシステムの紹介をします。 弊社プラットフォームは,1日に多い時は10回以上のコードのリリースを実施します。 ユーザ様によりよいプラットフォームを提供すべく日々,リリースをし改善を実施していま …