0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails 基本①  設計哲学〜ディレクトリ構成

Last updated at Posted at 2021-06-30

1. 概要

  • railsのディレクトリ構成や基本的なところから知りたかった
  • railsのディレクトリ構成、railsコマンド、コントローラーやモデルについて調べたことをまとめた

参考資料:Railsの基礎知識

2. 設計哲学

  • 設定より規約【Conversion over Configuration(CoC)】1

慣例に従わない時にのみそれに沿ったコードを書く必要があるということ
テーブルのマイグレーションファイルを作成するときなども命名規則が決まっており、これの通りに作成することでRailsがうまく処理してくれるので、基本的には規約に沿えばいい

  • 同じ作業を繰り返さない【Don't Repeat Yourself(DRY)】2

3. ディレクトリ構成

デフォルトのディレクトリからAPIモードに必要ないディレクトリ等は端折っている
参考:ディレクトリ構成

/
├ /app アプリケーション用のファイルを置く
│ ├ /assets アプリケーション自身が保有するソースファイルを置く
│ │ ├ /config アセットのマニフェストを置く
│ │ └ /images 画像を置く
│ ├ /controllers コントローラー
│ ├ /jobs ジョブを置く
│ ├ /lib ヘルパー以外で自動読み込みするアプリケーション用のモジュールを置く
│ ├ /mailers メーラーを置く
│ └ /models モデルを置く
├ /bin Railsが生成するプロジェクト用のコマンドを置く
├ /bundle_bin Bundlerのスタブを置く
├ /scripts プロジェクトで使用するシェルスクリプトを置く
├ /build タスクの生成物を置く
├ /config 設定ファイルを置く
├ /db データベース関連のファイルを置く
├ /lib 自動読込しないアプリケーション用のモジュールを置く
├ /share ライブラリのモジュールを置く
├ /test テスト用のファイルを置く RSpecを使用するなら使用しないディレクトリ?
├ /log ログファイルを置く
├ /tmp 一時ファイルを置く
├ /vendor サードパーティーのファイルを置く
│ ├ /assets サードパーティーのアセット
│ ├ /bundle Bundlergemをインストールする場所
│ └ /patches gem用のパッチ
├ /plugins プロジェクト内で使用するRailsプラグイン
├ /node_modules npmパッケージをインストールする場所
└ /patches patch-pachage用のパッチを置く

以下ディレクトリの説明の追加

3.1. /app

アプリケーション用のファイルを置く
サブディレクトリもある

3.1.1. /app/assets

アプリケーション自身が保有するソースファイルを置く
ここ以外にも/assetsファイルがあるが、それとの違いは

  • lib/assets

1つのアプリケーションの範疇に収まらないライブラリのコードや、複数のアプリケーションで共有されるライブラリのコードを置く場所3

  • vendor/assets

JavaScriptプラグインやCSSフレームワークなど、外部の団体などによって所有されているアセットの置き場所3

参考:Rails5 app/assets、lib/asses、vendor/assetsの使い分け

また、assetsのサブディレクトリもある

3.1.1.1. /app/assets/config

プリコンパイルするアセットを指定するためのmanifest.jsを置く

3.1.1.2. /app/assets/images

画像を置くディレクトリ
.keepという空のファイルがある
Gitが空のディレクトリをバージョン管理の管理下に置かない特性からこのファイルが存在する

3.1.2. /app/controllers

コントローラーを置くディレクトリ
サブディレクトリもある

3.1.2.1. /app/controllers/concerns

複数のコントローラーで使用する共通のメソッドを記述するファイルを置く
複数のコントローラーで使用されるメソッドをそれぞれで書いていると冗長なので、ここにまとめることがある

3.1.3. /app/models

モデルを置くディレクトリ
サブディレクトリもある

3.1.3.1. concerns

複数のモデルで使用する共通のメソッドを記述するファイルを置く
複数のモデルで使用されるメソッドをそれぞれで書いていると冗長なので、ここにまとめることがある

3.2. /bin

Railsプロジェクト毎に用意されているスクリプトを実行するためのファイルが置かれる
rails/commandに定義されているバイナリを実行するためのエイリアスもこのファイルに登録されていたりする
参考:Railsファイル辞典(binディレクトリ編)

3.3. /scripts

Rails runnerとかを使ってゴニョニョするために使うっぽい(今のところ使わなそうなのでその時になって調べる)
この辺を後で読んでみる

3.4. /config

様々な設定ファイルを置く
詳細は以下

3.5. /db

開発環境とテスト環境のデータベースファイルが作成されるディレクトリ
また、シードデータ投入用のファイルもここに作成される

別記事で以下で調べた内容をまとめる予定

4. railsコマンドについて

5. コントローラー

6. モデル

  1. 開発者の決定すべきことを減少させ、単純にするが柔軟性は失わせないソフトウェア設計パラダイムのこと 参考:Wikipedia/設定より規約

  2. 重複を防ぐ考え方。追求しすぎると疎結合の原則が破られることがままあるので兼ね合いを見ることが必要 参考:Wikipedia/DRY

  3. Railsガイドからの引用 2

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?