Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

MongoDBと Dropal の統合

このガイドでは、MongoDBをデータベースとして使用するDrupalコンテンツ管理システム(CMS)を作成する方法を学びます。Dropal は、コンテンツの認可、作成、作成可能性、認証機能を提供するPHPで記述されたオープンソースのウェブ CMS です。

パーソナライズされたユーザー エクスペリエンスを提供するウェブサイトには、 ユーザー認証のための堅牢な機能が必要です。認証済みユーザーが多いサイトでは、関係データベース内の複数のテーブルからエンティティ データを検索する際にパフォーマンスの問題が発生する可能性があります。MongoDB複雑なテーブル結合が不要になり、パーソナライズされたダッシュボードや動的コンテンツ フィードなどの機能のデータ取得速度が向上します。

MongoDB を場のデータベースとして使用する場合、Drupal は、すべての改訂版、翻訳、フィールドデータを含むJSONドキュメントとしてエンティティを保存します。この柔軟なデータ構造によりレイテンシが削減され、ユーザーにはパーソナライズされたデータに基づくエクスペリエンスがサポートされます。

MongoDB は、DRupal サイトを改善する次の機能を提供しています。

  • 水平スケーリング: 複数のサーバー間で負荷を分散することで、大規模なユーザーベースでもデータベースを拡張可能にします。

  • 統合ファイルストレージ: ユーザー ファイルを ウェブサーバーではなくデータベースに直接保存することで、ホスティングを簡素化します。

  • 全文検索: MongoDB Search 機能を活用して、個別の検索ソリューションの実装を避けます。

  • AI機能: MongoDB Vector Search 機能を使用してベクトル検索を実行し、AIサービスを統合します。

このチュートリアルでは、 MongoDBを使用して Dropupal サイトのデータを保存する Dropal CMS をビルドする。ローカルでホストする場を作成し、場に記事を追加して、MongoDBで記事のデータを表示します。

Tip

このチュートリアルでは、ローカルMongoDBレプリカセットとローカルでホストされている場を使用します。MongoDB Atlas M10 クラスターと AWS EC2 サーバーを使用する同様のチュートリアルを表示するには、MongoDB 上で Drupal を実行する方法 DEV 記事を参照してください。

このセクションの手順に従って、プロジェクトの依存関係のインストール、 MongoDBレプリカセット の配置すること、 Drupal の設定 を行います。

1

クイック スタートアプリケーションを作成するには、開発環境に次のソフトウェアをインストールします。

前提条件
ノート

これはPHP依存関係マネジメントツールです。

オペレーティング システムに対応する手順に従います。

MongoDB をローカルにインストールして、レプリカセットを実行します。

MongoDB PHP拡張機能である mongodb をインストールします。ご使用のオペレーティング システムに対応する拡張ドキュメント内の手順に従います。

このチュートリアルでは、 MongoDB Shell(mongosh)を使用してデータを表示および操作します。オペレーティング システムとインストール方法を選択し、指示に従います。

バージョン 8.3 以降を使用します。

ターミナルアプリとシェル

MacOS ユーザーの場合は、 ターミナル または 類似アプリを使用します。 Windowsユーザーの場合は、 PowerShell または コマンドプロンプトを使用します。

2

Drupal と MongoDB を一緒に使用するには、MongoDB レプリカセットを実行する必要があります。ローカル 3 ノードレプリカセットを準備して起動するには、次の手順を実行します。

  1. システムリソースの制限を解決するには、ulimit の値を増やします。

    Dropal は短期間に複数のファイルとインデックスを作成します。ターミナルから次のコマンドを実行して、ulimit64000 に設定し、レプリカセットのクラッシュを防ぎます。

    ulimit -n 64000
  2. レプリカセットを配置します。

    ulimit を増やしたら、テストおよび開発用に自己管理型レプリカセットを配置する チュートリアルに従って、レプリカセットを配置して初期化します。レプリカセットの名前が rs0 で、ポート 270172701827019 で実行中3 つのノードがあることを確認します。

3

Tip

PHPドライバーの使用

mongosh の代わりにMongoDB PHPドライバー を使用してデータベースユーザーを作成する場合は、createUser コマンドを MongoDB\Database::command() メソッドに渡します。詳細については、ドライバーのドキュメントのデータベースコマンドの実行するを参照してください。

