Discourse でプラグインを構築するのは、いくつかの癖を理解すれば非常に簡単です。この投稿の目的は、スケルトン(骨格)となるプラグインを作成し、基礎知識を紹介することです。
開発環境
Discourse の開発環境がローカルコンピュータで動作していることを確認してください。適切なセットアップガイド を使用し、完了してから戻ってくることを推奨します。
plugin.rb
GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub を使用して、plugins ディレクトリ内に完全な Discourse プラグインのスケルトンを作成しましょう
スケルトンは現在 Discourse コアにバンドルされており、
rake plugin:create[plugin-name]を実行することでスケルトンを使用してプラグインを作成できます
Discourse が起動すると、plugins ディレクトリ内をスキャンし、plugin.rb ファイルを含むサブディレクトリを探します。plugin.rb ファイルには 2 つの目的があります。1 つ目は、プラグインの名前、連絡先情報、説明など、必要な情報を含むプラグインのマニフェストとして機能することです。2 つ目は、プラグインを実行するために必要な Ruby コードを初期化することです。
今回のケースでは、Ruby コードを追加しませんが、plugin.rb は依然として必要です。basic-plugin というディレクトリを作成し、その中に plugin.rb ファイルを作成して、以下の内容を入力しましょう。
basic-plugin/plugin.rb
# name: basic-plugin
# about: プラグインの動作をデモンストレーションするための超シンプルプラグイン
# version: 0.0.1
# authors: Awesome Plugin Developer
# url: https://github.com/yourusername/basic-plugin
このファイルを作成したら、ローカルサーバーを再起動し、プラグインが読み込まれていることを確認してください。
重要な注意点!
通常の Rails 開発に慣れている場合、プラグインのリロード動作が少し異なることに気づくかもしれません。一般的に、プラグインに変更を加えた場合は、サーバーを停止するために Ctrl+c を押し、その後 bin/dev を使用して再度実行する必要があります。
変更が反映されませんでした! 
特に新しいファイルを作成したり、古いファイルを削除したりした場合、キャッシュが完全にクリアされないことがあります。この問題を回避するには、tmp フォルダを削除し、Rails を再度起動してください。macOS では、以下のコマンドで 1 行で実行できます:rm -rf tmp; bin/dev。
プラグインが読み込まれていることを確認する
ローカルサーバーを再起動した後、/admin/plugins にアクセスしてください(プラグインレジストリは管理者のみが閲覧可能なので、事前に 管理者アカウントとしてログイン していることを確認してください)。
すべてが正常に動作している場合、リストにプラグインが表示されます:
おめでとうございます。これで最初のプラグインを作成しました!
JavaScript を追加してみよう
現時点では、プラグインは何も実行していません。Discourse がロードされたときにアラートボックスを表示する JavaScript ファイルを追加してみましょう。これは実際のプラグインとしては推奨されず、ユーザーにとって非常に迷惑ですが、実行中のアプリケーションに JavaScript を挿入する方法を示すために使用します。
以下のファイルを作成してください:
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("アラートボックスは迷惑です!");
},
};
これでローカルサーバーを再起動すると、画面上に「アラートボックスは迷惑です!」というメッセージが表示されるはずです(表示されない場合は、上記の「変更が反映されませんでした!」セクションを参照してください)。
この仕組みを段階的に説明します:
-
assets/javascripts/discourse/initializersに配置された JavaScript ファイルは、Discourse アプリケーションがロードされたときに自動的に実行されます。 -
この特定のファイルは、
nameとinitialize関数を持つ 1 つのオブジェクトをexportしています。 -
nameは一意である必要があるため、ここではalertと命名しました。 -
initialize()関数はアプリケーションがロードされたときに呼び出されます。今回のケースでは、単にalert()コードを実行するだけです。
これで、あなたは公式の Discourse プラグイン開発者になりました!
シリーズの続き
第 1 部:このトピック
第 2 部:プラグインアウトレット
第 3 部:サイト設定
第 4 部:git セットアップ
第 5 部:管理者インターフェース
第 6 部:受け入れテスト
第 7 部:プラグインの公開
このドキュメントはバージョン管理されています。変更提案は GitHub でお願いします。

