StimulusのCSSクラス(CSS Classes)を理解しよう【Rails × Stimulus入門】

Stimulusを使ったRailsアプリケーション開発では、「CSSクラス(CSS Classes)」という仕組みを使って、JavaScriptコントローラー内でCSSクラスを簡単に管理できます。
この記事では、Stimulus公式ドキュメントの「CSS Classes」の内容を日本語でわかりやすく解説します。

公式ドキュメント(英語)

目次

StimulusのCSSクラス(CSS Classes)とは?

StimulusのCSSクラスとは、HTML要素に適用するCSSクラス名をStimulusコントローラー内で簡単に管理できる仕組みです。
CSSクラスをStimulus側で管理することで、JavaScriptコード内で直接クラス名を記述する必要がなくなり、コードがシンプルで保守しやすくなります。

Stimulusでは、HTMLのdata-[コントローラー名]-[クラス名]-class属性を使って、CSSクラス名を指定します。

基本的なCSSクラスの使い方

StimulusのCSSクラスを使うには、以下のようにHTML要素にdata-[コントローラー名]-[クラス名]-class属性を指定します。

HTMLの例

<div data-controller="toggle"
     data-toggle-active-class="highlight">
  <button data-action="click->toggle#toggle">切り替え</button>
  <p data-toggle-target="content">このテキストがハイライトされます。</p>
</div>

上記の例では、toggleコントローラーにactiveという名前のCSSクラスを指定しています。
このCSSクラスの値は「highlight」です。

JavaScriptの例

// toggle_controller.js
import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  static classes = ["active"]
  static targets = ["content"]

  toggle() {
    this.contentTarget.classList.toggle(this.activeClass)
  }
}
  • コントローラー内でstatic classes配列にCSSクラス名を指定します。
  • JavaScript内では、this.[クラス名]ClassというプロパティでCSSクラス名にアクセスできます。

複数のCSSクラスを指定する方法

Stimulusでは、複数のCSSクラスを指定することも可能です。
複数のCSSクラスを指定する場合は、スペースで区切って指定します。

HTMLの例(複数クラス指定)

<div data-controller="toggle"
     data-toggle-active-class="highlight bold-text">
  <button data-action="click->toggle#toggle">切り替え</button>
  <p data-toggle-target="content">このテキストがハイライトされ、太字になります。</p>
</div>

JavaScriptの例(複数クラス指定)

import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  static classes = ["active"]
  static targets = ["content"]

  toggle() {
    this.activeClasses.forEach(cssClass => {
      this.contentTarget.classList.toggle(cssClass)
    })
  }
}
  • 複数のCSSクラスを指定した場合は、this.[クラス名]Classes(複数形)という配列で取得できます。
  • 配列を使って、複数のクラスをまとめて操作できます。

CSSクラスのデフォルト値を指定する方法

Stimulusでは、CSSクラスにデフォルト値を指定することも可能です。
HTML側でクラス名が指定されていない場合に、デフォルト値が使われます。

JavaScriptの例(デフォルト値の指定)

static classes = ["active"]

get activeClass() {
return this.hasActiveClass ? this.activeClassValue : "default-highlight"
}
  • HTML側でクラス名が指定されていない場合、デフォルト値(ここでは”default-highlight”)が使われます。

CSSクラスが存在するかどうかを確認する方法

Stimulusでは、CSSクラスがHTML側で指定されているかどうかを確認するためのプロパティも用意されています。
CSSクラスが存在するかどうかを確認するには、this.has[クラス名]Classというプロパティを使います。

JavaScriptの例(存在確認)

toggle() {
  if (this.hasActiveClass) {
    this.contentTarget.classList.toggle(this.activeClass)
  } else {
    console.log("activeクラスが指定されていません。")
  }
}
  • this.has[クラス名]Classは、CSSクラスがHTML側で指定されている場合にtrueを返します。
  • CSSクラスが存在しない場合にエラーが発生するのを防ぐために、このプロパティを使って存在確認を行うことが推奨されます。

CSSクラスのベストプラクティスと注意点

  • CSSクラスをStimulus側で管理することで、JavaScriptコード内で直接クラス名を記述する必要がなくなり、コードがシンプルで保守しやすくなります。
  • クラス名は、役割が明確にわかる名前を付けましょう(例:active, hidden, highlightなど)。
  • CSSクラスが存在しない可能性がある場合は、必ずthis.has[クラス名]Classを使って存在確認を行いましょう。

まとめ

StimulusのCSSクラスを使うことで、JavaScriptコントローラー内でCSSクラスを簡単に管理できます。

  • HTML側でdata-[コントローラー名]-[クラス名]-class属性を指定
  • JavaScript側でstatic classes配列にクラス名を指定
  • 単一のクラスはthis.[クラス名]Classで取得
  • 複数のクラスはthis.[クラス名]Classesで配列として取得
  • クラスの存在確認はthis.has[クラス名]Classで行う

StimulusのCSSクラスを理解して、Railsアプリケーションのフロントエンド開発をより効率的に進めましょう。

さらに深く学びたい方へ

この記事で紹介した技術をマスターするには、体系的な学習が重要です。独学で挫折しそうな方は、現役
エンジニアから直接学べるプログラミングスクールも検討してみてください。

現場で通用するスキルを身につけるなら

DMM WEBCAMPのカリキュラムは、実際の開発現場を想定したチーム開発も経験できます。ポートフォリオ制作
支援もあり、転職活動で差をつけられます。

未経験から4ヶ月でエンジニアとして活躍できるレベルまで成長可能です。

実務レベルのWeb開発スキルを習得するなら

RUNTEQは、1000時間の圧倒的学習量で、現場で即戦力となるWebエンジニアを育成します。Ruby on
Railsに特化し、実際のWebサービス開発を通じて実践力を養います。

卒業生の多くが自社開発企業への転職に成功している実績があります。

じっくり理解を深めたい方へ

この記事で紹介した内容を確実に身につけるには、分からない点をすぐに質問できる環境が重要です。CodeCa
mpなら、現役エンジニアとのマンツーマンレッスンで、あなたのペースで着実にスキルアップできます。

朝7時〜夜23時まで、365日受講可能なので、仕事や学業と両立しながら学習を進められます。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次