RailsでAI駆動開発

RailsでAI駆動開発をしてみるぞい

まず、RailsでAI駆動開発ってけっこうイケんじゃね?と思った理由をAIにまとめてもらった
- RailsWayによる一貫性
Railsは「RailsWay」という明確な指針があり、コードの実装にブレが出にくいです。
これにより、AIが書いても人間に読みやすく、システム全体の一貫性が保たれるんじゃなかろうか。 - 破壊的変更の少なさ
Railsは大きな破壊的変更が少なく、数年前の記事や情報が今でも参考になる点で情報量がとても多いです。長期にわたるプロジェクトでの安心感があるんじゃないかと思います。 - 豊富な学習リソース
RailsTutorialなどの日本語で提供される包括的な資料が存在し、バックエンドからフロントエンド、セキュリティに至るまで学べるって何気にすごい。初心者にも、とりあえずこれ読んでおいて、で渡せるのすごすぎる。 - セキュリティへの配慮
フレームワーク自体がセキュリティを重視して設計されており、開発者が安心して機能実装に専念できる環境が整ってるんじゃないかと思います。 - デプロイの容易さとコストメリット
Kamal2を利用することで、VPSへのデプロイが簡単に行え、商用利用でも低コストで運用が可能です(さくらVPSの最安800円〜くらいだったはず)。ドメインの準備とかVercelほどの手軽さはないものの、コスト面で不利とは言えないかな。 - コードの簡潔さとAIとの相性
Railsはシンプルで簡潔なコード記述が可能なため、AIが出力するトークン数を抑えることができます。なんやかんやこういうのチリツモですよね。 - SQLiteが利用可能
SQLiteが使えるので、インフラ構築がさらにシンプルになりました。 - プロジェクト作成時にデフォルトでTailwindが指定できる
新規作成時にTailwindを選択できますし、もちろん途中から入れるのもできます。TailwindとAIによるCSS生成との相性はすごくいいらしい。 - Hotwireによるフロントエンドの強化
Hotwireの採用により、Railsではリッチでインタラクティブな画面の構築が容易になりました。これにより、モダンなユーザー体験をシンプルな実装で実現できるようになっています。 - 環境構築が簡単
rails-newというGemを利用すれば、端末にRubyをインストールすることなく簡単に環境構築が可能。初期設定の手間が大幅に削減され、開発開始までの時間が短縮されます。

参考資料
- Rails 8はSQLiteで大幅に強化された「個人が扱えるフレームワーク」(翻訳)
https://note.com/yasslab/n/n89d6850e296d - Kamal 2で さくらのVPS にRailsアプリをデプロイ
https://zenn.dev/naofumik/articles/ce92c135a3cb2b - 今Rails 8アプリを作るなら何も足さないバニラ味にしよう
https://techracho.bpsinc.jp/hachi8833/2024_12_26/147538
多少インフラをやってもいいからコストを最小限に抑えたい!というのもできる
Rails 8で本番利用可能になったSQLiteをつかうとGoogle Cloudでほぼ無料で運用ができそうな件

AI駆動開発はCursorを使う予定
Cursorにはプロジェクト単位でAIのためのルールを設定できる。
ルール集の投稿もできて、Railsのルール集はこちら

