「WordPress+(プラス)」それはより高機能なWebサイトを手早く構築するための新しいプラットフォームです

投稿日:2015年11月04日
カテゴリ: Laravel , Webサイト制作 , プログラミング


フミリアです。 11月に入り、急に冷え込んできましたね。

いきなりですが質問です。

「自分が使うWebサイトが必要になった時、あなたは何を使いますか?」

何か発信してみようと考えている時かもしれないし、自分のお店を出した時かもしれない。アフィリエイトで小遣い稼ぎをしようと考えたかもしれない。とにかく自分ごととして考えてみてください。(30秒)

Webサイトの単語の意味がピンとこない人は、ホームページと置き換えて読んでみてくださいね。

著者近影

著者近影。近所のレオパードと遊んでいます。とても仲が良さそうですね。

2015年、たくさんのツールから自由に選べる時代

作ったことがない人はAmeblo などのブログを思い浮かべたでしょう。 過去にWebサイトを作ったことがある人なら、Jimdo a-blog cms のようなインストール不要ですぐに使えるものや、 Joomla WordPress Drupal のようなオープンソースのCMS(コンテンツ・マネージメント・システム)を思い浮かべるでしょう。

エンジニアならLaravel Rails といったWebフレームワークを使いたくなるかもしれません。Webフレームワークをベースとして作られたOctoberCMS (Laravel 5) baseCMS (CakePHP 2) のようなCMSや、 Jekyll(Ruby) Octopress(Ruby) Hugo(GoLang) などといった静的サイトジェネレータと呼ばれる玄人好みのツールもあり、選択肢はとにかくたくさんあります。

さらにネットショップの形を考えているなら、Webサイトの他にBASE EC-CUBE などを使ったECサイト構築も検討すべきです。

これらの中から、自分が作りたいWebサイトのために最適なものを選ぶことになります。 ベースとなるシステムやフレームワークを決め、一度Webサイトを作り始めたら他のものに移行するのは大変な作業になるので、初期のツール選定はとても大事なことです。

ちなみに、フミリア・ラボはOctoberCMS で構築しています。 選定理由としては、コミュニティが活発で信頼性が高く世界的に人気のWebフレームワークであり、私が隅々まで把握している**Laravel 5**が使われているためです。 プラグインを作りやすかったり、いざという時に内部をソースコードレベルで追えることは安心の要素です。文言の翻訳や不具合修正をプルリクエストすれば、手軽に本体に取り込んでもらえるところも魅力です。

WordPressの選択

WordPressは2003年に生まれ、10年のうちに日本でも世界でも大人気のCMSに成長しました。 2010年11月に発表された公式データによると、120以上の言語3200万サイト以上のWebサイトがWordPressで作られているとのこと。 世界のWebサイトの中でWordPressが占める割合は10%未満だそうですが、最も使われているプラットフォームになります。

次のグラフは、世界の人気ブログをランキングしている「Technorati トップ100」のものです。 WordPressの利用率の高さが見えますね。

Pingdom AB. The blog platforms of choice among the top 100 blogs

出典: Pingdom AB. The blog platforms of choice among the top 100 blogs.

WordPressでのサイト構築は、ユーザーに見せるコンテンツページをテーマで構築し、コンテンツは管理画面(バックエンド)で作成・編集します。 管理画面には認証機能があるため、権限のある人しかアクセスできないようになっています。

この構成のおかげで、コンテンツを「見せたい人」が「見たい人」に提供することを容易にしています。 GoogleやBingなどの検索エンジンと連動させ(SEO)、TwitterやFacebookなどのSNSでシェアすれば、世界中の人々への情報発信がお手軽にできるのです。

コンテンツは、投稿(ポスト)・メディア・固定ページの3つの機能で扱えます。 管理画面があるので、コンピュータ・リテラシーが高くない人でも十分に使うことができます。

また、プラグインでCMSの機能拡張ができます。WordPress プラグインディレクトリ には、40,000個以上のプラグインが登録されています。 欲しいものは探せばだいたい見つかる、それがWordPressの世界です。

