- Ruby / Rails関連
週刊Railsウォッチ: Rails用のHTTP/2プロキシThrusterが登場、Rails Guidesが内容とスタイルを一新へほか(20240328後編)
こんにちは、hachi8833です。
🔗 Rails
🔗 Rails Guidesの構成やスタイルの大幅なリニューアルが進行中(Rails公式ニュースより)
つっつきボイス:「Rails Guidesのサイトデザインをリニューアルするという発表がありました」「お〜なるほど、デザイン面にも手をつけることにしたんですね: デザインも時代によって変わってくるので、リニューアルしていくのはいいと思います👍」「現在はedgeguides.rubyonrails.orgにのみ新デザインが反映されています↓」
- 従来よりもクリーンで落ち着いたデザイン
- Railsホームページのフォントやカラースキームとの統合を進めた
- シンプルなナビゲーション
- サイドバーの「Chapter」がスクロールしても追従する
Ruby on Rails — Rails Guides get a faceliftより
「このところRails Guides用のコンテンツではActive Record Basic GuidesやQuery Guideなどを構成から見直す形で内容の更新が進められていますね↓: たしかにRailsの歴史がこれだけ長くなってくると、一般的な定番の書き方も昔と違ってきたりしている部分もありますし、Rails Guidesに求められるものも変わってくると思いますし、特にActive Record周りはみんなが最もよく参照する部分なので、リニューアルは重要」「大幅な書き直しは気合も必要になってくるでしょうね」
- 関連issue: Structuring the Active Record Query Guide · Issue #51262 · rails/rails
- PR: [RF DOCS] Active Record Basics Guide [ci-skip] by bhumi1102 · Pull Request #51226 · rails/rails(Rails公式ニュースより)
🔗 Redisのライセンスが変更された
つっつきボイス:「Rails以外でも広く使われているキーバリューストアデータベースであるRedisがライセンスを変更した件が話題になっていますね」「まだあまり追いかけていないけど、Redisを組織内で使う場合はRSALv2で、クラウドでサービスを公開する場合はSSPLv1というライセンスに変更されたというやつですね: SSPLというライセンスを最初に見かけたのはたしかMongoDBだったかな」「今調べたら、SSPLを最初に導入したのがMongoDBでした」「この記事でSSPLを解説してくれていますね↓」
参考: SSPLのライセンス条文とその適格性に関するメモ – Shuji Sado
「この記事によると、SSPLは"第三者へサービスとして機能を提供する場合"が対象で、その場合は"誰に対しても無償でネットワーク上で公開しなければならない"ということのようですね」「その点が、いわゆるオープンソースと言えるのかどうかと議論されているんですね」「どこからどこまでがSSPLに該当するかという解釈に幅があるという話も記事にあるけど、これもよくある話なんですよ」
「見た感じでは、RedisのSSPLv1は、クラウドサービスがRedisサービスを公開するみたいな場合には制約があるけど、少なくとも自分たちのアプリで内部にRedisを使ったりする分にはこれまでと変わらないんじゃないかな🤔」「なるほど」
参考: MongoDB: アプリケーション データ プラットフォーム | MongoDB
つっつき後に以下の記事が公開されているのを見つけました↓。
参考: Redisがライセンスを変更、BSDライセンスからRSAL/SSPLデュアルライセンスに | gihyo.jp
またSSPLv1はMongoDBなどが採用しているライセンスで、ソフトウェアを「サービス」の一部としてサードパーティが利用できるようにする場合、修正されたかどうかにかかわらず、そのソースコードをすべて公開する必要がある。公開範囲はユーザーがサービスのインスタンスを実行できるようにするすべての管理ソフトウェア、ユーザーインターフェイス、API、自動化ソフトウェア、監視ソフトウェア、バックアップソフトウェア、ストレージソフトウェア、ホスティングソフトウェアなどが含まれる。
このため、組織内でのRedisの利用についてはこれまでと同様だが、Redisをクラウドサービスなどで提供する場合は制限が適用されるケースが出てくることになる。
Redisがライセンスを変更、BSDライセンスからRSAL/SSPLデュアルライセンスに | gihyo.jpより(強調は編集部)
MongoDBについてはWikipediaで以下の項目を見つけました↓。
参考: ソースアベイラブル・ソフトウェア - Wikipedia
ソースコードが閲覧可能な状態で公開されたソフトウェアで、ソースコードを表示したり、場合によっては編集したりすることが出来るが、オープンソースと呼ばれる基準を必ずしも満たしているとは限らない[1]。
オープンソースではないソースアベイラブルの一例として、ソースコードは開示しているが、商用利用に制限があるソフトウェアなど。MongoDBやVagrantなどがある。
ソースアベイラブル・ソフトウェア - Wikipediaより
🔗 37signalsが公開したHTTP/2プロキシ"Thruster"(Ruby Weeklyより)
thruster: スラスター, 軌道修正・姿勢制御用小型ロケットエンジン; 押すもの, 押しの強い人
つっつきボイス:「37signalsがThrusterというものを公開していました」「記事を見た感じでは、HTTP/2をサポートしていて、アセット配信もできるプロキシのようですね」「ThrusterはGo言語で書かれているんですね」「なお、元記事で"Efficient static file serving via X-Sendfile
and compression"とあるのは、Nginxがやっているようなファイル転送を代行する機能のことですね: アプリケーションサーバーがファイルパスをリバースプロキシに返すと、リバースプロキシはそのヘッダを解釈してそこにあるファイルを返す」「なるほど」
$ thrust rails server
「Rails標準のPuma WebサーバーにこのThrusterを組み合わせれば、あの設定の面倒なNginxを使わなくてもNginxと同じようなことが楽にできて便利だよ、という感じかな」「ふむふむ」「ただSSLサポートと言いつつ、READMEを見るとSSL証明書は一度に1個しか設定できないようなので、マルチサイトをホスティングしたければサイトごとにSSL_DOMAIN
環境変数を設定したThrusterを起動しないといけなさそうに見えますね↓」「あら」
この唯一の例外はSSLプロビジョニングである。ThrusterがSSL証明書をプロビジョニングするには、それらの証明書がどのドメインに対応する必要があるかを知る必要があるので、SSLを使うには
SSL_DOMAIN
環境変数を設定する必要がある。この変数を設定しない場合、ThrusterはHTTP専用モードで実行される。
同READMEより
参考: Advanced Load Balancer, Web Server, & Reverse Proxy - NGINX
「Rails標準のPumaを使っていても、大規模に配信するサービスを構築していると結局パフォーマンスのためにアセット配信のためだけにでもNginxのようなリバースプロキシを手前に置きたくなるということなんでしょうね: とは言えNginxを毎回セットアップするのもトゥーマッチ感はあるので、Thrusterのように楽に使えるリバースプロキシが欲しくなるのはわかる」「37signalsが作っているのでRailsとの相性はよさそうですね」
つっつき後にpublickeyでも記事が出ました↓。
参考: Railsを高速かつセキュアにするHTTP/2プロキシ「Thruster」、37signalsがオープンソースとして公開 - Publickey
🔗 2024年のRails開発環境構築
- 元記事: 個人的Rails開発環境構築2024
つっつきボイス:「BPS社内のWeb開発チームのメンバーがRailsの環境構築でこの記事を参考にしつつ考えていたのを見かけました」「そうそう、Dockerコンテナを使ったRails開発環境のセットアップ方法はいろいろあるけど、こういうのも参考にしてよいと思います」
「記事にもありますけど、特に最近だとDevContainerが環境構築の手間を軽減するうえで何かと便利なので(ウォッチ20240228)、Dockerコンテナで開発するRailsアプリを新しくセットアップするならDevContainerを使いたいですね👍」「なるほど」
参考: Developing inside a Container using Visual Studio Code Remote Development
「VS Codeを使うならShopifyのvscode-ruby-lspも使うのがいいと思います↓」
参考: Ruby LSP - Visual Studio Marketplace
「秘匿情報についてはちょうどBPS CTOのbabaさんが詳しい記事を書いていましたね↓」「秘匿情報はAWSのパラメータストアのようにプラットフォームに備わっている暗号化付きパラメータストアを使っていればさしあたって安全だと思います: ただマスターキーのような短い秘匿情報はパラメータストアに入れられるけど、長い秘匿情報は入らないので念のため」「それもそうでした」
参考: AWS Systems Manager Parameter Store - AWS Systems Manager
🔗Ruby
🔗 RubySecのsecurity advisoryアーカイブ(Ruby Weeklyより)
つっつきボイス:「Rubyでこれまで修正されてきたCVEなどのsecurity advisoryがrubysec.comで大量にアーカイブされていますね」「rubysec.comといえばRuby gemのセキュリティチェックを行うbundler-audit gemと関係していそうですね」「ざっと調べてみると、rubysec.comはrubysec/ruby-advisory-db gemでセキュリティ情報をメンテしていて、bundler-auditはそのruby-advisory-dbの情報を参照してチェックしているようですね」「なるほど」
🔗 IRB v1.12.0リリース
I'm excited to announce the release of IRB v1.12.0! This version introduces several enhancements to the help command, an improvement I've been wanting to introduce for over a year 😄
For more details, check out the release notes:https://t.co/KFR5pYKjcT pic.twitter.com/I2gmaYQhil
— Stan Lo @st0012@ruby.social (@_st0012) March 7, 2024
つっつきボイス:「st0012さんのツイートでIRBがさらに改良されたのを知りました」「help
メッセージが充実して、IRBで定義したメソッドもshow_source
で表示できるようになって、.irbrc
を複数の場所から読み込むようになった」
ヘルプの表示がri
コマンドに依存しなくなったとリリースノートに書かれているのは、st0012さんが以前予告していた改修を指しているようです。ri
はrdocのドキュメント表示コマンドです。
参考: library rdoc (Ruby 3.3 リファレンスマニュアル)
🔗 attr_reader
のケツカンマ
今日ハマった問題についてブログ書いた /
20年Rubyを触ってきて初めて踏んだattr_readerのケツカンマ問題、あるいはdefの返り値がシンボルであることの問題 - joker1007’s diary https://t.co/UvyBBHlZVK#はてなブログ— joker1007 (アルフォートおじさん) (@joker1007) March 14, 2024
つっつきボイス:「GitHub Copilotが補完したコードにたまたまケツカンマが混入してハマったそうです」「うぁ、:fuga,
にカンマが残っていても例外が起きないとは...」「言われてみればたしかに構文的レベルではエラーじゃないんですけどね」
# 同記事より
class Foo
attr_reader :hoge, :fuga,
def initialize(a, b)
p a
p b
end
end
Foo.new
「せめてlinterでコードの形がこんなふうに大きく変わったら気付けたかもしれない↓: 解釈としてはこういうことになるはずなので」
#同記事より
class Foo
attr_reader(:hoge, :fuga, def initialize(a, b)
p a
p b
end)
end
Foo.new
🔗 その他Ruby
RubyKaigi 2024の当日、会場で運営のお手伝いをしてくださる方を募集します🌺 一般参加するのでは物足りないような Kaigi 大好きな方からのご応募をお待ちしています🙏
募集締め切り: 2024/4/12 23:59(JST) 予定https://t.co/KJ0OfwUHII#rubykaigi— RubyKaigi (@rubykaigi) March 20, 2024
つっつきボイス:「お、RubyKaigi 2024で運営のヘルプ募集か」「日常英会話もちょっとできるとなおいいそうです」
和田卓人様に講演いただいたRubyセミナー Onlineの録画を公開しました。当日参加できなかったみなさんもぜひご視聴ください https://t.co/RKW7DJksrP
— Ruby Association (@rubyassociation) March 14, 2024
どんな話になるか楽しみ~ オフラインでお会いしましょう(質問あったら事前にこっそり教えてください、受け答え考えておきたい) https://t.co/J2Lxo0gHNl
— Takafumi ONAKA (@onk) March 21, 2024
つっつきボイス:「1つ目はRuby Associationで開催されたセミナーに登壇したt_wadaさんの動画↓が公開されたというツイートで、2件目は4月に@onkさんが登壇するイベントです」「Ruby Associationの過去イベントリストが思ったより多くてびっくりしました」「onkさんのは"Rubyistめぐり"というタイトルで、もうvol.5なんですね」
🔗 設計・セキュリティ
🔗 最近のCSRF対策を学べるスライド
つっつきボイス:「BPS CTOのbabaさんが称賛していたスライドです」「PHPerKaigi 2024のスライドなのでPHPで説明していますが、内容的にはRailsにも通じますね: 従来はCSRF対策をアプリケーション層からcookieで行うのがパターンだった」
参考: PHPerKaigi 2024
「まだあまり使ったことないヘッダーもあるけど、ヘッダーでCSRF対策をやっていくのはより現代的というのはわかる↓」
「フレームワーク側でヘッダーによるCSRF対応が進めば広がっていくんじゃないかな👍」
後編は以上です。
バックナンバー(2024年度第1四半期)
週刊Railsウォッチ: Active StorageでIllustratorファイルをMuPDFとPopplerでプレビュー可能にほか(20240326前編)
- 20240313後編Rubyでシリアルポートにアクセス、Active Record vs Sequelほか
- 20240312前編 Rails 8に入るSolid Cacheほか
- 20240228 Rails 8でSprocketsがPropshaftに置き換わる、devcontainerサポートほか
- 20240227後編 Turbo Nativeアプリ、書籍『Everyday Rails Testing with RSpec』新版執筆開始ほか
- 20240221前編 form_withのmodelオプションへのnil渡しが非推奨化、Dockerfileでjemallocが有効にほか
- 20240207後編 aws-sdk-rubyの全gemにRBSファイルが追加ほか
- 20240206前編 Pumaのデフォルトスレッド数変更、Rails 1.0をRuby 3.3で動かすほ
- 20240125後編 RailsコントローラのparamsはHashではない、ruby-enumほか
- 20240123前編 Railsの必須Rubyバージョンが3.1.0以上に変更ほか
- 20240119後編 Ruby 3.3でYJITを有効にすべき理由、Turbo 8の注意点8つほか
- 20240117前編 Rails 8マイルストーン、2023年のRails振り返り、Solid Queueほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)