T-CREATOR

Tailwind で状態に応じたスタイル切替:hover, focus, active の使いこなし方

Tailwind で状態に応じたスタイル切替:hover, focus, active の使いこなし方

Web サイトやアプリケーションにおいて、ユーザーの操作に対する視覚的なフィードバックは、使いやすさを大きく左右する重要な要素です。例えば、マウスカーソルを乗せたボタンの色が変わったり、入力フォームがフォーカスされたときに枠線が強調されたりするだけで、ユーザーは「今、何が選択されているのか」「次に何をすべきか」を直感的に理解できますね。Tailwind CSS を使えば、hoverfocus といった状態に応じたスタイル変更を、驚くほど簡単かつ宣言的に実装できるのです。この記事では、Tailwind CSS の状態修飾子の基本から、一歩進んだ応用テクニックまで、具体的なコード例を交えながら徹底解説します。

背景:なぜ状態に応じたスタイル変化が重要なのか?

ユーザーインターフェース(UI)における状態変化は、単なる装飾ではありません。ユーザーがシステムと効果的に対話するための重要な手がかりとなります。考えてみてください、現実世界のドアノブは回せば開き、スイッチは押せば電気がつく。それと同じように、デジタルの世界でもアクションに対するリアクションが自然であるべきなのです。

  • UX(ユーザーエクスペリエンス)の向上:適切なフィードバックは、ユーザーに安心感を与え、操作の迷いを減らします。まるでシステムが「ちゃんとあなたの操作を理解していますよ」と語りかけてくるような感覚ですね。
  • 視覚的な誘導:次に取るべきアクションを示唆したり、重要な情報に注目させたりする効果があります。ユーザーの視線を自然と導き、よりスムーズな操作フローを実現します。
  • インタラクティブ性の表現:静的なページに比べて、より「生きている」感覚を与え、エンゲージメントを高めます。ウェブサイトがユーザーの操作に生き生きと反応することで、もっと使ってみたい、もっと触ってみたいという気持ちにさせるでしょう。

従来、これらの状態変化は CSS の擬似クラス(:hover, :focusなど)で実装されてきましたが、プロジェクトが複雑になるにつれて管理が煩雑になることもありました。記述量が増えたり、詳細度の問題に悩まされたり…そんな経験はありませんか?

課題:従来の CSS での状態管理の複雑さと Tailwind CSS 登場以前

Tailwind CSS が登場する以前、あるいは Tailwind CSS を使わないプロジェクトでは、状態に応じたスタイリングにはいくつかの悩ましい課題がありました。あの頃を思い出すと、少し頭が痛くなる方もいるかもしれませんね。

  1. 擬似クラスの記述量増加:要素ごとに :hover, :focus, :active などのスタイルを記述する必要があり、CSS ファイルがどんどん大きく、重くなってしまいがちでした。まるで雪だるま式に増えていくコードの山…。
  2. 詳細度の競合:CSS のカスケーディングにより、意図しないスタイルが適用されてしまう詳細度の問題を解決するために、より複雑なセレクタを使ったり、最終手段として !important に頼らざるを得なかったりすることも。これは、まさに CSS の迷宮への入り口でした。
  3. 一貫性の担保の難しさ:プロジェクト全体でホバーエフェクトやフォーカススタイルの一貫性を保つためには、厳格なルールとチームメンバー全員の細心の注意、あるいは Sass のようなプリプロセッサでミックスインを駆使するなどの工夫が必要でした。少し油断すると、ボタンの見た目がバラバラ…なんてことも。
  4. 動的な状態変化への対応:JavaScript と連携してクラスを付け外しする場合、CSS と JavaScript の間で状態管理が分散し、コードの見通しが悪くなることがありました。どちらに何が書いてあるのか、追いかけるのが大変でしたね。

これらの課題は、特に大規模なアプリケーションやチーム開発において、開発効率の低下やメンテナンスコストの増大に繋がる可能性を秘めていました。もっとシンプルに、もっと直感的にスタイルを管理したい!そんなフロントエンド開発者の切実な願いがあったのです。

解決策:Tailwind CSS の状態修飾子によるシンプルで直感的なスタイリング

