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

週刊Railsウォッチ: RubyKaigi 2022開催情報、RDB参考資料、DNSのHTTPSレコードほか(20220329後編)

こんにちは、hachi8833です。RubyKaigi 2022の開催地と日時が本日公開されました。

参考: COVID-19 - RubyKaigi 2022 -- 感染防止のためのポリシーや対策について説明しています

週刊Railsウォッチについて

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

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

🔗 Ruby

🔗 RubyのWebAssembly/WASIサポートの更新情報(Ruby Weeklyより)


つっつきボイス:「先ごろRubyコミッターになったkateinoigakukunさん(ウォッチ20220126)のWebAssembly記事です」「ブログを日本語と英語の両方で書いている↓けど、上の記事は今のところ英語だけみたい」「FiberのWebAssembly実装などの詳細にも言及していて面白そう👍」

参考: WebAssembly向けのデバッガを開発しました - kateinoigakukunのブログ

「wasi-libcやwasi-vfsというのもあるのね: Rubyの場合ファイルシステムが使えないと追加のソースコードやgemのrequireすらできないだろうから、こういうものが必要なんでしょうね」

WebAssembly/wasi-libc - GitHub

kateinoigakukun/wasi-vfs - GitHub

「Optcarrot(Ruby製ファミコンエミュレータ)によるベンチマークも興味深い↓」「こうしてみると32-wasi版はネイティブmrubyとそんなに変わらないですね」「最適化の余地まだまだありそう」


同記事より

「WasmでRubyを動かすとなるとバイナリサイズが気になりますね」「Rubyだと大きくなりそう」「実際に使う場合はCDNやクライアントキャッシュに乗せるでしょうし、GitHubみたいにリピーターが多いWebサービスほどキャッシュがよく効くでしょうね」


つっつき後に以下のツイートを見つけました↓。わずかなhtmlを書くだけでRuby Wasm/WASIで基本的なRubyが動きました(さすがにrequireなどはできませんでしたが)。

ongaeshi/rubyonbrowser - GitHub

🔗 ruby-rrule: RubyをiCalendarのrecurrence ruleに準拠させる(Ruby Weeklyより)

square/ruby-rrule - GitHub


つっつきボイス:「recurrence ruleって何を繰り返すのかと思ったら、カレンダーで"毎週月曜日18:00"みたいなスケジュールの繰り返しのことでした」「iCalendarは昔からある標準仕様で、GoogleカレンダーやiCalなどのカレンダーアプリのデータ管理も準拠しています」「iCalendarにRFCもちゃんとあるとは知らなかった」

参考: RRULE(Recurrence Rule)
参考: RFC 2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) -- 4.3.10 Recurrence Rule

「このgemはRubyをその仕様で拡張してパースできるのね↓」「RFCを見るとWKSTがweekdayになっている」「謎の略語ですね」「この間のbiweekly(アメリカ英語)とfortnight(イギリス英語)みたいな英語圏の事情でもあるのかなと思ったら、どうやら週の開始日("ST"art)を指定するものみたい」

参考: RRULEに関するメモ書き - 前人未踏の領域へ WEB・インフラ・プログラミング全般編

# 同リポジトリより
rrule = RRule::Rule.new('FREQ=DAILY;COUNT=3')
rrule = RRule.parse('FREQ=DAILY;COUNT=3') # alternate syntax

🔗 その他Ruby

つっつきボイス:「Amazonレビューに書く人、意外に少ない」「ああ、jnchitoさんに同書を献本いただいたのにまだ2/3しか読み終わってない...レビュー記事遅れててすみません🙏」

「想像ですけど、jnchitoさんが自社でRubyの質問を受けたときにこの本のスクショかURLを貼って即回答するみたいな感じで活用しているのかなと思いました」「議論をするうえでベースとなる叩き台としても有用ですね: 叩き台のない議論は収束しなくなって時間を無駄にしがち」「ですよね」「手元に常備しておきたい書籍👍」


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

🔗DB

🔗 RDBのデータモデリング・テーブル設計の参考資料


つっつきボイス:「はてブでバズっていた記事です」「そうそう、これ読みました」「そーだいさんの書籍など要点を押さえていて、脳内インデックスによさそうですね」「『そもそも集合論的に更新はない』、言われてみればたしかに」

