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

週刊Railsウォッチ: AWS LambdaでRailsをRackで動かすLambyほか(20230705後編)

こんにちは、hachi8833です。

週刊Railsウォッチについて

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

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

お知らせ: 来週の週刊Railsウォッチはお休みをいただき、通常記事を公開します 🙇

🔗Ruby

🔗 rubyvideo.dev: Ruby関連動画リンクサイト(Ruby Weeklyより)


つっつきボイス:「このrubyvideo.devは、RubyKaigiの発表動画などさまざまなRuby関連動画を集めているそうです」「Rubyファンサイト的に情報を集約している感じかな」「ここで一般からも情報を募集しているそうです↓」

参考: rubyvideo/docs/contributing.md at main · adrienpoly/rubyvideo · GitHub

🔗 RubyGems.orgの更新情報(Ruby Weeklyより)


つっつきボイス:「RubyGems.orgがgemや自サイトの更新情報を定期的に掲載していることを今になって知りました↓」「お〜、月イチの更新情報に加えていろいろ情報がアップされているんですね👍」

以下は直近の更新情報です。

🔗 Rubyのinspectメソッドをinspectする


つっつきボイス:「thoughtbotの記事です」「とりあえずタイトルが楽しい😋」

参考: Object#inspect (Ruby 3.2 リファレンスマニュアル)

inspectpp(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のフォローアップイベントが開催されるそうです」「ピクシブさんのオフィスで8/19(土)に開催ですね❤️」

🔗DB

🔗 pg_easy_replicate: PostgreSQL向けのレプリケーション(Ruby Weeklyより)

shayonj/pg_easy_replicate - GitHub


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

rails-lambda/lamby - GitHub


つっつきボイス:「このLambyは前も取り上げた気がする: たしかpure Rubyコードを直接AWS Lambdaで動かすものでしたね」「あ、たしかに取り上げてました(ウォッチ20200331)」「RubyコードをRack上で動かすんですね」


lamby.cloudより

「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


以下はつっつき後に見つけたツイートです。

🔗 クックパッドの「Project Googrename」


つっつきボイス:「@sora_hさんの記事です」「お〜、これは大変な作業」「お疲れさまです」「こういう作業はリハーサルだけでもやることが山ほどあるんですよ」「cookpad.comとcookpad.jpの2つのドメインがあったのをcookpad.comに統合したんですね: 自分もドメインが2つあってユーザーがどちらでログインしたらいいかわからなくなった案件があったのを思い出した」

🔗言語/ツール/OS/CPU

🔗 intel-one-mono: インテルのオープンソースフォント(Ruby Weeklyより)

intel/intel-one-mono - GitHub


つっつきボイス:「なぜか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後編)

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

Ruby Weekly


CONTACT

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