ホスティング ロリポップ アーキテクチャ wordpress

WordPress簡単インストールにおけるアーキテクチャの変遷とこれから

ホスティング ロリポップ アーキテクチャ wordpress

こんにちは。Webアプリケーションエンジニアの きのすけ です。

WordPress は、世界中で利用されている人気のCMSです。ロリポップ!レンタルサーバー(以降、ロリポップ)では、このWordPressを「簡単インストール機能」で即座に利用開始できる環境を提供しています。

この記事では、以下の内容について紹介します。

  • WordPress簡単インストール機能の内部アーキテクチャの変遷
  • 各開発フェーズでの技術的課題と解決策
  • 残された今後の課題

特に、ウェブホスティング環境をベースとしたアプリケーション開発に携わるエンジニアの方々に参考になる知見を共有できればと思います。

最初期 - curlでハック

WordPressのソースコード一式をサーバーに設置して、そのディレクトリへhttp(s)でアクセスすると、インストーラーが表示されます。この画面でサイト名やDB接続情報等を入力して Submit することで、インストールが完了しCMSとしての利用を開始できます。

WordPressのインストーラ画面(1) WordPressのインストーラ画面(2)

WordPressのインストーラ画面

最初期においては、この Submit をしていたURLに対して curl で POST リクエストを送ることで、簡単インストールを実現していました。ハックとも言えるやり方かも知れません。当然WordPressの内部仕様が変われば使えなくなるというリスクもあります。しかし、当時はWordPressをプログラマブルに操作するツールやライブラリもなく、ベターな選択肢だったと思われます。

なお、ソースコード一式は専用の配布サーバー(以降、アーカイブサーバーと呼称)に保持されており、サーバーAPIという、ホスティングサーバーを操作するAPIを通じて、対象とするサーバーに設置する仕組みでした。

シーケンス図にすると以下のようになります。

最初期のフロー

※ シーケンス図は説明のために簡略化をしています。以降のシーケンス図についても同様です。

機能拡張 - WP-CLI の利用

「WordPressをすぐに簡単に始められる」というコンセプトのもと、ロリポップへのお申込みと同時にWordPressをインストールしたいという要望があがってきました。また、WordPressのテーマやプラグインも同時にインストールできる機能も続けて実現したいという声もありました。

これまでは専用のコントロールパネルでのみ、WordPress簡単インストールができるようになっていました。アーキテクチャとしては、コントロールパネルとお申込サイトは分かれており、共通処理は専用のAPI(以降、共通APIと呼称)にまとめられていました。しかし、歴史的な経緯からWordPress簡単インストールはコントロールパネルに密結合した実装となっていました。

当時のアーキテクチャ

当時のアーキテクチャ

まずは、テーマやプラグインも同時にインストールできる未来を想定すると、WordPressの各種操作をプログラマブルに操作できる環境があったほうがよさそうです。WP-CLI という公式のCLIツールを使えば、WordPressのインストールから各種設定まで幅広く対応できます。これを内部で呼び出せば要件を満たせますし、今後できることの幅も広がります。

では、WordPressのインストールを実現するために、一連のWP-CLIのコマンドを実行する処理をどこに実装したらよいでしょう。当時はこの処理を「サーバーの操作」の一環と位置づけて、サーバーAPIに実装する方針としました。

次に、お申し込み時に同時にインストールする方法についてです。お申し込み処理は、決済やサーバーのセットアップ等が同期的に実行されており、非常に重い処理となっていました。ここに追加でWordPressインストールを同期的に実行するのは、体験として良くないため、非同期で実行したほうがよさそうです。

これまであげた要素で非同期処理が実行できるのは共通APIでしたので、非同期処理はここで担うことにしました。

まとめると以下のようになります。

インストール共通フロー

インストール共通フロー

お申込み時のWordPressインストール

お申込み時のWordPressインストール

コントロールパネルからのWordPressインストール

コントロールパネルからのWordPressインストール

このアーキテクチャへの変遷をもって「お申込みと同時にWordPressをインストールする機能」「テーマを同時インストール機能」がリリースとなりました。

関連記事:ロリポップで申込と同時にWordPressを始める方法を解説!

テーマ販売開始 - 有料テーマのセキュアな配信

WordPressは有料のテーマがあります。それらをロリポップで購入できるようにしつつ、同時インストールしたいという要望がありました。

有料で配布するテーマであるため、容易にそれらが外部に漏れない仕組みを考慮する必要があります。その顛末については、以下の記事をご参照ください。

関連記事:WordPress有料テーマのセキュアな配布機能の実現

これらの取り組みを経て、アーキテクチャは以下のようになりました。

インストール共通フロー

インストール共通フロー

※「お申込み時のWordPressインストール」と「コントロールパネルからのWordPressインストール」のフローは前回から変更はありません。

アーキテクチャを変えたことによる効果

アーキテクチャを変えたことにより、以下のような新たな取り組みも実現できるようになりました。お客様に提供できるサービスの幅を広げられたのは非常に良かった点かと思います。

残された課題

しかし課題も残されています。それは 「チームをまたいだ対応が必要になり、コミュニケーションコストがかかってしまう」 という点です。

ロリポップに関わるエンジニアは、大きくインフラチームとアプリケーションチームに分かれています。インフラチームは主にホスティングサーバーの安定稼働に責務を持ち、アプリケーションチームは主にお申し込みやコントロールパネルでの体験向上に責務を持っています。

アーキテクチャもチームの体制に沿った境界があります。お申込サイトやコントロールパネル、共通APIはアプリケーションチームの管理下にあります。そして、ホスティングサーバーやサーバーAPIはインフラチームの管理下にあります。サーバーAPIは、OSユーザーの作成やWEBサーバの設定変更など、強い権限の操作も必要であるため、インフラチームの管轄下にあります。

現状

アーキテクチャとチームの境界

ここで「WordPressをすぐに簡単に始められる」というコンセプトのもとに、コントロールパネルからWordPressの詳細な制御ができる機能をどんどん追加する未来があるとします。すると、毎回必ずチームやシステムをまたいだ対応が必要で、コミュニケーションコスト増大に伴うリードタイム悪化が課題となりそうです。

残された課題

今後はその課題も考慮しつつ、総合的に判断して、よりよい手法を選択していければと考えています。

まとめ

WordPress簡単インストール機能の内部アーキテクチャの変遷と、各開発フェーズでの技術的課題、そして残された今後の課題について紹介しました。この記事がウェブホスティング環境をベースとしたアプリケーション開発に携わるエンジニアの方々の参考になれば幸いです。