DEV Community

kaede
kaede

Posted on • Edited on

Rails 基礎 Part 01 -- rails で API を作って curl で確認する。

# 前提

一つ前の記事で ruby 3.2.2 が動く状態になっている


結論

Rail で最速で API を作るためには
このフローが必要。

  1. gem で bundler と rails をインストールする。
  2. rails new の --api で API 用のプロジェクトを作成する。
  3. rails generate scaffold で テーブル定義を引数にし、 MVC と migration 生成ファイルを作成する
  4. rails db:migrate で migration ファイルでテーブルを作成する。sqlite に。
  5. db/seeds.rb ファイルを作成し、テーブル定義に則って初期データを書く
  6. rails db:seed で seed ファイルでテーブルにデータを挿入する。
  7. routes.rb ファイルにルーティングを書く。
  8. rails serevr でアプリを起動する
  9. curl でルートに向けて打ち、レスポンスを確認する。

gem とは?

gem とは、Ruby のパッケージマネージャー。
Ruby を入れた際についてくる。

これで rails などをインストールする。


bundle をインストール

gem install bundler

Fetching bundler-2.4.12.gem
Successfully installed bundler-2.4.12
Enter fullscreen mode Exit fullscreen mode

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"    
Enter fullscreen mode Exit fullscreen mode

rails をインストール

gem install rails
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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 "."  
Enter fullscreen mode Exit fullscreen mode

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 
Enter fullscreen mode Exit fullscreen mode

models, view, controllers,
これらを生成する。

      create  config/environments                                                                    
      create  config/environments/development.rb                                                     
      create  config/environments/production.rb                                                      
      create  config/environments/test.rb      
Enter fullscreen mode Exit fullscreen mode

リリース用の環境ファイルまで作っている。


API モードとは?

  1. render のレスポンスが JSON になる a. config/application.rb に設定が
  2. MVC の View がほぼできなくなる
  3. Controller の提供機能が API 系のみに最適化される。

こうやってスマートに生成できるオプション。


rails generate で MVC と migration ファイルを作成する

  • 銀行取引テーブル
    1. アカウントID
    2. 金額量
    3. 説明

このテーブルとカラムの構成で、MVC と migration ファイルを作成する。

rails generate scaffold \
BankTransaction \
account_number:string \
amount:decimal \
description:string
Enter fullscreen mode Exit fullscreen mode

rails の generate scaffold では

  1. MVC
  2. テスト
  3. ルーティング
  4. マイグレーションファイル(初期テーブルの作成クエリ)

これらを生成できる。
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
Enter fullscreen mode Exit fullscreen mode

このようにログが出て

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
Enter fullscreen mode Exit fullscreen mode

db/migrate に上記のファイルが作成される。
開いてみると上記のようにテーブルを作るコードが記述されている。


rails db:migrate でマイグレーションクエリを実行する

rails db:migrate
== 20230423145010 CreateBankTransactions: migrating ===========================
-- create_table(:bank_transactions)
   -> 0.0022s
== 20230423145010 CreateBankTransactions: migrated (0.0022s) ==================
Enter fullscreen mode Exit fullscreen mode

これでテーブルが作成された。

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"]
Enter fullscreen mode Exit fullscreen mode

テーブル一覧に bank_transactions が作成されている。


rails server で html を出せるのを確認

Rails.application.routes.draw do
  resources :bank_transactions, only: [:index, :show]
end
Enter fullscreen mode Exit fullscreen mode

これを route.rb に書くと、
index と detail で rails アイコンが見えるようになる。

Image description


レコードが JSON で返って来るようにする

seed で仮のデータを挿入する

BankTransaction.create!(
  account_number: "1234567890",
  amount: 1000.0,
  description: "Sample transaction"
)
Enter fullscreen mode Exit fullscreen mode

一つだけレコードを挿入する。
db/seeds.rb ファイルに書く。

rails db:seed

Enter fullscreen mode Exit fullscreen mode

実行してレスポンスはない。


API に curl してテストする

seed でデータを入れた。
rails server で起動して curl する。

curl localhost:3000/bank_transactions/ | jq .
Enter fullscreen mode Exit fullscreen mode

すると

[
  {
    "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"
  }
]
Enter fullscreen mode Exit fullscreen mode

しっかりとレスポンスが帰ってくる。

Image description

クエリも動いている。


おまけ。コントローラー。

これは generate した時に創られている。

class BankTransactionsController < ApplicationController
  def index
    @bank_transactions = BankTransaction.all
    render json: @bank_transactions
  end
end
Enter fullscreen mode Exit fullscreen mode

テーブルから持ってきて、json にして render する。
At Mark をつけることで rails は props みたいにパスできる。


Top comments (0)