レイアウトを作成する(その1)

WED(WeekEndDevelopers)のぽんたです。

開発スキルのないSIerからソフトウェアスキルを取得するため、WEDでモノづくりを計画しています。詳しい経緯はここ

今回から第5章(レイアウトを作成する)に入っていきます。

ふー、やっと第5章です。。。
この章では、アプリケーションにBootstrapフレームワークを組み込み、そして、カスタムスタイルを追加します。
た、これまで作成したページ (HomeやAboutなど) へのリンクをレイアウトに追加するそうです。
なんだか目に見えるものを作っていける感じでちょっと楽しくなってきました。

まずは準備としてgitでソース管理をしているのでブランチを切ります。

$ git checkout -b filling-in-layout
Switched to a new branch 'filling-in-layout'

サンプルアプリケーションにリンクとスタイルを追加するために、サイトのレイアウトファイルapplication.html.erbにhtml構造を追加し、レイアウトファイルを更新します。この更新には、領域 (divタグ) の追加、CSSクラスの追加、サイトナビゲーションの起点となる領域の追加も含まれます。

$ cat app/views/layouts/application.html.erb 
<!DOCTYPE html>
<html>
  <head>
    <title><%= full_title(yield(:title)) %></title>
    <%= csrf_meta_tags %>
    <%= stylesheet_link_tag    'application', media: 'all',
                               'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application',
                               'data-turbolinks-track': 'reload' %>
    <!--[if lt IE 9]>
      <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/r29/html5.min.js">
      </script>
    <![endif]-->
  </head>

  <body>
    <header class="navbar navbar-fixed-top navbar-inverse">
      <div class="container">
        <%= link_to "sample app", '#', id: "logo" %>
        <nav>
          <ul class="nav navbar-nav navbar-right">
            <li><%= link_to "Home",   '#' %></li>
            <li><%= link_to "Help",   '#' %></li>
            <li><%= link_to "Log in", '#' %></li>
          </ul>
        </nav>
      </div>
    </header>
    <div class="container">
      <%= yield %>
    </div>
  </body>
</html>

今後のスタイル要素を利用するために、home.html.erbビューに特別な要素をいくつか追加します。

$ cat app/views/static_pages/home.html.erb 
<div class="center jumbotron">
  <h1>Welcome to the Sample App</h1>

  <h2>
    This is the home page for the
    <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
    sample application.
  </h2>

  <%= link_to "Sign up now!", '#', class: "btn btn-lg btn-primary" %>
</div>

<%= link_to image_tag("rails.png", alt: "Rails logo"),
            'http://rubyonrails.org/' %>

Ruby on Rails公式ページの https://railstutorial.jp/rails.png から画像をダウンロードして、app/assets/images/ディレクトリにおきます。

$ curl -o app/assets/images/rails.png -OL railstutorial.jp/rails.png
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 13036  100 13036    0     0   5250      0  0:00:02  0:00:02 --:--:--  8604
$ rails s
=> Booting Puma
=> Rails 5.2.3 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.4.1-p111), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000

http://localhost:3000/static_pages/homeにアクセスすることで確認できました。

f:id:ponta1119:20191229141234p:plain

演習1
Webページと言ったらネコ画像、というぐらいにはWebにはネコ画像が溢れていますよね。リスト 5.4のコマンドを使って、図 5.3のネコ画像をダウンロードしてきましょう。

以下(リスト5.4)の通り実施しました。

$ curl -OL cdn.learnenough.com/kitten.jpg
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100  138k  100  138k    0     0  47102      0  0:00:03  0:00:03 --:--:-- 86923

このままだと、app/assets/images/ディレクトリに配置されないんですよね。念のために確認します。

~/develop_environment/sample_app$ ls
Gemfile       README.md     app/          config/       db/           lib/          package.json  storage/      tmp/
Gemfile.lock  Rakefile      bin/          config.ru     kitten.jpg    log/          public/       test/         vendor/

演習2
mvコマンドを使って、ダウンロードしたkitten.jpgファイルを適切なアセットディレクトリに移動してください (参考: 5.2.1)。
app/assets/images/に配置するって事なのでしょうか?やってみます。

$ mv kitten.jpg ./app/assets/images/
$ ls app/assets/images/
kitten.jpg  rails.png

演習3
image_tagを使って、kitten.jpg画像を表示してみてください (図 5.4)。

演習2ではファイルを移動させるところまでやりました。
ただこのままだとファイル名の関係で表示させる事が出来ないため、rails.pngを退避させて kitten.jpgをrails.pngにリネームしてやります。

$ cd app/assets/images/
$ mkdir bak
$ mv rails.png ./bak/
$ mv kitten.jpg rails.png 
$ rails s
=> Booting Puma
=> Rails 5.2.3 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.4.1-p111), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

f:id:ponta1119:20191229141318p:plain

無事確認することが出来ました!!

今回はここまで!では^^