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

週刊Railsウォッチ: Turbo Nativeアプリ、書籍『Everyday Rails Testing with RSpec』新版執筆開始ほか(20240227後編)

こんにちは、hachi8833です。今回の後編は翌週となりました🙇。

週刊Railsウォッチについて

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

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

🔗Rails

🔗 Solid QueueをDocker開発とHerokuで利用する(Ruby Weeklyより)


つっつきボイス:「Rails 8で導入されるSolid Queueを早速使ってみた記事だそうです」「HerokuはDockerイメージでもデプロイできるので、DockerでSolid Queueが動くのであればHerokuでも動くでしょうね」「ところで昨今はHerokuでDockerを使わずにアプリをデプロイしている人っているのかな?」「自分はまだHerokuでDockerなしのbuildpackベースでRailsアプリを動かしてます😅」

# 同記事より
services:
  # [...]
  solid_queue:
    build: .
    stdin_open: true
    tty: true
    command: bundle exec rake solid_queue:start
    depends_on:
      - database
    environment:
      - DATABASE_URL=postgresql://postgres@database
    volumes:
      - .:/usr/src/app
      - gem_cache:/gems

参考: Heroku buildpack | Heroku

Rails: Solid Queueで重要なUPDATE SKIP LOCKEDを理解する(翻訳)

🔗 Turbo NativeでWebアプリをストアに乗せる(Ruby Weeklyより)


つっつきボイス:「Turbo NativeはTurboを使うWebアプリをiPhoneアプリやAndroidアプリのストアに乗せられるようにする機能でHotwire/Turboのラインナップの1つですけど、日本語の情報をあまりみかけないですね」

Railsの技: "プログレッシブエンハンスメント"でHotwire的思考を身につける(翻訳)

「記事はTurbo Nativeはいいよという紹介にとどまる感じだけど、ストアで公開されているTurbo Nativeアプリのディレクトリが引用されている↓」「思ったよりいろいろリリースされているんですね」

参考: Turbo Native Directory

「37signalsのBasecampアプリやHEYアプリは当然というかiPhone版とAndroid版が両方あるのね」「TurboというかHotwireはRails以外でも利用できるけど、Turbo Nativeとの関係とか使い方がまだよくわからない...」

参考: turbo-ios/Docs/Overview.md at main · hotwired/turbo-ios
参考: turbo-android/docs/OVERVIEW.md at main · hotwired/turbo-android

hotwired/turbo-native-demo - GitHub

🔗 mission_control-jobs: Solid Queueと連携するActive Job用ダッシュボード(Ruby Weeklyより)

basecamp/mission_control-jobs - GitHub


つっつきボイス:「37signals(旧Basecamp)がみずからActive Job+Solid Queue用のダッシュボードを公開したんですね🎉」「たしかにこういうSidekiqのWebコンソールみたいなジョブダッシュボードは欲しいし必要👍」


同リポジトリより

🔗 書籍『Everyday Rails Testing with RSpec』の更新版が2024年にリリース予定


つっつきボイス:「お、Everyday Rails本が更新される👍」「この書籍はRails 3ぐらいの頃からありますけど、本当に絶えずアップデートを繰り返していますよね」

つっつき後に以下のXポストを見つけました。

🔗 その他Rails


つっつきボイス:「今年9月に開催予定の第2回Rails World 2024のCFP募集が公開されたそうです」「第1回はオランダのアムステルダムだったけど、今度はカナダのトロントで開催なのね」


「最近Railsの公式Xアカウントが#RailsTipというハッシュタグで便利技を随時公開していることに気づきました」「お〜、Rails 7.1でlog_file_sizeでログサイズに上限を設定できるの便利」「development環境とtest環境では100MiBがデフォルトだけど、それ以外の環境では上限が設定されていないんですね」「ログは油断するとギガサイズになっていたりするので、必要なら設定しておきたい👍」

参考: §3.2.40 config.log_file_size -- Rails アプリケーションの設定項目 - Railsガイド

🔗Ruby

🔗 emirb: ブラウザで動くIRB(Ruby Weeklyより)


つっつきボイス:「RubyコミッターのmameさんがemirbというブラウザIRBを作りました」「emscriptenとxterm.jsを使ってるのか」「言われてみればオートコンプリートなども含めてIRBをフルで動かすにはターミナル環境が必要ですね」

🔗 ruby.wasmでRuby Next Playgroundを構築(Ruby Weeklyより)


つっつきボイス:「Evil MartiansもRubyとWebAssemblyの記事を出していました(翻訳は近日公開予定)」「こちらはRuby Nextのプレイグラウンドを作ったのか」「RubyとWasm盛り上がってますね」「RubyがWasmで動くのはありがたい」

