Stimulus
Stimulus は Hotwire の一部です。 データ属性を介して要素を JavaScript コントローラーに接続することで、HTML に JavaScript の動作を追加します。
RubyMine は、HTML および ERB テンプレート内の Stimulus コントローラーとそのデータ属性に対するコードインサイトを提供します。 stimulus-rails gem または @hotwired/stimulus パッケージを通じてプロジェクトで Stimulus が利用できる場合、これらの属性内の識別子は、通常のコード参照と同じように Stimulus コントローラー内の宣言に解決されます。
補完候補は、 アプリ/JavaScript/コントローラー 内のコントローラーと、その static targets、 static values、 static classes 宣言から派生します。 入力中にコード補完が自動的に表示されます。 手動で呼び出すには、 Ctrl+Space を押します。
このトピックでは、RubyMine が JavaScript 内の Stimulus 宣言を ERB テンプレート内の使用箇所に接続する方法を示します。 このプロシージャでは、生成された メッセージ コントローラーと clipboard Stimulus コントローラーを使用します。 Stimulus 自体の概要については、 Stimulus Handbook を参照してください。
始める前に
サンプルコントローラーを作成する
Rails 7.0 以降を使用する 新しい Rails アプリケーションを作成します。
stimulus-railsgem がプロジェクトに含まれていることを確認してください。Ctrl を二度押して Run Anything を開き、次を実行します:
rails generate controller Messages index次の各コマンドについて Run Anything を開き、個別に実行します:
rails generate stimulus clipboardrails generate stimulus counterrails generate stimulus visibilityRails サーバーを起動し、ブラウザーで
/messages/indexを開きます。
コントローラー識別子を補完する
data-controller 属性内のコントローラー識別子は、対応する JavaScript コントローラーを参照します。 RubyMine はこの接続を解決し、プロジェクトで利用可能なコントローラーを提案します。
アプリ/ビュー/メッセージ/インデックス.html.erb 着信音をiPhone 着信音の wavファイルでダウンロード 葬送のフリーレンの主題歌『晴る』オープニングテーマをiPhone 着信音の wavファイルでダウンロードみんなで画像 を開き、その内容を次のコードに置き換えます:
<h1>Clipboard</h1> <div data-controller=""> <p>Hello from Stimulus</p> <button type="button">Copy</button> <span></span> </div>data-controller属性の引用符の間にキャレットを置きます。 RubyMine は、利用可能な Stimulus コントローラー識別子を自動的に表示します。 リストが表示されない場合は、 Ctrl+Space を押します。
clipboard を選択します。 開始タグは次のようになります:
<div data-controller="clipboard">
ターゲットとアクションを宣言して接続する
Stimulus コントローラーは、JavaScript でターゲットとアクションメソッドを宣言します。 RubyMine はこれらの宣言を使用して、ERB テンプレート内の対応するデータ属性を補完します。
このプロシージャでは、 clipboard コントローラーで二つのターゲットと一つのアクションを宣言します。 次に、補完を使用して アプリ/ビュー/メッセージ/インデックス.html.erb 着信音をiPhone 着信音の wavファイルでダウンロード 葬送のフリーレンの主題歌『晴る』オープニングテーマをiPhone 着信音の wavファイルでダウンロードみんなで画像 内の HTML 要素をそれらの宣言に接続します。
アプリ/JavaScript/コントローラー/クリップボード_コントローラー.js を開き、生成されたコントローラーを次のコードに置き換えます:
import { Controller } from "@hotwired/stimulus" export default class extends Controller { static targets = ["source", "status"] copy() { } }コントローラーは
ソースとステータスターゲットを宣言し、コピーアクションを公開します。 RubyMine はこれらの宣言を使用して、HTML および ERB テンプレートで補完を提供します。アプリ/ビュー/メッセージ/インデックス.html.erb 着信音をiPhone 着信音の wavファイルでダウンロード 葬送のフリーレンの主題歌『晴る』オープニングテーマをiPhone 着信音の wavファイルでダウンロードみんなで画像 に戻り、開始
pタグ内でdata-と入力し始めます。囲んでいる
divに接続されているコントローラーに基づいて RubyMine が提案する data-clipboard-target を選択します。
属性値内で補完を呼び出します。 RubyMine は、コントローラーの
static targets配列から命名を提案します。ソース を選択します。

