開発者向けサンプル集
開発者が学習できるよう、Drupalのコア API と機能を実演する、充実したドキュメント付きサンプルモジュールの包括的なコレクションです。
examples
インストール
composer require 'drupal/examples:^4.0'
概要
Examples for Developers プロジェクトは、Drupal の機能と API を実演することを目的とした、動作するサンプルモジュール一式を提供します。各サブモジュールはシンプルで、詳細なドキュメントが付いており、変更しやすいように設計されており、開発者が Drupal の内部動作を素早く理解できるよう支援します。
このプロジェクトは、Form API、Field API、Entity API、Render API、Plugin API、Database API(DBTNG)、Cache API、Queue API、File API、REST API、Events、Hooks、テーマ、JavaScript 統合など、幅広い Drupal コア機能をカバーしています。本番環境向けのソリューションを提供するのではなく、これらのモジュールは豊富なインラインドキュメントとコードコメントを備えた教育リソースとして機能します。
有効化すると、親モジュールはツールバーに「Examples」項目を追加し、有効化されているすべてのサンプルサブモジュールへのクイックアクセスを提供します。各サンプルモジュールには通常、その目的を説明する説明ページとデモページへのリンクが含まれています。
Features
- 主要な Drupal API を実演する 33 個の独立したサンプルサブモジュール
- 有効化されているすべてのサンプルへのクイックナビゲーションを提供するツールバー統合
- AJAX フォーム、マルチステップフォーム、モーダルダイアログを含む包括的な Form API サンプル
- RGB カラー値用のカスタムフィールドタイプ、ウィジェット、フォーマッタを使用した Field API デモ
- 完全な CRUD 操作を備えた Config Entity と Content Entity の作成サンプル
- 空のブロック、設定可能なテキストブロック、大文字変換ブロックを含む Block プラグインサンプル
- クエリ、挿入、更新、高度な操作のための Database API(DBTNG)サンプル
- 適切なキャッシュ使用パターンを示す Cache API デモ
- キューワーカーを使用した Queue API と Cron hook のサンプル
- イベントのディスパッチとサブスクライブのための Event システムサンプル
- カスタム hook の定義と呼び出しを含む Hook 実装サンプル
- Sandwich プラグインを使用したカスタム Plugin タイプ定義サンプル
- カスタム URI スキームのための Stream wrapper 実装サンプル
- hook_mail と hook_mail_alter を使用したメール送信と変更のサンプル
- リモート Drupal インスタンスとの通信のための REST クライアントサンプル
- render array と alter hook を実演する Render API サンプル
- カスタムテンプレートと preprocess 関数を使用したテーマサンプル
- ライブラリ定義と Drupal behaviors を使用した JavaScript 統合サンプル
- インタラクティブなテーブルインターフェースのための Tabledrag と Tablesort サンプル
- 長時間実行操作のための Batch API サンプル
- ページネーション付きコンテンツ表示のための Pager サンプル
- ユーザーセッションストレージを実演する Session 処理サンプル
- カラー化機能を備えた Image effect プラグインサンプル
- Node アクセスとフィールドパーミッションのサンプル
- PHPUnit テストフレームワークのサンプル
Use Cases
Drupal の Form API を学ぶ
開発者は form_api_example を有効にして、様々なフォーム要素、AJAX フォーム、マルチステップフォーム、モーダルダイアログの動作する実装を見ることができます。豊富なインラインコメントが各 Form API 機能を説明しています。
カスタムフィールドタイプの作成
field_example モジュールは、複数のウィジェットバリアントとフォーマッタを持つカスタムフィールドタイプ(RGB カラー)を作成する完全なプロセスを実演します。開発者はこれを独自のフィールド実装のテンプレートとして使用できます。
カスタムエンティティの実装
config_entity_example(Robot)と content_entity_example(Contact)モジュールは、フォーム、リストビルダー、アクセス制御、管理インターフェースを備えた両方のエンティティタイプの完全な動作サンプルを提供します。
Plugin システムの理解
plugin_type_example は、プラグインマネージャー、ディスカバリー、アノテーションを備えたカスタムプラグインタイプ(Sandwich)の作成を実演します。block_example と field_example と組み合わせることで、開発者は完全なプラグインエコシステムを学べます。
DBTNG によるデータベース操作
dbtng_example モジュールは、生の SQL クエリを書かずに挿入、更新、選択、複雑な結合操作を行う適切な Database API の使用法を示します。
イベント駆動アーキテクチャ
events_example は Drupal での Symfony event dispatcher パターンを実演し、疎結合なコードアーキテクチャのためのイベントの作成、ディスパッチ、サブスクライブ方法を示します。
Cron とキュー処理
cron_example と queue_example の組み合わせ使用は、ユーザーリクエストをブロックすべきでない長時間実行タスクのバックグラウンド処理パターンを実演します。
カスタム Stream Wrapper
stream_wrapper_example は、代替ファイルストレージバックエンド用のカスタム URI スキーム(session://)の実装方法を示します。
REST API 統合
rest_example はリモート Drupal インスタンスとの通信方法を実演する動作する REST クライアントを提供し、ヘッドレス Drupal 実装に役立ちます。
Drupal Hooks の理解
hooks_example モジュールは、既存の hook の実装、alter パターンを持つカスタム hook の定義、hook の呼び出しを実演します。これは Drupal の拡張性モデルの基本です。
Tips
- 複雑さを軽減するため、すべてを一度に有効にするのではなく、学習したい特定のサンプルモジュールのみを有効にしてください。
- インラインコードコメントを広く読んでください。コードが何をするかだけでなく、なぜ特定のパターンが使用されるかを説明しています。
- すべてのサンプルの相互参照された HTML ドキュメントについては api.drupal.org/api/examples の API ドキュメントを使用してください。
- 変更が動作にどのように影響するかを理解するため、サンプルコードを変更して実験してください。サンプルは変更しやすいように設計されています。
- カスタム hook とプラグインの定義に関するドキュメントについては、hooks_example と plugin_type_example の *.api.php ファイルを確認してください。
- ユニットテスト、カーネルテスト、ファンクショナルテストを含む適切なテスト記述パターンを学ぶために testing_example モジュールを使用してください。
- batch_example は、大規模なデータセットを処理するインポート/マイグレーション機能を構築する際に特に役立ちます。
- REST API 開発については、rest_example が外部 Drupal サイトとの通信のための完全なクライアント実装パターンを提供します。
Technical Details
Admin Pages 35
/examples/ajax-example
最もシンプルな例、送信駆動 AJAX、依存ドロップダウン、動的フォームセクション、ウィザードフォームを含む様々な AJAX フォームデモへのリンク付き概要ページ。
/examples/batch_example
バッチサイズの選択とバッチ処理の実行オプションを備えたバッチ操作を実演するフォーム。
/examples/block-example
ブロック作成についての説明と、サンプルブロックを配置できるブロック管理ページへのリンク付き概要ページ。
/examples/cache-example
キャッシュデータの保存、取得、クリアを含むキャッシュ操作を実演するフォーム。
/examples/config-entity-example
Robot 設定エンティティの追加、編集、削除オプション付きで全ての Robot 設定エンティティを表示するリストページ。
/admin/config/form-api-example/config-simple-form
シンプルな翻訳可能な設定ストレージを実演する設定フォーム。
/content_entity_example_contact/list
Contact の追加、編集、表示、削除オプション付きで全ての Contact コンテンツエンティティを表示するリストページ。
/admin/structure/content_entity_example_contact_settings
Contact エンティティタイプ設定の設定ページ。
/examples/cron-example
間隔設定と手動 cron 実行による cron 機能テストのフォーム。
/examples/dbtng-example
追加、更新、高度なクエリのサブページ付きでデータベースエントリを表示する概要ページ。
/examples/dbtng-example/add
挿入操作を実演する新しいデータベースエントリ追加フォーム。
/examples/email-example
hook_mail 実装を実演するテストメール送信フォーム。
/examples/events-example
設定可能なイベントタイプによるイベントのディスパッチとサブスクリプションを実演するフォーム。
/examples/field-example
コンテンツタイプ設定へのリンク付きで RGB カラーフィールド実装を説明する概要ページ。
/examples/field-permission-example
権限設定へのリンク付きでフィールドレベル権限を説明する概要ページ。
/examples/file_example
異なる stream wrapper 間でのファイルの読み取り、書き込み、管理を含む File API 操作を実演するフォーム。
/examples/form-api-example
シンプルなフォーム、入力要素、コンテナ、AJAX、モーダルを含む様々な Form API デモへのリンク付き概要ページ。
/examples/hooks-example
hook_node_view と hook_form_alter のデモへのリンク付きで hook 実装を説明する概要ページ。
/examples/image-example/styles
カラーピッカー付きのカスタム colorize エフェクトを含む画像エフェクトテストフォーム。
/examples/js-example
色/重み付けとアコーディオンサンプルを含む JavaScript デモへのリンク付き概要ページ。
/examples/menu-example
制限付きアクセス、タブ、URL 引数、コールバックを含む様々なメニューサンプルへのリンク付きでメニューシステム機能を実演する概要ページ。
/examples/node-type-example
コンテンツタイプ管理へのリンク付きで設定によるノードタイプ作成を説明する概要ページ。
/examples/page-example
シンプルなページと引数ページサンプルへのリンク付きで基本的なページ作成を実演する概要ページ。
/examples/pager-example
複数ページにわたって大規模なデータセットを表示する方法を示すページネーションテーブルデモ。
/examples/plugin-type-example
Sandwich プラグインのデモ付きでカスタムプラグインタイプ定義を説明する概要ページ。
/examples/queue_example
アイテムの追加、要求、キュー処理を含む Queue API 操作を実演するフォーム。
/examples/render-example
render array 構築サンプルと alter hook デモへのリンク付き概要ページ。
/examples/rest-getting-started
設定とノード操作へのリンク付きで REST クライアントセットアップを説明する概要ページ。
/examples/rest-client-settings
リモート Drupal インスタンスへの REST クライアント接続を設定するフォーム。
/examples/session_example
ユーザーセッションに値を永続化するフィールドを使用したセッションストレージを実演するフォーム。
/examples/stream_wrapper_example
セッションベースのファイルストレージのためのカスタム stream wrapper 実装を説明する概要ページ。
/examples/tabledrag-example
シンプルな行、ネストされた階層、ルート/リーフパターンを含む様々な tabledrag デモへのリンク付き概要ページ。
/examples/tablesort-example
動的ソートのためのクリック可能な列ヘッダーを持つソート可能なテーブルのデモ。
/examples/testing-example
テストデモとドキュメントへのリンク付きで PHPUnit テストフレームワークを説明する概要ページ。
/examples/theming_example
リストテーマとフォームテーマサンプルを含むテーマデモへのリンク付き概要ページ。
権限 19
Hooks 18
hook_toolbar
有効化されているすべてのサンプルモジュールへのリンク付きで Examples ツールバー項目を追加します。
hook_block_view_alter
ブロック出力を変更します。サンプルでは「uppercase」という単語を含むブロックラベルを大文字に変更します。
hook_cron
cron 処理を実装します。指定された間隔でバックグラウンドタスクを実行します。
hook_mail
メールテンプレートを定義します。メールキーに基づいてメッセージの件名と本文を設定します。
hook_mail_alter
送信メールを変更します。すべてのメールメッセージにサイト署名を追加します。
hook_entity_field_access
操作、フィールド定義、アカウント、エンティティ所有権に基づいてフィールドアクセス権限を制御します。
hook_file_download
ファイルダウンロード権限を制御します。プライベート、一時、またはセッションファイルのユーザー権限をチェックします。
hook_help
admin/help ページに表示されるモジュールヘルプテキストを提供します。
hook_node_view
ノード表示を処理します。セッションでノード閲覧数を追跡し、カスタム hook を呼び出します。
hook_form_alter
フォームを変更します。サンプルではユーザーログインフォームを変更してユーザー名フィールドの説明を変更します。
hook_hooks_example_count_incremented
モジュールが独自の hook を定義して呼び出す方法を実演するカスタム hook 実装。
hook_image_effect_info_alter
画像エフェクト情報を変更します。画像エフェクトの説明を変更します。
hook_theme
テンプレートと変数を含むテーマ実装を定義します。
hook_preprocess_page
ページ render array を前処理します。パンくずリストの移動、サイドバーの反転、デバッグ情報の表示が可能です。
hook_preprocess_block
ブロック render array を前処理します。追加のマークアップでブロックをラップできます。
hook_preprocess_form_element_label
フォーム要素ラベルを前処理します。データ属性に基づいて強調書式を追加します。
hook_node_access
ノードアクセス制御。権限と作成者に基づいて更新/削除操作を制限します。
hook_sandwich_info_alter
Sandwich プラグイン定義のカスタム alter hook。プラグインの説明を変更します。
Troubleshooting 6
親モジュール「Examples for Developers」が有効になっていることを確認してください。Toolbar モジュールは必須の依存関係として有効になっている必要があります。
ユーザーが適切な権限を持っていることを確認してください。多くのサンプルページには 'access content' 権限が必要で、エンティティサンプルには 'administer robots' や 'view contact entity' などの特定の権限が必要です。
ブラウザで JavaScript が有効になっていることを確認してください。一部の AJAX サンプルにはグレースフルデグラデーションを実演する 'nojs' バリアントがあります。ブラウザコンソールで JavaScript エラーを確認してください。
リモート Drupal サイトで REST と HAL モジュールが適切な認証で有効になっていることを確認してください。REST サンプルが動作するには、リモートサイトが Basic Auth を許可している必要があります。
field_example を有効にした後、キャッシュをクリアしてください。RGB フィールドタイプは、コンテンツタイプにフィールドを追加するときに表示されるはずです。
colorize エフェクトには imagefilter() 関数を持つ PHP GD ライブラリが必要です。PHP 設定を確認し、GD 拡張がロードされていることを確認してください。
Security Notes 4
- これらのサンプルは開発サイトでの学習目的を意図しています。一部のサンプルは、本番使用には追加のセキュリティ強化が必要な簡略化されたパターンを意図的に実演しています。
- REST サンプルは設定に認証情報を保存します。本番環境では、より安全な認証情報保存メカニズムを使用してください。
- Field permission サンプルは、機密データを持つカスタムフィールドを作成する際に適用すべき適切なフィールドレベルアクセス制御パターンを実演しています。
- file_example は stream wrapper アクセス制御を実演しています。カスタム stream wrapper を作成する際は常に適切なアクセスチェックを実装してください。