🔗 マスタとトランザクション

「マスタとトランザクションは、今どきほとんどがトランザクションになっているので、稼働中に一切変更を許さないような本質的なマスタは減ってきている印象」

🔗 更新と削除フラグ

「『更新日時が欲しいときはイベントが隠れている』はそのとおりで、こういうのがステータスを洗い出す参考になりますね」「『安易な削除フラグは死を招く』もよく言われるヤツ」

🔗 交差テーブル

「交差テーブルの『単に2つのテーブル名を重ねているだけで概念が隠れてしまっていないか』は、Rails wayというかActive Recordのデフォルトのあまりよくない側面でもありますね」「というと?」「交差テーブルが純粋にN対Nの関係を表すためだけのものであればいいんですが、交差テーブルそのものに意味がある場合は、Railsのデフォルトのような単に両者を結合する命名よりも、ちゃんと意味のある名前にする方が一般に望ましいんですよ」「たしかに」

交差テーブルには関連の意味を表す名前をつけよう - Qiita

🔗 JOINと正規化

「JOINと正規化も昔からある話題」「正規化はやりすぎ注意みたいなことを言われたりしましたね」

「今は理由がない限り正規化する方が望ましいです: 正規化するとJOINが重くなるというのは主に昔のMySQLの話で、OUTER JOINなどが絡むならともかく、今のRDBMSでは正規化してもJOINが目に見えて遅くなることはそうそうないと考えてよいと思います」「なるほど、Webで早くからMySQLが広く使われていたためにそう言われるようになったのかもしれませんね」「速度のために非正規化する必要性があるとしたら、今だと集計テーブルぐらいじゃないかな」

「かつてMySQLでJOIN禁止みたいなことが言われていたのは、昔のMySQLは複雑なJOINが苦手だったことが大きい」「昔のMySQLがどちらかというと特殊だったんですね」「PostgreSQLなどのような普通のRDBMSならJOINで速度が目に見えて落ちることはそうそうありませんし、最近のMySQLもInnoDBやBarracudaフォーマット登場などもあって昔のようにJOINが遅くなったりはしません」「なるほど」「特殊なことをするのでなければ普通は大丈夫」

参考: MySQL InnoDBファイルフォーマットBarracudaへの設定方法 | Go-Nextブログ

「もちろん、さっき触れた集計テーブルを使うときや、BIツールでたくさんのテーブルをJOINしてフラットに表示するときなどは考慮が必要になることもあります」「ふむふむ」「そういう一時テーブルを毎回生成すると負荷が大きくなるので、集計テーブルを使ったりマテリアライズドビューを使ったりといった工夫をすることになります」

参考:【図解】BIツール(ビジネスインテリジェンスツール)とは? 基本とメリット・デメリットを解説 | データで越境者に寄り添うメディア データのじかん

🔗 ストアドプロシージャ

「ストアドプロシージャは昔試しに使った後使わなくなりました」「Oracleあたりで使っているのは見たことがありますが、DBエンジニアがビジネスロジックを書くようなプロジェクトとか、低レイヤで高度なトランザクション処理が必要になるときでもない限り、ストアドプロシージャを使うことはめっきり減りましたね」「ですね」「少なくとも業務でストアドプロシージャが必要だと思ったことは一度もないかな」

参考: ストアドプロシージャ - Wikipedia


「この記事は、単にリンクを貼るだけではなく、賛否両論ある点もちゃんと断ったりと、ある程度以上内容を理解したうえで書いているのがいいですね👍」「地図としてありがたい」「エンジニア4年目でここまでまとめたのは見事」

🔗クラウド/コンテナ/インフラ/Serverless

🔗 Docker Compose V2


つっつきボイス:「Docker Compose V2はそこそこ前からありますね」「自分も使おうと思えば使えるのか」「Docker Composeのバージョンが新しければ使えるはず」「Compose Specはドキュメントなんですね」

参考: Compose V2 | Docker Documentation

compose-spec/compose-spec - GitHub

