【Boostrap】なんで動かないの?jQueryちゃん?〜長い長いエラーとの戦い〜


この三日間悩みまくっていたこと

ポートフォリオを制作してエンジニア業界で働き始めた諸先輩方の投稿とgitのソースコードをいくつか拝見させて頂き、フレームワークを使った方が実装が早くなるということを知ったのですが、
自分のアプリケーションもレスポンシブ化したいということと、デザインセンスが皆無という自分のスペックに見切りをつけ、Bootstrapを使用すると決めていました。

先日バックエンドの実装がだいたい終わったので、さあBootstrapと戯れるぞと思い公式で目に止まったものを表示できるかどうか試してみることに。

良い感じのデザインですね!
これを表示するには・・・ほほう貼り付ければ良いのか。簡単じゃないか(えなり
さっそくやってみよう。
⌘Cからの〜
⌘V(スターン!












おい、なんでや??

公式からサンプルのソースコードを取ってきて貼り付けているだけなのにその通りに表示されない。
サンプルになってないやんけ???おかしいんとちゃうか???
HTMLはしっかりと表示されていることを見て、おかしいのはCSSだということに気付く(遅い
よく見るとソースコードの部分に変なところがある。


<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
    <meta name="generator" content="Jekyll v4.0.1">
    <title>Carousel Template · Bootstrap</title>

    <link rel="canonical" href="https://getbootstrap.com/docs/4.5/examples/carousel/">

    <!-- Bootstrap core CSS -->        ⬅️①コメントアウトされているここと
<link href="../assets/dist/css/bootstrap.css" rel="stylesheet">

    <style>
      .bd-placeholder-img {
        font-size: 1.125rem;
        text-anchor: middle;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
      }

      @media (min-width: 768px) {
        .bd-placeholder-img-lg {
          font-size: 3.5rem;
        }
      }
    </style>
    <!-- Custom styles for this template -->     ⬅️②コメントアウトのここの部分
    <link href="carousel.css" rel="stylesheet">

〜以下略〜

cssファイルを読みこんでいるところの記述がおかしい。


<link href="../assets/dist/css/bootstrap.css" rel="stylesheet">

assets/dist/css/bootstrap.cssなんてファイルがアプリケーションにない。
別でダウンロードしたサンプルソースコードのファイルを覗いてみると、

bootstrap-4.5.0-dist
├CSS
└ JS

こんな構造になっていた。
CSSの中を覗いてみると

bootstrap.cssがある!よしよし
app>assets>styleseetsの中に入れました。
これで解決するかと思いきや何も変わらない。
記述のしかたがRailsのルールになっていないからだと気付き、
<link rel="~~~~
という記述から


<%= stylesheet_link_tag 'application', media: 'all'%>

に変更しました。
コメントアウトされていた②のほうも同じ名前のものがあったので同じ場所に配置。
しかしファイルがあってもなくても特に見た目が変わらなかったのですが、
①で記述した'application'の部分の意味は「このアプリケーションの中の」という意味のようでディレクトリを細かく指定しなくてもきちんと表示されました。
これは推測ですが指定する範囲を広げることで②の部分のコードを削除しても問題ないよ、ということなのではないかなと考えました。

さて解決したところでページ更新をしてみると、今度はJavaScriptが動かない。

問題部分(ページ最下部)

〜以下略〜
</main>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
      <script>window.jQuery || document.write('<script src="../assets/js/vendor/jquery.slim.min.js"><\/script>')</script><script src="../assets/dist/js/bootstrap.bundle.js"></script></body>
</html>

同じ原理で<script src=~~~~がおかしい部分だと思いました。

こんな感じにしてみる

〜以下略〜
</main>
<%= javascript_include_tag 'https://code.jquery.com/jquery-3.5.1.slim.min.js' %>
       <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %></body>
</html>

結果、変わらない。
integrityとcrossoriginを取ってみたりしたけど変化なし。
この二つも調べてみたがあまり関係なさそう。ここで気づけば2時間ぐらいハマる。うーん。

その後、turbolinksが邪魔しているのではないかとのことに辿り着き、gemから削除したりしてからCDN版に出ていたソースコードを貼り付ける。
すると表示された!

<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>

わかったこと

Bootstrap側が求めていることに自分が気付かずにあれでもない、これでもないと時間をかけてしまいました。
解決できたらくだらないことだったなと思うのですがやってる時は必死すぎて、あまり周りが見えていないことが多々あります。
明日からフロント部分を実装していきますが今日感じた変換していくという考え方と、あれこれ試して学んでいくことを忘れずにやっていこうと思いました。

間違っている部分、改善点などありましたら教えて頂ければ幸いです。

参考にさせて頂きました

ありがとうございました。