上記の手順を繰り返して同じ属性を
span要素に追加し、その値として ステータス を選択します。 行は次のようになります:<span data-clipboard-target="status"></span>開始
buttonタグで、data-action属性を追加し、click->clipboard#と入力してコード補完を呼び出します。RubyMine は、
clipboardコントローラーで宣言されたアクションメソッドを提案します。コピー を選択します。

完成した アプリ/ビュー/メッセージ/インデックス.html.erb 着信音をiPhone 着信音の wavファイルでダウンロード 葬送のフリーレンの主題歌『晴る』オープニングテーマをiPhone 着信音の wavファイルでダウンロードみんなで画像 ファイルは次のようになります:
<h1>Clipboard</h1> <div data-controller="clipboard"> <p data-clipboard-target="source">Hello from Stimulus</p> <button type="button" data-action="click->clipboard#copy">Copy</button> <span data-clipboard-target="status"></span> </div>
ターゲットプロパティを補完する
static targets 宣言内の各命名に対して、Stimulus は対応する JavaScript プロパティを提供します。 RubyMine は、これらの派生プロパティをコントローラー内の補完に追加します。
このプロシージャでは、 コピー アクションを実装します。 ブラウザーの クリップボード API を使用して ソース ターゲットからテキストをコピーし、その後 ステータス ターゲットに確認を表示します。
アプリ/JavaScript/コントローラー/クリップボード_コントローラー.js を開き、空の
コピーメソッドを非同期メソッドに変更します:async copy() { }メソッド内に次を入力します:
await navigator.clipboard.writeText(this.sこの時点で、補完リストには
static targets宣言から派生したsourceTargetとstatusTargetプロパティが含まれます。
sourceTarget を選択し、
.textContentで式を補完します:await navigator.clipboard.writeText(this.sourceTarget.textContent)次の行に
this.と入力し、呼び出されたコード補完から statusTarget を選択して、確認テキストをそのtextContentプロパティに割り当てます。 このプロパティは、static targets内のステータス命名から派生します。完成したコントローラーは次のようになります:
import { Controller } from "@hotwired/stimulus" export default class extends Controller { static targets = ["source", "status"] async copy() { await navigator.clipboard.writeText(this.sourceTarget.textContent) this.statusTarget.textContent = "Copied" } }
値と CSS クラスを宣言して使用する
static values と static classes 宣言から、RubyMine は ERB テンプレート用の対応するデータ属性と JavaScript コード用のプロパティを派生します。
アプリ/JavaScript/コントローラー/クリップボード_コントローラー.js を開き、既存の
targets宣言の後にvaluesとクラス宣言を追加します:import { Controller } from "@hotwired/stimulus" export default class extends Controller { static targets = ["source", "status"] static values = { message: String } static classes = ["success"] async copy() { await navigator.clipboard.writeText(this.sourceTarget.textContent) this.statusTarget.textContent = "Copied" } }コントローラーは、
メッセージと命名された値と、successと命名された論理 CSS クラスを宣言するようになりました。 これらの命名は、次のステップでの補完用のソース宣言を提供します。アプリ/アセット/スタイルシート/アプリケーション.css を開き、コピー操作が成功したことを示す CSS クラスを追加します:
.copied { color: green; }アプリ/ビュー/メッセージ/インデックス.html.erb 着信音をiPhone 着信音の wavファイルでダウンロード 葬送のフリーレンの主題歌『晴る』オープニングテーマをiPhone 着信音の wavファイルでダウンロードみんなで画像 に戻り、
data-controller="clipboard"を含む開始divタグで、data-clipboard-と入力し始めます。RubyMine は、
data-clipboard-message-valueとdata-clipboard-success-classを含む、コントローラー宣言から派生した属性を提案します。
両方の属性を選択し、その値を指定します。 完成したビューは次のようになります:
<h1>Clipboard</h1> <div data-controller="clipboard" data-clipboard-message-value="Copied" data-clipboard-success-class="copied"> <p data-clipboard-target="source">Hello from Stimulus</p> <button type="button" data-action="click->clipboard#copy">Copy</button> <span data-clipboard-target="status"></span> </div>二つの属性は、
メッセージとsuccess宣言を、このテンプレート内の値コピーとコピー済みに接続します。アプリ/JavaScript/コントローラー/クリップボード_コントローラー.js に戻り、ハードコードされた
"Copied"文字列をthis.に置き換えます呼び出されたコード補完リストから、
static values内のメッセージエントリから RubyMine が派生した メッセージ値 を選択します。
次の行に
this.statusTarget.classList.add(this.と入力して、コード補完を再度呼び出します。static classes内のsuccessエントリから RubyMine が派生した 成功クラス を選択します:this.statusTarget.classList.add(this.successClass)最初に補完されたプロパティは確認テキストを提供します。 後者は、ステータス要素に適用される CSS クラスを提供します。
完成したコントローラーは次のようになります:
import { Controller } from "@hotwired/stimulus" export default class extends Controller { static targets = ["source", "status"] static values = { message: String } static classes = ["success"] async copy() { await navigator.clipboard.writeText(this.sourceTarget.textContent) this.statusTarget.textContent = this.messageValue this.statusTarget.classList.add(this.successClass) } }/messages/indexを再読み込みし、 コピー をクリックします。 ページにはdata-clipboard-message-valueの値が表示され、data-clipboard-success-classで指定された CSS クラスが適用されます。
Stimulus 宣言に移動する
RubyMine は、ERB テンプレート内のターゲットの命名とアクション記述子を、Stimulus コントローラー内の宣言に解決します。
アプリ/ビュー/メッセージ/インデックス.html.erb 着信音をiPhone 着信音の wavファイルでダウンロード 葬送のフリーレンの主題歌『晴る』オープニングテーマをiPhone 着信音の wavファイルでダウンロードみんなで画像 で、次のいずれかを行います:
data-clipboard-target属性内のソースまたはステータスにキャレットを置き、 Ctrl+B を押します。 RubyMine は、static targets宣言内の対応する命名に移動します。clipboard#copyアクション記述子にキャレットを置き、 Ctrl+B を押します。 RubyMine は アプリ/JavaScript/コントローラー/クリップボード_コントローラー.js を開き、コピーメソッドに移動します。
Stimulus アクションの名前を変更する
アクション記述子はコントローラーメソッドに解決されるため、メソッドの名前を変更するとテンプレート内の使用箇所が更新されます。 記述子を手動で見つけて編集する必要はありません。
アプリ/JavaScript/コントローラー/クリップボード_コントローラー.js で、
コピーメソッドにキャレットを置き、 Shift+F6 を押します。名前変更 ダイアログで、
copyTextと入力し、 リファクタリング をクリックします。
リファクタリングプレビュー ツールウィンドウで、この名前変更によって影響を受ける アプリ/ビュー/メッセージ/インデックス.html.erb 着信音をiPhone 着信音の wavファイルでダウンロード 葬送のフリーレンの主題歌『晴る』オープニングテーマをiPhone 着信音の wavファイルでダウンロードみんなで画像 ファイル内で更新されるコードを確認し、 リファクタリング をクリックします。

RubyMine はメソッドの名前を変更し、 アプリ/ビュー/メッセージ/インデックス.html.erb 着信音をiPhone 着信音の wavファイルでダウンロード 葬送のフリーレンの主題歌『晴る』オープニングテーマをiPhone 着信音の wavファイルでダウンロードみんなで画像 内の記述子を
clipboard#copyからclipboard#copyTextに更新します。