テーマを自分でカスタマイズをするときも、初級レベルのPHPの知識とGoogle検索で得た情報でできてしまいます。 WordPressには広大なエコシステムが構築されているので、インターネット上に強力なサポート体制があるという安心感があります。

WordPressの苦手なこと・できないこと

このようにWordPressは便利でとても使い勝手の良いプラットフォームですが、一方で不得意な面もあります。

  1. SNSの構築
  2. テンプレートエンジンの置き換え
  3. MySQLの高度な活用
  4. PHPパッケージ(プログラム部品)の活用
  5. バックグラウンドジョブの実行
  6. 自由なURL設計
  7. PHPビルトインサーバー上で動かす

結構ありますね。

みなさん、安心してください。既存のWordPressサイトのデータ・資産を活かしつつ、WordPressが不得意なところをカバーするものがあります。 それが、「WordPress+(プラス)」です。

WordPress+(プラス) の紹介をする前に、WordPressの不得意なところを一つずつ見ていきましょう。

1. SNSの構築

SNS(ソーシャルネットワーキングシステム)はコミュニティ型の会員制サービスです。ユーザーは自分のページ(タイムライン)を持ち、ユーザー同士が投稿・コメント・いいね!などの機能を使ってコミュニケーションしていくタイプのプラットフォームです。SNS登録ユーザーの中からさらにユーザーを限定してコミュニケートできるグループ機能もあります。

WordPressはコンテンツを見せる側と見る側を明確に区別しますが、SNSは登録ユーザー同士に差異がありません。この基本的なユーザーモデルの違いにより、WordPressをSNS化するのは結構な手間のかかることとなっています。 それならWebフレームワークをベースにスクラッチで書く方がキメの細かいチューニングがしやすくなります。 WordPressで実現するには、BuddyPress のようなプラグインを導入する方法があります。

2. テンプレートエンジンの置き換え

PHPは元々HTMLテンプレートエンジンでした。.phpファイルを.htmlに変換するだけのプログラムだったのです。そこにさまざまプログラミング機能を追加することでサーバーサイドのスクリプト言語に進化してきたのです。

最近では、さまざまなHTMLテンプレートエンジンがPHPパッケージで登場しています。直接PHPコードを実行させないサンドボックスタイプではTwigSmarty などが有名です。LaravelにはBladeという軽量のテンプレートエンジンが組み込まれています。BladeはPHPコードを直接実行できます。

独自の拡張子のテンプレートファイル(.twig.blade.phpなど)から.phpファイルに変換し、さらに.htmlファイルに変換するという処理プロセスになっています。.htmlファイルは実際にはファイル出力せず、メモリ上で処理されます。

さて、WordPressはHTMLの生成に素のPHPを使います。 WordPressのフックを使うなどして、好きなテンプレートエンジンを使うように変更できるでしょうか? 答えは、「出来るが、トリッキーな仕掛けが必要」です。

配信するHTMLページのレイアウトは、テーマディレクトリにある決められたPHPファイル(front-page.phpsingle.php)が使われるしくみになっているのですが、なぜかこのファイル名を変更できるようになっていません。 そして、URLに対応する上記のファイルが存在しないと、フックtemplate_includeが呼ばれないようになっています。 このことがWordPressプラグインでテンプレートエンジンをシンプルに提供できない原因になっています。 例えば、HTTPリクエストがあった時にビルドする「オンデマンドビルド」は、既定のファイル名のものに対してしか実現できません

3. MySQLの高度な活用

WordPressのデータベースはCMSのデータを格納するために、シングルサイトモードの時に11個のテーブルを、マルチサイトモードの時に17個のテーブルを初期状態として準備します。

スキーマは投稿テーブル(wp_posts)を中心としたスター構造の形をしていて、バックエンドで入力したコンテンツは投稿テーブル(wp_posts)と投稿メタテーブル(wp_postmeta)に収められています。投稿メタデータは、投稿データをキーとするKey−Value形式のレコードで、投稿データの属性値を格納することができます。

