---
title: Ruby on Rails 6,7,8
tags: 
author: [Takuya Nishimoto](https://convert.docswell.com/user/nishimotz)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GE8RK935JD.jpg?width=480
description: 最近の機能を知って開発者体験を考える 2024-11-19 https://github.com/nishimotz/hello-rails @nishimotz / @24motz
published: November 19, 24
canonical: https://convert.docswell.com/s/nishimotz/KJ481V-2024-11-19-172421
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GE8RK935JD.jpg)

Ruby on Rails 6,7,8
最近の機能を知って開発者体験を考える
2024-11-19
https://github.com/nishimotz/hello-rails


# Page. 2

![Page Image](https://bcdn.docswell.com/page/LELKZWV3JR.jpg)

Rails 6の新機能とテスト戦略
• 機能
• Action Text: リッチテキスト編集が簡単に
• テキストエリアのテスト追加
• Action Mailbox: メールの受信処理機能
• パラレルテスト（Parallel Testing）の導入
• テスト戦略
• Action Text：ビューのテストでWYSIWYGエディタの動作を確認
• Action Mailbox：受信メールのテストシナリオを追加
• パラレルテスト：複数のテストを同時に実行
• CI/CDのスピードを最適化


# Page. 3

![Page Image](https://bcdn.docswell.com/page/4JM2V9GMJW.jpg)

Rails 7の新機能とテスト戦略
• 機能
• Hotwire（Turbo &amp; Stimulus）
• ページリロード不要のインタラクティブなUI
• Async Query：非同期クエリのサポート
• 複合プライマリキーのサポート
• テスト戦略
• Hotwire：エンドツーエンド（E2E）テストでのUI反応確認を強化
• Async Query：非同期処理が関わるテストの信頼性を高める
• 複合プライマリキー：複雑なデータ構造へのテストケースを追加


# Page. 4

![Page Image](https://bcdn.docswell.com/page/PJRM2GZLE9.jpg)

Rails 8の新機能とテスト戦略
• 機能
• より強力なTypeScriptのサポート：TypeScriptを導入したテスト
• RailsファーストのAPIモードの進化：API向けのテストを強化
• テスト戦略
• TypeScriptサポート
• 型安全なテストが可能に、フロントエンドとバックエンドの統合テストを増やす
• APIモードの進化
• APIエンドポイントのバリデーションやレスポンステストを強化


# Page. 5

![Page Image](https://bcdn.docswell.com/page/PEXVDX167X.jpg)

Dev Container
• Rails 7.2 から: rails new myapp --devcontainer


# Page. 6

![Page Image](https://bcdn.docswell.com/page/3EKQXW2GED.jpg)

rails-new
• https://github.com/rails/rails-new
• Docker をインストールする
• バイナリをダウンロードする
• tar xvfz する
• rails-new バイナリにパスを通す
• 例えば ~/bin/rails-new に置く


# Page. 7

![Page Image](https://bcdn.docswell.com/page/L73P5145E5.jpg)

Usage: rails-new [OPTIONS] &lt;ARGS&gt;...
rails-new [OPTIONS] [ARGS]... &lt;COMMAND&gt;
Commands:
rails-help Prints `rails new --help`
help
Print this message or the help of the given subcommand(s)
Arguments:
&lt;ARGS&gt;... arguments passed to `rails new`
Options:
-u, --ruby-version &lt;RUBY_VERSION&gt; [default: 3.3.4]
-r, --rails-version &lt;RAILS_VERSION&gt; [default: 7.2.0]
-h, --help
Print help
-V, --version
Print version
% rails-new -u 3.3.6 -r 8.0.0 hello-rails --devcontainer
% cd hello-rails
% code .


# Page. 8

![Page Image](https://bcdn.docswell.com/page/87DLDXQYEG.jpg)

DevContainerを使うには
• GitHub Codespaces
• 無料プランでは限られた時間のみ使用可能
• Visual Studio Code とその拡張機能 &quot;Dev Containers”
• Rails ガイドの説明はこちら


# Page. 9

![Page Image](https://bcdn.docswell.com/page/VJP2XPL2J8.jpg)

コンテナーで再度開く


# Page. 10

![Page Image](https://bcdn.docswell.com/page/2EVDL2QXEQ.jpg)



# Page. 11

![Page Image](https://bcdn.docswell.com/page/57GYXRWR7L.jpg)

Ruby LSP の警告を無視する


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4EQM8V3YJP.jpg)

Docker Desktop


# Page. 13

![Page Image](https://bcdn.docswell.com/page/KJ4V2M1ZE1.jpg)

新しいターミナル
• rails –version
• bin/rails server
• Chrome で http://127.0.0.1:3000/


# Page. 14

![Page Image](https://bcdn.docswell.com/page/LE13M8GDJG.jpg)

git はどこでどう使うのか


# Page. 15

![Page Image](https://bcdn.docswell.com/page/GEWP3ZK8J2.jpg)

フォルダーをローカルで再度開く
• ターミナルで見ている状態になる
• こちらでコミットする


# Page. 16

![Page Image](https://bcdn.docswell.com/page/47ZKV1Z973.jpg)

開発コンテナーに戻る
• こちらからソース管理してもいい？


# Page. 17

![Page Image](https://bcdn.docswell.com/page/YJ6Q5LZDJV.jpg)

Hello と表示する
• config/routes.rb
• bin/rails generate controller Articles index --skip-routes
• app/views/articles/index.html.erb
• http://127.0.0.1:3000/articles


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GJ5RY1W874.jpg)

開発コンテナーからgit
• ローカルに戻す必要がない


# Page. 19

![Page Image](https://bcdn.docswell.com/page/9E2DG1QVER.jpg)

デバッグ環境を試す
• bundle add debug
• 実行とデバッグ
• launch.json ファイルを作成


# Page. 20

![Page Image](https://bcdn.docswell.com/page/D7Y2VZWQ7M.jpg)



# Page. 21

![Page Image](https://bcdn.docswell.com/page/VEN8M392J8.jpg)

{
&quot;version&quot;: &quot;0.2.0&quot;,
&quot;configurations&quot;: [
{
&quot;name&quot;: &quot;Debug Rails&quot;,
&quot;type&quot;: &quot;rdbg&quot;,
&quot;request&quot;: &quot;launch&quot;,
&quot;command&quot;: &quot;bin/rails&quot;,
&quot;script&quot;: &quot;s&quot;,
&quot;args&quot;: [
&quot;-b&quot;,
&quot;0.0.0.0&quot;
]
},
{
&quot;name&quot;: &quot;Debug Minitest with current file&quot;,
&quot;type&quot;: &quot;rdbg&quot;,
&quot;request&quot;: &quot;launch&quot;,
&quot;command&quot;: &quot;ruby&quot;,
&quot;script&quot;: &quot;${file}&quot;
}
]
}


# Page. 22

![Page Image](https://bcdn.docswell.com/page/Y79KN92D73.jpg)

debuggerコマンドで止まる
• macOS から仮想マシンの ruby をデバッグできている


# Page. 23

![Page Image](https://bcdn.docswell.com/page/G78RK955ED.jpg)

ブレークポイントでも止まる


# Page. 24

![Page Image](https://bcdn.docswell.com/page/L7LKZWY3ER.jpg)

Debug Minitest with current file
• articles_controller_test.rb
• the truth 有効化
• ファイルを開いた状態で実行


# Page. 25

![Page Image](https://bcdn.docswell.com/page/4EM2V9NMEW.jpg)



# Page. 26

![Page Image](https://bcdn.docswell.com/page/PERM2GDL79.jpg)



# Page. 27

![Page Image](https://bcdn.docswell.com/page/P7XVDX26JX.jpg)

gh repo create すると actions が落ちる
• db/schema.rb doesn&#039;t exist yet


# Page. 28

![Page Image](https://bcdn.docswell.com/page/37KQXWMG7D.jpg)

ターミナルで rails db:migrate


# Page. 29

![Page Image](https://bcdn.docswell.com/page/LJ3P51Y575.jpg)

Actions が緑になる


# Page. 30

![Page Image](https://bcdn.docswell.com/page/8JDLDX5Y7G.jpg)

ci.yml の内容
• scan_ruby: brakeman でRuby コードの静的解析を行う
• SQLインジェクション
• マスアサインメント
• セッション固定
• scan_js: JavaScript 依存関係のセキュリティ脆弱性
• XSS, CSRF, インジェクション攻撃, 認証認可
• 依存関係
• lint: RuboCop を実行
• コードスタイル、未使用変数、メソッド複雑度、不要な空行


# Page. 31

![Page Image](https://bcdn.docswell.com/page/VEP2XPG2E8.jpg)

Kamalでデプロイにも活用
• DevContainer 内に Kamal をインストール
• Docker がインストールされているサーバを用意
• コンテナ内のターミナルで kamal deploy を実行
• docker-in-docker (DinD)
• GitHub Actions など CI/CD で推奨
• セキュリティ的に有利
• docker-outside-of-docker (DoD)
• macOS, Windows, Linux など一般的な開発環境で推奨
• 性能的に有利
• SSH 経由で Kamal がサーバに接続してデプロイ


