レンダリング
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ならではの特徴でもあります。
Drupalの記事
関連するDrupalでWEBサイトを構築する為の環境構築の記事やDrupalについて書いた記事になります。
記事は全てナンバリングしています。Drupalを初めて使う為の準備から始まる最初の記事から読む事もできます。
最新の記事
Drupalについて書いた最新の記事になります。
#D30 Civic Theme 1.9.0 UpDate
#D29 Drupal Core Update
Life Styleの記事
Drupalとは関係ないのですがLife Styleの記事も書いていますのでよろしければ購読ください。