「Webサービス・アプリを作ってみたい!勉強したい!」と Railsチュートリアル を走破してとりあえずWebサービスっぽいものが出来上がった人は、「せっかく作ったのだから友人や同僚に見せてみたい」と思うのではないでしょうか。
はい、私はそうでした。
しかし、Railsチュートリアル(第6版)で作成するSNSサービス(sample app)は、画面サイズを変更したりスマホで見るとレイアウトが崩れてしまいます。つまり、レスポンシブウェブデザイン(RWD)には対応していないんですね。
現代はスマホでWebを見る機会が多いですので、RWDはもはや必須と言えるのではないでしょうか。
![あるふ](http://alfnets.info/wp-content/uploads/2021/04/20210424_2041162-150x150.jpg)
Webサービス作ってみたからちょっと試してみて欲しい!LINEでURL送ったよ!
![うーぱー](http://alfnets.info/wp-content/uploads/2021/04/9422ae5989499b9a0b66b81ba603d4b0-150x150.jpg)
しょうがない…試してみるか。スマホを開いてLINEのURLをタップして…あれ?なんだこれ、レイアウトがぐちゃぐちゃで全く使い物にならなさそう…。。
こんなことになりかねません。
というわけで、「Railsチュートリアルをカスタマイズしてレスポンシブウェブデザイン化する方法」を記載していきます。
なお、本記事は Railsチュートリアル 第6版 で作成した sample app のカスタマイズとなります。
カスタマイズ一発目からどちらかと言えばフロント側の記事内容となりますが、ページの見た目も重要ということで最後まで読んでいただけると幸いです。
viewport の設定(ウィンドウ幅のレスポンシブ化)
application.html.erb の metaタグ に name=”viewport” content=”width=device-width, initial-scale=1″ を追記します。ついでに charaset=”utf-8″ も追記しています。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><%= full_title(yield(:title)) %></title>
viewport に関しては、下記の情報を参考にさせていただきました。
ハンバーガーメニューの追加(ナビゲーションバーのレスポンシブ化)
viewport を設定するだけでは、スマホで見た場合など画面サイズ(横幅)が小さくなった際にナビゲーションバー(メニュー)が収まりきらず、レイアウトが崩れます。
そこで、画面サイズ(横幅)が小さくなった際には、ナビゲーションバーをハンバーガーメニューにします。スマホ画面の右上などによくある横棒3本線ですね。
![ハンバーガーメニューの例](http://alfnets.info/wp-content/uploads/6b0cfe906643117539f33605c791b0a9-1024x810.png)
ハンバーガーメニューは、CSSのみで作成する方法もあれば、JavaScriptを使って作成する方法もあります。今回は、Railsチュートリアル 第6版 でも使われているフロントエンドのフレームワークであるBootStrap を用いています(bootstrap-sass 3.4.1(BootStrap Ver. 3系))
<header class="navbar navbar-fixed-top navbar-inverse">
<div class="container">
<!-- <%= link_to "sample app", root_path, id: "logo" %> 削除 -->
<!-- ここから追記 -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<%= link_to "sample app", root_path, id: "logo" %>
</div>
<!-- ここまで -->
<nav>
<!-- <ul class="nav navbar-nav navbar-right"> 下記に書き換え -->
<ul class="nav navbar-nav navbar-right navbar-collapse collapse" id="navbar"> <!-- 書き換え -->
ソースコードは下記の情報を参考にさせていただきました。ハンバーガーメニューのGIFもあるのでイメージが湧かない方も見てみると参考になると思います。
なお、ハンバーガーメニューの細かい設定等については下記の情報を参考にさせていただきました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgzJThGJUUzJTgzJUIzJUUzJTgzJTkwJUUzJTgzJUJDJUUzJTgyJUFDJUUzJTgzJUJDJUUzJTgzJUExJUUzJTgzJThCJUUzJTgzJUE1JUUzJTgzJUJDJUUzJTgxJUE4JUUzJTgyJUE0JUUzJTgyJUIxJUUzJTgxJUE2JUUzJTgyJThCJUUzJTgzJTlDJUUzJTgyJUJGJUUzJTgzJUIzJUUzJTgyJTkyJUU0JUI4JUExJUU3JUFCJThCJUUzJTgxJTk1JUUzJTgxJTlCJUUzJTgyJThCJUU2JTk2JUI5JUU2JUIzJTk1JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1jMmUwYmZmYWU4ZWEwMjc0ZDMyYWNkYTJkMTJjNzRlNg&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwOHJpbmUyMyZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZGY0MDMwMjgwODY0NzY3ODY2ZTI2MTQ0MmZjNmE0OTU&blend-x=142&blend-y=491&blend-mode=normal&s=ae739d54968381d2344f5e9d2961a54a)
![](https://alfnets.info/wp-content/uploads/cocoon-resources/blog-card-cache/71b00c3053bdb4f751f8ba5892e067a8.png)
![](https://alfnets.info/wp-content/uploads/cocoon-resources/blog-card-cache/8f5409caae904d660c3a7d8f1844cb91.png)
CSSで投稿画像の表示幅を設定(投稿画像の表示サイズのレスポンシブ化)
最後に、投稿画像の表示サイズをレスポンシブ化します。該当の imgタグ に対して max-width: 100% を追記するだけとなります。
.microposts {
list-style: none;
padding: 0;
li {
padding: 10px 0;
border-top: 1px solid #e8e8e8;
}
.user {
margin-top: 5em;
padding-top: 0;
}
.content {
display: block;
margin-left: 60px;
img {
display: block;
padding: 5px 0;
max-width: 100%;
}
}
.timestamp {
color: $gray-light;
display: block;
margin-left: 60px;
}
.gravatar {
float: left;
margin-right: 10px;
margin-top: 5px;
}
}
まとめ
ビューファイル2つ(application.html.erb、_header.html.erb)と CSS を少し修正するだけで、レスポンシブウェブデザイン(RWD)にすることができました。
これで Railsチュートリアル で制作した sample app で自慢?できますね!
情報教育を中心に教育関連のことを発信していますので 他の記事 や Twitter、YouTube もご覧いただけると嬉しいです。また、情報教育教材のまとめサイト も作成しています。教材だけでなく、入試情報や便利ツールの一覧集などのページもありますのでぜひご覧ください。
コメント