どうも!テントです
Railsの勉強を始めたばかりの皆さんが一度は必ず思ったこと
Railsってディレクトリ・ファイルが多すぎて役割がよくわからないと、、、、
多過ぎて各ディレクトリの役割があまりわからないのは当たり前です
今回の記事では、
- Railsのディレクトリ・ファイル構造を詳しく知りたい
という人のために
- 各ディレクトリ・ファイルの役割
についてわかりやすく解説します
それでは早速紹介していきます
Railsの主なディレクトリについて
RailsでWebアプリケーションの生成は簡単にできます
コマンドで、
rails new アプリケーション名(何でもいいよ)
たったこれだけを打ち込むだけでRailsの雛形が生成されます
簡単ですよね?
このコマンドで生成された、RailsのWebアプリケーションのディレクトリ・ファイルを紹介します
早速紹介していきます
app
appにはcontroller・model・viewファイルなど、Railsの中で特によく使うファイルが入っているディレクトリです
Railsを操作するにあたっての基本的なファイルであり、RailsのWebアプリケーションの動きであるMVCアーキテクチャがこちらのディレクトリに該当します

bin
サーバーやアプリケーション起動時、テストなどを管理するスクリプトファイルが置かれています
スクリプトファイルとは、コードを書けばすぐに動かすことができるプログラムファイルのことです
当たり前と思うかもしれませんが、実はこれってスクリプトファイルのおかげなんです
通常コードを書いたら、そのコードをコンピューターがわかる言葉に翻訳する必要があります
この作業をコンパイルと言います
これは、必ず必要な作業です
ですが、皆さんの中にはコンパイルを行っているどころか、コンパイル自体を知らなかった人も多いのではないでしょうか?
特に気にする必要がなかったのは、このスクリプトファイルのおかげだったわけです
そう思ったら重要でしょ?
例えば、
rails server → rails s
と短縮してコマンドを打ち込むことができます
このように簡易化できるのも、実はbinファイルのおかげです
config
Railsアプリケーションの設定に関するファイルが入っているディレクトリです
ルーティングについてのroutes.rbや、Railsの共通の環境設定を行うapplication.rbやデータベース設定ファイルなどが含まれるディレクトリです
Railsの設定を変えたい場合などは、configファイルの設定を変えたら解決するはずです
db
データベースのスキーマファイル(現状のデータベースの状態を保存するファイル)やマイグレーションファイル(データベースの設計図)が入っているディレクトリです
このディレクトリ内のファイルは、ほとんど編集することはありません
スキーマファイル(schema.rb)はマイグレーションファイルで設計したデータが保存されるイメージです
例えば、データベースにtitleカラムとtextカラムがあるとします
この時スキーマファイルにはもちろんtitleカラムとtextカラムが存在しています
しかし、imageカラムが追加したくなったので、マイグレーションファイルでimageカラムの追加を行いました
そうすると自然にスキーマファイルが更新されて、中身のカラムがtitleカラム・textカラム・imageカラムの三つになります
スキーマファイルとマイグレーションファイルの関係性はこのような感じです
lib
全体で使用されるライブラリを管理するためのディレクトリです
ライブラリとはさまざまな機能を持った部品の集合体です
Railsを勉強しているとモジュールという単語が出てくると思います
モジュールは、使いたい機能をひとまとまりにした部品です
このモジュールのまとまりがライブラリです
log
アプリケーション実行時の、logファイルが入っているディレクトリです
logファイルとは、行なったことの記録を記しているファイルです
つまりここでのlogファイルとは、webアプリケーションを実行した際の記録が記されたものです
このようなlogファイルが入っているディレクトリだと認識しておいて下さい
public
エラーページや画像などの静的なファイル、静的なページなどが置かれているディレクトリです
エラーページとは、例えばrailsで何かコードを付け加えたり、変更したりして更新するとエラー画面が出てきますよね?
その、エラー画面のHTMLファイルがこのpublicに置かれています
Railsではこのようなエラーページを用意してくれています
すごい便利だよね
自分でエラーページをかっこよくわかりやすくすることも可能です
ここでは割愛するので、気になる人は調べてみてください
test
アプリケーションをテストするためのファイルが入っているディレクトリです
補足ですが、Railsでのアプリケーション開発に限らず、開発したものは必ずテストを行って想定通りに動くどうかの検証を行う必要性があります
tmp
キャッシュなどの一時的なファイルのディレクトリです
キャッシュというのはリクエスト・レスポンスによって生成されたされたコンテンツを保存し、次回同じリクエストがあった際に再利用することです
例えばあなたが興味を持っているコンテンツを調べたとします するとさらに興味が高まり毎日同じコンテンツを調べるようになりました
そうなった時、あなたがもう一度調べることを予測してパソコンがコンテンツを保存してくれます
そうすることで、あなたは待つことなくコンテンツを見ることができます
この仕組みがキャッシュです
このキャッシュのような一時的なファイルが入っているのがtmpディレクトリです
ventor
第三者によって開発されたプラグインやgem、コードなどを設置する際に用いるディレクトリです
spec
これに関してはおまけです
Rails new アプリケーション名で生成されるデフォルトのディレクトリには存在していません
このディレクトリはrailsのテストの際に用いるディレクトリです。さらに詳しくいうならRSpecと言うテスト専用のプログラム言語です
このRSpecのディレクトリがspecディレクトリです
ここである疑問が生まれます。あれ?さっきtestディレクトリがあったよね??
その認識は間違いではありません。どちらもアプリケーションをテストを実施するときに用いるディレクトリです
双方の違いは、使いやすさ・人気があるかの違いだと僕は思っています(違っていたらすみません)
Railsを勉強していても、RSpecを始めて触った時は正直、なんじゃこりゃと思いました。それほど書き方が違います。違う言語みたいな感覚
しかし使っていくととても使いやすい!
現場でも使うことが多いのでrailsエンジニアを目指している人は絶対にRSpecの勉強もしておいた方がいいと思います。絶対に役に立ちます
だいぶ脱線しましたが、以上番外編でした!
Railsの主なファイル
次にWebアプリケーション直下にあるファイルを紹介します
それでは行ってみましょう!
Rakefile
Rakeコマンドの実行を管理するためのファイルです
config.ru
railsサーバー起動のためにRakeが使用する設定ファイルです
.gitignore
Gitに取り込みたくないファイルを指定するためのファイルです
Gemfile
Rubyのライブラリであるgemが記述されているファイルです
ライブラリについては、libディレクトリで説明しています
この、gemを使うことで簡単なコードだけで色々な機能を実装することができます
Gemfileの記述方法は、
gem ‘パッケージ名’, ‘バージョン’
で指定することができます
そして、ファイルに記述した後には必ずコマンドで
% bundle install
を行なって下さい
そうするとgemが使えるようになり、簡単なコードを書くだけで機能が使えるようになります
Gemfileの役割はこんな感じです!
Gemfile.lock
上記のGemfileで記述し、bundle isntallされたgemの依存関係を管理するためのファイルです
ファイルを実際に見ると枝分かれになって管理されています
README.md
サーバーなどの起動手順などの説明が記されているファイルです
まとめ
Railsのディレクトリとファイルの役割を紹介してきましたが、いきなり全てを覚えるのは大変ですよね
正直僕も紹介してきたものの全てを完璧に把握はできていません
なので、Railsを使いながら覚えていくことが大切です
ちなみに、
app
config
db
test(spec)
はよく使うので、役割を把握しておくのがいいと思います
他に関してはあまり使わないので、必要なときに使いながら覚えておく程度でいいと感じます
そんな感じで!
ではでは!また🙇♂️