実はこの2つのテーブルはかなり汎用的に使われていて、プラグイン固有のデータ(例えば、お問い合わせフォームのテンプレートなど)にもよくこのテーブルが使われます。 データベースのこうした使い方は、新しくテーブルを作成する必要がないので簡便である反面、「リレーションを使えない」「SQLクエリが遅い」といった、本来のRDB(リレーショナル・データベース)のポテンシャルを発揮することできません。

WordPressでは$wpdbグローバル変数を使うとWordPressの持つデータベースアクセス機能を使うことができます。 しかし、Webフレームワークの持つスキーマビルダー・クエリービルダー(ともにSQLをPHPコードで書ける)やORマッパー(レコードデータをPHPオブジェクトとして扱える)と比較してしまうと抽象度は低く、使いづらいと感じてしまうでしょう。 wpdbはSQLを直接記述するため、SQLインジェクションなどのセキュリティ対策には十分気を配る必要があります。

WordPressのデータベース構造については、Codex: WordPressデータベース構造 が詳しいです。

wpdbについては、 Codex: 関数リファレンス/wpdb Class wpdb道場 が詳しいです。

4. PHPパッケージ(プログラム部品)の活用

WordPressのプラグインに相当するPHPのパッケージ管理には、Composer(コンポーザー) というデファクトスタンダードなコマンドラインツールがあります。 2015年現在、モダンなPHPのWebフレームワークはパッケージ管理ツールに軒並みCompserを採用しています。

Composerは、プログラムが利用するパッケージの更新をとても簡単にしてくれるもので、一度使うと今までの手動での作業(ダウンロード→展開→コピー)に戻れなくなるくらい便利で手放せなくなるでしょう。

Composerはもう一つ重要な機能を備えています。 それは、PHPクラスのオートロードをしてくれることです。 今までライブラリを使うときは、require 'lib/XxxGenerator.php';のようにファイル名を明示的に指定して取り込む必要がありました。 オートロード機能は、PHPクラスが使われる時に自動でクラスに対応するファイルを特定し、requireしてくれる大変便利なものです。

Composerの2つの機能は、エンジニアの手間を軽減し、より価値のある仕事ができるようにさせてくれるものなのです。

5. バックグラウンドジョブの実行

サーバーでのバックグランドジョブを実行するには、昔ながらの時間駆動のジョブコントローラーcronやメッセージキューなどのミドルウェアを用います。

これらは、指定の時間が到来したタイミングやメッセージがポストされたタイミングなどでプログラムに知らせてくれるものです。 ただ、PHPプログラムの外の世界で動いているものなので、WordPressの世界に通知する必要があります。 WordPressはコマンドラインのインターフェースを持たないため、必然的にURLを使ってApache(Webサーバー)経由で起動することになりますが、URLとPHPスクリプトを関連づけるしくみはWordPressにありません。それはWebサーバーのお仕事としています。 テーマディレクトリの中にCGIプログラムを用意する形しかないでしょう。 そうするとそのURLは全世界に公開されてしまうので、セキュリティ面での注意が必要です。

コマンドラインインターフェース(Laravelならartisanコマンド)経由なら上記のセキュリティ懸念はありません。 WP-CLI という、WordPressの機能をコマンドラインで扱えるツールもあるようです。 たいていのWebフレームワークにはアプリケーション固有の拡張ができるコマンドラインインターフェースがあります。 サーバー上でコマンドラインプログラムを実行するためには、SSH接続ができる必要があります。

簡易的なしくみで十分であれば、WordPressの擬似cronは利用できるかもしれません。 擬似cronは、誰かがWebサイトのページを見ようとアクセスしたタイミングをトリガーとして登録しておいたPHP関数を呼び出します。 十分なアクセス数のあるサイトであれば時間の精度は問題にならないと思います。 1日1アクセスしかないサイトの場合、ジョブを実行すべき時間になったとしても実行されず、次のアクセスがあるまで放置されることになります。

6. 自由なURL設計

