Rails5 Boilerplateの必要性
Ruby on Railsで開発をするようになって3年以上が経ちました。WEBアプリを開発する事に慣れてくると、だいたい毎回必要となる物があります。 それらをひな形として作って置くことで、開発のスピードアップを図りたいという目的でBoilerplate(ボイラープレート)を作るに至りました。
僕がBoilerplateに求めるものは…
- 新しいRailsのバージョン
- UI: Bootstrap, FontAwesome
- 使いやすいテンプレートエンジン(Slim or Haml)
- 基本的な機能だけ (豪華な機能は要らない)
- DBはMySQL
- ユーザ認証の機能があればベター (Devise gem)
オープンソースの他の良さそうなBoilerplateもありましたが、少しずつ僕のニーズからは異なるものでした。 あまりにも機能が少ないものもあれば、大きすぎるものもありました。
そこで、僕自身の使いやすいBoilerplateを作ることとしました。
Githubもぜひご覧ください https://github.com/takp/rails5-boilerplate
Gems
本当に必要なGemだけを選びました。素晴らしいGemは沢山ありますが、使わないかも知れないのでそういうGemは入れていません。
- Ruby on Rails 5.0
- Twitter Bootstrap 3
- FontAwesome
- Slim Template Engine
- Rspec
- Devise
- ActiveDecorator
- Other Gems for debug and test (pry, factory_girl, capybara, rubocop, and so on)
アーキテクチャ
MVC + Service層 + Decorator層
- モデル: app/models
- ビュー: app/views
- コントローラ: app/controllers
- サービス: app/services
- デコレータ: app/decorators
サービス層
特定のモデルに依存しない処理や、2〜3種類以上のモデルとやり取りする処理、また、外部APIとのやり取りを行う処理などをサービスとして切り出して書きます。 責任の分担が明確になりますし、テストも書きやすくなります。 そして、モデルやコントローラをシンプルに保つ事が出来るので、私はサービスにクラスを作って処理を分けるようにしています。
デコレータ
モデルには、ビューで使われるようなメソッドを直接定義しない方が良いでしょう。これも別に分けて書いていく方がコードがキレイに保てます。 モデル層はビジネスロジックに集中すべきです。 こういったビューに使われるモデルクラスのコードを集約するのがデコレータの役割です。
How to use?
$ git clone git@github.com:takp/rails5-boilerplate.git
$ cd rails5-boilerplate
$ bundle install
DB接続のための情報を設定した後、
$ bundle exec rake db:create
$ bundle exec rake db:migrate
$ bin/rails server
これでトップページが見られるようになったはずです。 詳しくは、Githubのページ(Rails5 boilerplate)をご参照ください。
ぜひ一度試してみて、提案などがあればご連絡ください。
もし良ければGithubでスターをもらえたら幸いです。