1. tanaken on Rails
  2. #007: Rails World 2024, devc..
2024-02-17 08:27

#007: Rails World 2024, devcontainer, ActiveRecord::Base.with_connection

00:07
こんにちは、tanakenです。 第7回のtanaken on Rails始めていきます。
今回は、2024年の2月17日の This Week in Railsを見ていきます。
いくつか紹介されてますが、 その中で3つピックアップしてお伝えします。
1つ目、タイトルが Ruby on Rails Apply to Speak at Rails World 2024 in Torontoですね。
こちらは、トロントで開催される Rails World 2024というイベントで、
スピーカーになりましょうというお知らせですね。
Rails World 2024は、2024年の9月26日と27日に カナダのトロントで開催されますと。
参加者は1000名程度を見込んでいるそうです。
3月21日まで、今から約1ヶ月後ぐらいまで スピーカーの募集をしているので、
申し込みページから応募してねと、 そんなお知らせでございました。
カナダのトロント、ちょっと行ってみたいですね。 9月26、27。
スピーカーとしてはなかなか難しい、 正直ちょっと自信ないですが、
参加者としては行ってみたいという気がしてます。
続いて2点目、タイトルがGenerate Dev Container Files by Defaultというプレリクエストです。
こちらはRailtiesに関する変更です。
新しいアプリケーションを作成するとき、 つまりRails newするときですね。
.devcontainerというフォルダと、 そのフォルダの中にコンテンツを作るようになりました。
.devcontainerフォルダには、 リモートコンテナで開発を行うために必要なものというのが
全て含まれていますよということですね。
具体的には次の4点です。
1つ目がkredis、アクションケーブルなどのkredisコンテナ。
kredisね、こちら、 このThis Week in Railsでも取り上げましたね。
続いて2点目、データベース。
SQLiteとかPostgres、 MySQLとかMariaDBなどのデータベースのコンテナ。
3点目がシステムテスト用のヘッドレスChromeコンテナですね。
e2eテストのコンテナってことかなと思います。
4つ目、ローカルディスクを使用するように、 データベースのコンテナを作成するために
03:02
4つ目、ローカルディスクを使用するように構成された、
ちゃんとプレビュー機能も動作するような アクティブストレージというのを
この4点のコンテンツが含まれていると。
この.devコンテナフォルダ、 このフォルダ配下のファイルを作らないよと、
このフォルダ自体も作らないよというオプションは、
スキップ.devコンテナというオプションを使ったら スキップできますよということでしたね。
コンテナ開発がスタンダードになっているよねという前提での、
Rails Generate、Rails Newでの機能追加ということになりますね。
最後3点目、タイトルが、
Add ActiveRecord://Base.withConnection as a Shortcutというタイトルのプレリクエストです。
こちらはアクティブレコードに関する変更です。
ActiveRecord://BaseクラスにwithConnectionというクラスメソッドが追加されています。
このメソッドに追加されたブロックの中だけ、
DBコネクションを作ることができるというもののようですね。
ちょっと理解が間違っていたらフィードバックください。
僕の理解だと、
一般的なRailsアプリケーションは、
というかこの機能が実装される前までは、
HTTPリクエストとかジョブが実行されるとき、
必要なDBコネクションを張ったら、
そのリクエストとかジョブが完了するまでずっとDBコネクションを維持しているというのが、
普通のこれまでの挙動だったと。
だけどこのwithConnectionメソッドを使うと、
このwithConnectionメソッドに渡したブロックの中だけDBコネクションを維持する。
ブロックを抜けたらコネクションを解放するということが実現できるようになると。
これ何が嬉しいかというと、
アプリケーションによっては、
DB接続をそんなに全然しませんというアプリケーションあると思うんですよね。
実際に具体例、一周のほうにもそういう話があったんですけど、
具体例というかもうちょっと具体的に言うと、
例えばサードパーティーのAPIを実行することに
ほとんどの時間を使っているようなアプリケーション。
例えばSNSとか、
XなりFacebookなりInstagramなり、
そこに入っているSNS外部のサービスのデータを多く使っていて、
06:04
ほとんどはそのアプリケーションではDB接続しないというようなパターン。
ちょっとだけはするけど、
ほとんどは外部のサードパーティーのAPIの処理に時間がかかっていますみたいなアプリケーションの場合に、
DB接続をずっと維持していると、
ほとんどは自前のDBにはつながっていないのに、
サードパーティーのAPIとかの時間の間もずっとDBコネクションを持ち続けるみたいな話になるよねと。
それってすごくもったいなくて、
だったら必要な接続が終わったらすぐコネクションを開放して、
処理を続けるっていう風にやってあげたら、
次の例えばそのアプリケーションで次のリクエストが来たときに、
DBコネクションが足りないみたいなことにならずに済むよねと。
早めに開放しているので、
他の複数の同時のリクエストとかが同時にジョブが走ったりしているときに、
必要なコネクションだけ買って必要なものが終わったらすぐ開放しましょうってやった方が効率的だよねというようなお話があります。
それを今回のwithConnectionというメソッドで実現できるっていうようなことが、
このプロジェクトでやりたかったことですねという風に理解しました。
という感じです。
3点紹介できたので、
今回はRailsWorld 2024があるよというスピーカーを申し込んでねというお話と、
RailtiesでRailsに入手するときにDevContainerというオプションが追加された。
DevContainerフォルダにコンテンツを作るようになったよという話と、
ActiveRecordWithConnection、BaseWithConnectionというメソッドについて紹介しましたという感じでございます。
よし、短くサクッとできました。
じゃあ今週のTanaken on Rails終わりにしたいと思います。
ではではまた来週。バイバイ。
08:27

Comments

Scroll