Tailwind CSS は、これらの課題を鮮やかに解決するために、非常にシンプルで強力な「状態修飾子(State Variants)」という武器を提供してくれます。これにより、HTML 内で直接、状態に応じたスタイルを直感的に記述できるようになるのです。まるで魔法のように、複雑だった状態管理がスッキリ整理されますよ!

1. 主要な状態修飾子の種類と基本

Tailwind CSS でよく使われる主要な状態修飾子には、ユーザーインタラクションの基本となるものが揃っています。これらを覚えるだけで、UI の表現力が格段に向上するでしょう。

#修飾子説明用途のイメージ
1hoverマウスカーソルが要素の上に乗った時のスタイルを定義します。ボタンの色変更、リンクの下線表示など
2focus要素がフォーカスを得た時(例:入力欄クリック時、Tab キーでの選択時)のスタイル。入力欄の枠線強調、選択項目のハイライトなど
3active要素がアクティブな状態(例:ボタンがクリックされている間)のスタイル。ボタン押下時のへこみ表現、クリックフィードバックなど
4disabled要素が無効化されている時(例:<button disabled>)のスタイル。送信ボタンの非活性化、操作不可項目の明示など
5visitedリンクが訪問済みの場合のスタイル。閲覧済みリンクの色変更など
6focus-within要素自身またはその子孫要素がフォーカスを得た場合に、親要素に適用するスタイル。フォームグループ全体のハイライトなど
7focus-visible要素がフォーカスを得ており、かつブラウザがフォーカスインジケータを表示すべきと判断した場合のスタイル(主にキーボード操作時)。アクセシビリティに配慮したフォーカス表示

これらの修飾子を、おなじみのユーティリティクラスの前に付けるだけ!例えば、hover:bg-blue-700 と書けば「ホバー時に背景色を blue-700 にする」、focus:ring-2 と書けば「フォーカス時にリングを表示する」といった具合です。CSS ファイルを編集することなく、HTML 上で完結するのは本当に快適ですね。

2. 状態修飾子の組み合わせは自由自在!

Tailwind CSS の素晴らしいところは、これらの状態修飾子をレスポンシブプレフィックス(sm:, md:など)や、他の状態修飾子(例えばダークモード用の dark:)と自由に組み合わせられる点です。これにより、非常にきめ細やかなスタイリングが可能になります。

例えば、

  • md:hover:text-lg: 「md サイズ以上の画面で、ホバー時にテキストサイズを lg にする」
  • dark:focus:bg-gray-600: 「ダークモード時に、フォーカスされると背景色を gray-600 にする」 といった具合です。アイデア次第で、様々なインタラクションが実現できるので、試行錯誤するのも楽しいですね!

3. JIT モードによる強力なサポートでパフォーマンスも安心

「こんなにたくさんの状態修飾子を組み合わせたら、生成される CSS が巨大になってしまうのでは…?」と心配になるかもしれません。でも、ご安心ください!Tailwind CSS の JIT (Just-In-Time) モードが、その心配を吹き飛ばしてくれます。

JIT モードでは、実際に HTML ファイル内で使用されているクラスだけを検出し、必要な CSS のみをリアルタイムに生成します。そのため、状態修飾子をどれだけ使っても、最終的な CSS ファイルのサイズは最適化され、パフォーマンスへの影響を最小限に抑えることができるのです。これで心置きなく、クリエイティブなスタイリングに集中できますね!

具体例:よく使う UI パターンでの状態修飾子の活用法

さあ、理論はここまでにして、実際に Tailwind CSS の状態修飾子がどのように UI コンポーネントを生き生きとさせるのか、具体的なコード例を通して見ていきましょう。きっと「なるほど、こうやって使うのか!」と感動していただけるはずです。

1. インタラクティブなボタン:ユーザーを導く魔法のスイッチ

ボタンはウェブサイトやアプリケーションにおいて、ユーザーにアクションを促す最も基本的なインタラクティブ要素の一つです。状態修飾子を駆使することで、ただの四角い箱から、押したくなる魅力的なボタンへと変身させることができますよ。

