Rails Scaffoldによる
モバイルバックエンド
プロトタイピング
Ruby / Ruby on Rails ビギナーズ勉強会 第12回
2016/4/10
宇都宮 諒(@ryo511)
自己紹介
- 宇都宮 諒(うつのみや りょう)
- Twitter, Facebook等では「ryo511」
- Webアプリケーションエンジニア
- 業務で主に使ってる言語はPHP, JavaScript, C#
- Rails歴:2016年1月〜
- IDEが好き(PhpStorm, Visual Studio, RubyMine等)
- アシアル株式会社所属
Scaffoldとは
- rails generateコマンドの1つ
- 特定のモデルのCRUD操作に必要な機能を生成する
- Rails Tutorialでは2章で使用
- Rails Tutorialでは触れていないが、scaffoldはHTMLによる画面だけでなく、JSONによるREST APIも自動生成する
- 本番運用に適したコードが生成されるわけではないので注意が必要
- コマンド一発で作れるのでプロトタイプには最適
モバイルバックエンドとは
- モバイルアプリのデータをサーバに保存する仕組み
- JSONを介したREST APIとして実装されることが多い
- Parse、ニフティクラウド mobile backendなどのサービスもある
- RESTfulなルーティングやフォーマットに応じたレンダリング等、Railsはモバイルバックエンドの開発に適した機能を持っている
今回作るアプリ
- シンプルなTodoアプリ
- モデルは1つだけ
- Task
- title: string
- done: boolean
- バックエンドはRailsで作ってHerokuに置く
- フロントエンドはRailsとは切り離してHTML+JavaScriptで作る
- ソースコードはgithubで公開中
バックエンドアプリの作成(1)
- Railsアプリを新規作成
$ rails new todo_backend
$ cd todo_backend
- Gemfile編集
# CORSサポートを追加する
gem 'rack-cors'
group :development, :test do
# sqlite3は開発・テスト環境でのみ使用する
gem 'sqlite3'
end
group :production do
# 本番環境ではPostgreSQLを使用する
gem 'pg'
# Railsの挙動をHerokuに最適化する
gem 'rails_12factor'
end
バックエンドアプリの作成(2)
- bundle install && rails generate scaffold
$ bundle install --without production
$ rails g scaffold Task title:string done:boolean
- CORS設定
- どこからでも参照可能
- 指定したHTTPメソッドによるリクエストを許可
# config/application.rb
config.middleware.insert_before ActionDispatch::Static, Rack::Cors do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :options, :patch, :delete]
end
end
寄り道:CORSとは
- CORS: Cross Origin Resource Sharing
- 原則:別ドメインに対するXmlHttpRequestは行えない
- セキュリティ上の理由
- 例外:CORSという仕様に沿ったHTTPヘッダーをサーバが返せば、別ドメインでもXmlHttpRequestを使うことができる
- 別ドメインに存在するサイトにWeb APIを提供するような場合には、CORSを使うのがオススメ
バックエンドアプリの作成(3)
- CSRFトークンが送られてこなかった場合の挙動を変更
- デフォルト:例外を投げる
- 変更後:セッションを無効にする
- 今回のアプリではログイン機能が無いのでセッションが無効になっても問題無い
# app/controllers/application_controller.rb
protect_from_forgency with: :null_session
- Herokuにデプロイ
$ git init
$ git add -A
$ git commit -m 'Init'
$ heroku create
$ git push heroku master
クライアントアプリの作成
DEMO
ご清聴ありがとう
ございました
Rails Scaffoldによるモバイルバックエンドプロトタイピング
By Ryo Utsunomiya
Rails Scaffoldによるモバイルバックエンドプロトタイピング
Ruby / Ruby on Rails ビギナーズ 第12回
- 2,406