レンダリング

WordPressやDrupalなどのCMSを利用する際、インターネットでそれぞれの得手不得手を調べると思います。いろいろな要素がありますが、良く言われるDrupalは大量データと大量アクセスに強い大規模Webサービスに向くCMS、WordPressは大量データと大量アクセスはあまり得意ではなく小規模Webサイトに向くCMS、といった意見を目にすることがあると思います。

あながち間違いではないのですが、CMSが持つ機能がそういうものなのか?実は利用の仕方と深い関連があるのではないか?などの疑問を私も持っていたので、今回はそのあたりを考察してみたいと考えています。

動的ルーティング

ページを作成し、実際に配信する場合、CMSのシステムは

  • ページ作成 >> 記事に関わるテキストや画像 >> ページの目的 >> 見た目(CSSやJSなど) 

をCMS側で用意された機能を使い作成します。ページを構成する様々な要素はデータベースを呼びデータベースから必要な情報や機能を配置して一つのページとして閲覧者に配信します。この一連の流れを動的ルーテイングと表現しています。

静的ルーティング

昔ながらのHTMLでページを作成して配信する場合

ページの作成は同様に

  • ページ作成 >> 記事に関わるテキストや画像 >> ページの目的 >> 見た目(CSSやJSなど) 

ローカル環境で行い、配信はサーバーにHTMLファイルで画像などと共に上げて配置しこのHTMLファイルを閲覧者に配信します。ここで上記のCMSで作成したページとの違いは、ページを配信する際データベースを使っていません。閲覧者は単純にサーバーのHTMLファイルを呼び出し、ブラウザで閲覧しています。この一連の流れを静的ルーテイングと表現しています。

それぞれの目的

なんで動的ルーティングが必要なのかは、BlogやSNSをご覧になると良く理解できます。BlogやSNSはユーザーのコメントが入ったり返信したりと元のページが変化して行きます。この随時ページを変化させて閲覧者に届ける為にプログラムとデータベースを使っています。

ユーザーのアクションや閲覧状況に応じて変化させる必要のないページは単純なHTMLファイルとしての配信を行えば良いので静的ルーティングで処理すれば良く、ここにプログラムやデータベースは必要なくその事でページの表示や負荷が軽くなります。

レンダリングとは?

先に述べた、ルーテイングという処理の、作成したページをどう処理して閲覧者に配信するかというプロセスを総称してレンダリングと呼ばれています。このレンダリングのプロセスが利用するシステムやCMSにおいて異なります。実際には、基本処理は現行世にあるコンピュータや開発言語、データベースの原理原則があるので同じような処理を行なっていますが、その過程やどこにそれを配置するかという思想がシステムやフレームワーク、CMSにより異なっています。

今回、実際に利用しているWordPressとDrupalのレンダリングについて調べて見ましたので事項からその辺りを考察してみます。

記事を書くのにAIを使ってみる

今回、レンダリングに関わる技術的側面や専門用語が必要かなと考え、記事の内容や精度を落とさないには何を調べたらと考えVsCordの機能拡張で入れてあるGithub Copilotを使いWord PressのレンダリングとDrupalのレンダリングについて質問しました。さすが世界の開発者が日々切磋琢磨し開発を行い情報交換をしているGithubの情報は信頼性が高く的確な答えを教えてくれます。

Word Pressのレンダリングについて

Copilotの回答

WordPressのレンダリングプロセスは、ユーザーがWebブラウザでWordPressサイトを訪問した際に、サーバー上で動的にコンテンツを生成し、それをクライアント側に送信する一連のステップです。このプロセスは、WordPressのコア、テーマ、プラグイン、データベースといった要素が連携して行われます。以下に、WordPressのレンダリングプロセスの概要を説明します。

1. リクエストの受信

  • ユーザーがWebブラウザを通じて特定のURLにアクセスすると、WordPressサイトのサーバーはそのリクエストを受信します。

2. WordPressコアのロード

  • サーバーはWordPressのコアファイルをロードし、WordPress環境を初期化します。これには、設定ファイル(wp-config.php)の読み込みや、データベースへの接続が含まれます。

3. URLの解析

  • WordPressは、受信したリクエストのURLを解析して、どの投稿やページがリクエストされたのかを特定します。これは、WordPressのリライトルールとパーマリンク設定に基づいて行われます。

4. クエリの実行

  • URLに基づいて特定されたコンテンツ(投稿、ページ、カテゴリーなど)に対応するデータベースクエリが実行されます。このクエリによって、表示するコンテンツのデータが取得されます。

5. テーマの処理

  • 取得したコンテンツデータは、アクティブなWordPressテーマによって定義されたテンプレートファイルに渡されます。テーマは、コンテンツをHTMLに変換し、スタイルやレイアウトを適用します。

6. プラグインのフック

  • プラグインは、特定のアクションやフィルターを通じてレンダリングプロセスに介入することができます。これにより、コンテンツの変更や追加機能の実装が可能になります。