ルール日本語訳にしてみた。
やっぱりフレームワークとしていろいろと決まってるのすごく便利そう。
=========================================================
あなたはRuby on Rails、PostgreSQL、Hotwire(TurboとStimulus)、およびTailwind CSSの専門家です。
コードスタイルと構造
- 正確な例を用い、簡潔でイディオムなRubyコードを書くこと。
- Railsの規約とベストプラクティスに従うこと。
- 適切な場合には、オブジェクト指向や関数型プログラミングのパターンを利用すること。
- コードの重複を避け、反復処理とモジュール化を優先すること。
- user_signed_in? や calculate_total のような、説明的な変数名とメソッド名を使用すること。
- Railsの規約に従ってファイルを構造化すること(MVC、concerns、helpersなど)。
命名規則
- ファイル名、メソッド名、変数名にはスネークケース(snake_case)を使用すること。
- クラス名およびモジュール名にはキャメルケース(CamelCase)を使用すること。
- モデル、コントローラー、ビューについてはRailsの命名規則に従うこと。
RubyとRailsの使用法
- 適切な場合にはRuby 3.xの機能(例:パターンマッチング、エンドレスメソッド)を使用すること。
- Railsの組み込みヘルパーやメソッドを活用すること。
- データベース操作にはActiveRecordを効果的に利用すること。
- 構文とフォーマット
- Ruby Style Guideに従うこと。
- Rubyの表現力豊かな構文(例:unless、||=、&.)を使用すること。
- 補完が必要な場合を除き、文字列にはシングルクォートを好むこと。
エラー処理とバリデーション
- 制御フローではなく、例外は例外的なケースにのみ使用すること。
- 適切なエラーログとユーザーフレンドリーなメッセージを実装すること。
- モデルにはActiveModelのバリデーションを使用すること。
- コントローラーではエラーを適切に処理し、適切なフラッシュメッセージを表示すること。
UIとスタイリング
- Hotwire(TurboとStimulus)を用いて、動的でSPAのようなインタラクションを実現すること。
- Tailwind CSSを用いてレスポンシブデザインを実装すること。
- Railsのビュー用ヘルパーやパーシャルを利用し、ビューのDRY(繰り返しの排除)を保つこと。
パフォーマンス最適化
- データベースのインデックスを効果的に利用すること。
- キャッシュ戦略(フラグメントキャッシュ、ロシアン・ドールキャッシュ)を実装すること。
- N+1問題を避けるため、イーガーローディング(eager loading)を使用すること。
- includes、joins、またはselectを活用してデータベースクエリを最適化すること。
主要な規約
- RESTfulなルーティング規約に従うこと。
- モデルやコントローラー間で共有する振る舞いにはconcernsを利用すること。
- 複雑なビジネスロジックにはサービスオブジェクトを実装すること。
- 時間のかかるタスクにはバックグラウンドジョブ(例:Sidekiq)を使用すること。
テスト
- RSpecまたはMinitestを用いて包括的なテストを書くこと。
- TDD/BDDのプラクティスに従うこと。
- テストデータ生成にはFactoryBotなどのファクトリを使用すること。
セキュリティ
- 適切な認証と認可(例:Devise、Pundit)を実装すること。
- コントローラー内ではstrong parametersを使用すること。
- XSS、CSRF、SQLインジェクションなど、一般的なウェブの脆弱性に対する対策を施すこと。
- 公式のRuby on Railsガイドに従い、ルーティング、コントローラー、モデル、ビュー、その他のRailsコンポーネントのベストプラクティスを遵守すること。

やっぱり、DRYやCoCといった原則があるのがAIにとっても嬉しいんじゃないかな

まずはGithub作ってリポジトリを用意し、git cloneでローカルに持ってくる
Cursor settingからプロジェクトのルールを追加

rails-newする前にAIとチャットで打ち合わせ
👨
ようこそ!いっしょに最高のアプリを作っていきましょう!
まずは実装の前に、このアプリのことを説明するので仕様と構成を.cursor/rulesにまとめていってほしいです
🤖
はい、喜んでお手伝いさせていただきます!
まず、.cursor/rulesディレクトリが存在するか確認させていただきます。
素晴らしいですね。.cursor/rulesディレクトリが既に存在しています。
アプリケーションの仕様と構成をまとめるために、以下のようなファイルを作成することを提案します:
app-specification.mdc - アプリケーションの全体的な仕様
architecture.mdc - アプリケーションのアーキテクチャと構成
tech-stack.mdc - 使用する技術スタックの詳細
まず、app-specification.mdcを作成させていただきます:
次に、architecture.mdcを作成します:
最後に、tech-stack.mdcを作成します:
基本的なドキュメント構造を作成しました。これらのファイルは、アプリケーションの仕様と構成を整理するためのテンプレートとして機能します。
アプリケーションの具体的な仕様をお聞かせいただければ、これらのドキュメントに詳細を追加していくことができます。以下のような情報をお教えいただけますでしょうか:
アプリケーションの主な目的と目標
主要な機能要件
想定されるユーザー層
使用したい技術スタック
特別な要件や制約条件
これらの情報を基に、より具体的な仕様書を作成していきたいと思います。

mtgしてプロジェクトの内容を伝えて、いい感じにいろいろまとめてくれました。
ではまずは環境構築を
rails-new . --css=tailwind
と思ったけど、2025/3/20時点で Rails7.2までしか対応してないみたい。。。
別のでこれで行けたけど、いけるかな。。。
rails-new -u 3.3.6 -r 8.0.0 . --css=tailwind --devcontainer

AIと会話しながら、Vibe Coding中
コンセプト話して、そこからTop画面を簡単に作ってもらう。
思いついた仕様の変更は忘れずにRulesに取り込ませる。
画面を作る前にモデル定義についてしっかり話し合う。
そんでテスト書いてもらう。
で、結構ちゃんとしたのを作ってくれてびっくり。