html<button
  class="bg-sky-500 text-white font-semibold py-3 px-6 rounded-lg shadow-md
               transform transition-all duration-150 ease-in-out
               hover:bg-sky-600 hover:shadow-lg hover:-translate-y-0.5
               focus:outline-none focus:ring-4 focus:ring-sky-300 focus:ring-opacity-75
               active:bg-sky-700 active:scale-95 active:shadow-inner
               disabled:opacity-60 disabled:cursor-not-allowed disabled:bg-gray-400 disabled:shadow-none disabled:transform-none"
>
  クリックしてね!
</button>

このボタンには、ユーザー体験を向上させるための工夫がたくさん詰まっています。

  • 通常時: bg-sky-500で鮮やかな背景色、shadow-mdで適度な立体感。
  • transform transition-all duration-150 ease-in-out: ホバー時やアクティブ時の変化を滑らかにするためのトランジションを設定しています。これが「生きた」感じを出す秘訣です。
  • hover:bg-sky-600 hover:shadow-lg hover:-translate-y-0.5: マウスカーソルを乗せると、背景色が少し濃くなり、影が強調され、ボタンがわずかに浮き上がるようなエフェクトが!「押せるよ!」というサインですね。
  • focus:outline-none focus:ring-4 focus:ring-sky-300 focus:ring-opacity-75: Tab キーなどでフォーカスが当たると、デフォルトのアウトラインを消し、代わりに美しいスカイブルーのリングが表示されます。これでキーボード操作のユーザーも安心です。
  • active:bg-sky-700 active:scale-95 active:shadow-inner: ボタンをクリックしている間(アクティブ状態)は、背景色がさらに濃くなり、ボタンが少し小さく(scale-95)なり、内側に影(shadow-inner)ができます。まるで実際にボタンを押し込んでいるような感覚でしょう。
  • disabled:opacity-60 disabled:cursor-not-allowed disabled:bg-gray-400 disabled:shadow-none disabled:transform-none: ボタンが無効化されている(disabled属性が付与されている)場合は、半透明になり、カーソルが「操作不可」を示し、背景色や影、変形もリセットされます。これで、ユーザーは「今は押せないんだな」と一目で理解できます。

どうでしょう?たくさんの状態修飾子が、まるでオーケストラのように調和して、一つのボタンに豊かな表情を与えているのが分かりますね。

2. スタイリッシュな入力フォーム:心地よいデータ入力体験を

入力フォームは、ユーザーに情報を入力してもらうための重要なインターフェースです。状態修飾子を効果的に使うことで、単調になりがちなフォーム作成も、楽しく、そしてユーザーにとって分かりやすいものに変えることができます。

html<div class="space-y-6 p-8 bg-slate-50 rounded-xl shadow-lg">
  <div>
    <label
      for="email"
      class="block text-sm font-medium text-slate-700 mb-1"
      >メールアドレス</label
    >
    <input
      type="email"
      id="email"
      name="email"
      class="mt-1 block w-full px-4 py-3 bg-white border border-slate-300 rounded-md shadow-sm
                  text-base text-slate-900 placeholder-slate-400
                  transition-colors duration-150
                  hover:border-slate-400
                  focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500
                  disabled:bg-slate-100 disabled:text-slate-500 disabled:border-slate-200 disabled:cursor-not-allowed"
      placeholder="you@example.com"
    />
  </div>
  <div>
    <label
      for="password"
      class="block text-sm font-medium text-slate-700 mb-1"
      >パスワード</label
    >
    <input
      type="password"
      id="password"
      name="password"
      class="mt-1 block w-full px-4 py-3 bg-white border border-slate-300 rounded-md shadow-sm
                  text-base text-slate-900 placeholder-slate-400
                  transition-colors duration-150
                  hover:border-slate-400
                  focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500
                  disabled:bg-slate-100 disabled:text-slate-500 disabled:border-slate-200 disabled:cursor-not-allowed"
      placeholder="••••••••••••"
    />
    <p
      class="mt-2 text-xs text-slate-500 peer-invalid:visible"
    >
      8文字以上で入力してください。(`peer-invalid`
      のデモ用)
    </p>
  </div>
