NEGABARO Rails
Rails開発に必要な核心コンセプトをまとめた百科事典です。
🧱 Foundation
MVCパターン
Model-View-Controller — Railsのコアアーキテクチャ
Model(データ/ビジネスロジック)、View(画面表示)、Controller(リクエスト処理/仲介)でアプリケーションを分離する設計パターン。Railsの全てはMVCで動作します。
Convention over Configuration
Railsの核心哲学 — 規約が設定より優先
明示的な設定ファイルの代わりに命名規約に従えばRailsが自動接続する哲学。例: Postモデル → postsテーブル → PostsController → app/views/posts/
Railsディレクトリ構造
プロジェクトフォルダごとの役割と規約
Railsプロジェクトのディレクトリ構造はMVCパターンを物理的に反映します。app/、config/、db/、test/など各フォルダの役割が明確に定められています。
Rack & Middleware
Railsの下で動作するHTTP処理レイヤー
RackはRuby WebサーバーとフレームワークのインターフェースAIです。Middlewareはリクエスト/レスポンスを傍受処理する中間レイヤーで玉ねぎのように重なります。
🚦 Routing & Controllers
RESTful Routes
resources 1行で7つのルート自動生成
REST原則に従いリソース単位でURLを設計します。resources :posts 1行でindex、show、new、create、edit、update、destroyの7ルートが生成されます。
Params & Strong Parameters
リクエストパラメータアクセスと許可リスト管理
paramsハッシュでURLパラメータ、フォームデータ、JSONボディにアクセスします。Strong Parameters(require/permit)で許可フィールドだけホワイトリスト方式で通過させMass Assignment攻撃を防止します。
Before Action & Callbacks
アクション実行前後に共通ロジックを挿入する方法
before_action、after_action、around_actionでControllerアクション実行前後に共通ロジック(認証確認、データロードなど)を宣言的に挿入します。
Controller Concerns
複数のControllerで共有するモジュール
app/controllers/concerns/フォルダにモジュールを作成し複数のControllerでincludeしてコード再利用します。認証、ページネーション、検索等の共通機能に活用。
🗄️ Models & Database
ActiveRecord
ORM — オブジェクトでデータベースを操作
Object-Relational Mapping。RubyオブジェクトとDBテーブルを自動マッピングし、SQLを直接書かずにRubyメソッドでデータをCRUDします。
Migrations(マイグレーション)
コードでデータベーススキーマをバージョン管理
Rubyコードでテーブル作成/修正/削除を定義し、時間順に実行してスキーマをバージョン管理します。Gitのように変更履歴を追跡しロールバックできます。
Associations(関連)
has_many、belongs_to — モデル間の関係設定
belongs_to、has_many、has_one、has_many :through等でモデル間関係を宣言的に定義します。外部キー規約に従えば自動接続されます。
Validations(バリデーション)
Modelレベルでデータ整合性を保証
validatesマクロでモデルにバリデーションを宣言します。presence、uniqueness、length、format等の検証をDB保存前に実行します。
Model Callbacks
保存/削除前後に自動実行されるフック
before_save、after_create、before_destroy等のモデルライフサイクルイベントにフックして特定時点で自動的にロジックを実行します。
Scopes & Query Interface
再利用可能なクエリに名前を付けて管理
scopeマクロでよく使うクエリ条件に名前を付けて再利用します。チェーン可能で複雑なクエリも読みやすく書けます。
N+1クエリ問題
パフォーマンスの敵 — includesで解決する方法
関連データをループ内で個別取得すると1(リスト)+N(各項目の関連)回のクエリが発生します。includes/preload/eager_loadで2回のクエリに削減できます。
🎨 Views & Frontend
ERB & Partials
HTML内にRubyを挿入し再利用可能な部品に分離
ERB(Embedded Ruby)はHTML内にRubyコードを挿入するテンプレートエンジンです。Partialは再利用可能なビュー部品で反復を減らしコードを整理します。
Layouts & yield
ページの共通骨格をレイアウトで管理
application.html.erbレイアウトに共通HTML構造(head、nav、footer)を定義し、yieldで各ページ固有の内容を挿入。
Form Helpers
form_withで安全で便利なフォーム作成
form_withヘルパーでCSRFトークン、HTTPメソッド、パラメータ命名を自動処理。モデルオブジェクトを渡せばcreate/update URLも自動決定。
Turbo & Hotwire
JavaScriptなしでSPAのようなUX実現
Hotwire(HTML Over The Wire)はサーバーからHTMLを送りTurboがページを部分更新する方式。JavaScriptを最小化しつつSPAレベルのUXを提供。
Stimulus
HTML中心の軽量JavaScriptフレームワーク
HTMLにdata-controller、data-action、data-target属性を追加してJavaScript動作を接続。HTMLが主導し、JSは「調味料」的役割。
🔐 Authentication & Security
Devise
Rails標準認証システム
会員登録、ログイン、ログアウト、パスワードリセット、メール認証、OAuthを提供する認証gem。current_user、authenticate_user!等のヘルパーを自動生成。
CSRF保護
Cross-Site Request Forgery攻撃の自動防御
Railsは全てのnon-GETリクエストにCSRFトークンを自動挿入/検証し偽造リクエストを防止。protect_from_forgeryがデフォルト有効。
Strong Parameters
Mass Assignment攻撃防止
Controllerでparams.require(:model).permit(:field1, :field2)で許可フィールドを明示的に宣言。許可されないフィールドは自動無視。
テナント分離クエリパターン — Model.whereではなく組織スコープから始める
マルチテナントRailsアプリでデータ漏洩を構造的に防ぐクエリ記述法
マルチテナントアプリでContract::Asset.joins(:contract).where(contracts: { organization_id: ... })のようなグローバルクエリはID1つ間違えると他組織のデータが出る。organization.contractsから始めればクエリ構造自体がテナント分離を保証する。
🧪 Testing
RSpec
BDD(振る舞い駆動開発)テストフレームワーク
describe/context/itブロックでテストを自然言語のように記述。expect(実際値).to eq(期待値)文法で検証し、Railsの全レイヤーをテスト。
FactoryBot
テストデータをクリーンに生成
Fixtureの代わりにFactoryパターンでテストデータを動的に生成。create(:user)、build(:post)等の簡潔な文法で必要なデータを即座に作成。
Request Specs
HTTPリクエスト/レスポンスをテストする統合テスト
get、post、patch、deleteメソッドで実際のHTTPリクエストをシミュレートし、応答ステータスコード、リダイレクト、レンダリング内容を検証。
🚀 Advanced
Background Jobs
Active Job + Sidekiq — 重い処理を非同期で実行
メール送信、ファイル処理、外部API呼出等の時間のかかる処理をバックグラウンドキューで非同期処理。ユーザーは即座にレスポンスを受け取る。
Sidekiq: デプロイと非同期ジョブの落とし穴
SIGTERM/SIGKILL — 長いSidekiqジョブがデプロイの度に死ぬ理由
非同期ジョブはデプロイのタイミングによって完全に消失したり、statusが永遠に「実行中」のまま固着することがある。SIGTERM(優雅な終了)とSIGKILL(強制終了)の違い、Sidekiqのgraceful shutdownの動作、OSSの限界を理解すれば、なぜこの種の事故が起きるかが見えてくる。
Action Cable
Rails内蔵WebSocket — リアルタイム機能実現
Rails内蔵のWebSocketフレームワーク。サーバーからクライアントへリアルタイムデータをプッシュ。チャット、通知、リアルタイム更新に活用。
Caching(キャッシュ)
繰り返し演算を減らしレスポンス速度を劇的に向上
Fragment Caching、Russian Doll Caching、Low-Level Caching等でDBクエリとビューレンダリング結果をキャッシュしレスポンス速度を数十倍向上。
Asset Pipeline & Vite
JavaScript、CSS、画像等のフロントエンドアセット管理
Sprockets(従来)、Webpacker(廃止)、Vite(最新)でJavaScript/CSS/画像をバンドルし、フィンガープリンティングでキャッシュ最適化。
Kamalデプロイ
Rails公式デプロイツール — Dockerベースのゼロダウンタイムデプロイ
DHHが作ったRails公式デプロイツール。DockerコンテナでどんなVPSにもデプロイ可能。DigitalOcean等の小規模サーバーではローカルビルド後レジストリにpushする方式を推奨。
background-removal-js — ブラウザでAI背景除去が動く原理
IS-Netモデル + ONNX Runtime Web + WebGPU、サーバーなしでクライアント側セグメンテーション
imgly/background-removal-jsはブラウザでサーバーなしにAIで画像背景を除去する。IS-Net(U-Net系)モデルをONNX Runtime Webで実行し、WebGPU加速も対応。画像を1024×1024にリサイズ→モデルがアルファマスク出力→元画像に適用する構造。
📐 My Convention
📖 Rails Open Source コード読解
Campfire(37signals)
DHHスタイルの教科書 — Rails基本機能だけで作ったリアルタイムチャットアプリ
37signalsがONCEブランドでリリースしたリアルタイムチャットアプリ。Deviseなしでhas_secure_password、RedisなしでSolidシリーズ、カスタムアクションなしでCRUDのみで実装されたDHHスタイルの教科書。
Writebook(37signals)
ONCEブランドの出版ツール — delegated_typeと編集履歴管理の教科書
37signalsのONCEブランド出版アプリ。delegated_typeで多態コンテンツ(Page/Section/Picture)を管理し、Editレコードで編集履歴を追跡。Campfireと同じ認証パターンだが、アクセス制御(Access)と出版(Publication)のような独自パターンも見られる。
Solid Queue(Rails)
Redisなし DBだけで — Rails 8デフォルトバックグラウンドジョブシステム
Rails 8のデフォルトActiveJobバックエンド。Redis/Sidekiqの代わりにデータベース(PostgreSQL/MySQL/SQLite)のみでバックグラウンドジョブを処理。FOR UPDATE SKIP LOCKEDで非ブロッキングポーリングを実装。
Solid Cache(Rails)
Redisの代わりにSSD — データベース基盤Railsキャッシュストア
Rails 8のデフォルトキャッシュストア。Redis/Memcachedの代わりにデータベース(SSD)を活用してはるかに大きなキャッシュを維持。書き込み基盤の確率的期限切れとMaglev一貫ハッシュでシャーディングをサポート。
🏗 Infra
Rails 8 + SQLite — プロダクションで使える理由
PostgreSQLなしでもいい時代が来た — 37signalsが証明したSQLiteプロダクション運用
Rails 8はSQLiteをプロダクションデータベースとして公式サポート。Solid Queue(バックグラウンドジョブ)、Solid Cache(キャッシュ)、Solid Cable(WebSocket)全てSQLiteで動作。37signals(Basecamp)が実プロダクションで検証済み。
SQLite WALモード — メリットとデメリット
Write-Ahead LoggingがSQLiteの同時実行性問題をどう解決するか
WAL(Write-Ahead Logging)はSQLiteのデフォルトDELETEジャーナルモードを置き換え、readerとwriterの同時アクセスを可能にするモードだ。Rails 8でデフォルト有効化され、Solid Queueのような頻繁な小規模トランザクション環境で特に効果的。
初期Railsアプリデプロイ SaaS比較
Fly.io、Render、DigitalOcean、Fargate、Railway、Herokuなど実践比較
初期Railsプロジェクトをデプロイする際にどのPaaS/SaaSを選ぶべきかの実践ガイド。無料枠、Docker対応、PostgreSQL/SQLite互換性、料金構造、スケーリングオプションで比較。