Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ: Rails用のHTTP/2プロキシThrusterが登場、Rails Guidesが内容とスタイルを一新へほか(20240328後編)

こんにちは、hachi8833です。

週刊Railsウォッチについて

  • 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙏

TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)

🔗 Rails

🔗 Rails Guidesの構成やスタイルの大幅なリニューアルが進行中(Rails公式ニュースより)


つっつきボイス:「Rails Guidesのサイトデザインをリニューアルするという発表がありました」「お〜なるほど、デザイン面にも手をつけることにしたんですね: デザインも時代によって変わってくるので、リニューアルしていくのはいいと思います👍」「現在はedgeguides.rubyonrails.orgにのみ新デザインが反映されています↓」


https://edgeguides.rubyonrails.org/getting_started.htmlより


「このところRails Guides用のコンテンツではActive Record Basic GuidesやQuery Guideなどを構成から見直す形で内容の更新が進められていますね↓: たしかにRailsの歴史がこれだけ長くなってくると、一般的な定番の書き方も昔と違ってきたりしている部分もありますし、Rails Guidesに求められるものも変わってくると思いますし、特にActive Record周りはみんなが最もよく参照する部分なので、リニューアルは重要」「大幅な書き直しは気合も必要になってくるでしょうね」

🔗 Redisのライセンスが変更された


redis/redis - GitHub

つっつきボイス:「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より)

basecamp/thruster - GitHub

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開発環境構築


つっつきボイス:「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

Shopify/vscode-ruby-lsp - GitHub

「秘匿情報についてはちょうどBPS CTOのbabaさんが詳しい記事を書いていましたね↓」「秘匿情報はAWSのパラメータストアのようにプラットフォームに備わっている暗号化付きパラメータストアを使っていればさしあたって安全だと思います: ただマスターキーのような短い秘匿情報はパラメータストアに入れられるけど、長い秘匿情報は入らないので念のため」「それもそうでした」

secret_key_baseが漏れると何が起きるのか実際に試してみた

参考: 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の情報を参照してチェックしているようですね」「なるほど」

rubysec/bundler-audit - GitHub

rubysec/ruby-advisory-db - GitHub

🔗 IRB v1.12.0リリース


つっつきボイス:「st0012さんのツイートでIRBがさらに改良されたのを知りました」「helpメッセージが充実して、IRBで定義したメソッドもshow_sourceで表示できるようになって、.irbrcを複数の場所から読み込むようになった」


ヘルプの表示がriコマンドに依存しなくなったとリリースノートに書かれているのは、st0012さんが以前予告していた改修を指しているようです。riはrdocのドキュメント表示コマンドです。

参考: library rdoc (Ruby 3.3 リファレンスマニュアル)

🔗 attr_readerのケツカンマ


つっつきボイス:「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で運営のヘルプ募集か」「日常英会話もちょっとできるとなおいいそうです」


つっつきボイス:「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対応が進めば広がっていくんじゃないかな👍」

RailsのCSRF保護を詳しく調べてみた(翻訳)


後編は以上です。

バックナンバー(2024年度第1四半期)

週刊Railsウォッチ: Active StorageでIllustratorファイルをMuPDFとPopplerでプレビュー可能にほか(20240326前編)

ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。

Rails公式ニュース

Ruby Weekly


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。