</div>
  • ラベル: text-slate-700で落ち着いた色合いに。
  • 入力フィールド共通: border-slate-300で標準の枠線、placeholder-slate-400でプレースホルダーの文字色を設定。transition-colors duration-150で色の変化を滑らかに。
  • hover:border-slate-400: マウスオーバーで枠線の色が少し濃くなり、インタラクションの準備ができていることを示唆します。
  • focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500: フォーカスが当たると、デフォルトのアウトラインを消し、インディゴ色のリングと枠線で強調!これでユーザーはどこに入力中か一目瞭然です。
  • disabled:bg-slate-100 disabled:text-slate-500 disabled:border-slate-200 disabled:cursor-not-allowed: 無効状態では、背景色、文字色、枠線の色が変わり、操作できないことが明確に伝わります。

入力フォームがこのように反応してくれると、入力作業も少し楽しく感じられませんか?細やかな配慮が、ユーザーのストレスを軽減し、コンバージョン率の向上にも繋がるかもしれません。

3. グループホバー(group-hover)の活用:親子で奏でるハーモニー

親要素のホバー状態に応じて、子要素のスタイルを変化させたい…そんな願いを叶えてくれるのが groupgroup-hover: です。カードコンポーネントなどで特に威力を発揮します。まるで親子が息を合わせてパフォーマンスするように、連動した美しいインタラクションが生まれます。

html<a
  href="#"
  class="group block max-w-md mx-auto rounded-xl p-8 bg-white ring-1 ring-slate-900/5 shadow-2xl space-y-4
          transition-all duration-300 ease-in-out
          hover:bg-sky-500 hover:ring-sky-500 hover:shadow-sky-300/50"
>
  <div class="flex items-center space-x-4">
    <svg
      class="h-12 w-12 stroke-sky-500 transition-colors duration-300 group-hover:stroke-white"
      fill="none"
      viewBox="0 0 24 24"
      stroke-width="1.5"
      aria-hidden="true"
    >
      <path
        stroke-linecap="round"
        stroke-linejoin="round"
        d="M12 6.042A8.967 8.967 0 006 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 016 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 016-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0018 18a8.967 8.967 0 00-6 2.292m0-14.25v14.25"
      />
    </svg>
    <h3
      class="text-slate-900 text-xl font-semibold transition-colors duration-300 group-hover:text-white"
    >
      新しいプロジェクト
    </h3>
  </div>
  <p
    class="text-slate-500 text-base transition-colors duration-300 group-hover:text-sky-100"
  >
    ここから新しいプロジェクトを開始し、素晴らしいアイデアを形にしましょう。ワクワクする未来が待っています!
  </p>
</a>

このカードコンポーネントでは、以下のようになっています。

  1. 親要素である <a> タグに group クラスを付与します。これが「私たちはグループですよ」という宣言です。
  2. <a> タグ自体にも hover:bg-sky-500 などを設定し、カード全体の背景色や影がホバーで変わるようにしています。
  3. 子要素である SVG アイコン (<svg>) には group-hover:stroke-white を指定。これにより、親であるカードがホバーされると、アイコンの線(stroke)の色が白に変わります!
  4. 同様に、見出し (<h3>) や段落 (<p>) のテキストカラーも group-hover:text-whitegroup-hover:text-sky-100 で、親のホバーに連動して変化します。

groupgroup-hover: を使うことで、コンポーネント全体が一つの生き物のように、まとまりのあるインタラクションを見せてくれますね。これは非常に強力で、デザインの可能性を大きく広げてくれます。

4. ピア(peer)との連携:隣り合う要素たちの協調作業

兄弟要素の状態(例えば、チェックボックスがチェックされたか、入力が無効かなど)に応じて、別の兄弟要素のスタイルを変化させたい場合に役立つのが peerpeer-* 修飾子(例: peer-focus:, peer-checked:, peer-invalid:) です。まるで隣同士のダンサーが息を合わせて踊るように、要素同士が連携しあう面白い表現が可能です。

入力フォームで、特定の条件を満たしていない場合にエラーメッセージを表示する、といった使い方が代表的です。

