Rails Girlsアプリ・チュートリアルでWebアプリ作成を体験しよう

どうも、てーやまです。

今回は「Rails Girlsアプリ・チュートリアル」に挑戦してみたいと思います。

やってみての正直な感想ですが、Railsチュートリアルより大分易しめです。
Railsチュートリアル が難しい人はそれを一旦中断して、こちらを進めてみるのもアリだと感じました。

このRails Girlsアプリ・チュートリアルを進めることで、以下が体験できます。

  • scaffoldを使って自由に文章、画像が投稿できる画面を作れる
  • Deviseを使ってログイン、ログアウト機能を作れる
  • Bootstrapを使って作った画面のデザインができる

全てのチュートリアルを終えることで『プログラミング未経験でもWebアプリを作る体験』ができます。今回はそのうちの第1回目です。実際のアプリ・チュートリアルを手を動かして学びながら、できる限り解説を付けて進めていきます。ぜひ一緒に勉強しましょう!

このブログと本家アプリ・チュートリアルを開いて見比べながらどうぞ。

アプリケーションを作る

では早速、チュートリアルの通りにアプリケーションを作っていきます。
環境構築は『Rails Girlsインストールレシピ』に記載されています。

もちろんDockerを使って構築しても良いと思いますし、Ruby on Railsチュートリアルで行ったAWSを利用して構築するのも良いと思います。

では、新規アプリケーションを作成しましょう。

$ docker-compose run web rails new . --force --database=postgresql
作成後、localhostに接続してみるとYayが表示された

Idea の scaffold をする

scaffoldは、モデル/マイグレーション/コントローラ/ビュー/テスト/ルート等、必要な資材を一式作成してくれる便利な呪文です。

コンテナが上がっている状態なので、以下のコマンドでコンテナの中に入り、bashからscaffoldを命令したいと思います。

$ docker-compose exec web bash
# rails g scaffold idea name:string description:text picture:string
# rails db:migrate

ブラウザから『 http://localhost:3000/ideas』にアクセスしてみます。

scaffoldで自動生成されたページ

デザインする

BootstrapというのはHTML/CSS/JavaScriptで作成された豊富なテンプレートが使えるフレームワークです。Rails GirlsではBootstrapを使用してデザインを整えていきます。

Bootstrapを利用するには「①CDNを使用する方法」「②ダウンロードする方法」の2種類があります。

※CDNは「コンテンツ配信ネットワーク」の事で、つまりBootstrapのサーバに繋いで利用する事です。チュートリアルに沿ってCDN方式を選択します。

<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css">

「application.html.erb」に上記のように記載しているのは、CDNを使用するための構文です。チュートリアルに沿ってBootstrap3を使用することにしましょう。

    <div class="container">
    <%= yield %>
    </div>

Bootstrapにおける『class=”container”』はレスポンシブデザイン(デバイスの横幅に合わせて見やすく調整してくれるもの)だと思っておきましょう。

<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/">The Idea app</a>
    </div>
    <div class="collapse navbar-collapse">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/ideas">Ideas</a></li>
      </ul>
    </div>
  </div>
</nav>

上記はBootstrapを使用してナビゲーションバーを定義しています。
「navbar-fixed-top」を指定して、バーを画面トップに固定表示しています。

基本的にBootstrapの使い方は公式ドキュメントの通り実装すると思いますので、こちらをどうぞ(【公式】Boot strap3でのナビゲーションバー

<footer>
  <div class="container">
    Rails Girls 2020
  </div>
</footer>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

更にフッターも定義します。
下部では「jQuery」と「bootstrap.min.js」のCDNを利用しています。

bootstrap.min.jsはJavaScriptを利用するため、またjQueryが無いとBootstrapのJavaScriptは動作しないので、一緒に定義しています。

Bootstrapでデザインした結果

写真アップロード機能を追加する

写真のアップロードには「carrierwave」というGemを利用します。

gem 'carrierwave'

Gemインストール後にアップローダーを作成します。

docker-compose run web bundle install
docker-compose build
docker-compose run web rails g uploader Picture

Docker-composeを使っている方は、Gemfileを更新しているので「build」するのを忘れないようにしましょう。(理由は別記事にまとめようと思います)

後はチュートリアル通りにソースを修正すると、画像を投稿できるようになります。

フォームをfile_fieldに変更
実際に投稿してみました

routes を調整する

トップページにアクセスがあった場合、Ideaの新規投稿画面にリダイレクトするよう、ルーティングを調整します。

root to: redirect('/ideas')

アプリにページを追加する

チュートリアルに沿って、最後に開発者(自分)のページを追加しましょう。

docker-compose run --rm web rails g controller pages info
何もいじらないから殺風景ですね…今後に期待

ここまでで、【第1回】は終わりです。
Rails Girlsアプリ・チュートリアルの良さは気軽にWebアプリ作成を体験できるところだと思います。

それでは〜