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: A super simple plugin to demonstrate how plugins work
# 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。
プラグインが読み込まれたことを確認する
ローカルサーバーを再起動した後、/admin/plugins のURLにアクセスしてください(プラグインレジストリは管理者のみが見られるため、まず管理者アカウントとしてログイン していることを確認してください)。
すべて正常に動作している場合、リストにプラグインが表示されるはずです:
おめでとうございます、最初のプラグインを作成しました!
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プラグイン開発者です!
シリーズの続き
Part 1: このトピック
Part 2: Plugin Outlets
Part 3: Site Settings
Part 4: git setup
Part 5: Admin interfaces
Part 6: Acceptance tests
Part 7: Publish your plugin
このドキュメントはバージョン管理されています - 変更を提案するには GitHub をご利用ください。