html<form class="space-y-6 p-6 bg-white rounded-lg shadow">
  <div>
    <label
      for="email-peer"
      class="block text-sm font-medium text-gray-700"
      >メールアドレス (Peerデモ)</label
    >
    <input
      type="email"
      id="email-peer"
      name="email-peer"
      required
      class="peer mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm
                  focus:outline-none focus:ring-indigo-500 focus:border-indigo-500
                  invalid:border-pink-500 invalid:text-pink-600
                  focus:invalid:border-pink-500 focus:invalid:ring-pink-500"
      placeholder="you@example.com"
    />
    <p
      class="mt-2 invisible peer-invalid:visible text-pink-600 text-sm"
    >
      有効なメールアドレスを入力してください。
    </p>
  </div>

  <div class="flex items-center">
    <input
      id="terms-peer"
      name="terms-peer"
      type="checkbox"
      class="peer h-4 w-4 text-indigo-600 border-gray-300 rounded
                  focus:ring-indigo-500"
    />
    <label
      for="terms-peer"
      class="ml-2 block text-sm text-gray-900
                  transition-all duration-200
                  peer-checked:font-semibold peer-checked:text-indigo-700 peer-checked:tracking-wide"
    >
      利用規約に同意します (チェックでスタイル変更)
    </label>
  </div>
</form>

この例では、2 つの peer の活用法を示しています。

メールアドレス入力欄:

  1. <input type="email">peer クラスを付与します。これが監視対象の「ピア」となります。
  2. required 属性も追加し、入力が必須であることを示します。
  3. 入力値が無効(例えば、メールアドレスの形式でない、または空)の場合、input 自身に invalid:border-pink-500 invalid:text-pink-600 が適用され、枠線と文字がピンク色になります。
  4. そして、兄弟要素であるエラーメッセージ <p>peer-invalid:visible を指定。これにより、ピア(メール入力欄)が無効状態の時だけ、このエラーメッセージが表示されるようになります!通常は invisible で隠れています。

利用規約チェックボックス:

  1. <input type="checkbox">peer クラスを付与します。
  2. 兄弟要素である <label>peer-checked:font-semibold peer-checked:text-indigo-700 peer-checked:tracking-wide を指定。
  3. これにより、チェックボックスがオン (checked) になると、ラベルのテキストが太字になり、色がインディゴに変わり、少し文字間隔が広がる、といったスタイル変化が起こります。

peer を使うと、JavaScript を書かずに CSS だけで、このような動的なフィードバックを実現できるので、コードがスッキリしますし、開発もスピーディーになりますね。

5. focus-within で親要素をスタイリング:グループ全体を優しく包み込む

フォームのグループ全体(例えば、ラベルと入力欄のセット)を、その中のいずれかの要素がフォーカスされた時にハイライトしたい、そんな要望に応えるのが focus-within です。グループ全体が「今、注目されていますよ」とアピールするようになります。

html<div class="space-y-8 p-8 bg-gray-50 rounded-xl">
  <div
    class="p-6 border border-gray-300 rounded-lg shadow-sm
              transition-all duration-300 ease-in-out
              focus-within:border-purple-500 focus-within:ring-2 focus-within:ring-purple-500 focus-within:ring-opacity-60 focus-within:shadow-lg"
  >
    <h3
      class="text-lg font-semibold text-gray-700 mb-3 group-focus-within:text-purple-600"
    >
      個人情報入力エリア
    </h3>
    <div>
      <label
        for="username-fw"
        class="block text-sm font-medium text-gray-600"
        >ユーザー名</label
      >
      <input
        type="text"
        id="username-fw"
        name="username-fw"
        class="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-purple-500 focus:border-purple-500 sm:text-sm"
        placeholder="Jane Doe"
      />
    </div>
    <div class="mt-4">
      <label
        for="password-fw"
        class="block text-sm font-medium text-gray-600"
        >パスワード</label
      >
      <input
        type="password"
        id="password-fw"
        name="password-fw"
        class="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-purple-500 focus:border-purple-500 sm:text-sm"
        placeholder="••••••••"
      />
    </div>
    <p
      class="mt-3 text-xs text-gray-500 group-focus-within:text-purple-500"
    >
      このエリア内の入力欄にフォーカスすると、枠全体が紫色にハイライトされます。
    </p>
  </div>

  <div
    class="p-6 border border-gray-300 rounded-lg shadow-sm
              focus-within:bg-emerald-50 focus-within:border-emerald-500 focus-within:shadow-emerald-200/50 focus-within:shadow-md"
  >
    <h3 class="text-lg font-semibold text-gray-700 mb-3">
      設定オプション
    </h3>
    <div class="flex items-center">
      <input
        id="notifications-fw"
        name="notifications-fw"
        type="checkbox"
        class="h-4 w-4 text-emerald-600 border-gray-300 rounded focus:ring-emerald-500"
      />
      <label
        for="notifications-fw"
        class="ml-2 block text-sm text-gray-900"
        >通知を有効にする</label
      >
    </div>
    <p class="mt-3 text-xs text-gray-500">
      チェックボックスにフォーカスすると、このセクションの背景色が変わります。
    </p>
  </div>
