- Ruby / Rails関連
週刊Railsウォッチ: Kaigi on Rails 2023関連イベント情報公開、複合主キーのlocality解説記事ほか(20231018後編)
こんにちは、hachi8833です。
🔗 Rails
🔗 nokolexbor: nokogiri互換のHTML5パーサー(Ruby Weeklyより)
つっつきボイス:「Rubyで広く使われているnokogiri gemとAPI互換の高速HTML5パーサーだそうです」「Nokogiriの5.2倍高速で、CSSセレクタが最大997倍とある」「nokolexborという名前はどこから来たんだろうと思ったら、Readmeによるとlexborという別プロジェクトがあって、それをベースにしているようです」「新しいgemなので評価するには使ってみないとですね」
# 同リポジトリより
require 'nokolexbor'
require 'open-uri'
# Parse HTML document
doc = Nokolexbor::HTML(URI.open('https://github.com/serpapi/nokolexbor'))
# Search for nodes by css
doc.css('#readme h1', 'article h2', 'p[dir=auto]').each do |node|
puts node.content
end
# Search for text nodes by css
doc.css('#readme p > ::text').each do |text|
puts text.content
end
# Search for nodes by xpath
doc.xpath('//div[@id="readme"]//h1', '//article//h2').each do |node|
puts node.content
end
🔗 logster: DiscourseのRackログ表示(Ruby Weeklyより)
つっつきボイス:「Rackのログを表示できるgemだそうです」「routes.rbでmountしてやると、ブラウザ画面でRailsのログを可視化・フィルタできるんですね」「リポジトリはDiscourseなのね」「デモサイトを開いて左下のdebug
とかinfo
のチェックボックスをオンにするとログが見えた」「Rackで何かあったときに大量のデバッグログを生で見るのはつらいので、こういうツールをdevelopmentに入れて使ってみてもよさそう👍」
デモサイト: Logs -- logster.info
同リポジトリより
🔗Railsに複合主キーを導入する
つっつきボイス:「2020年のShopifyの記事ですが、7.1に入った以下のプルリクのコメントで知りました」「見たことあるような気がする記事」
「Rails 7.1に複合主キーをどうやって導入した話かなと思ったけど、データのlocality(局所性)の話が中心のようですね」「あ、そちらの方なんですね」
「一応、複合主キーの話ではあるけど、どのようにidを採番すればデータのlocalityを維持できるかといった話も含んだ最適化の話でしょうね: こういう図↓も複合主キーというよりは最適化に関連していますし」「なるほど」「マルチテナントを扱うときなどは、同じテナントのデータ同士はidがなるべく近い方がlocalityを高めるうえで有利なんですよ」「たしかに記事でもマルチテナントのことに触れていますね」
同記事より
🔗 Rails 7.1へのアップグレード記事
つっつきボイス:「TechRachoのリリース記事を引用いただいたので、はてなブックマークで見つけました」「お、早くもRailsを7.1にアップグレードしたんですね: この人はスムーズにアップデートできたみたいでよかった」「他にも7.1へのアップグレード記事を見かけたんですが、今見つからないので探しておきます」
見つけました↓。
参考: Rails 7.1 リリース後 1.5 時間での移行と今後 - stmn tech blog
🔗 その他Rails
- 元記事: devise/CHANGELOG.md at main · heartcombo/devise -- 7.1対応
- イベント: Events - Kaigi on Rails 2023
つっつきボイス:「1件目は、deviseが4.9.3でRails 7.1に対応したそうです」「お、今回は早いですね」「地味にありがたいアップデート」
「2件目は来週のKaigi on Rails 2023の関連イベントリストです」「ドリンクアップや音楽イベントなどの現地開催イベントが戻ってきた感ありますね🎉」「ご予約はお早めに」
One small Rails 7.1 upgrade hiccup - if you're using the new Rails.env.local? method and Rubocop, you will need to set custom environments in your Rubocop config: pic.twitter.com/rHqcbi4UFs
— Matt Solt (@mattsolt) October 6, 2023
「小ネタですが、Rails 7.1でRails.env.local?
が入ってきたのでRuboCopのコンフィグでも対応が必要だったそうです(#46786)」
In the Opening Keynote of the first #RailsWorld, Ruby on Rails creator and 37signals CTO @dhh covered a lot of ground, including introducing 7 major tools: #Propshaft, #Turbo8, #Strada, #SolidCache, #SolidQueue, #MissionControl, and #Kamal. Check it out: https://t.co/8trBLMcIPK
— Ruby on Rails (@rails) October 11, 2023
「The Rails Foundationが主催した第1回Rails Worldのキーノートスピーチです」「お〜、そういえば先週開催されてましたね」「Rails 7.1リリースもこれとタイミング合わせたんでしょうね」「他の動画は準備中だそうです↓」
🔗Ruby
🔗 オブジェクトシェイプに優しいRubyコードを書く(Ruby Weeklyより)
つっつきボイス:「Rubyのオブジェクトシェイプを活かす書き方だそうです」「インスタンス変数周りの書き方にコツがあるみたい」「今はRubyの内部実装がいろいろ変わりつつあるので、以前速かった書き方が今後そうでなくなったり、その逆のことが起きたりしそうですね」
# 同記事より
# Bad: Object Shape unfriendly
class GroceryStore
def fruit
@fruit = "apple"
end
def vegetable
@vegetable = "broccoli"
end
end
# The "Application"
alpha_store = GroceryStore.new
alpha_store.fruit # defines @fruit first
alpha_store.vegetable # defines @vegetable second
beta_store = GroceryStore.new
beta_store.vegetable # defines @vegetable first
beta_store.fruit # defines #fruit second
🔗 ruby-units: Rubyで単位を扱う(Ruby Weeklyより)
つっつきボイス:「名前の通りRubyで単位を換算するgemです」「フィートの換算やはりあった」「同じようなgem、きっと他にもあるはず」「私もそんな気がします」
# 同リポジトリより
unit = Unit.new("1") # constant only
unit = Unit.new("mm") # unit only (defaults to a scalar of 1)
unit = Unit.new("1 mm") # create a simple unit
unit = Unit.new("1 mm/s") # a compound unit
unit = Unit.new("1 mm s^-1") # in exponent notation
unit = Unit.new("1 kg*m^2/s^2") # complex unit
unit = Unit.new("1 kg m^2 s^-2") # complex unit
unit = Unit.new("1 mm") # shorthand
unit = "1 mm".to_unit # convert string object
unit = object.to_unit # convert any object using object.to_s
unit = Unit.new('1/4 cup') # Rational number
unit = Unit.new('1+1i mm') # Complex Number
後で探してみましたが、意外にもこれしか見当たりませんでした↓。
🔗言語/ツール/OS/CPU
🔗 Linux from scratch
これで思い出したけど、LFS (Linux from scratch) は本当に良い教材だと思うので、Linuxに興味があって、やったことない人にはおすすめです。最近改訂版が出ました。https://t.co/uaW1dA5yod https://t.co/Ld8J7RhQTT
— Yoshi Yamaguchi (@ymotongpoo) October 5, 2023
つっつきボイス:「Linux from scratchって、文字通りLinuxをゼロからビルドするんですね」「現在もさかんにアップデートされていてすごい」「今年の9月もアップデートしてる!」「ダウンロードページがわかりにくかったけどここにありました」「ついでに日本語版も見つけたんですが↓、こっちも同じぐらい積極的に更新されていますね」
参考: Project Web of LFSブック日本語版 on SourceForge.JP Web space
🔗 Fetch APIのPATCH
おもしろかった。
Fetch APIは「PATCH」だけ大文字と小文字の挙動が異なる https://t.co/6mMTdhRn8z
— Yusuke Wada (@yusukebe) October 7, 2023
つっつきボイス:「Fetch APIのうち、PATCHメソッドだけが大文字でないと動作しない理由を調べた記事です」「実装のせいでそうなっているのかと思いきや、仕様レベルでそうだったとは: ここまで調べ上げたのはすごい👍」
後編は以上です。
バックナンバー(2023年度第4四半期)
週刊Railsウォッチ: Active Storageのしくみを詳しく解説するDiscussion投稿ほか(20231017前編)
- 20231011 Rails 7.1.0リリース、YARPがprismにリネームほか
- 20131004 Rails 7.1.0.rc1と7.1.0.rc2がリリース、SQLite3コンフィグの最適化ほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)