次の手順を実行して、DRupalデータベースに必要な権限を持つユーザーを作成します。

  1. ターミナルから次のコマンドを実行して、mongosh のレプリカセットに接続します。

    mongosh "mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0"
  2. mongosh シェルで次のコマンドを実行して、adminデータベースを入力します。

    use admin
  3. 次に、シェルから次のコマンドを実行することでユーザーを作成します。

    db.createUser({
    user: "<database username>",
    pwd: "<database user password>",
    roles: [
    { role: "readWrite", db: "drupal" },
    { role: "dbAdmin", db: "drupal" }
    ]
    })

    <database username><database user password> を希望する認証情報に置き換えます。これらの値を保存して、後の手順で使用します。

4

新しいターミナルウィンドウから、次のコマンドを実行して、drupal-quickstart という名前の Dropalプロジェクトを作成します。

composer create-project drupal/recommended-project:11.1.5 drupal-quickstart
cd drupal-quickstart

次に、次のコマンドを実行中してMongoDBモジュールをインストールします。

composer require drupal/mongodb:^3.1

Dropal をインストールしたら、このセクションの手順に従ってアプリケーションがMongoDBと連携できるようにします。

1

Dropal コアPHPファイルには、 MongoDBで動作するためのパッチが必要です。drupal-quickstart/webディレクトリに移動し、次のコマンドを実行中してパッチを適用します。

cd web
git apply -v modules/contrib/mongodb/patches/drupal-core-11.1.5.patch
cd ..
2

drupal-quickstartディレクトリから、web/sites/default サブディレクトリに移動し、次のコマンドを実行します。

cd web/sites/default
cp default.settings.php settings.php
chmod 777 settings.php
cd ../../..

これらのコマンドは、デフォルト設定ファイルをsettings.php という名前の新しいファイルにコピーし、このファイルの権限を更新して Dropal が新しいコンテンツを書込むできるようにします。

3

Dropal が公開ファイルを変更できるようにするには、filesディレクトリを作成し、drupal-quickstartディレクトリから次のコマンドを実行中てその権限を設定します。

mkdir -p web/sites/default/files
chmod -R 777 web/sites/default/files

次に、web/sites/default/settings.phpファイルに次の値が含まれていることを確認して、これらのファイルのロケーションを指定します。

$settings['file_public_path'] = 'sites/default/files';

Tip

前の値が settings.php でコメント アウトされている場合は、コメントを外します。

このセクションの手順に従って、DRupal 構成ウィザードを使用して Dropupal のインストールを完了します。

1

drupal-quickstartディレクトリから、次のコマンドを実行して組み込みPHPサーバーを起動します。

php -S localhost:8080 -t web

成功させた場合、このコマンドは次の情報を出力します。

