Rails 7の標準scaffoldを拡張し、実用的なWebアプリケーション開発に必要な機能を追加したアプリケーションテンプレートです。
- 一覧表示をテーブル化
- Ransack による検索・ソート
- Pagy によるページング
- TomSelect による select 要素の選択肢絞り込み
- Bootstrap5 によるスタイル付け
- i18n 対応
VSCode Container 拡張機能を使うか、 Docker Compose で開発環境を立ち上げます。 (VSCode Container 拡張機能による起動の説明は省略)
※ 本リポジトリの docker-compose ファイルでは、 PostgreSQL を利用する設定となっています。必要に応じて変更してください。
docker compose up以下コマンドで、 ruby, nodejs, yarn の環境構築済みのコンテナに入れます。
docker compose exec app bashrails new コマンドで、プロジェクトを生成します。
rails new app --css=bootstrap -m ./apptemplate.rb -d postgresql--css=bootstrap: 必須 本テンプレートでは、 Bootstrap を利用しているため、必ず指定してください-m apptemplate.rb: 必須 本テンプレートを適用するためのスクリプト-d postgresql: 使用するデータベース。プロジェクトで使用するデータベースに応じて修正してください
開発で使用するデータベースの設定は、 config/database.yml 内の development セクション内の項目に記載します。
必要に応じて、 production など、別環境の設定も行ってください。
development:
<<: *default
host: postgres
database: public
username: admin
password: password./bin/rails generate scaffold Role name:string
./bin/rails generate scaffold Account name:string role:belongs_to expiration_date:dateひとつのテーブルに対して、複数カラムで foreign key を設定している場合、モデルの belongs_to を適切に設定してください。
例: app/models/present_history.rb を編集
class PresentHistory < ApplicationRecord
def self.ransackable_attributes(auth_object = nil)
["id", "name", "from_account_id", "to_account_id"]
end
belongs_to :from_account, class_name: 'Account' # この行の、 `, class_name: 'Account' を追加
belongs_to :to_account, class_name: 'Account' # この行の、 `, class_name: 'Account' を追加
end制約があれば、 db/migrate/*_create_* のファイルを修正してください。
以下コマンドで、マイグレーションを実行してください。
rails db:migrateconfig/locales に、各言語毎の辞書ファイルが格納されているので、必要に応じて文字列の修正をしてください。
モデル名や、モデルの属性名を日本語化する場合、 config/locales/ja.yml へ、以下のように activerecord/models, activerecord/attributes 以下に文字列の定義を追加してください。
例: config/locales/ja.yml を編集
...(snip)
ja:
...(snip)
activerecord:
models:
account: アカウント
attributes:
account:
name: 名前
role_id: 権限
expiration_date: 期限
created_at: 作成日
updated_at: 更新日以下コマンドで、開発用にサーバーを起動します。
BINDING=0.0.0.0 bin/devScaffold の例の通り、Role と Account を作成したとして話を進めます。
http://localhost:3000/accounts にアクセスすると、次の図のように、検索フォーム付きの一覧画面が表示されます。

気に入らない挙動があれば、生成されたコードを修正してください。
Copyright (C) 2025 mikoto2000
This software is released under the MIT License, see LICENSE
このソフトウェアは MIT ライセンスの下で公開されています。 LICENSE を参照してください。
mikoto2000 mikoto2000@gmail.com
- : i18n
- : Stimulus Controller導入によるJavaScript構造化
-
追加したライブラリなど
-
基本的なところ
-
一覧表示をテーブルにした
-
ページネーション
-
検索フォーム
- Ransackで日付検索を期間指定する方法 – 地方でリモートワーク
- [Rails]Ransackでセレクトボックスを使用する方法 - Qiita
- form_forにclass名をつける - Qiita
- Form controls · Bootstrap v5.0
- JavaScriptのセレクタ取得で、複数要素を否定する - 空想家 Developers Blog
- Accordion(アコーディオン) · Bootstrap v5.0
- Select2の代替にTom Selectを使ってみる - Qiita
- 履歴 API の操作 - Web API | MDN
- 検索のTurbo Frames化 - チュートリアル2 Turboで管理画面をSPA風にする|猫でもわかるHotwire入門 Turbo編
- ruby on rails - Adding hidden field in ransack - Stack Overflow
-
Turbo の細かいところ
-
テンプレート/ジェネレーター系
- Rails アプリケーションのテンプレート - Railsガイド
- Rails ジェネレータとテンプレート入門 - Railsガイド
- RailsのScaffoldのテンプレートを変更する方法 - Qiita
- .html.erbのコメントアウトの仕方 - Qiita
- モデルのアソシエーション情報を調べる - Qiita
- ruby on rails - How to pass class_name Option to Generator? - Stack Overflow
- RailsでモデルのインスタンスからURLのパスを取得する仕組み
- Railsで「複数カラム」かつ「共通テーブル」にアソシエーション(1対多・多対多・自己結合) - Qiita
-
i18n
-
その他こまごました Tips
