はじめに
この記事はDMM WEBCAMP アドベントカレンダー2日目の記事です。
こんにちは。DMM WEBCAMPのメンターをしてます。このアドベントカレンダーのいいだしっぺです。
今回は、Railsを触る上で外せないrails new
コマンドで生成されるフォルダ、ファイルについて、解説していきたいと思います。
また、Rails5と6のファイル構成の違いも軽く触れてあります。
対象者
- Rails触りたての方、触ったことのない方。
- Railsを使ってるけど、具体的にこのフォルダで何ができるのかイマイチな方。
- 他言語のMVCフレームワークを触っていて、Railsを理解したい方。
環境
macOS Catalina 10.15.1
Rails: 6.0.1
Ruby: 2.6.5
そもそもrails newとは
rails new
コマンドは、Railsを使う上で必要不可欠なファイルを一度に作成してくれるコマンドです。
むしろこれを打たないと始まんないじゃないかってぐらい大事なコマンドです。
実行したらたくさんのファイルを生成したあと、デフォルトのGemfileに記載されているgem 1 のinstallが始まります。(Gemfileについては後述)
また、Rails6だとその後webpacker 2 のインストール(rails webpacker:install
)が実行されます。
生成されるフォルダ/ファイルの解説
ここからはrails new
を叩いたら、生成されるフォルダ、ファイルの解説をしていきます。
主要なものだけざっくり解説するのでもっと細かい説明はRailsガイドを参照してください。
/app
MVC関連やjs、cssを格納するフォルダなど、Railsの中枢に関わるフォルダ。
rails5だとassetsの中に/javascriptsファイルが入っていたが、rails6だとappの中に入っている。
/assets
/images(画像)や/stylesheets(CSS)など、ページを装飾するものをまとめたフォルダ。
/controller
MVCのCの部分。人間で言うところの「脳」であるコントローラーをまとめたフォルダ。
rails g controller hoges
のコマンドを叩くと、このフォルダにhoges_controller.rb
が作成される。
/helper
helperとは、主にviewをシンプルにするために、ちょっとした処理をやりたいときに使うメソッド3。
それらを書くファイルをまとめたフォルダ。
コントローラーが作られると同時にコントローラー名の名前のファイルが作成される。
/models
MVCのMの部分。Railsでは主にデータベースとのやりとりや制約などを記述するモデルをまとめたフォルダ。
使用しているデータベースのテーブル毎にモデルが用意される。
rails g model Hoge
のコマンドを叩くと、このフォルダにHoge.rb
が作成される。
/views
MVCのVの部分。ページの見た目を作るためのERBファイルをまとめたフォルダ。
コントローラーが作られると同時にコントローラー名の名前のフォルダが作成される。
rails g controller hoges index
とコマンドを打てば該当のファイルにindex.html.erb
が作成される。
/bin
サーバを起動したり、テストをしたり、アプリケーションを管理する様々なスクリプトファイルをまとめるフォルダ。4
各プロジェクトのRailsのバージョンが違っていた場合、bin/rails s
と/binを指定してコマンド実行するとそのバージョンでのコマンドで実行されるのでおすすめ。
/config
RailsやルーティングやDBなど、Railsの様々な設定ファイルをまとめてあるフォルダ。
Rails6ではwebpack関連の設定ファイルもある。
database.yml
データベース設定ファイル。YAML5というデータ形式で書かれている。
開発、テスト、本番環境別のDBサーバやパスワード等を記述する。
routes.rb
取得したURLを適切なコントローラー内のアクションなどに割り当てるためのルーティングファイル。
Routing Error
の原因はだいたいここ。
rails routes
で割り当てているルーティングの一覧が見れる。
resource
がとっても便利。(RESTfulなリソースにしてくれる。)6
/db
データベース関連の情報をまとめたフォルダ。
デフォルトだとseeds.rb
しかない。
/migrate
モデル作成時やrails g migration hogehoge
でマイグレーションファイルがこのファイルの直下に作成される。
rails db:migrate
を実行すると生成したテーブルやカラムなどがマイグレーションファイルを参考にデータベースへ内容が保存される。
schema.rb
rails db:migrate
実行後に生成される、実行結果(実際にデータベースに保存されているテーブル等)が反映されているファイル。
デフォルトだとここを弄ってもテーブルの内容はかわらない。
seeds.rb
既存のテーブルにデータを格納するために設定するファイル。
記述し、rails db:seed
を実行するとデータベースにデータが格納される。7
/lib
自作のモジュール8を置く場所。
ここにモジュールを置いて、require
で呼び出す。9
/log
いわゆるログファイル。デフォルトでは中身はない。
logger.debug
を使うことで、log/development.log
にlogを出力できる。
/public
404.html
や500.html
などRailsを使用しない静的ページや画像を格納する場所。
デプロイ時とかでお世話になるかも。
/storage
Active Storage等を使用した際にlocalでデフォルトで投稿されたファイルが保存される場所。10
デフォルトでは中身はない。
/test
作ったアプリケーションが正しく動作するのかという確認するファイルをまとめたフォルダ。
テストを行うことで正しい動作を保証し、品質の高いアプリケーションを仕上げる事につながる。
コントローラーやモデルが作られると同時にコントローラー、モデル名の名前のファイルが作成される。
Minitestなどを使いテストをしていくのが主流。Rspecは/specが別途作られる。
/tmp
一時ファイルを保存するためのファイルをまとめたフォルダ。
/vendor
vendorは自分が開発しているものではないサードパーティのライブラリ(jsフレームワークやcssフレームワークなど)を格納する場所。
デフォルトでは中身はない。
ここにライブラリを置いて、require
で呼び出す。11
Gemfile
現在のアプリケーションで使うgemをまとめているファイル。
このファイルに追加したいgemを記入し、bundle install
を実行するとgemがinstallされる。
Gemfile.lock
Gemfileを元に依存関係にあるgemのバージョンと取得先が記録される。
実際にインストールしたgemのリストという認識。
bundle install
やbundle update
で更新される。
おわりに
この記事書くだけでもかなり勉強になりました。アウトプットはやはりよい。
かなりざっくりしていて、全てのファイルは紹介しきれていませんが、ふんわりこんな内容なんだと掴んでいただければ幸いです。
間違っていたりしたら報告していただけると泣いて喜びます。
私の他にもDMM WEBCAMPのメンターや社員さんが記事を書かれているので、よければご覧になってください。
-
rubyのライブラリの総称( https://www.ruby-lang.org/ja/libraries/ ) ↩
-
https://github.com/rails/webpacker, https://qiita.com/ttiger55/items/e45ec0febba3a412507e ↩
-
https://qiita.com/yukiyoshimura/items/f0763e187008aca46fb4 ↩
-
https://railsguides.jp/routing.html#crud%E3%80%81%E5%8B%95%E8%A9%9E%E3%80%81%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3 ↩
-
https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee ↩