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)