</div>

この例では、focus-within: を使って、フォームセクション全体に対するフィードバックを実現しています。

  • 個人情報入力エリア:

    • 外側の divfocus-within:border-purple-500 focus-within:ring-2 focus-within:ring-purple-500 focus-within:ring-opacity-60 focus-within:shadow-lg を指定しています。
    • この div の中にある「ユーザー名」または「パスワード」の入力欄 (<input>) のいずれかがフォーカスされると、親である div の枠線が紫色に変わり、リングが表示され、影も少し強調されます。
    • まるでグループ全体が「今、あなたはこちらに注目していますね!」と教えてくれているかのようです。ユーザーは自分がどのセクションを操作しているのかを、より広範囲で把握できます。
  • 設定オプションエリア:

    • こちらでは、focus-within:bg-emerald-50 focus-within:border-emerald-500 を指定。
    • 中のチェックボックスがフォーカスされると、セクション全体の背景色が薄いエメラルド色に、枠線もエメラルド色に変わります。

focus-within は、ユーザーがフォームのどこにいるかを視覚的に分かりやすく示すのに非常に有効です。特に複数の入力項目がまとまっているセクションで使うと、その効果を実感できるでしょう。

まとめ

Tailwind CSS の状態修飾子を使いこなすことで、あなたのウェブサイトやアプリケーションは、まるで生きているかのようにユーザーの操作に応答し、より魅力的で使いやすいものへと進化します。HTML を見ればどのようなインタラクションが設定されているかが一目で分かり、非常に効率的に UI 開発を進めることができるのは、本当に素晴らしい体験です。

  • 直感的な記述: hover:, focus:, active: などをクラス名に直接記述するだけで、まるで魔法のように状態に応じたスタイルが適用されます。もう複雑な CSS セレクタや擬似クラスの管理に悩む必要はありません!
  • 高い保守性: スタイルと構造が同じ場所(HTML)にあるため、コンポーネント単位での管理が格段に容易になります。CSS ファイルと HTML ファイルを行ったり来たりする手間が減り、コードの可読性も向上しますね。
  • 柔軟な組み合わせ: レスポンシブ対応のプレフィックス (sm:, md:) やダークモード (dark:) など、他の修飾子とも自由に組み合わせることが可能です。これにより、あらゆる状況に対応できる、きめ細やかで洗練されたインタラクションを実現できます。
  • group-hoverpeer のパワー: 親子要素間や兄弟要素間といった、少し複雑なインタラクションも、grouppeer を使えば驚くほどシンプルに実装できます。まるで要素同士が会話しているかのような、ダイナミックな表現が可能になります。
  • UX への貢献: focus-withinfocus-visible のような修飾子は、ユーザーがどこを操作しているかを明確にし、アクセシビリティの向上にも大きく貢献します。

これらの強力な機能を活用して、ユーザーにとってより分かりやすく、操作していてワクワクするような、そして何よりも「使っていて心地よい」インターフェースを構築していきましょう。Tailwind CSS を使えば、これまで複雑で手間がかかっていた状態管理が、驚くほどシンプルで楽しい作業になることを、きっと実感できるはずです!さあ、あなたのプロジェクトにも、インタラクティブな魔法をかけてみませんか?

関連リンク

この記事で解説した内容について、さらに詳しく学びたい方のために、役立つ公式ドキュメントや関連リソースをまとめました。ぜひ参考にしてみてください。