7. HTMLの生成

  • テーマとプラグインによる処理が完了すると、最終的なHTMLコンテンツが生成されます。このHTMLには、コンテンツ、スタイルシートのリンク、JavaScriptファイルのリンクなどが含まれます。

8. クライアントへのレスポンス

  • 生成されたHTMLコンテンツは、HTTPレスポンスとしてクライアント(ユーザーのWebブラウザ)に送信されます。ユーザーのブラウザはこのHTMLを受け取り、ページをレンダリングして表示します。

WordPressのレンダリングプロセスは、高度にカスタマイズ可能であり、テーマやプラグインを通じて、サイトの見た目や機能を柔軟に変更することができます。また、キャッシングや最適化の技術を適用することで、レンダリングのパフォーマンスを向上させることも可能です。

Drupalのレンダリング

Copilotの回答

Drupalのレンダリングプロセスは、ユーザーがWebブラウザを通じてDrupalサイトにアクセスした際に、サーバー上でコンテンツを動的に生成し、それをクライアント側に送信する一連のステップです。Drupalは、フックシステム、テーマレイヤー、キャッシングメカニズムなどを利用して、柔軟かつ効率的なレンダリングを実現します。以下に、Drupalのレンダリングプロセスの概要を説明します。

1. リクエストの受信

  • ユーザーがWebブラウザを通じて特定のURLにアクセスすると、Drupalサイトのサーバーはそのリクエストを受信します。

2. ブートストラップと初期化

  • Drupalはブートストラッププロセスを開始し、必要なライブラリのロード、データベース接続の確立、セッション管理などの初期化作業を行います。

3. URLの解析とルーティング

  • 受信したURLを解析し、定義されたルーティングに基づいて、どのコントローラーやコールバック関数を実行するかを決定します。

4. コンテンツの取得と生成

  • ルーティングに基づいて特定されたコントローラーやフックが実行され、データベースからコンテンツを取得または生成します。

5. レンダリング配列の構築

  • 取得または生成されたコンテンツは、レンダリング配列として構築されます。レンダリング配列は、コンテンツの構造とプロパティを定義する連想配列です。

6. テーマシステムの処理

  • レンダリング配列はテーマシステムに渡され、テーマ関数やテンプレートファイルを通じてHTMLに変換されます。この過程で、テーマやモジュールによって提供される様々な装飾やレイアウトが適用されます。

7. レンダリングと出力

  • 最終的に生成されたHTMLは、HTTPレスポンスとしてクライアント(ユーザーのWebブラウザ)に送信されます。ユーザーのブラウザはこのHTMLを受け取り、ページをレンダリングして表示します。

8. キャッシング

  • Drupalは、ページ、ブロック、エンティティなどのレベルでキャッシングを行い、パフォーマンスを向上させます。キャッシュされたデータは、再度同じリクエストが来た際に再利用され、レンダリングプロセスの速度を向上させます。

Drupalのレンダリングプロセスは、コンテンツの動的な生成とキャッシュを通じて最適化されたページ配信を実現します。また、フックシステムやテーマレイヤーを通じて、開発者はレンダリングプロセスに幅広く介入し、カスタマイズすることが可能です。

レンダリング処理の考察

Word PressとDrupalそれぞれのレンダリングプロセスについてGithub Copilotから非常にわかりやすく的確な回答をいただいたのでそれぞれの内容と違いを考察してみます。

ぱっと見はそれぞれ、リクエストを受けて、コアプログラムがシステムポリシーにおいて処理をして最終的にはHTMLとして閲覧者に配信していくという内容になっています。この中で、Word PressはURLの解析処理にてDBを参照し、テーマ、プラグインと進む過程においてもDBを参照し最終的にHTMLとして出力しています。Drupalも同様にURLの解析やテーマ、モジュールと進む過程でDBを参照するのですが、プロセスの初期化と配列処理を行い、処理を構造化して整理しています。整理した状況でのDBアクセスを行うので、DBに対する負荷が軽いのではないかと想像出来ます。


DrupalとWord Pressの評価を分けている要素に、Drupalはこのプロセスにおいてキャッシングを行なっています。このキャッシングはページそのものだけでなくブロックやエンティティなどの構成要素毎のキャッシングも含まれています。この事で、一人のユーザーが閲覧すると、以降のユーザーが単一ページだけでなく複数ページを見ても、構成要素のキャッシングがなされた静的なページを閲覧する事になり、DBの負荷によるページ表示の遅延が起きにくくなっています。

キャッシング処理はWord Pressでも行う事ができますが、コアプログラムではなく、サードパーティーが開発するプラグインを活用してキャッシングを最適化する必要があります。


Drupalのスケーラビリティが評価される理由にコアプログラムにページ配信の最適化が用意されキャッシングまでを含めページ作成から配信までの基本機能に組み込まれている事があり、実際その事で、DBの負荷による遅延やページの遅延が起きにくい環境が基本構成で用意されている事があります。

