# 前提
一つ前の記事で 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)