Yanonoblog!

こつこつと

Railsメモ - CoC, DRY, REST, bin/, lib/ など

はじめに

本記事では「パーフェクト Ruby on Rails」で学んだ内容と別途気になって調べた内容や知識も含めアウトプットしています。

書籍に記載されている内容を順序立ててまとめるというよりは、整理しておきたい周辺の知識と深ぼった内容を雑多に書いています。

Railsのメリット・思想

CoC (Convention over Configuration)

直訳すると「設定より規約」です。

プログラマがコードを書く際に決まった規約に従うことで、設定ファイルを減らして開発者の生産性を高めることを目的としています。

以下のようにルーティングを書くと、URLとコントローラーのアクションを自動的にマッピングくれます。

このように、CoCに従うことで、簡潔なコードでアプリケーションを実装することができます。

resources :products

DRY (Don't Repeat Yourself)

同じ機能や情報を重複して書かないことを指し、コードの再利用性、保守性、拡張性を向上させる目的があります。

例えば、Railsはデフォルトでテーブル名を複数形にしたものと、カラム名をスネークケースに変換する規約に従って、自動的にカラム名マッピングします。

そのため手動でカラム名を定義する必要はありません。

他にもパーシャルなどがあります。

REST(Representational State Transfer)

Webアプリケーションにおいて、リソース(resource)を操作するための設計概念の一つで、「すべてのリソースに一意となる識別子(URI)がある」「URIを通してリソースを操作する手段を提供する」という考え方が基盤となっています。

ここでいうリソースとは操作する対象となるデータや情報を指しています。

http://example.com/users/1

上記でいうとユーザーIDが1の情報を取得することが出来るのがわかりますよね。

わかりやすくいうとRESTとはURIとHTTPメソッドでなにの情報をどうしたいかを正確にわかるようにする考え方です。

binディレクト

Railsの開発に必要なコマンドを格納しているディレクトリです。

bin配下にはbundle execをつけなくても実行出来るコマンドを置いています。

# bin/rails

#!/usr/bin/env ruby
APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot'
require 'rails/commands'

上記のrails/commandsでコマンドを読み込みしています。

https://github.com/rails/rails/tree/main/railties/lib/rails

bundle execとは

Rubyプロジェクトに必要なライブラリやgemを管理しているBundlerを使用して、コマンドを実行するためのコマンドです。

プロジェクトのgemをロードし、その中から実行するコマンドを選択します。

bundle execをつける場合
  • プロジェクトのGemfileに指定されたバージョンのgemがロードされるため、依存関係が正しく解決される。
  • プロジェクトの設定が反映されるため、実行環境が正しく設定される。
bundle execをつけない場合:
  • グローバル環境にインストールされたgemが使用されるため、プロジェクトの依存関係が正しく解決されない場合がある。
  • 実行環境の設定が正しくない場合、実行に失敗する可能性がある。

Linuxの教科書を読んだおかげかすんなり入ってきました(笑)

libディレクト

libディレクトリは独自に実装したRakeタスクなどを配置する場所として利用します。

過去のRailsでは独立性の高いコードなどはlibに置いていたケースが合ったようですが、Rails5.0移行ではlibディレクトリは自動的に読み込まれなくなったことからアプリケーションから利用するコードをlibディレクトリに配置することは推奨されなくなった経緯があります。

続く…

コメント

本記事の内容は以上になります!

書籍の続きのアウトプットも随時更新したいと思います。


プログラミングスクールのご紹介 (卒業生より)**

お世話になったプログラミングスクールであるRUNTEQです♪

https://runteq.jp/r/ohtFwbjW

こちらのリンクを経由すると1万円引きになります。

RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。

もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。

https://twitter.com/outputky

参考