secretsextendsなどのV2の機能はまだ使ってないけど、extendsとかはあると便利そう👍」「yamlの設定を分割して読み込める感じですか」「docker-compose.ymlを複数に分けて組み合わせたいことは割とあるので、そのうち使ってみたい」

# 同記事より
services:
  app1:
    image: awesome/webapp
    configs:
      - my_config
    secrets:
      - server-certificate

  app2:
    image: awesome/database
    extends:
      service: app1

configs:
  my_config:
    file: ./my_config.txt

secrets:
  server-certificate:
    file: ./server.cert

🔗 書籍『プロフェッショナルIPv6 第2版』

参考: 超凄いIPv6解説書(488ページ)を無料配布します!:Geekなぺーじ

「この書籍をブクマで知って、n月刊ラムダノートのアカウントで買うと半額になるのでさっきポチりました」「これは前にも出ていましたけどV2になったんですね」「IPv6のネットワークを自分たちが組むことはほぼなさそうですけど」「IPv6は用語も違うものが多いし、1ホストが複数のアドレスを持つなど設計からして異なるので、要点ぐらいはチェックしておくとよいと思います」

参考: n月刊ラムダノート – 技術書出版と販売のラムダノート

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

🔗 HTTPSレコード


つっつきボイス:「この記事ははてブで話題になってましたけど、記事にもあるようにHTTPSレコードはまだRFCになってなくてドラフト状態」「まだSafariに実装されただけなんですね」「そろそろこういうものが欲しくなるのはワカル」

「以下のようにAレコードやAAAAレコードに加えてHTTPSレコードも使えるようになるというものですね↓」


同記事より

「現行のCNAMEレコードが不便だというのは前から言われていて、Zone Apex(example.com.のようなサブドメイン抜きのドメイン、いわゆるネイキッドドメイン)ではCNAMEレコードが使えないという問題があります」「Zone Apexには別名を付けられない仕様なんですね」「ちょうど以下の記事にもあるように↓、Zone ApexはNSレコードが必須で、CNAMEレコードは他のレコードと共存できないんですよ」

参考: CNAMEレコードにZone Apexをマッピングできない件について - サーバーワークスエンジニアブログ
参考: CNAMEレコード(Canonical Name record)とは - IT用語辞典 e-Words
参考: Zone Apex(ゾーンAPEX / ネイキッドドメイン)とは - IT用語辞典 e-Words

「記事にもあるように↓、CDNなどのサービスでCNAMEの設定が求められることがあるんですが、今話したようにZone ApexだとCNAMEが設定できないので困ってしまう」「HTTPSレコードにはその制約がないわけですね」

CDNやSaaSサービス等を利用する際に、これまでは事業者から「うちのサービスを使いたいならCNAMEレコードを登録してね」と要求されていましたが、将来的にはCNAMEではなくHTTPSレコードでの登録を求められるケースが増えてくると予想されます。そう要求されたのにDNSに登録する方法がないというのは困るので登録できるようにしました、というのがIIJ DNSプラットフォームサービスの今回のアップデートになります。
同記事より

参考: コンテンツデリバリネットワーク - Wikipedia

「HTTPSレコードは既にDNSトラフィックで3番目に多いと記事にも書かれていますが、CDNでの利用頻度が非常に多いからでしょうね」「なるほど」

「HTTPSレコードは今すぐ開発で必要というものではありませんが、長年できなかったことができるようになるし、ニーズも大きいので、RFCが出たら使う機会が増えそう」


「なおAWSのRoute 53にはaliasレコードという独自仕様があって、CNAMEでできないエイリアスを設定できます↓」「なるほど、Route 53がよく使われているのがわかる気がします」「DNSの仕様上はできないんですが、AWSのようにサーバーも含めて全部ひとつのサービスプロバイダで扱える環境なら、表向きはAレコードだけど内部でCNAMEのように機能させることが可能になります」

参考: Amazon Route 53(スケーラブルなドメインネームシステム (DNS))| AWS


後編は以上です。

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

週刊Railsウォッチ: Evil MartiansのDocker+Rails記事が大幅更新、Railsガイドが電子書籍でほか(20220328前編)

今週の主なニュースソース

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

Ruby Weekly

Publickey

publickey_banner_captured


CONTACT

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