Discourse でプラグインを作成するのは、いくつかの癖を覚えれば、非常にシンプルです。この投稿の目的は、プラグインの骨格を作成し、基本を紹介することです。
開発環境
お使いのコンピュータで Discourse の開発環境が動作していることを確認してください。推奨されるセットアップガイドこちらを参照し、完了したら戻ってください。
plugin.rb
完全な Discourse プラグインの骨格をプラグインディレクトリに作成するには、GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub を使用してください
現在、この骨格は Discourse コアにバンドルされており、
rake plugin:create[plugin-name]を実行すると、この骨格を使用してプラグインが作成されます。
Discourse が起動すると、plugins ディレクトリ内の plugin.rb ファイルを含むサブディレクトリを検索します。plugin.rb ファイルには 2 つの目的があります。1 つ目は、プラグインの名前、連絡先情報、説明など、プラグインに必要な情報を含むプラグインのマニフェストとして機能することです。2 つ目は、プラグインを実行するために必要な Ruby コードを初期化することです。
今回の場合、Ruby コードを追加する必要はありませんが、plugin.rb は必要です。以下の内容を含む plugin.rb ファイルを basic-plugin ディレクトリ内に作成しましょう。
basic-plugin/plugin.rb
# name: basic-plugin
# about: プラグインの仕組みを説明するための超シンプルなプラグイン
# version: 0.0.1
# authors: Awesome Plugin Developer
# url: https://github.com/yourusername/basic-plugin
このファイルを作成したら、ローカルサーバーを再起動してください。プラグインが読み込まれるはずです。
重要な注意点!
通常の Rails 開発に慣れている場合、プラグインはリロードの面でそれほど優れていないことに気づくかもしれません。一般的に、プラグインに変更を加えた場合は、サーバーを停止してから bin/dev を使用して再度実行する必要があります。サーバーを停止するには、<kbd>Ctrl</kbd>+<kbd>c</kbd> を押してください。
変更が反映されませんでした! 
特に新しいファイルを作成したり古いファイルを削除したりした場合、キャッシュが完全にクリアされないことがあります。この問題に対処するには、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("アラートボックスは煩わしいです!");
},
};
ローカルサーバーを再起動すると、画面に「アラートボックスは煩わしいです!」と表示されるはずです(表示されない場合は、上記の「変更が反映されませんでした」の項目を確認してください)。
この仕組みをステップバイステップで説明します。
-
assets/javascripts/discourse/initializersに配置された JavaScript ファイルは、Discourse アプリケーションが起動したときに自動的に実行されます。 -
この特定のファイルは、
nameとinitialize関数を持つ 1 つのオブジェクトをexportしています。 -
nameは一意である必要があるため、ここでは単にalertと名付けました。 -
initialize()関数は、アプリケーションが読み込まれたときに呼び出されます。今回の場合、これは単にalert()コードを実行するだけです。
これで、あなたは公式の Discourse プラグイン開発者です!
シリーズの続き
第 1 部: このトピック
第 2 部: プラグイン outlets
第 3 部: サイト設定
第 4 部: git セットアップ
第 5 部: 管理インターフェース
第 6 部: 受入テスト
第 7 部: プラグインを公開する
このドキュメントはバージョン管理されています。変更を提案するには、GitHub でお知らせください。