リクエストは動的でも処理と閲覧は静的化して配信するというシステムの動作ポリシーが、大量アクセスに対応することと、大企業や公共機関の利用においては配信情報に対する動的要素というのはほとんど必要がないので、そのような用途に特化し進化してきたDrupalならではの特徴でもあります。

WEBサイトの公開準備

レンダリングによる比較の結果

WordPressとDrupalのレンダリングのプロセスをGithub Copialotに質問し回答をもらい概要を理解するという内容の記事でしたが私自身もう少ししっかりと調べて特徴と利用方法、解決方法などを深堀して行きたいと考える内容でした。一般に言われるWordPressが苦手とされDrupalが得意とするスケーラビリティについての話題の意味が簡単にですが理解できた事も収穫であります。

キャッシングについてはページの配信の最適化をどこまで行うかのポリシーが重要になります。場合によっては不具合を引き起こしてしまうケースもありますので、しっかりと知識を得て、どう利用して行くかを組み立てる必要もあるので私自身もしっかり勉強して対応して行きたいと考えています。

今回GitHub Copilotが非常に優秀な答えを出してくれています。私も良く使うのですが、一番良く使うのが、エラーが出た際にエラーをそのまま貼り付けて調べるという使い方で、なんらかの解決策のヒントを出してくれるケースもあります。機会があれば利用してみると開発者の方は当然ながらセルフメイドで、CMSを使いブログなどを運営される方にも役立つと思います。

ページのリンクを記載しますが、実際の使用はVscordなどのエディターやIDEの機能拡張として使うケースがほとんどだと思います。

Github Copilot

https://github.com/features/copilot(Opens in a new tab/window)

余談ですが昨今急速に普及しているAIの回答において、元記事の権利関係やクレジットの問題ってどうなっているのか気になっています。大手テックの歴史から今回もなし崩しで進んで、マーケットが形成されたらバジェットを処理していくという事なのかなと勝手に想像しています。

Drupalで作成したWEBサイトの公開準備

これまで、LOCAL環境でDrupalを動かし、LOCAL環境でWEBサイトを構築していく上で気がついた事を記事に書いていますが、次項より作成したWEBサイトを公開する準備をしていきます。

Drupalの記事

関連するDrupalでWEBサイトを構築する為の環境構築の記事やDrupalについて書いた記事になります。

記事は全てナンバリングしています。Drupalを初めて使う為の準備から始まる最初の記事から読む事もできます。

雑感

私自身が個人的で小規模なWEBサイトをDrupalとCivic Themeを使って構築していく中で気がついた事や感銘した事、不備として感じた事を記事にしています。実際の事例は別項で記事にしていますのでここでの記事は感想的なものとなっています。
  • Drupal記事まとめ
  • 雑感

Drupal記事

Drupalについて記事を書いています。このWEBサイトを構築していく上でのトピックになります。プログラミングやソースコードなどエンジニア的な記事ではなく、プログラミング経験がない個人がDrupalでパーソナルなWEBサイトを構築するという観点での記事になります。
  • Drupal記事まとめ

最新の記事

Drupalについて書いた最新の記事になります。

#D32 Drupal 10.4.0

Drupal Coreが10.3xから10.4xにアップデートされましたので当サイトも早速アップデートします。
  • Civic Theme
  • Drupalの記事

#D31 Civic Theme Sub Theme

Node.jsのバージョン制限の問題でインストールしていなかったサブテーマをインストールして、サブテーマでの運営に切り替えます。
  • Drupalの記事
  • Civic Theme

#D30 Civic Theme 1.9.0 UpDate

Civic Themeのアップデートの通知が来ていましたので1.8.2から1.9.0にアップデートしました。3月程度のブランクながら1.8x > 1.9xなので様子をみようと考えたのですが、改善点も多いので早速アップデートを行いました。
  • Drupalの記事
  • Civic Theme

#D29 Drupal Core Update

前記事で、10.3.4 > 10.3.5のアップデート行う際にアップデートの内容を確認しました。Gitlabで変更内容のコードを確認する事で、変更内容をより詳しく理解することが可能です。今回10.33 > 10.3.4のアップデートの内容を確認します。
  • Drupalの記事
  • 環境構築

Life Styleの記事

Drupalとは関係ないのですがLife Styleの記事も書いていますのでよろしければ購読ください。

Life Style記事

ライフスタイルの記事になります。Drupalに触れる目的でこのWEBサイトを立ち上げています。元はWord Pressで作成した記事をこちらのWEBサイトに再構築しています。Word Pressも学習目的で利用したのですが記事をしっかり作る事を目的としていたので、テーマに興味があればそれなりに楽しめると思います。
  • Life Style記事まとめ
  • Drupalの記事
  • 雑感