NEGABARO Rails

Rails開発に必要な核心コンセプトをまとめた百科事典です。

🗄️ 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回のクエリに削減できます。

🚀 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にリサイズ→モデルがアルファマスク出力→元画像に適用する構造。

📖 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一貫ハッシュでシャーディングをサポート。