# 前提
一つ前の記事で ruby 3.2.2 が動く状態になっている
結論
Rail で最速で API を作るためには
このフローが必要。
- gem で bundler と rails をインストールする。
- rails new の --api で API 用のプロジェクトを作成する。
- rails generate scaffold で テーブル定義を引数にし、 MVC と migration 生成ファイルを作成する
- rails db:migrate で migration ファイルでテーブルを作成する。sqlite に。
- db/seeds.rb ファイルを作成し、テーブル定義に則って初期データを書く
- rails db:seed で seed ファイルでテーブルにデータを挿入する。
- routes.rb ファイルにルーティングを書く。
- rails serevr でアプリを起動する
- curl でルートに向けて打ち、レスポンスを確認する。
gem とは?
gem とは、Ruby のパッケージマネージャー。
Ruby を入れた際についてくる。
これで rails などをインストールする。
bundle をインストール
gem install bundler Fetching bundler-2.4.12.gem Successfully installed bundler-2.4.12
gem で bundler を入れる。
これにより、Gemfile を作成できる。
Gemfile は ruby の依存を一括管理できる。
npm の package.json のように。
git clone でプロジェクトを入れてすぐに、
bundle install でライブラリを全て入れられる。
npm install と同じように。
Gemfile の例
一例として rails を入れるとこのようになる
source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby "3.2.2" # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main" gem "rails", "~> 7.0.4", ">= 7.0.4.3" # Use sqlite3 as the database for Active Record gem "sqlite3", "~> 1.4" # Use the Puma web server [https://github.com/puma/puma] gem "puma", "~> 5.0"
rails をインストール
gem install rails
rails のインストールを始めると
Done installing documentation for zeitwerk, thor, method_source, concurrent-ruby, tzinfo, i18n, activ esupport, nokogiri, crass, loofah, rails-html-sanitizer, rails-dom-testing, rack, rack-test, erubi, b uilder, actionview, actionpack, railties, mini_mime, marcel, activemodel, activerecord, globalid, act ivejob, activestorage, actiontext, mail, actionmailer, actionmailbox, websocket-extensions, websocket -driver, nio4r, actioncable, rails after 42 seconds 35 gems installed
rails の他に
rails-html, i18n, rails-html-santitizer,
他様々な依存性 35 つがインストールされる。
rails プロジェクトを作成。API モードで。
rails new bank_transactions_api --api -T create create README.md create Rakefile create .ruby-version create config.ru create .gitignore create .gitattributes create Gemfile run git init from "."
API モードでテストをスキップしてプロジェクトを作成する。
Rakefile や Gemfile が作られる。
git init までしてくれる。
create app/views/layouts/application.html.erb create app/controllers/concerns/.keep create app/models/concerns/.keep create bin create bin/rails
models, view, controllers,
これらを生成する。
create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb
リリース用の環境ファイルまで作っている。
API モードとは?
- render のレスポンスが JSON になる a. config/application.rb に設定が
- MVC の View がほぼできなくなる
- Controller の提供機能が API 系のみに最適化される。
こうやってスマートに生成できるオプション。
rails generate で MVC と migration ファイルを作成する
- 銀行取引テーブル
- アカウントID
- 金額量
- 説明
このテーブルとカラムの構成で、MVC と migration ファイルを作成する。
rails generate scaffold \ BankTransaction \ account_number:string \ amount:decimal \ description:string
rails の generate scaffold では
- MVC
- テスト
- ルーティング
- マイグレーションファイル(初期テーブルの作成クエリ)
これらを生成できる。
scaffold は生成ファイルを増やすオプション。
invoke active_record create db/migrate/20230423145010_create_bank_transactions.rb create app/models/bank_transaction.rb invoke resource_route route resources :bank_transactions invoke scaffold_controller create app/controllers/bank_transactions_controller.rb invoke resource_route
このようにログが出て
class CreateBankTransactions < ActiveRecord::Migration[7.0] def change create_table :bank_transactions do |t| t.string :account_number t.decimal :amount t.string :description t.timestamps end end end
db/migrate に上記のファイルが作成される。
開いてみると上記のようにテーブルを作るコードが記述されている。
rails db:migrate でマイグレーションクエリを実行する
rails db:migrate == 20230423145010 CreateBankTransactions: migrating =========================== -- create_table(:bank_transactions) -> 0.0022s == 20230423145010 CreateBankTransactions: migrated (0.0022s) ==================
これでテーブルが作成された。
rails console Loading development environment (Rails 7.0.4.3) irb(main):001:0> ActiveRecord::Base.connection.tables => ["schema_migrations", "ar_internal_metadata", "bank_transactions"]
テーブル一覧に bank_transactions が作成されている。
rails server で html を出せるのを確認
Rails.application.routes.draw do resources :bank_transactions, only: [:index, :show] end
これを route.rb に書くと、
index と detail で rails アイコンが見えるようになる。
レコードが JSON で返って来るようにする
seed で仮のデータを挿入する
BankTransaction.create!( account_number: "1234567890", amount: 1000.0, description: "Sample transaction" )
一つだけレコードを挿入する。
db/seeds.rb ファイルに書く。
rails db:seed
実行してレスポンスはない。
API に curl してテストする
seed でデータを入れた。
rails server で起動して curl する。
curl localhost:3000/bank_transactions/ | jq .
すると
[ { "id": 1, "account_number": "1234567890", "amount": "1000.0", "description": "Sample transaction", "created_at": "2023-04-23T15:20:55.616Z", "updated_at": "2023-04-23T15:20:55.616Z" } ]
しっかりとレスポンスが帰ってくる。
クエリも動いている。
おまけ。コントローラー。
これは generate した時に創られている。
class BankTransactionsController < ApplicationController def index @bank_transactions = BankTransaction.all render json: @bank_transactions end end
テーブルから持ってきて、json にして render する。
At Mark をつけることで rails は props みたいにパスできる。
Top comments (0)