本記事の趣旨
本記事は、普段メインでJavaを使っているwebエンジニアの、
Ruby(Ruby on Rails)お勉強記録です。
高度な内容ではない点やお作法的にもよろしくない部分がある点につきましては、あらかじめご了承ください🙇
業務のかたわら週1回1時間程度、ゆるりと進めています。
第0回 準備
- MacにHomebrewをインストール
ターミナルで下記シェルを実行。
https://brew.sh/index_ja
第1回 Hello World
$ sudo gem i rails
$ rails new 【プロジェクト名】
作成したプロジェクト内にcdして下記コマンドでサーバを起動します。
$ rails s
webブラウザで
localhost:3000
を叩いて、下記画面が表示されれば成功。ここまで爆速。
gemとは、Rubyのパッケージ管理。
https://blog.codecamp.jp/rails-gembundlerとは、gem同士の依存関係を保ちながらパッケージ管理をしてくれる。bundler自体もgemである。
https://qiita.com/io_fleming/items/14626a9cff44bc87e7db
$ gem install bundler
でインストール。
- rbenvとは、Rubyのバージョン管理。
$ brew install rbenv
でインストール(詳細は第6回)。
第2回 ディレクトリ構成
雑にまとめると、
- app配下にController
- jobs 非同期処理でレスポンスを返さない、やりっぱなしの処理
- models modelに紐づくロジックはすべてそのクラス内に書く(※modelの設計は慎重にやる必要があるらしい(MDD、TDD、DDD))
- db配下のseeds.rbは初期データ
- config配下は諸々の設定で、設定対象によってファイルが別れている -- cable.yml -- database.yml -- puma.rb → アプリケーションサーバ的な設定?
スキマ時間でドットインストールで学習しても良いかも知れない
https://dotinstall.com/lessons/basic_rails_v3
第3回 Controllerを作成してみよう
コマンドラインからクラスの作成を行う。
この辺はあまりJavaではなかったやり方。
$ rails generate controller 【コントローラ名】 【アクション名】
今回は
$ rails generate controller users index
アクション名をつけてコマンドを叩くと、対応するviewが作られます。viewsディレクトリ配下にいるはず。
Contoller→Javaでも同義
アクション名→Javaでいうメソッド
サーバを起動して、
localhost:3000/users/index
を叩くと、先程作成したアクションが実行され、viewが表示されます。
返却するview名を明示しない場合、自動的にアクション名と同じ名称のviewが選ばれるようです。
第4回 ViewからContollerに渡した値を永続化してみよう
- ViewからControllerに値を飛ばす https://qiita.com/shunsuke227ono/items/7accec12eef6d89b0aa9
第3回で表示してみたviewを編集していきます。
textboxとsubmitボタンを追記します。
<%= form_tag("/users/create", method: "post") do %>
<input type="text" name="hoge" value="piyo" />
<%= submit_tag("作成!") %>
<% end %>
エンドポイントのマッピングを書いていきます。
Rails.application.routes.draw do
get 'users/index'
post 'users/create' #この行を追加
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
- modelを作成
$ rails g model モデル名 [メンバ名]:String
migrateするとsqliteに自動でtableを作ってくれます。
$ rails db:migrate
ControllerでviewからPOSTされた値を受け取って保存するコードをusers_controllerに記述します。
class UsersController < ApplicationController
def index
end
#下記のdef〜endを追記
def create
#hogeはviewに書いたPOSTされてくる要素
【model名】.create(【メンバ名】:params[:hoge])
p 【model名】.all
end
end
index.html.erbのsubmitボタンを押下すると、先程作成したPOSTメソッドが実行されDBに値が保存されます。
sqliteの中身を実際に確認してみましょう。
db配下にdevelopment.sqlite3がいるはずなので、dbまでcdし、
$ sqlite3 development.sqlite3
sqlite3> select * from テーブル名
第5回 scaffoldでCRUDを自動生成
$ rails g scaffold モデル名 カラム名:型
いろいろつくられます。
$ rails db:migrate
でマイグレーションし、
$rails s
で起動し、
localhost:3000/doramis
にアクセスし、いろいろいじってみると、
- 一覧表示
- 登録
- 更新
- 削除
が一通りできる。マスタメンテ画面ならこれで十分。
DBの中身は前回もやったようにsqlite3コマンドで確認可能。
<%= link_to 'New Dorami', new_dorami_path %>
今日の感想
link_to が初見だとカオス。
第6回 Rails6にアップデート
参考
https://qiita.com/rry/items/12d794437cde733f8ece
https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0
Rubyのバージョンが古かったので、
rbenvのバージョンを2.6.4をインストール、切り替えして作業しました。
$ rbenv install 2.6.4
$ rbenv local 2.6.4
$ ruby -v
$ sudo gem i rails -v "6.0.0"
$ rails new 【プロジェクト名】
$ rails s
バージョンがうまく切り替わらなかったので、
.bash_profileに
eval "$(rbenv init -)"
を追加。
おまけ rails console
https://qiita.com/you8/items/00d97f871f5fa78905f7
Modelを作成してrails consoleでデータを保存してみる、などをしてみました。
第7回 BootStrapを入れてみる
Gemfileに下記を追加
gem 'bootstrap', '~> 4.2.1'
プロジェクト配下で
$ bundle install
/app/assets/stylesheets/application.css
をapplication.scssにリネームし、
@import "bootstrap";
を追記。
適当なerbファイルに下記を追加。
<button class="btn btn-info" type="submit">BootStrap読み込めてるかな</button>
感想
プロフダクションコードを書けるようになるにはもう少し時間をとって学習しないとな、と思いました。
今後もゆるりと進めていく予定です・・・
第8回 APIモード
プロジェクト作成時に--api
をつけるとviewに関係する部分の作成がされなくなります。
rails new sample-api --api