- Ruby / Rails関連
週刊Railsウォッチ: RubyKaigi 2022開催情報、RDB参考資料、DNSのHTTPSレコードほか(20220329後編)
こんにちは、hachi8833です。RubyKaigi 2022の開催地と日時が本日公開されました。
🥷 RubyKaigi 2022 Updates: https://t.co/trngVMy3QQ
- We'll go back in-person, but continue to have virtual edition
- Published COVID-19 Policy, mandatory for all in-person attendees
- We're looking for sponsors— RubyKaigi (@rubykaigi) March 29, 2022
参考: COVID-19 - RubyKaigi 2022 -- 感染防止のためのポリシーや対策について説明しています
🔗 Ruby
🔗 RubyのWebAssembly/WASIサポートの更新情報(Ruby Weeklyより)
つっつきボイス:「先ごろRubyコミッターになったkateinoigakukunさん(ウォッチ20220126)のWebAssembly記事です」「ブログを日本語と英語の両方で書いている↓けど、上の記事は今のところ英語だけみたい」「FiberのWebAssembly実装などの詳細にも言及していて面白そう👍」
参考: WebAssembly向けのデバッガを開発しました - kateinoigakukunのブログ
「wasi-libcやwasi-vfsというのもあるのね: Rubyの場合ファイルシステムが使えないと追加のソースコードやgemのrequire
すらできないだろうから、こういうものが必要なんでしょうね」
「Optcarrot(Ruby製ファミコンエミュレータ)によるベンチマークも興味深い↓」「こうしてみると32-wasi版はネイティブmrubyとそんなに変わらないですね」「最適化の余地まだまだありそう」
「WasmでRubyを動かすとなるとバイナリサイズが気になりますね」「Rubyだと大きくなりそう」「実際に使う場合はCDNやクライアントキャッシュに乗せるでしょうし、GitHubみたいにリピーターが多いWebサービスほどキャッシュがよく効くでしょうね」
つっつき後に以下のツイートを見つけました↓。わずかなhtmlを書くだけでRuby Wasm/WASIで基本的なRubyが動きました(さすがにrequire
などはできませんでしたが)。
— おんがえし (@ongaeshi) March 21, 2022
🔗 ruby-rrule: RubyをiCalendarのrecurrence ruleに準拠させる(Ruby Weeklyより)
つっつきボイス:「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レビュー、ようやく1件目のコメントが入りました!とても嬉しいです😭書いてくださった方、どうもありがとうございます!
> 最新の事情に合わせて旧版から加筆されているので是非とも買い替えて読んでほしいです。とにかくオススメの本です。https://t.co/0X95kuW8oF
— Junichi Ito (伊藤淳一) (@jnchito) March 21, 2022
つっつきボイス:「Amazonレビューに書く人、意外に少ない」「ああ、jnchitoさんに同書を献本いただいたのにまだ2/3しか読み終わってない...レビュー記事遅れててすみません🙏」
「想像ですけど、jnchitoさんが自社でRubyの質問を受けたときにこの本のスクショかURLを貼って即回答するみたいな感じで活用しているのかなと思いました」「議論をするうえでベースとなる叩き台としても有用ですね: 叩き台のない議論は収束しなくなって時間を無駄にしがち」「ですよね」「手元に常備しておきたい書籍👍」
以下はつっつき後に見つけたツイートです。
Kindle版の「プロを目指す人のためのRuby入門 改訂2版」、少し割引されて販売されてるようです💰(3278円→3114円)https://t.co/vu01nVgXw4
— Junichi Ito (伊藤淳一) (@jnchito) March 24, 2022
🔗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エンジニアがビジネスロジックを書くようなプロジェクトとか、低レイヤで高度なトランザクション処理が必要になるときでもない限り、ストアドプロシージャを使うことはめっきり減りましたね」「ですね」「少なくとも業務でストアドプロシージャが必要だと思ったことは一度もないかな」
「この記事は、単にリンクを貼るだけではなく、賛否両論ある点もちゃんと断ったりと、ある程度以上内容を理解したうえで書いているのがいいですね👍」「地図としてありがたい」「エンジニア4年目でここまでまとめたのは見事」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 Docker Compose V2
つっつきボイス:「Docker Compose V2はそこそこ前からありますね」「自分も使おうと思えば使えるのか」「Docker Composeのバージョンが新しければ使えるはず」「Compose Specはドキュメントなんですね」
参考: Compose V2 | Docker Documentation
「secrets
やextends
などの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月刊ラムダノート – 技術書出版と販売のラムダノート
きこえますか…過去に「プロフェッショナルIPv6」をダウンロードするだけで満足して全く読んでいない、あなたの…心に…直接… 呼びかけています…
初版を読むのは諦めるのです…第2版をダウンロードして今すぐ読み始めるのです…
そして第I部「インターネットとIPv6の概要」だけでも読むのです…
— 小川晃通(あきみち)PhD。YouTubeでIPv6やTCP/IPの解説動画作ってます! (@geekpage) March 23, 2022
🔗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前編)
- 20220309前編 Crystal言語作者がRubyを愛する理由、TypeScript 4.6リリースほか
- 20220308前編 英国政府サイトで使われるRailsアプリ、pg-oscとPercona Toolkitほか
- 20220301後編 Ruby標準のCSVライブラリは優秀、if代入のコーディングスタイル、rambulanceほか
- 20220228前編 dartsass-railsがリリース、webpack-mergeツール、Rubyが29歳にほか
- 20220222後編: 端末文字幅とRubyのreline、SQLのプリペアドステートメント、Terraformほか
- 20220221前編 orderでコレーション指定をサポート、awesome_nested_set、GitHub Copilotほか
- 20220216後編 Bundler自身のバージョンロック機能、gem署名メカニズムの提案ほか
- 20220214前編 Rails 7.0.2の改修内容、receipts gemでレシートを作成ほか
- 20220209後編 Rubygems.orgのAPIキーに権限スコープが追加、RailsのDBパフォーマンス改善ほか
- 20220208前編 Rails 6.1を7.0にアップグレードしてみた、PostgreSQLでジョブキューほか
- 20220201後編 Rubygems Adoptionフォームが開設、JetBrains Gateway、NGINX Unitほか
- 20220131前編 Sidekiqが10歳に、BuildKiteのテストを高速化、フィーチャーフラグほか
- 20220126後編 Rubyコンパイラの歴史動画、RubyのWebAssembly対応進む、ぼっち演算子の注意点ほか
- 20220124前編 Webpackerが公式に引退宣言、『Everyday Rails』日本語版がRails 7に対応ほか
- 20220118後編 Ruby 2.5〜3.1ベンチマーク、Opal 1.4、JRubyが20歳に、2022年のCSSほか
- 20220117前編 rails-ujs->Turboアップグレードガイド、RubyとWeb Componentsほか
- 20220112 Rails 7をRuby 3.1で動かす、クックパッドのRuby 3.1解説記事、Rails 6->7更新ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)