Ruby on Rails
Rails作者
参考
Railsガイド
RailsとClean Architectureに関する考察
【Rails】hashid-railsを用いてIDを難読化・暗号化させる方法
Rails処理概要
Rails APIモード
Ruby on Rails
をバックエンドサーバーとして使用する場合、通常はアプリをAPIとして設定するだけで、セッション、Cookie、レンダリングビューなどの一部の機能がデフォルトで無効になります。
Rails APIモードでactive adminを導入する方法
Rails 名前空間について
参考URL
入れ子とショートシンタックスの違い
Railsでの名前空間について(わかりやすい)
Ruby自体には「名前空間」という名前の機能がありません。しかし、「名前空間」を実現出来ないというわけではありません。モジュールが「名前空間」の機能を提供するとなっています。 まず、勘違いしてはいけないのは、モジュールは「名前空間」のためだけの機能ではないことです。他のクラスやモジュールにMix-inしたり、オブジェクトそのものの拡張(extend)したり、再定義(refine)の機能を使うためにusingしたりします。それら多くの機能の一つとして、「名前空間」の機能があると言うことです。なお、クラスもモジュールを拡張しているため、同じように「名前空間」に使用することができます。
Rubyにおいて、モジュールを定義する方法には2つの異なるスタイルがある
それぞれが異なる文脈で使用される。
1. ネストされたモジ ュールの定義:
module Infrastructures
module Nid
end
end
この方法は、モジュールをネスト(入れ子)する形で定義しています。ここでは、Infrastructures
モジュールの内部に Nid
モジュールを定義しています。このスタイルは、親モジュール(この場合は Infrastructures
)がすでに定義されているか、同じスコープ内で定義される場合に使われます。
2. 修飾されたモジュール名を使用した定義:
module Infrastructures::Nid
end
こちらの定義方法では、修飾されたモジュール名(Infrastructures::Nid
)を使用して、モジュールを一行で定義しています。この方法は、親モジュールがすでに定義されている、またはその定義が不要な場合に便利です。ただし、このスタイルを使用する際には、親モジュール(Infrastructures
)がすでに定義されていることが前提となります。
主な違い
- 前提条件: 修飾されたモジュール名を使用する方法では、親モジュールがすでに存在している必要があります。ネストされた定義では、親モジュールが存在しない場合でも、その場で定義できます。
- コンテキストの明確化: ネストされた定義の方が、モジュールの階層が明確になります。これは、特に大きなアプリケーションや複雑な名前空間の構造を持つ場合に役立ちます。
どちらのスタイルを使用するかは、そのモジュールがどのような文脈で使用されるか、およびコードの可読性や整理のしやすさによって決まります。ただし、両者の間には機能的な違いはありません。モジュールの振る 舞いやアクセス可能性に影響を与えることはありません。
Railsオートロードするファイル(autoload_paths)
# Railsが自動で読み込むファイルは、以下のディレクトリ内にあるファイルです。
app/assets
app/channels
app/controllers
app/helpers
app/jobs
app/mailers
app/models
app/views
また、Railsの命名規則にしたがっているファイルも自動的に読み込まれます。具体的には、以下のようなファイル名に対応しています。
- モデル名の単数形.rb
- コントローラー名の複数形_controller.rb
- ヘルパー名の複数形_helper.rb
- ビュー名の複数形.erb、haml、slimなどのテンプレートエンジンの拡張子を持つファイル
- ジョブ名の複数形_job.rb
- メーラー名の複数形_mailer.rb
以上の命名規則にしたがって、自動的にファイルを読み込むことができます。ただし、ディレクトリ構造やファイル名が命名規則に従っていない場合は、明示的にrequireする必要があります。
autoload_pathsの仕様
autoload_paths
はディレクトリを自動で読み込むための設定であり、その中にあるファイルやモジュールまでは自動的に読み込むわけではありません。
ただし、モジュール名やファイル名がRailsの命名規則に沿っている場合は、明示的にrequireする必要はあり ません。ただし、独自の命名規則を採用している場合は、明示的にrequireする必要があります。
.ruと.rbの違い
.rbファイル
は、Rubyのソースコードが含まれるファイル
.ruファイル
は、Rackアプリケーションのエントリーポイントとして機能するRack upファイル
具体的には .rbファイル
はRubyスクリプトを作成するために使用され、Rubyコードを実行するために、Rubyインタープリターまたはコンパイラによって読み込まれます。
一方 .ruファイル
は、Rackアプリケーションのエントリーポイントであり、Webサーバーによって読み込まれ、Rackアプリケーションを起動します。
Rackは、Webアプリケーションのインターフェースとして機能する仕組みで、.ruファイルにはRackアプリケーションの情報が含まれています。.rbファイルとは異なり、.ruファイルには実際のアプリケーションコードが含まれていない場合があります。
RackとRakeの違い
RackとRakeは、Rubyのウェブ開発において異なる目的と役割を持つ2つの異なるコンポーネント。
Rack
Rackは、Rubyのウェブアプリケーションフレームワークとウェブサーバーの間のインターフェースを提供するライブラ リです。
Rackは、ウェブリクエストとレスポンスの処理を抽象化し、ウェブアプリケーションがさまざまなウェブサーバー上で動作することを可能にします。Rackは、ウェブアプリケーションのミドルウェアを管理し、リクエストの受信からレスポンスの生成までのプロセスを制御します。
Rake
Rakeは、Rubyのビルドツールおよびタスクランナーです。Rakeは、プロジェクトのビルド、テスト、デプロイメントなどの一連のタスクを定義し、実行するための機能を提供します。Rakeは、RubyのDSL(Domain-Specific Language)を使用してタスクを記述し、依存関係や実行順序などを指定できます。Rakeは特に、Ruby on Railsなどのフレームワークで頻繁に使用され、開発者が独自のカスタムタスクを作成してプロジェクトの自動化を行うための強力なツールとなっています。
要約すると、Rackはウェブアプリケーションとウェブサーバーのインターフェースを提供するライブラリであり、Rakeはビルドやタスクの自動化のためのツールです。両者は異なる目的を持ち、ウェブ開発においてそれぞれ重要な役割を果たしています。
最新Railsについて
Rails apiモード
以下の3つが行われる。
-
利用するミドルウェアを通常よりも絞り込んでアプリケーションを起動するよう設定する。特に、ブラウザ向けアプリケーションで有用なミドルウェア(cookiesのサポートなど)はデフォルトでは利用しません。
-
ApplicationControllerが通常のActionController::BaseではなくActionController::APIを継承します。ミドルウェアと同様、Action Controllerモジュールのうち、ブラウザ向けアプリケーションでしか使われないモジュールをすべて除外します。
-
ビュー、ヘルパー、アセットを生成しないようジェネレーターを設定します。
Rails 7.0 Node
importmap
Rails 7といえば、Node.jsを裏で使う必要がなくなった。
importmap-rails
が目玉のリリース。
importmap-rails
を使うことで、フロントエンドのJavaScriptのライブラリを管理してくれるようになる。
importmap-rails
これで初期化した Rails アプリには なんと、package.json, yarn.lock が存在し ない! その代わりに、config/importmap.rb にて以下の記載がある。
初期化
$ vim Gemfile
gem 'importmap-rails'
$ bundle install
$ bundle exec rails importmap:install
Rails 7.0 assetsまわり
webpackerはなくなっている!
参考URL JavaScript BundlingとCSS Bundlingのしくみ
railsではJS/CSSなどを総称してassetsと呼んでいる
Rails 5-6時代に使われたwebpackerは、公式に「has been retired」とされ、Rails 7では
importmap
が標準となりました。 Rails7はimportmapとは別に、JavaScriptのバンドラやCSSのフレームワークを導入するしくみを用意している。
Rails7.0でのアセット管理
Rails 7.0 では、新たに4つのGemが登場します。これまでとは異なり、開発者はこれらのGemを自分のプロジェクトに合う組み合わせで採用することになります。