Discourse プラグインの作成は、いくつかの特有の点さえ学べば、非常に簡単になります。この記事の目標は、スケルトン(雛形)プラグインを作成し、基本を紹介することです。
開発環境
コンピューター上で Discourse の開発環境が動作していることを確認してください。適切なセットアップガイドを使用し、完了してから戻ってくることをお勧めします。
plugin.rb
https://github.com/discourse/discourse-plugin-skeleton を使用して、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/ember-cli -u を使用して再度実行する必要があります。
変更が反映されない場合!
キャッシュが完全にクリアされないことが時々あります。特に新しいファイルを作成したり、古いファイルを削除したりした場合に発生します。この問題を回避するには、tmp フォルダを削除してから Rails を再起動してください。Mac では、rm -rf tmp; bin/ember-cli -u の 1 つのコマンドで実行できます。
プラグインがロードされたことの確認
ローカルサーバーを再起動したら、/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 プラグイン開発者になりました!
シリーズの続き
パート 1: このトピック
パート 2: プラグインアウトレット
パート 3: サイト設定
パート 4: git のセットアップ
パート 5: 管理者インターフェース
パート 6: 受け入れテスト
パート 7: プラグインの公開
このドキュメントはバージョン管理されています。変更の提案はgithubで行ってください。



