参考書を読んだメモ : 独習Ruby on Rails 4章

独習Ruby on Rails

  • セールしていたので Kindle で買いました
  • せっかく買ったので勉強のために読んだメモ取っていきます

Rails 全体の仕組み

Rails コンポーネントMVCの基礎知識

Webアプリケーションの構造とMVC

  • M: モデル
    • データリソース管理
  • V: ビュー
    • アプリケーションを利用するユーザーとの接点
    • 表現(見せ方)
  • C: コントローラー
    • リクエストに応じてデータベース操作や画面出力操作の指示を出す

Rails コンポーネント

  • モデル: Active Record
  • ビュー: Action View
  • コントローラー: Action Controller
  • ルーター: Action Dispatch
  • Active Record
    • MVC モデルのモデルの機能を提供し、データベースとモデルの仲介を行うORM
    • モデルとデータベーステーブル、モデル属性とテーブル項目の対応づけ(マッピング
    • 複数モデル間の関連付け(アソシエーション)
    • リソース変更時の検証(バリデーション)
    • リソース変更時のメソッド呼び出し(コールバック)
    • データベーステーブル作成・変更のマイグレーション
  • Active Model
    • Action Record の機能のうち、データベースとの連携を除くバリデーションやコールバックなどの機能を利用したいときに組み込む
  • Action View
    • ビューテンプレートに対し、ルックアップ(データの埋め込み)とレンダリング機能を提供
  • Action Pack(Action DispatchとAction Controller)
    • アクションの振り分け(ルーター)、アクションの制御(コントローラー)機能の提供
  • Action Mailer
    • メールの機能
  • Action Cable
    • リアルタイム通信機能の提供
  • Active Job
    • バックグラウンドで実行できる非同期なジョブの生成
    • キューイング管理
  • Active Support
    • Ruby の拡張メソッドなどを提供
  • Active Storage
    • Active Record と連携した画像動画などのアップロード、参照機能を提供
  • Railties

Railsがデフォルトで使用するツールとライブラリ

  • Puma
    • Webサーバーの一つ
    • スレッドを使用した並列処理を実現できる
  • Rack
    • Webサーバーと Rubyフレームワークを接続するインターフェース
    • Puma は Rack::Serverクラスから実装されている
  • ERB
  • Rake

Railsディレクトリ構成

  • app
    • アプリケーションに関する情報を管理する
    • モデル、コントローラー、ビューなど
  • bin
    • アプリケーションの起動などに使用するスクリプトを管理する
  • config
    • 実行環境に関する設定情報が入っている
  • db
    • データベース関連の設定情報を管理する
    • schema.rb も存在する
    • migrate
  • lib
    • 複数のアプリケーション間で共有するライブラリを管理する
    • Rake タスクなど
  • public
  • storage
    • Active Storage のローカルストレージ
  • tmp
    • 稼働中の一時的な情報であるキャッシュ、プロセスID、セッションなどを管理する
  • vender
  • 直下のファイル
    • config.ru
      • Rack が Railsサーバー起動のために使用する設定ファイル
    • Gemfile.lock
      • bundle install された Gemパッケージの依存関係を管理するためのファイル
      • 一度 bundle install されたバージョンは削除、bundle update しない限りこのファイルに基づいて整合性が維持される
    • Rakefile
  • app 内のディレクトリとファイル
    • assets
      • アセットファイルを管理する
        • アセットとはビューに組み込むHTML以外のCSS, JavaScriptファイルを配置する
    • controllers
      • コントローラークラスを管理する
      • concerns は共通コードを管理する
    • helpers
      • ヘルパーモジュールを管理する
    • jobs
      • ジョブクラスを管理する
    • mailers
    • models
      • モデルクラスを管理する
      • concern は共通コード
    • view
      • ビューテンプレートを管理
      • layouts
        • 共通のレイアウトを管理
      • 各コントローラー名のディレクト
        • 各コントローラーに対応するビューテンプレート
  • config ディレクト
    • 実行環境に関する設定情報が入っている
    • environments
      • 実行環境ごとの設定情報を管理する
    • initializers
      • アプリで使用する初期化情報の設定ファイル
    • locales
      • 各国言語別の表示文を管理する
    • application.rb
      • 各実行環境に共通の設定を行うファイル
      • environments の設定が優先される
      • initializers にある rb ファイルの初期化情報を組み込む
    • boot.rb
      • Gemfile の場所を管理し、起動ごとにGemfileの一覧から gem のセットアップを行う
    • cable.yml
      • Action Cable 用の環境別のデフォルトキーアダプターを管理する
    • credentials.yml.enc
      • 暗号化キーなどを管理する
      • Rails が自動的に管理するもの
    • database.yml
      • 各実行環境において、データベースの設定を行う
    • environment.rb
      • Rails サーバー起動時に、application.rb の初期化を行うファイル
    • master.key
      • credentials.yml.enc の情報を複合するためのキーが保存されている
    • routes.rb
      • ルーターの定義ファイル
      • HTTPリクエストをコントローラーのアクションに対応付けるためのルート情報を管理する

rails コンソール

  • methodsメソッド
> ActiveRecord::Base.methods
=> どのようなメソッド持ってるか出力

rails コンソールでルーターの状況を検証する

  • Rails コンソールでは、appオブジェクトを利用してルートの実装状態を確認することができる
> app.books_path
=> "/books"

> app.edit_book_path(1)
=> "/books/1/edit"

> app.get "books"
Started GET "books" for 127.0.0.1 at ...
=> 200

Rakeタスク

  • 今は rails コマンドに統合されている
  • マイグレーションやテストなどのタスクの実行ができる
  • rails -T でタスク一覧が表示できる
    • rails -T 'ro' などのように後ろに文字列パターンを指定するとパターンが絞り込める

主なコマンド

  • rails routes
    • ルーターの実装状況を確認できる
    • config/routes.rb ファイルに設定されてるルート一覧を表示する
  • rails db:migrate
  • rails db:create
    • Rails側から連携するデータベース領域を確保する
    • SQLite3の場合はデフォルトで確保するため不要
  • rails db:setup
    • データベースをスキーマから再生成するコマンド
  • rails db:drop
    • データベースを削除する
  • rails db:reset
    • drop + setup を一連で行う
  • rails db:seed
    • データベースの存在するテーブルへあらかじめ用意した初期データを投入する際に使用する
  • rails test
    • アプリケーションテストをするときに使用する
  • rails db:fixtures:load
    • test で使用するデータをフィクスチャファイルからデータベースに投入するときに使用するコマンド
    • rails test の実行で自動的に組み込むことができる
  • rails stats
    • 現在のアプリケーションの統計情報を表示する
    • コントローラーの総情報数、メソッドの数などが表示される
  • rails notes
    • コメントのTODO, FIXME, OPTIMIZE のキーワードを抽出し表示する
    • 便利そう
  • rails about
    • Rails 関連ライブラリのバージョン確認する
  • rails log:clear
    • 現在のログファイルを空にする