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 を再起動してください。Mac では、1つのコマンドで実行できます:rm -rf tmp; bin/dev。
プラグインが読み込まれたことを確認する
ローカルサーバーを再起動した後、URL /admin/plugins にアクセスしてください(まず 管理者アカウントとしてログイン していることを確認してください。プラグインレジストリは管理者のみが閲覧できます)。
すべてが正常に動作した場合、リストにプラグインが表示されるはずです:
おめでとうございます。これで最初のプラグインを作成しました!
JavaScript を追加してみましょう
現在、プラグインは何も実行していません。Discourse がロードされたときにアラートボックスを表示する JavaScript ファイルを追加しましょう。これはユーザーにとって非常に迷惑であり、実際のプラグインとして推奨されるものではありませんが、実行中のアプリケーションに JavaScript を挿入する方法を示します。
以下のファイルを作成してください:
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("alert boxes are annoying!");
},
};
これでローカルサーバーを再起動すると、画面上に “alert boxes are annoying!” が表示されるはずです。(表示されない場合は、上記の「変更が反映されませんでした」のセクションを参照してください)。
この仕組みを順を追って説明します:
-
assets/javascripts/discourse/initializersに配置された JavaScript ファイルは、Discourse アプリケーションがロードされたときに自動的に実行されます。 -
この特定のファイルは、
nameとinitialize関数を持つ1つのオブジェクトをexportします。 -
nameは一意である必要があるので、ここではalertと命名しました。 -
initialize()関数はアプリケーションがロードされたときに呼び出されます。今回の場合、単にalert()コードを実行するだけです。
これで、公式の Discourse プラグイン開発者になりました!
シリーズの続き
パート1: このトピック
パート2: プラグインアウトレット
パート3: サイト設定
パート4: git セットアップ
パート5: 管理者インターフェース
パート6: 受け入れテスト
パート7: プラグインを公開する
このドキュメントはバージョン管理されています。変更提案は GitHub でお願いします。