ruby/ruby.wasm - GitHub

「Wasmといえば、最近VSCodeのブラウザ版が、Wasm環境でx86環境をエミュレーションしてそこでDockerを動かすということを始めましたね↓」「お〜、そんなこともできるようになったとは」「そうそう、自分もこの記事見ました」「VSCodeそのものではなく、あくまでブラウザ版のVSCodeの話ですけどね」「ということはChromebookでも追加設定なしでブラウザ版VSCodeからDockerが使えるのか、凄い」

参考: Web版VSCodeがDockerコンテナをWASM環境で起動、Webブラウザ内ローカルマシンとして利用可能に。拡張機能「vscode-container-wasm」登場 - Publickey

ktock/vscode-container-wasm - GitHub

🔗 Rubyの__FILE__Ruby Weeklyより)


つっつきボイス:「Rubyには__FILE__とか__LINE__のような面白い疑似変数がありますよね」

# 同記事より
class_eval <<-RUBY, __FILE__, __LINE__ + 1
  def #{sym}(...)
    custom(Mime[:#{sym}], ...)
  end
RUBY

module_eval <<-CODE, __FILE__, __LINE__ + 1
  def #{option_name}
    options[:#{option_name}]
  end
  def #{option_name}=(value)
    options[:#{option_name}] = value
  end
CODE

参考: 擬似変数 -- 変数と定数 (Ruby 3.3 リファレンスマニュアル)

「個人的にはDATA__END__でコード末尾に生データを直接書けるのが好きかな↓」「そういえばこんな機能がありましたね」「知らない人が見たらびっくりすると思うけど、昔からRubyにある機能で、作り捨てのスクリプトでは結構便利👍」

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

# docs.ruby-lang.orgより
print DATA.gets # => 故人西辞黄鶴楼
print DATA.gets # => 烟花三月下揚州
print DATA.gets # => 孤帆遠影碧空尽
print DATA.gets # => 唯見長江天際流
DATA.gets       # => nil

__END__
故人西辞黄鶴楼
烟花三月下揚州
孤帆遠影碧空尽
唯見長江天際流

🔗 設計

🔗 GPSが1.5秒刻みで時刻をカウントする理由


つっつきボイス:「1秒刻みではなく1.5秒刻みとはこれいかに」「1週間は7日x24時間x60分x60秒=604,800秒なので、1秒刻みだと本来2進数では20bit(2^20=1,048,576)が必要だけど、1.5秒刻みにすれば19bitに収まるのね」「さらに航法メッセージでは17bitしか使えないという制約があるけど、時刻が1.5秒刻みで、かつ送信が6秒に1回になっていることで、倍数の関係で19bitの下位2bitが常に00になるので17bitで済むのか、へ〜!」「うまく考えたものですね」「たしかに送信が6秒に1回なら1秒刻みの解像度にする必要はないでしょうね」

🔗CSS/HTML/フロントエンド/テスト/デザイン

🔗 Turbo Laravel


つっつきボイス:「PHPのWebフレームワークとして有名なLaravelに、HotwireのTurboを乗せた人がいるそうです」「37signalsがやっているのかなと思ったけど独自に作ったっぽい」

hotwired-laravel/turbo-laravel - GitHub

「そういえばHotwireのヒントにもなったらしいと言われるLivewireというものは前からLaravelにもあるのを思い出しました↓(過去記事)」

参考: Livewire | Laravel Livewire

🔗言語/ツール/OS/CPU

🔗 書籍『Architecture and Design of the Linux Storage Stack』


つっつきボイス:「お、Linuxのストレージスタックに特化した本か: 特定のファイルシステムというより、VFS(virtual file system)から下を扱う感じのようで、SCSIまで取り上げているからハードウェアレイヤまでカバーしているっぽい」「Device MapperやI/Oスケジューラといったものも扱っているんですね」「このあたりを丁寧に解説した本は貴重そう👍」

  • 仮想ファイルシステム (VFS) と、それが実際のファイルシステムの抽象化レイヤとしてどのように機能するかを解説
  • ブロック層がファイルシステムと物理ストレージの間の仲介者としてどのように機能するかを理解する
  • ストレージメディアにリンクされた物理レイアウトとプロトコルを確認する
    Amazonより

参考: Small Computer System Interface - Wikipedia -- SCSI


後編は以上です。

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

週刊Railsウォッチ: form_withのmodelオプションへのnil渡しが非推奨化、Dockerfileでjemallocが有効にほか(20240221前編)

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

Rails公式ニュース

Ruby Weekly


CONTACT

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