[Date Time] PHP 8.3.0 Development Server (http://localhost:8080) started
2

ウェブ ブラウザで http://localhost:8080 を開き、DRupal インストールウィザードを起動します。次に、次の応答を選択してプロジェクトを構成します。

Tip

場に非推奨の非標準の (boolean) キャストに関するエラー メッセージが表示されている場合は、プロジェクトの DocParser.phpファイルで次の行を見つけます。

$this->ignoreNotImportedAnnotations = (boolean) $bool;

この行を、次のコードで置き換えます。

$this->ignoreNotImportedAnnotations = (bool) $bool;
  1. [ 言語を選択 ] ページで、[ 英語 ] を選択し、[ Save(保存) ] をクリックして続行します。

  2. [ プロファイルの選択 ] ページで、[ 標準 ] を選択したままにし、[ Save(保存) ] をクリックして続行します。

  3. データベースを設定するページで、データベースタイプとしてMongoDBを選択し、次の情報を提供します。

    [ Save(保存) ] をクリックして続行します。

  4. Dropal は必要なモジュールをインストールします。これには数分かかる場合があります。

  5. 場の コンフィギュレーション ページで、次の情報を提供します。

    • 場名: Drupal on MongoDB と入力します。

    • 場のメールアドレス: 任意のメールアドレスを入力します。存在しないアドレスを使用できます。

    • ユーザー名: 管理者ユーザー名を選択します。

    • パスワード: 強力なパスワードを選択してください。

    • メール通知を受信する: このボックスをオフにします。

    [ Save(保存) ] をクリックして続行します。

3

Drupal をインストールして場を構成することで、Drupal は設定ファイルへの書き込みアクセスが不要になります。これらのファイルを保護するには、drupal-quickstartディレクトリから次のコマンドを実行します。

chmod 555 web/sites/default
chmod 444 web/sites/default/settings.php

インストールが完了したら、このセクションの手順に従ってコンテンツを作成し、そのデータをMongoDBに保存します。

1

インストールが完了すると、場は Dropal のホームページにリダイレクトされます。場は次の画像のようになります。

初期インストール後の Dropal ホームページのスクリーンショット

Tip

場スケーリング

Drupal サイトがスタイルのないプレーン HTML を表示する場合は、CSS と JavaScript の集計を無効にする必要がある場合があります。集計を無効にするには、ブラウザで http://localhost:8080/admin/config/development/performance にアクセスし、Aggregate CSS files および Aggregate JavaScript files ボックスのチェックを外してください。

2

ページ上部のナビゲーション バーで [Content] をクリックします。次に、[ コンテンツの追加 > 記事 ] をクリックします。

3

Create Article ページで、次のアクションを実行します。

  1. Title セクションに "Welcome to My Drupal Site" を入力します。

  2. Body セクションで、次のテキストを入力します。

    This is my first article on Drupal with MongoDB!
    All content is stored as JSON documents in MongoDB.
  3. Menu settings を選択し、Provide a menu link ボックスをオンにします。

  4. [Save] をクリックします。

4

保存すると、公開された記事が表示されます。場は次の画像のようになります。

Dropal の記事ページのスクリーンショット
5

Tip

PHPドライバーの使用

mongosh の代わりにPHPドライバーを使用してコレクションとコンテンツ データを表示する場合は、MongoDB\Database::listCollections() メソッドと MongoDB\Collection::find() メソッドを使用します。詳しくは、次のPHPドライバーのドキュメントを参照してください。

コンテンツがMongoDBに保存されていることを確認するには、次の手順を実行します。

  1. 新しいターミナルウィンドウを開き、mongosh のMongoDBレプリカセットに接続します。

    ターミナルから次のコマンドを実行します。

    mongosh "mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0"
  2. drupalデータベースを入力し、コレクションを表示します。

    mongoshターミナルで次のコマンドを実行します。

    use drupal
    show collections

    Dropal は、次のようなさまざまなタイプのコンテンツを保存するために複数のコレクションを作成します。

    • node: コンテンツ ノードを保存します

    • users: ユーザー アカウントを保存します

    • config: 構成データを保存します

  3. 記事データを表示します。

    記事に関する情報を表示するには、mongoshターミナルで次のコマンドを実行する。

    db.node.find().pretty()
    [
    {
    _id: ObjectId('...'),
    nid: 1,
    vid: 1,
    type: 'article',
    uuid: '...',
    langcode: 'en',
    node_all_revisions: [
    {
    ...
    }
    ],
    node_current_revision: [
    {
    ...
    }
    ],
    node_latest_revision: [
    {
    ...
    title: 'Welcome to My Drupal Site',
    created: ...,
    changed: ...,
    promote: true,
    sticky: false,
    default_langcode: true,
    revision_default: true,
    revision_translation_affected: true,
    node_latest_revision__body: [
    {
    bundle: 'article',
    deleted: false,
    langcode: 'en',
    entity_id: 1,
    revision_id: 1,
    delta: 0,
    body_value: '<p>This is my first article on Drupal with MongoDB!<br>All content is stored as JSON documents in MongoDB.</p>',
    body_summary: '',
    body_format: 'basic_html'
    }
    ],
    node_latest_revision__comment: [
    {
    bundle: 'article',
    deleted: false,
    langcode: 'en',
    comment_status: 2,
    entity_id: 1,
    revision_id: 1,
    delta: 0
    }
    ]
    }
    ]
    }
    ]

    このコマンドは、記事テキストとメタデータを含むJSONドキュメントを返します。

Flutter クイック スタート チュートリアルが完了しました。

これらの手順を完了すると、ローカルMongoDBレプリカセットに接続し、コンテンツをJSONドキュメントとして保存する Dropal CMS が作成されます。

Drupal と MongoDB の詳細については、次のリソースを表示します。

戻る

Symfony Integration

項目一覧