風きよし オブジェクト指向 WordPress 古今東西舎 20200901 リンク

序文

本書の目的

本書は、オブジェクト指向を使ったWordPressによるWebアプリケーション開発の解説書です。
WordPress (ワードプレス) は、ブログから高機能なサイトまで作ることができるオープンソースのソフトウェアです。Web上の35%のサイトが WordPress を使っていると言われ、個人ブログから大規模サイトまで用途はさまざまです。
WordPressは、当初(2004年)は、ブログ用ソフトウェアとして開発されました。WordPressは、ユーザがURLを指定(HTTPリクエスト)すると、WordPressコアに含まれるさまざまな処理(イベント)が自動的に次々と実行され、ページが自動的に表示される仕組み(HTTPレスポンス)は、イベント駆動型モデルと呼ばれ、 WordPressの根幹をなすアーキテクチャです。
その後、WordPress3.x(2010年)の頃から、WordPressは、「カスタム投稿タイプ」の機能が追加されたことにより、CMSとして機能が標準装備されました。
3.x以前では、たとえば、散歩のブログで、「月島の西仲通り商店街」の記事を投稿するとき、カテゴリに「月島」、「商店街」と登録していましたが、3.x以降では、「地域情報サイト」を開設し、その中に「月島エリア」や「全国の商店街」を総括する記事を登録し、そこに「月島の西仲通り商店街」の「ブログ投稿」を関連づけることができ、私的な公開日記であったブログをより公式なサイトへと変貌させることが可能になりました。
WordPressのCMSとしての機能が強化されたことに伴い、解決しなければならない課題は、Webアプリケーション開発のプログラミングの効率化です。
ブログ記事の表示だけであれば、WordPressのイベント駆動型モデルにより、自動表示が可能ですが、複数のカスタム投稿タイプやカスタムタクソノミーと関連づけた表示を行う際には、WP_Queryのコードを個別に書かなければなりません。WP_Queryはたくさんの種類があり、複雑なコードをたくさん書かなければならず、また、ページの数が増えてくると、ループ内に記述する表示(ビュー)のコード量も増えます。
一般に、Webアプリケーション開発においては、上記のような課題を解決するために、開発者は、MVCアーキテクチャを用いたフレームワーク(CakePHP、laravel、FuelPHPなど)を採用します。MVCは、Model(データベースからのアクセスなどロジックを記述したコード)とView(画面表示を行うコード)とController(ModelとViewを繋いで全体をコントロールするコード)の3カ所に抽象化してコードを書きます。
しかし、それだけの理由で、WordPressを捨て、他のMVCフレームワークに乗り換えることは得策ではありません。WordPressには、テーマが提供する美しいデザインやイベント駆動型モデルによるシンプルな記事表示の仕組み、豊富なプラグインなど、多くの魅力があるからです。
本書は、Webアプリケーション開発において用いられるMVCモデルをWordPress既定のイベント駆動型モデルに連結させるプラグイン「wp-OOP」を例に、WordPressにオブジェクト指向プログラミング(OOP)の手法を持ち込み、継承やオーバライドを使うことにより、類似のコードの再利用性を高め、複雑で大規模なWebアプリケーション開発に対応していくための方法について解説します。

本書の内容・特色

本書の内容は以下の通りです。
第1章「WordPressの基本構造」は、WordPressの基本の流れ(イベント駆動型モデル)と、それに続く、メインクエリー~メインループ~サブクエリー~サブループについて、図解しています。さらに、WordPressをデータの側から見る方法として、ER図によるエンティティの可視化の方法について説明します。
第2章「サブクエリーの抽象化」は、WordPressがCMSへと変貌を遂げたときの中核機能となったカスタム投稿タイプ、カスタムタクソノミーを使ったサブグエリーの事例を説明します。
第3章「オブジェクト指向プログラミング」は、第2章で整理した事例をもとにして考えたMVCモデルプラグイン「wp-OOP」を例に、オブジェクト指向プログラミングのコードについて解説します。
補足編 Ⅰ「オブジェクト指向補足」は、基礎知識の解説です。文献からの引用により、本書で使用する用語を解説します。

本書は、各頁において、UMLによる図解を取り入れています。UML(Unified Modeling Langage)は、オブジェクト指向を使ったシステムの記述(スケッチ)に使われる記法です。コードの記述だけでなく、シーケンス図やクラス図を併記することにより、視覚的な理解が得られるようにしました。
また、サブクエリーの説明では、ER図の記法を用いて、主キーと外部キーの関連を図解し、データの側から見ることにより、WordPressを理解できるようにしました。