---
url: 'https://dxpr.com/ja/hc/documentation/learn-dxpr-builder/development/testing'
title: 'テスト | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T11:28:27+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: 'DXPR Builderには4種類の自動チェックがあります。エディターのPuppeteerテスト、DrushコマンドのBashエンドツーエンドテスト、別リポジトリdxpr_mavenのSeleniumビジュアルリグレッションスイート、リンターです。このページでは各項目、ローカルでの実行方法、CIでの実行方法を列挙します。'
tags:
  - Tooling
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T11:28:27+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: テスト
      description: 'DXPR Builderには4種類の自動チェックがあります。エディターのPuppeteerテスト、DrushコマンドのBashエンドツーエンドテスト、別リポジトリdxpr_mavenのSeleniumビジュアルリグレッションスイート、リンターです。このページでは各項目、ローカルでの実行方法、CIでの実行方法を列挙します。'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T11:28:27+0000'
      dateModified: '2026-10-24T11:28:27+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/ja/hc/documentation/learn-dxpr-builder/development/testing'
      articleSection: Tooling
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/ja/hc/documentation/learn-dxpr-builder/development/testing'
      description: 'DXPR Builderには4種類の自動チェックがあります。エディターのPuppeteerテスト、DrushコマンドのBashエンドツーエンドテスト、別リポジトリdxpr_mavenのSeleniumビジュアルリグレッションスイート、リンターです。このページでは各項目、ローカルでの実行方法、CIでの実行方法を列挙します。'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: ホーム
            item: 'https://dxpr.com/ja'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: ja
---
[Help Center](/ja/node/75)/[Documentation](/ja/hc/documentation) /[Learn DXPR Builder](/hc/documentation/learn-dxpr-builder) /[Extend](/hc/documentation/learn-dxpr-builder/extend) /[Tooling](/hc/documentation/learn-dxpr-builder/extend/tooling) # テスト.

 Learn DXPR BuilderExtendTooling

   ## In this guide

 Related guides

- [コントリビュート](/ja/hc/documentation/learn-dxpr-builder/development/contributing)
- [Drushコマンド](/ja/hc/documentation/learn-dxpr-builder/development/drush-commands)

DXPR Builderには4種類の自動チェックがあります。エディターのPuppeteerテスト、DrushコマンドのBashエンドツーエンドテスト、別リポジトリ`dxpr_maven`のSeleniumビジュアルリグレッションスイート、リンターです。このページでは各項目、ローカルでの実行方法、CIでの実行方法を列挙します。

## 存在するチェック

| チェック | 場所 | 実行条件 |
|---|---|---|
| エディターコンソール・レイアウトテスト | `test/test-editor.js` | JavaScript、HTML、`test/`に触れるプルリクエスト(`.github/workflows/fe-test.yaml`) |
| Drushエンドツーエンドテスト | `scripts/drush-e2e/` | PHP、YAML、Markdownに触れるプルリクエスト(`.github/workflows/review.yaml`) |
| Seleniumビジュアルリグレッションスイート | `dxpr_maven`リポジトリ | PRコメントコマンド(`.github/workflows/e2e-command.yaml`、`e2e-bs3-command.yml`、`e2eV2-command.yaml`) |
| PHPコーディング標準(phpcs) | `scripts/linters/run-drupal-lint.sh`、`phpcs.xml.dist` | PHP、YAML、Markdownに触れるプルリクエストと、対象ブランチ`3.x` |
| PHPStan | `scripts/linters/run-drupal-check.sh` | PHP、YAML、Markdownに触れるプルリクエストと、対象ブランチ`3.x` |
| ESLint、Stylelint、Rust Clippy | `scripts/linters/` | 変更パスで絞り込んだプルリクエスト |
| 非推奨検出器 | `.github/workflows/deprecations.yml` | プルリクエストの対象は`js/`と`dxpr_builder/build/` |
| ドキュメントチェック(markdownlint、`check_docs.py`、Vale) | `.markdownlint-cli2.yaml`、`docs/lint/`、`.vale.ini` | プルリクエストの対象は`docs/`(`review.yaml`) |

リポジトリ唯一のPHPUnitテストはレガシーメディアサブモジュール用の`modules/dxpr_builder_media/tests/src/FunctionalJavascript/MediaEntityBrowserTest.php`です。GitHubワークフローは実行しません。drupal.orgのGitLabパイプライン(`.gitlab-ci.yml`)は標準のDrupalCIテンプレートを使い、PHPUnitジョブはそこでオフになっていません。

## エディターコンソールテスト

