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

表紙の植物はトチノキ(栃、橡、栃の木、学名:Aesculus turbinata)。ムクロジ科トチノキ属の落葉広葉樹。小さな葉が5枚~9枚。手のひらのように広げたのが1枚の葉で、「掌状複葉」と呼ばれます。
トチノキの種子は、縄文時代から食用され、現在も土産物などの「栃餅」として風土に根付いています。
トキノキの種子は、落葉広葉樹の中では最重量。種子に貯蔵されている膨大な養分のおかげで、芽生えの成長は速く、わずか約3~4週間で完成度の高い受光態勢を作りあげます。このような成長パターンは、2年目以降も継承され、急激な伸長と大きな葉の一斉開葉は若木になっても老木になっても続き、同じ振る舞いを一生続けます。東北地方の森の奥深くには、トチノキの老木が多く見られ、樹齢500年を超えるものも確認されています。(清和研二「樹は語る」)。
青森県弘前には、かつて「橡の木(トチノキ)」と呼ばれた花街があり、津軽特有の訛りや性行為を端的にうたった唄の数々は、一種の「橡の木情調」をつくっていました。(松川二郎「全国花街めぐり」)。

序文

本書の目的

本書は、オブジェクト指向を使った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を理解できるようにしました。