343 Views
November 19, 24
スライド概要
最近の機能を知って開発者体験を考える
2024-11-19
https://github.com/nishimotz/hello-rails
@nishimotz / @24motz
Shuaruta Inc. ウェブアクセシビリティ基盤委員会 (WAIC) NVDA日本語版 すごい広島 with Python
Ruby on Rails 6,7,8 最近の機能を知って開発者体験を考える 2024-11-19 https://github.com/nishimotz/hello-rails
Rails 6の新機能とテスト戦略 • 機能 • Action Text: リッチテキスト編集が簡単に • テキストエリアのテスト追加 • Action Mailbox: メールの受信処理機能 • パラレルテスト(Parallel Testing)の導入 • テスト戦略 • Action Text:ビューのテストでWYSIWYGエディタの動作を確認 • Action Mailbox:受信メールのテストシナリオを追加 • パラレルテスト:複数のテストを同時に実行 • CI/CDのスピードを最適化
Rails 7の新機能とテスト戦略 • 機能 • Hotwire(Turbo & Stimulus) • ページリロード不要のインタラクティブなUI • Async Query:非同期クエリのサポート • 複合プライマリキーのサポート • テスト戦略 • Hotwire:エンドツーエンド(E2E)テストでのUI反応確認を強化 • Async Query:非同期処理が関わるテストの信頼性を高める • 複合プライマリキー:複雑なデータ構造へのテストケースを追加
Rails 8の新機能とテスト戦略 • 機能 • より強力なTypeScriptのサポート:TypeScriptを導入したテスト • RailsファーストのAPIモードの進化:API向けのテストを強化 • テスト戦略 • TypeScriptサポート • 型安全なテストが可能に、フロントエンドとバックエンドの統合テストを増やす • APIモードの進化 • APIエンドポイントのバリデーションやレスポンステストを強化
Dev Container • Rails 7.2 から: rails new myapp --devcontainer
rails-new • https://github.com/rails/rails-new • Docker をインストールする • バイナリをダウンロードする • tar xvfz する • rails-new バイナリにパスを通す • 例えば ~/bin/rails-new に置く
Usage: rails-new [OPTIONS] <ARGS>... rails-new [OPTIONS] [ARGS]... <COMMAND> Commands: rails-help Prints `rails new --help` help Print this message or the help of the given subcommand(s) Arguments: <ARGS>... arguments passed to `rails new` Options: -u, --ruby-version <RUBY_VERSION> [default: 3.3.4] -r, --rails-version <RAILS_VERSION> [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 .
DevContainerを使うには • GitHub Codespaces • 無料プランでは限られた時間のみ使用可能 • Visual Studio Code とその拡張機能 "Dev Containers” • Rails ガイドの説明はこちら
コンテナーで再度開く
Ruby LSP の警告を無視する
Docker Desktop
新しいターミナル • rails –version • bin/rails server • Chrome で http://127.0.0.1:3000/
git はどこでどう使うのか
フォルダーをローカルで再度開く • ターミナルで見ている状態になる • こちらでコミットする
開発コンテナーに戻る • こちらからソース管理してもいい?
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
開発コンテナーからgit • ローカルに戻す必要がない
デバッグ環境を試す • bundle add debug • 実行とデバッグ • launch.json ファイルを作成
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Rails",
"type": "rdbg",
"request": "launch",
"command": "bin/rails",
"script": "s",
"args": [
"-b",
"0.0.0.0"
]
},
{
"name": "Debug Minitest with current file",
"type": "rdbg",
"request": "launch",
"command": "ruby",
"script": "${file}"
}
]
}
debuggerコマンドで止まる • macOS から仮想マシンの ruby をデバッグできている
ブレークポイントでも止まる
Debug Minitest with current file • articles_controller_test.rb • the truth 有効化 • ファイルを開いた状態で実行
gh repo create すると actions が落ちる • db/schema.rb doesn't exist yet
ターミナルで rails db:migrate
Actions が緑になる
ci.yml の内容 • scan_ruby: brakeman でRuby コードの静的解析を行う • SQLインジェクション • マスアサインメント • セッション固定 • scan_js: JavaScript 依存関係のセキュリティ脆弱性 • XSS, CSRF, インジェクション攻撃, 認証認可 • 依存関係 • lint: RuboCop を実行 • コードスタイル、未使用変数、メソッド複雑度、不要な空行
Kamalでデプロイにも活用 • DevContainer 内に Kamal をインストール • Docker がインストールされているサーバを用意 • コンテナ内のターミナルで kamal deploy を実行 • docker-in-docker (DinD) • GitHub Actions など CI/CD で推奨 • セキュリティ的に有利 • docker-outside-of-docker (DoD) • macOS, Windows, Linux など一般的な開発環境で推奨 • 性能的に有利 • SSH 経由で Kamal がサーバに接続してデプロイ