概要
Brut はRuby向けのシンプルかつ高機能なWebフレームワーク コントローラーやリソース の概念を排除し、ページやフォーム単位で構築 サーバーサイドHTML生成 を基本とし、JSやCSSも自由に記述可能 OpenTelemetryやSequel などの最新技術を活用した設計 セットアップが容易 で、Dockerを使い数分でアプリ作成が可能
Brutの特徴
- Ruby製Webフレームワーク でありながら、従来のコントローラーやアクション、リソースの概念を持たない独自路線
- ページ、フォーム、シングルアクションハンドラー 単位で開発するアーキテクチャ
- サーバーサイドでHTML生成、クライアント側でJSやCSSを自由に追加可能
- 低抽象・低儀式 を重視しつつ、Sinatraのような低レベルではなく、Webフレームワークとしての機能性を保持
- OpenTelemetryベースの計測、 Sequelによるデータアクセス、 OptionParserベースのCLI自動化 を標準搭載
インストールとセットアップ
-
Dockerコンテナ による簡単なセットアップ
docker run -v "$PWD":"$PWD" -w "$PWD" -it thirdtank/mkbrut mkbrut my-new-appcd my-new-appdx/build && dx/startdx/exec bin/setupdx/exec bin/devで開発サーバ起動(localhost:6502)
-
Rubyのインストール不要、即座に開発開始可能
コア設計と思想
- クラスベース設計 :クラスをインスタンス化し、メソッドを呼び出す明快な構造
- includeや巨大な関数群、Hashの乱用を排除 した設計
- セッション、フラッシュ、フォームパラメータ もすべて型付きクラスで管理
- 動的メソッド定義やmethod_missingの最小化
- ほぼすべてのメソッドにドキュメントが付与
モダンWebプラットフォーム対応
- クライアント・サーバーサイドのバリデーション統合 による一貫したUX
- BrutJS :HTMLを段階的に強化するWeb Componentsライブラリ
- esbuildによるCSSの即時パッケージ・最小化・ハッシュ化
- PostCSSやSASSは不要
デフォルトで良い実践
- 適切なコンテンツセキュリティポリシー
- データベースカラムはデフォルトでnull不可
- 外部キーは必ず存在し、インデックス付き、null不可
- Clockによるタイムゾーン対応の時間管理
- 容易なローカライズ(I18n)
利用している主要Gem
- RSpec :テスト記述用、独自マッチャーも提供
- Faker・FactoryBot :テスト/開発データ生成
- Phlex :HTML生成エンジン(HAMLは非対応)
- i18n :翻訳はRuby Hashで管理(YAMLは基本不使用)
- dotenv :環境変数で動的設定(dev/test)
設計思想とメリット
- 不要な抽象化やYAML地獄を排除
- 設定や定義はRubyコードや環境変数で一元管理
- ページ名とクラス名が直感的に対応
- 例:/widgetsはWidgetsPageクラス
- DBアクセスとドメインロジックの分離
- DB::Widgetでデータ取得、WidgetやWidgetServiceでビジネスロジック実装も自由
- コントローラーや複雑なアクションの不要化
- モナドや関数型の難解な概念を理解せずとも開発可能
- 必要なら導入も可能だが、強制されない
開発体験と今後
- Railsのような儀式や設定の繰り返しからの解放
- フロントエンド技術の頻繁な変化に振り回されない
- ビジネスロジックの配置やHTTPメソッド論争からの脱却
- RubyとHTML、そして現代ブラウザの力を最大限活用する開発体験
- Ruby 3.4対応
- 今後も1.0リリースに向けて開発継続予定
参考アプリ・ドキュメント
- ADRs.cloud :実際に動作するサンプルアプリを公開中
- 詳細なドキュメント も完備
Brutを選ぶ理由
- シンプルかつ強力なWeb開発環境をRubyで実現
- 設定や抽象化に時間を取られず、開発そのものを楽しめる
- 現代的なWeb開発のベストプラクティスを標準装備
- Ruby好き・HTML好きな開発者に最適