こんにちは、hachi8833です。
お知らせ: 来週の週刊Railsウォッチはお休みをいただき、通常記事を公開します 🙇
🔗Ruby
🔗 rubyvideo.dev: Ruby関連動画リンクサイト(Ruby Weeklyより)
- サイト: Ruby Video
What a magnificent initiative!!! Congrats to the guys being https://t.co/E8OPITqI1Q! 💎♥️#ruby/#rails #rubylang #rubyonrails #sinatra #rubygems #rubyvideo https://t.co/VTuegTesf0
— ./RPA.rb (@rpaweb) June 19, 2023
つっつきボイス:「このrubyvideo.devは、RubyKaigiの発表動画などさまざまなRuby関連動画を集めているそうです」「Rubyファンサイト的に情報を集約している感じかな」「ここで一般からも情報を募集しているそうです↓」
参考: rubyvideo/docs/contributing.md at main · adrienpoly/rubyvideo · GitHub
🔗 RubyGems.orgの更新情報(Ruby Weeklyより)
つっつきボイス:「RubyGems.orgがgemや自サイトの更新情報を定期的に掲載していることを今になって知りました↓」「お〜、月イチの更新情報に加えていろいろ情報がアップされているんですね👍」
以下は直近の更新情報です。
- 3.4.15 Released - RubyGems Blog
- 3.4.14 Released - RubyGems Blog
- April 2023 RubyGems Updates - RubyGems Blog
🔗 Rubyのinspect
メソッドをinspectする
つっつきボイス:「thoughtbotの記事です」「とりあえずタイトルが楽しい😋」
参考: Object#inspect
(Ruby 3.2 リファレンスマニュアル)
「inspect
とpp
(pretty print)の違いがよくわかってなかったかも😅」「pp
が内部でinspect
を呼んでいますね: inspect
はあくまで文字列を返すメソッド」「なるほど」
参考: IRB::OutputMethod#pp
(Ruby 3.2 リファレンスマニュアル)
「"少しスパイスを効かせた例"では、inspect
を特定のクラスで自分用にカスタマイズしている」「"うんとスパイスを効かせた例"は、inspect
に出したくないデータをRailsのexcept
で抑制する、これは何かと便利」
# 同記事より: 少しスパイスを効かせた例
def inspect
# helpful for debugging, but not needed anywhere else
is_gmail = email.end_with? "gmail.com"
"#<#{self.class.name}> name: #{name} is_gmail: #{is_gmail}"
end
# 同記事より: うんとスパイスを効かせた例
def inspect
attributes.except(["created_at", "updated_at", "some_long_guid", "a_giant_json"]).to_s
end
「ちなみにinspect
のカスタマイズはやりすぎると激重になることがあるので要注意ですね: inspect
の中でSQLクエリを発行したりするとヤバい」「たしかに」
「名前空間がめちゃくちゃ深いものをinspect
でシンプルに表示する↓: 少々無理矢理な気もするけど面白い」
module Prefixes
module Out
module Of
module Control
class SomeClass
def inspect
self.class.name.gsub(/Prefixes::Out::Of::Control::/, "").to_s
end
end
end
end
end
end
# Before
Prefixes::Out::Of::Control::SomeClass.new
# <Prefixes::Out::Of::Control::SomeClass:0x000000010dbd7ca8>
# After
Prefixes::Out::Of::Control::SomeClass.new
# <SomeClass>
「Rubyのinspect
は広く使われているので掘り下げてみるといろいろ発見があると思います👍」
🔗 その他Ruby
[RubyKaigi 2023 follow up - connpass](https://t.co/BwTFg9J1gq) 夏に RubyKaigi で言ってた話の進捗報告会をしようというイベント、メインはオンラインですが、現地会場として pixiv さんをお借りします。また懇親会も pixiv さんでお世話になる予定です。
— _ko1 (@_ko1) July 3, 2023
つっつきボイス:「RubyKaigi 2023のフォローアップイベントが開催されるそうです」「ピクシブさんのオフィスで8/19(土)に開催ですね❤️」
🔗DB
🔗 pg_easy_replicate: PostgreSQL向けのレプリケーション(Ruby Weeklyより)
つっつきボイス:「gem名に機能が示されている感」「レプリケーション以外にも、switchoverオプションがあるのでデータベースの切り替えもできるらしい」
# 同リポジトリより
$ pg_easy_replicate
pg_easy_replicate commands:
pg_easy_replicate bootstrap -g, --group-name=GROUP_NAME # 実行時に必要な情報用の一時テーブルをセットアップ
pg_easy_replicate cleanup -g, --group-name=GROUP_NAME # 各グループでブートストラップしたデータをすべてクリーンアップ
pg_easy_replicate config_check # ソースとターゲットで必要なコンフィグが揃っているかどうかを表示
pg_easy_replicate help [COMMAND] # 利用可能なコマンドを表示(1個のコマンドも可)
pg_easy_replicate start_sync -g, --group-name=GROUP_NAME # ソースデータベースから、グループにプロビジョニングされているターゲットデータベースへ論理レプリケーションを開始
pg_easy_replicate stats -g, --group-name=GROUP_NAME # 指定のグループの統計情報をJSONで表示
pg_easy_replicate stop_sync -g, --group-name=GROUP_NAME # ソースデータベースから、グループにプロビジョニングされているターゲットデータベースへ論理レプリケーションを停止
pg_easy_replicate switchover -g, --group-name=GROUP_NAME # すべてのデータがflushされ書き込まれてからソースデータベースをリードオンリーにする
pg_easy_replicate version # バージョンを表示
「PostgreSQLのレプリケーションにはストリーミングレプリケーションとロジカルレプリケーションがあり、このgemはロジカルレプリケーションに相当する挙動を扱うもののようです: ロジカルレプリケーションはお互いのPostgreSQLバージョンが異なっていても同期できるので、PostgreSQLのバージョンアップでblue-green deploymentするときなんかの候補になると思います」
参考: 第3回「ロジカルレプリケーション」 | NTTデータ先端技術株式会社
参考: PostgreSQL 15ドキュメント: 第31章 論理レプリケーション
「こういう移行作業は手動でやるとミスしやすいので、使ってみてもよさそう👍」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 Lamby(Ruby Weeklyより)
つっつきボイス:「このLambyは前も取り上げた気がする: たしかpure Rubyコードを直接AWS Lambdaで動かすものでしたね」「あ、たしかに取り上げてました(ウォッチ20200331)」「RubyコードをRack上で動かすんですね」
「Lambyは、この間も取り上げたJets(ウォッチ20230608)と一見似ていそうだけど、Jetsはあくまで"Rails風"に書けるものなので、実際のRailsコードをRack上で起動する形で動かせるLambyとは違いますね」
参考: Ruby on Jets | The Ruby Serverless Framework
「Lambyを数年前に見たときより公式サイトのデザインが随分よくなってる気がしますね」「その後のAWS Lambdaも、INITフェーズで必要なモジュールやライブラリはまとめてloadしておいて、コンテナの2回目以降呼び出しでは素早くレスポンスを返すみたいなこともしていそうなので、もしかするとLambyにもそのあたりが反映されているかもしれませんね」
参考: Lambda execution environment - AWS Lambda
以下はつっつき後に見つけたツイートです。
Building out the new GitHub Lamby Community. New site now at https://t.co/uZhISR8SLP thanks to some CloudFront Lambda@Edge request viewer 301 redirects. pic.twitter.com/NQtEgpsSHi
— Ken Collins (@metaskills) April 29, 2023
🔗 クックパッドの「Project Googrename」
つっつきボイス:「@sora_hさんの記事です」「お〜、これは大変な作業」「お疲れさまです」「こういう作業はリハーサルだけでもやることが山ほどあるんですよ」「cookpad.comとcookpad.jpの2つのドメインがあったのをcookpad.comに統合したんですね: 自分もドメインが2つあってユーザーがどちらでログインしたらいいかわからなくなった案件があったのを思い出した」
🔗言語/ツール/OS/CPU
🔗 intel-one-mono: インテルのオープンソースフォント(Ruby Weeklyより)
つっつきボイス:「なぜかRuby Weeklyでこれが取り上げられていました」「インテルが出しているフォントとは珍しい」「波かっこ{}
の形が特徴ありますね↓」「丸かっこ()
もたわみが大きい」「小文字のo
が完全な円ですね」「ちょっとオシャレかも」
「Open Font Licenseを採用しているのか↓」「割りと新しいライセンスみたいですね」「コピーレフトだけど、フォントファイルを渡したり埋め込んだりするときはライセンス情報と著作権者情報を埋め込む必要があり、派生フォントには元のフォントの"予約されたフォント名"を含めてはいけないけど、それ以外は自由に使える: これはたしかにフォントに向いているライセンスという感じがしますね」
参考: SIL Open Font License - Wikipedia
参考: 「SILオープンフォントライセンス」って何?という方のためのざっくり解説 – たぬきフォント
後で調べると、Macではbrew install font-intel-one-mono
でインストールできました。
後編は以上です。
バックナンバー(2023年度第2四半期)
週刊Railsウォッチ: ruby_memcheckでネイティブgemのメモリリークを自動検出ほか(20230629後編)
- 20230628前編 複合主キーをスキーマから導出可能に、 DBアダプタの例外をconnection_poolに保存ほか
- 20230622後編 書籍『The Rails and Hotwire Codex』、JavaScript Primer改訂2版ほか
- 20230621前編 Action ViewのサニタイザがHTML Living Standard(旧HTML5)準拠にほか
- 20230614後編 RailsでApplication Layer Encryption、rubocop-factory_bot登場ほか
- 20230613前編 Arel::Nodes::Cteが追加、html_escape_onceの修正ほか
- 20230608後編 Jets v4リリース、頑張らない型導入、Rust言語からCrabがforkほか
- 20230607前編 MessagePackがcookieシリアライザとメッセージシリアライザにも導入ほか
- 20230531後編Rubyで環境変数を扱う、Web標準に「Baseline」ステータス追加ほか
- 20230525後編 Ruby 3.3.0-preview1リリース、in_order_ofのバグ修正ほか
- 20230524前編 withで作成したリレーションをjoinsで指定可能に、キャッシュストアの例外処理を統一ほか
- 20230502 スライド『Rails 7.1をn倍速くした話』、Rails 7.1でMessagePackをサポートほか
- 20230427後編 第1回Rails Worldが10月に開催、『研鑽Rubyプログラミング』でRuby本体も高速化ほか
- 20230425前編 Rails 7.1の複合主キー対応が引き続き進む、exceptメソッドにwithoutエイリアスが追加ほか
- 20230413後編 ShopifyのRubyパーサーyarp、RJITを書いた理由ほか
- 20230412前編 複合主キーの実装が進む、Rails公式のバグ再現用テンプレートほか
- 20230406後編 Rubyオブジェクトモデルクイズの最難問ほか
- 20230405前編 Arel::Nodes::NodeにAPIドキュメントが追加、rubocop-mdほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)