`test/test-editor.js`はポート3000で静的サーバーを起動し(`test/start-standalone-server.js`)、`test/standalone-editor/`から4つのスタンドアロンページをヘッドレスChromeで開きます。`test-bs5-anon.html`、`test-bs5-cms-block.html`、`test-bs5-editor.html`、`test-bs5-clean-html.html`です。失敗条件は以下です。

- ページがJavaScriptエラーを投げる場合。
- フルエディターが2000ミリ秒以内に準備できないか、読み込み後に遅延の画面外コントロールが残る場合(パフォーマンスゲート)。
- Power userモードでエレメントコントロールが重なる場合(基準は重なりペアゼロ)。
- フルエディターページの保存HTMLが32,094文字のリファレンスより大きい場合。
- ページ固有チェックの失敗。例えばクリーンなBootstrap HTMLの解析、パンくず、Panelタイプ、ローカル動画の**Muted**設定、CMSブロックプレビュー。

ページは`dxpr_builder/`からビルド済みファイルを読み込むため、先にビルドします。

1. 依存関係をインストールします。

    ```bash
    npm install

    ```
2. エディターバンドルをビルドします。CIスクリプトはこの順序でタスクを実行します(`test/scripts/run-fe-tests.sh`)。

    ```bash
    npx grunt concat
    npx grunt exec:gen
    npx grunt babel
    npx grunt terser
    npx grunt sass
    npx grunt postcss

    ```
3. テストを実行します。

    ```bash
    npm run fe-test

    ```

    ブラウザーを見るには`npm run fe-test:headed`を使い、アサーションなしでスタンドアロンページを提供するには`npm run fe-test:dev`を使います。

CIでは`.github/workflows/fe-test.yaml`が同じテストをDockerで実行します。

```bash
docker compose --profile fe-test run --rm fe-test

```

## Drushエンドツーエンドテスト

`scripts/drush-e2e/run-e2e-tests.sh`はComposerコンテナ内にSQLite付きの新規Drupal 11サイトをインストールし、モジュールをシンボリックリンクして有効化します。`dxpr_builder_text`フォーマッター付きのBasicページコンテンツタイプ、ページテンプレート、利用者テンプレートを作り、すべての`scripts/drush-e2e/test-*.sh`ファイルを実行します。

| ファイル | テスト対象コマンド |
|---|---|
| `test-cleartext-key-update.sh` | 更新9026はKeyモジュール保存場所に残った平文プロダクトキーをクリアし、選択Keyが消えた場合は保持します(`cleartext-key-update.php`) |
| `test-cms-cache-tags.sh` | ブロック・ビューリストのキャッシュ無効化(`cms-cache-tags.php`) |
| `test-elements.sh` | `drush dxb:element:list` |
| `test-migration-summary.sh` | マイグレーション列サマリーの単数・複数表現(`migration-summary.php`) |
| `test-migrations.sh` | `drush dxb:migrate`とコンテンツマイグレーションリグレッション(`migration-regressions.php`) |
| `test-page-controller.sh` | ルート向けのページコントローラービルド(`page-controller.php`) |
| `test-page-create.sh` | `drush dxb:page:create` |
| `test-page-get-update.sh` | `drush dxb:page:get`、`drush dxb:page:update` |
| `test-page-module.sh` | Drag and Drop Pageモジュールは列挙する全設定を出荷します(`page-module.php`) |
| `test-profile-buttons.sh` | Builderプロフィールのテキストエディターボタン(`profile-buttons.php`) |
| `test-profile-order.sh` | 重みで適用されるプロフィールとプロフィールリストの順序(`profile-order.php`) |
| `test-settings-form.sh` | 保存・検証するのは**General Settings**でのプロダクトキーで、起動されるライセンス同期(`settings-form.php`) |
| `test-setup-ai.sh` | `drush dxb:setup-ai` |
| `test-templates.sh` | `drush dxb:template:list` |
| `test-user-licenses-page.sh` | ライセンスカードは**User Licenses**に1度表示され、**People**にも表示されたままです(`user-licenses-page.php`) |
| `test-user-settings.sh` | 各編集者独自のエディター設定(`user-settings.php`) |
| `test-user-templates.sh` | `drush dxb:user-template:list`、`drush dxb:user-template:create` |

すべて実行します。

```bash
docker compose --profile drush-e2e run --rm e2e-test

```

1ファイルの実行は名前の一部を渡します。スクリプトは`scripts/drush-e2e/test-*<filter>*.sh`に一致します。

```bash
docker compose --profile drush-e2e run --rm e2e-test page-create

```

テストの追加は`scripts/drush-e2e/test-<name>.sh`を作り、`section "<Title>"`を呼び出し、`scripts/drush-e2e/_helpers.sh`のヘルパーを使います。`assert_success`、`assert_fail`、`assert_eq`、`assert_has`、`assert_not_empty`、`assert_runs`、`assert_dry_run`です。各ヘルパーは説明とコマンド文字列を取ります。

