Railsアプリ開発中に出会った問題についてまとめています。
今回は、Bootstrap5
のハンバーガーメニューが正常に動作しない問題に直面しました。
開発環境
- Ruby 2.7.3
- Rails 6.1.4.1
- Bootstrap 5.1
調べたところ、Bootstrap 4系から5系で破壊的な変更が行われた影響で、Bootstrap5ではRails6においてハンバーガーメニューが正常に動作しない
らしい。
そのため、正常に動作することが確認されているBootstrapのバージョンをダウングレードする
ことにした。
Bootstrap4.6系でもハンバーガーメニューは正常に動作しない
ようなので、Bootstrap4.5系
を利用した。
下記のコマンドでバージョンを更新できる。ダウングレードであってもupgrade
と記述する点は注意したい。
yarn upgrade bootstrap@~4.5.1
Bootstrap4系
ではjquery
が必要になるため、こちらもインストール
yarn add jquery
1度、Bootstrap5系
のNav
コードを貼り付けて動作を確認している場合は、Bootstrap4.5系
のNav
コードに変更する必要がある。
5系と4.5系のコードは下記のように異なっている。
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Features</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Pricing</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
</div>
</div>
</nav>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Features</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Pricing</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
</div>
</nav>
今回学んだこと
プログラムは日々改良されているが、最新版が最適とは限らないことを学んだ。
安定して動作することを確認済みのバージョンを使用する方が、エラーが発生した際のコストが低くなると感じた。
Bootstrap5系
になったことで、これまで必要であったjquery
が不要になったのに、結局バグで使用できないのは残念。。。