# プラグインで.erbテンプレートを使う

**URL:** <https://meta.discourse.org/t/working-with-erb-templates-in-a-plugin/345777>\
**Category:** Developers\
**Created:** [2025 年 1 月 6 日午前 9:12 UTC](https://meta.discourse.org/t/working-with-erb-templates-in-a-plugin/345777 "2025-01-06T09:12:26Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)\
**Post date:** [2025 年 1 月 6 日午前 9:12 UTC](https://meta.discourse.org/t/working-with-erb-templates-in-a-plugin/345777/1 "2025-01-06T09:12:26Z")

</div>

最近、Discourse で `.erb` テンプレートの操作に関するアドバイスをいくつか提供してきましたが、meta にはこれに関する詳細があまりないことに気づいたので、この件に関する wiki を開始することにしました。この wiki は、`.erb` テンプレートが何であるか、そしてそれが Discourse およびより広範な Rails における機能であるかを理解していることを前提としています。その背景についてさらに詳しい情報が必要な場合は、まずこちらをお読みください。

> **[Layouts and Rendering in Rails — Ruby on Rails Guides](https://guides.rubyonrails.org/layouts_and_rendering.html)**
>
> Layouts and Rendering in RailsThis guide covers the basic layout features of Action Controller and Action View.After reading this guide, you will know: How to use the various rendering methods built into Rails. How to create layouts with multiple...

### サーバープラグインのアウトレット

サーバープラグインのアウトレットは、クライアントプラグインのアウトレットと同様の方法で機能しますが、数はそれほど多くありません。これらを使用すると、独自の `.erb` テンプレートを `discourse/discourse` `.erb` テンプレートに挿入できます。定義は次のようになります。

```plaintext
<%= server_plugin_outlet [name] %>

```

例として、チャットプラグインの `unsubscribe_options` アウトレットの使用をご覧ください。

> **[discourse/plugins/chat/app/views/connectors/unsubscribe\_options at main ·...](https://github.com/discourse/discourse/tree/main/plugins/chat/app/views/connectors/unsubscribe_options)**
>
> A platform for community discussion. Free, open, simple. - discourse/discourse

### HTML ビルダー

HTML ビルダーは、テンプレートやプラグインアウトレットを使用するのではなく、動的に構築される標準的な HTML 用に設計されています。`.erb` テンプレートで HTML ビルダーを使用するには、これらの挿入ポイントを探します。

```plaintext
<%= build_plugin_html [name] %>

```

これらのポイントに HTML を挿入するには、`plugin.rb` の `register_html_builder` ブロックに返す必要があります。たとえば、次のようになります。

```rb
register_html_builder([name]) do |controller|
   ## カスタム HTML を構築して返します
end

```

例として、solved プラグインの `server:before-head-close-crawler` の使用をご覧ください。

> <https://github.com/discourse/discourse-solved/blob/3f724bf3114cc7877fa757bc8035f13a7390c739/plugin.rb#L263C26-L263C58>

クライアント側の HTML を追加するために HTML ビルダーを登録することもできますが、これは推奨されません。クライアント側の HTML は、クライアント側のプラグインアウトレットとテンプレートを使用して追加してください。

同様に、`register_custom_html` というサーバー側のプラグイン API メソッドもあります。これは同様の目的で使用できますが、特別な理由がない限り、また、何をしているか理解している場合を除き、使用しないことをお勧めします。

### テンプレートのオーバーライド

プラグインの `.erb` テンプレートは、プラグインのビューをコントローラーの `view_paths` に追加することでオーバーライドできます。これは単なる Rails の機能であり、Discourse 固有ではありません。この機能の仕組みについては、Rails ガイドのこちらで説明されています。

> **[Action View Overview — Ruby on Rails Guides](https://guides.rubyonrails.org/v5.1/action_view_overview.html#view-paths)**

たとえば、`app/views/email/unsubscribed.html.erb` をオーバーライドしたい場合は、次の 2 つの作業を行う必要があります。

#### プラグインビューを同じ名前空間を使用して構造化する

テンプレートはここに配置する必要があります。

```plaintext
your-plugin-folder/app/views/email/unsubscribed.html.erb

```

#### プラグインビューパスを関連するコントローラーの前に挿入する

この場合、関連するコントローラーは `EmailController` です。`plugin.rb` ファイルに次を追加します。

```rb
EmailController.prepend_view_path File.expand_path("../views", __FILE__ )

```

ほとんどの場合、プラグインのビューをグローバルなビューパスに追加することもできますが、その必要はありません。

---

_[View the full topic](https://meta.discourse.org/t/working-with-erb-templates-in-a-plugin/345777)._