CIではこのスイートが`.github/workflows/review.yaml`の「Run Drush E2E tests」ジョブです。プルリクエストが`.php`、`.module`、`.inc`、`.install`、`.yml`、`.md`、`composer.json`、`composer.lock`ファイルを変更すると実行されます。

## Seleniumビジュアルリグレッションスイート

ブラウザーテストは`dxpr_maven`リポジトリのJava TestNGスイートです。`docker-compose.test.yml`で定義されたDockerスタック(Seleniumハブ、Chromeノード、Mavenコンテナ)上で、このリポジトリからインストールしたサイトに対して実行されます。ローカルチェックアウトからは実行しません。プルリクエストコメントから起動します。`.github/workflows/command-dispatcher.yml`がコメントをワークフロー実行に変換します。

| コマンド | スイート | ワークフロー |
|---|---|---|
| `/e2e` | `chrome.editor.bs5.parallel.xml`と匿名BS5スイート | `e2e-command.yaml` |
| `/e2e-bs3` | `chrome.editor.bs3.parallel.xml` | `e2e-bs3-command.yml` |
| `/e2eV2` | DXPR CMSスタック上のBS5エディター・匿名スイート | `e2eV2-command.yaml` |
| `/qa-demo-2x-dxpr_theme6x-tests` | DXPR Theme 6.xのQAデモ | `qa-demo-2x-dxpr_theme6x-tests-command.yaml` |

オプション(`CONTRIBUTING.md`の記載通り)。

- `groups=row-element-test,icon-element-test`はスイートXMLの指定`<test name="...">`グループを実行します。
- `tests=RowColumnLayoutVisualTest`は指定テストクラスを実行します。
- `maven_ref=branch-name`は`dxpr_maven`ブランチを使います。Builder変更とテスト更新を一緒にレビューする方法です。

ワークフローは`target/reports/**`とスクリーンショットをビルド成果物としてアップロードし、結果をプルリクエストのコメントに投稿します。失敗や再試行でのみ通ったテストを列挙します。各スイートジョブは90分のタイムアウトです。

## リンターと静的解析

各リンターはDocker Composeサービスのため、Docker以外のローカルツールチェーンは不要です。

| サービス | コマンド | チェック内容 |
|---|---|---|
| `drupal-lint` | `docker compose run --rm drupal-lint` | PHPCompatibility(PHP 8.3以降)、`Drupal`、`DrupalPractice`標準のphpcs |
| `drupal-check-D11` | `docker compose run --rm drupal-check-D11` | PHPStanレベル5を実行します。`mglaman/phpstan-drupal`は新規`drupal/recommended-project` |
| `eslint` | `docker compose run --rm eslint` | ESLintの対象は`js/`と`dxpr_builder/build/`。スペルチェックは`dxpr_builder/extracted_t_functions.js` |
| `stylelint` | `docker compose run --rm stylelint` | Stylelintの対象は`dxpr_builder/sass/`と`sass/` |
| `rust-lint` | `docker compose run --rm rust-lint` | RustソースのClippyは`rust/` |
| `no-jquery`、`no-underscore`、`html-in-js` | `docker compose run --rm <service>` | 非推奨検出器は`.github/workflows/deprecations.yml` |

phpcs、ESLint、Stylelintには自動修正版があります(`drupal-lint-auto-fix`、`eslint-auto-fix`、`stylelint-auto-fix`)。同じチェックは`npm run lint:scss`、`npm run lint:no-jquery`、`npm run lint:no-underscore`、`npm run lint:html-in-js`でDockerなしでも利用できます。

`npm install`はHuskyのpre-commitフック(`.husky/pre-commit`)もインストールします。ステージされたJavaScript、PHP、SCSSファイルとRustソースに一致する自動修正・lintサービスを実行します。`docs/video-tools/bin/lint-videos.mjs`は`docs/`配下のファイルがステージされた場合に実行します。

`.github/workflows/review.yaml`は全プルリクエストで変更パスに一致するリンターを実行します。`.github/workflows/main.yaml`は`3.x`への全プッシュで`drupal-lint`、`eslint`、`drupal-check-D11`、`rust-lint`を実行します。両方ともチェック失敗でビルドを失敗させ、問題ファイル付きのサマリーを書きます。

## 次のステップ

- [コントリビューション](/hc/documentation/learn-dxpr-builder/development/contributing)：プルリクエスト過程とテスト更新用の`maven_ref`ワークフローに。
- [Drushコマンド](/hc/documentation/learn-dxpr-builder/development/drush-commands)：Bashスイートが実行するコマンドに。