WordPressのフロントエンドの処理は定型化されています。 HTTPリクエストのURLから「これはシングルページか」「これはカテゴリページか」「これは月別アーカイブか」などを判別し、適切なテンプレートを使ってHTMLページを生成するのです。

これぞCMSのフレームワークたるべき骨格の部分と言えますが、検索エンジン最適化(SEO)の観点からすると、時に不自由だと映ってしまいます。

Webサイトに新しい機能をつける時には新しくURLを割り当てることが多いですが、WordPressにはURLに関しての拡張ポイントが用意されていません。 Webサーバに認識されるようにPHPスクリプトを配置することになり、WordPressの恩恵はあまり感じることができません。

Webフレームワークには、ルーティングと呼ばれるURLとPHPスクリプトを関連づける機能もあるので、URLを自由に設計することができるのです。

さらに、ルーティング機能を使うと.phpファイルを直接実行させないようにできますwp-config.phpを実行させないようにするために、Apacheのアクセス権限を設定する必要もありません。

7. PHPビルトインサーバー上で動かす

WordPressのテーマを開発していると、使い慣れたテキストエディタを使うためにローカルPCに環境を構築したくなります。 最初は、PHPの入門書の通りXAMPPやMAMPを入れてApacheの設定を書いて・・・とやるかと思いますが、開発プロジェクトが増えてくるとApacheの設定を書くのがだんだん面倒になってきます。 WordPressのちょっとした機能の調査や一時的な不具合修正などはお手軽にやりたいもの。 それを実現してくれるのが、PHPビルトインサーバーです。

PHPビルトインサーバーは、コマンドラインからPHP実行用のWebサーバーを建てることができます。事前の設定は不要です。コマンドはphp -S localhost:8000 .のように指定します。

お手軽に実行できるPHPビルトインサーバーですが、残念ながら*WordPressをPHPビルトインサーバーで実行することができないのです。

これはWordPressのソースコードの構造に原因がありそうです。

Webサイト開発のカユいところに手が届く「WordPress+(プラス)」

今まで見てきたWordPressが不得意とするところは、「WordPress+(プラス)」で解消できます。 それを可能にするために、WebフレームワークのLaravelの力を借りました。 WordPress meets Laravelなのです。 世界的人気のCMSと、世界的人気のWebフレームワークが一つになりました。

WordPress+(プラス) は、WordPressの苦手を解消し、より高度なインターネット利用を可能にするためのプラットフォームです。 Laravelの世界にWordPressを完全に内包することで、次のことができるようになりました。

  • テーマ開発にテンプレートエンジン「Blade」を使える
  • データベースのテーブルを自由に作成できる
  • PHPパッケージ管理ツール「Composer」が使える
  • コマンドスケジューラーが使える
  • URLを自由に設計できる
  • PHPビルトインサーバー上で実行できる
  • WordPress本体、プラグインの更新ができる

WordPress+(プラス)は、WordPressとLaravelが融合して産み出された新しいソリューション

もちろん、WordPressの既存の資産を全て使えます。
リリース間近(2015年11月4日現在)のPHP 7でも動きます。

ただ一点、お伝えしておくべきことがあります。 WordPress+(プラス) はLaravelベースのプラットフォームなので、Webフレームワークの基本的な知識やLaravelの知識が必要になってきます。 決して簡単に扱えるできるものではありませんが、ある規模以上のWebサイト開発には素晴らしい開発能力を与えてくれます。 Laravelについてもっと知りたいならば、Laravel 5.1 講義+ハンズオン資料PCでの閲覧推奨)を使ってください。

既に稼働しているWordPress製のサイトの機能拡張の際に、ブログ機能に手間をかけたくない新規開発の際に、WordPress+(プラス) を検討してみて見てください。

WordPressプラスについてもっと知りたくなったら、GitHubのReadme(日本語)をご覧ください。

Starを押すのも忘れずに!(^_-)


投稿日:2015年11月04日
カテゴリ: Laravel , Webサイト制作 , プログラミング