Ruby on Rails

Swiftで作ったアプリのユーザをRailsで管理したい。でもRails触ったことないからやる!

Ruby on Rails チュートリアルをやってみる。【1章】

1.2.1 開発環境

開発環境は手順通りにいけば問題なくいけましたが、一度ミスりました。

rails new

$ rails _5.0.0.1_ new hello_app

いきなり下記エラー。

Can't initialize a new Rails application within the directory of another, please change to a non-Rails directory first.
Type 'rails' for help.

いきなり選ぶところ間違えていたため。。Rubyを選んでいました。
正しくはRails Tutorial

f:id:Loiter:20170211235329p:plain

1.3.2 rails server

クラウドIDEでサーバ起動こちらもながれで特に問題なく

rails server -b $IP -p $PORT
rails server -b $IP -p $PORT
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://0.0.0.0:8080
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.4.0 (ruby 2.3.0-p0), codename: Owl Bowl Brawl
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:8080
Use Ctrl-C to stop

演習

1

$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

2

$ rails -v
Rails 5.0.0.1

1.3.3 Model-View-Controller (MVC)

railsMVC(Model View Controller)アーキテクチャを採用していて役割を分けている。このアーキテクチャはswiftでも今度やってみようと思う。コードが明らかに読みやすく感じました。

  • controller:リクエストの処理
  • View: 表示部分
  • model: データベースの処理など

f:id:Loiter:20170212004923p:plain

1.3.4 Hello, world!

render関数は print関数のようなもの??文字列をhtmlにレンダリングしているとも読めるけど今はそう理解しておきます。

 def hello
    render html: "hello, world!"
  end

ルーティング

root 'application#hello'

ブラウザからのリクエストをコントローラ及び、アクションに振り分けることをルーティングと呼んでいる。この場合 applicationコントローラのhelloアクションにルーティングされる。

rootで設定したことでデフォルトページに ブラウザからアクセスするとhelloアクションにルーティングされHelloworldが表示される。 f:id:Loiter:20170212012749p:plain

演習

1

application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
    render html: "hola, mundo!"
  end
end

2

application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
    render html: "¡Hola, mundo!"
  end
end

3

application_controller.rb
  def goodbye
    render html: "goodbye, world!"
  end
application_controller.rb
Rails.application.routes.draw do
  root 'application#goodbye'
end

語彙・機能

語彙や機能まとめ

scaffold

アプリの雛形を自動生成してくれる。Railsではモデル、ビュー、コントローラ、ルーティングなど必要なファイルの作成と設定が必要。scaffoldを使うとすぐにアプリが作れるものの、実践的な知識は身につかないよう。

REST

gem

Ruby用のパッケージ形式 -v オプションでバージョン指定

gem install rails -v 5.0.0.1

Bundler

Gemパッケージの種類やバージョンを管理。 複数のPCで必要なGemパッケージをインストールする仕組みを提供してくれる。 bundlerをつかってgemパッケージをインストールする。

デプロイ

WEBサービスなどを利用可能な状態にすること。本番環境に展開するなどの意味。

Cloud9

クラウド上の統合開発環境

tips・メモ

Rubyではインデントをスペース2つがほぼ常識

アセットパイプライン

アクション

Railsフォルダ構成

  • app/ モデル、ビュー、コントローラ、ヘルパーなどを含む主要なアプリケーションコード
  • app/assets アプリケーションで使用するCSS (Cascading Style Sheet)、JavaScriptファイル、画像などのアセット
  • bin/ バイナリ実行可能ファイル
  • config/ アプリケーションの設定
  • db/ データベース関連のファイル
  • doc/ マニュアルなど、アプリケーションのドキュメント
  • lib/ ライブラリモジュール
  • lib/assets ライブラリで使用するCSS (Cascading Style Sheet)、JavaScriptファイル、画像などのアセット
  • log/ アプリケーションのログファイル
  • public/ エラーページなど、一般(Webブラウザなど)に直接公開するデータ
  • bin/rails コード生成、コンソールの起動、ローカルのWebサーバの立ち上げなどに使用するRailsスクリプト
  • test/ アプリケーションのテスト
  • tmp/ 一時ファイル
  • vendor/ サードパーティプラグインやgemなど
  • vendor/assets サードパーティプラグインやgemで使用するCSS (Cascading Style Sheet)、JavaScriptファイル、画像などのアセット
  • README.md アプリケーションの簡単な説明 (訳注: 近年は .rdocよりも .md ファイルの方がよく使われているようです)
  • Rakefile rakeコマンドで使用可能なタスク
  • Gemfile このアプリケーションに必要なGemの定義ファイル
  • Gemfile.lock アプリケーションのすべてのコピーが同じgemのバージョンを使用していることを確認するために使用されるgemのリスト
  • config.ru Rackミドルウェア用の設定ファイル
  • .gitignore Gitに取り込みたくないファイルを指定するためのパターン