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

週刊Railsウォッチ: VSCodeでRubyコード実行結果を表示、rubygems.orgがgem作者に多要素認証を呼びかけほか(20220621後編)

こんにちは、hachi8833です。RubyKaigi 2022のCFPが一昨日締め切られました。

週刊Railsウォッチについて

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

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

🔗Ruby

🔗 Ruby's rstfilter extension: Rubyコードの各行の実行結果をその場で表示できるVSCode拡張


つっつきボイス:「Ruby's rstfilter extensionとは?」「VSCodeでRubyコードをその場で保存・実行して評価の結果を表示できるのか、これはシンプルで発想が面白い!」「いちいちシェルに戻らずに実行できるのがいいですね」

ppをRubyコードに追加すれば同じようなことはできますけど、ppって消し忘れがちなんですよね」「それ私だ」「こないだもやっちまいました」「リポジトリにプッシュしてプルリク出してから、レビュアーをアサインしようとして、ふと見るとppが残ってたりする」「あれは気まずいですよね😅」「ppがあったら基本的に消し忘れを疑うので、この間コードで正当なppが使われていたときも消し忘れかなと思いましたね」

参考: library pp (Ruby 3.1 リファレンスマニュアル)

🔗 rubygems.orgがメジャーなgemに多要素認証の設定を呼びかけ


つっつきボイス:「2022/06/13から、少なくとも上位100のメジャーなrubygemsパッケージメンテナーを対象に、多要素認証(MFA)が設定されていない場合は警告を表示するようにしたそうです」「この間から実施されると言われていたヤツですね: ライブラリを公開する人は多要素認証などで乗っ取りを防ぐの大事👍」

参考: 多要素認証 | 用語解説 | 野村総合研究所(NRI)

🔗 Rubyパーサーを作ってみた(Ruby Weeklyより)

つっつきボイス:「natalie_parserというパーサー↓を作ってみたという記事です」「C++で書かれてる」「コンパイラの勉強のために書いてみた感じがいいですね👍」

natalie-lang/natalie_parser - GitHub

🔗 言語つくりよもやま話

「ところで、記事中できっかけとなった以下の本と続編の『Writing a Compiler in Go』は一通りやってみたことがあって、yaccやbisonなどのお便利ツールを使わずにパーサーを手書きするあたりがとてもいい本でした」「大学の教科書でもそういう感じにコンパイラを作ったりしますね」

参考: Yacc - Wikipedia
参考: Bison - Wikipedia

「それまでクロージャは単なる副作用的な機能なのかなと思っていたんですが、明示的に実装する必要があることをこの本で初めて知りました」「クロージャを言語でサポートするには、lambda式や無名関数をどうするかなども含めていろいろ必要になってくるでしょうね」「著者がクロージャを実装するくだりでものすごく喜んでいたのが印象的でした」

参考: クロージャ - Wikipedia

書籍『Go言語でつくるインタプリタ』を写経してみた

🔗 最近のRubyコア事情: 4月版


つっつきボイス:「以前取り上げた(ウォッチ20220412)、Rubyコアの更新を追いかけている人の記事ですね」「ちなみに4月版となっていますが公開は5月でした」

「io-nonblock gemがRubyコアに入っていたのをこの記事で初めて知りました」「io-nonblockは文字通りノンブロッキングI/Oのライブラリですね: Ractorなどで使いたくなりそう」

参考: IO#nonblock (Ruby 3.1 リファレンスマニュアル)

ruby/io-nonblock - GitHub

最近のRubyコアの動向: 2022年3月版(翻訳)

🔗 Rubyで作るRISC-Vシミュレータ

つっつきボイス:「永和システムマネジメントのアジャイル事業部技術ブロクの記事です」「RISC-VシミュレータをRubyで作ったのか」「rv32simという名前で、RISC-Vのかなり小さなサブセットらしい」「こういうのは自分で作ることで理解が深まるのがいいですね👍」

thata/rv32sim - GitHub

参考: RISC-V - Wikipedia

「以前@tenderloveさんがx86 64のアセンブラREPL↓を作ってたのを思い出した(ウォッチ20211207)」「一度はこういうものを作ってみたくなりますよね」

tenderlove/asmrepl - GitHub

🔗DB

🔗 id, created_at, updated_atのベストプラクティス


つっつきボイス:「このあたりは昔からいろいろノウハウや考えるべきポイントがありますね: 知っておいてよい記事👍」「対象がMySQLは8.0.28以降で新しいけど、PostgreSQLはなぜか9.4以降と古めなのが面白い」

  • idとUUID

「UUID v4の衝突可能性はほぼ0%で時系列ソートは不可、そうそう」「UUIDに時系列ソートを求めるのは本来の目的から外れている気もしますね: そういうときはUILDULIDを検討してみてもいいかも」

参考: UUID - Wikipedia
参考: エンティティの識別子に ULID を使ってみよう

「PostgreSQLにはUUID型があるけどMySQLにはないんですよ」「MySQLでUUIDを使おうとすると割と大変」「UUIDを自動生成するときは関数を使うのが普通ですね」

参考: MySQL :: MySQL 8.0 Reference Manual :: 15.6.2.1 Clustered and Secondary Indexes

  • created_atupdated_at

created_atupdated_atは、タイムゾーンをどうするかも考えないと」「MySQLのDATETIME型は存在しない日時も入れることが可能で、TIMESTAMP型は実在可能な日時しか入れられなかったはず」

「そうそう、MySQLにはON UPDATE CURRENT_TIMESTAMPという便利な構文がありますね」「PostgreSQLにはないのか...」「記事にもあるように、PostgreSQLだとトリガーを3つも書かないといけなくなる」

参考: MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3.5 TIMESTAMP および DATETIME の自動初期化および更新機能

🔗 設計・セキュリティ

🔗 Hertzbleed攻撃


つっつきボイス:「元ツイートの見出しにはremote timing attackとあって、このHertzbleed攻撃を実証できたらしいけど、日本語記事を見てもよくわからない...」「CPUが負荷に応じて動的に周波数を変える仕組みは、サイドチャネル攻撃に使えそうな要素ではありますね」

 これは排熱に余裕のあるときにCPUが周波数を上げて処理速度を向上させたり、周波数を動的にコントロールして消費電力を削減する「周波数スケーリング」技術をターゲットにしたもので、幅広い製品に影響するという。
この脆弱性は、同じプログラムが状況によって異なるCPU周波数で実行され、その結果、処理の実測時間に変化が生じることから機密データを推測できるようになるというもの。研究者らによると、実際に「SIKE(Supersingular Isogeny Key Encapsulation)」アルゴリズムをターゲットに、リモートから鍵を抽出できることを実証したという。
同記事より

参考: サイドチャネル攻撃 - Wikipedia

「USENIX Security Symposiumで発表予定の論文が英語記事に出てた↓」「物理的なセンサーを近づけたりするのかなと思ったけど、論文を眺めた限りではそんな雰囲気ではなさそうですね」「詳しくはちゃんと論文読むしかないか...」

参考: PDF Hertzbleed: Turning Power Side-Channel Attacks
Into Remote Timing Attacks on x86


「ちなみに自分はUSENIXのYouTubeチャンネル↓を登録しているんですが、最近はここにもUSENIXの発表が載せられるようになっているんですよ」「お、これ登録します」「USENIX Security SymposiumでのHertzbleedの発表は今年8月と元記事に書かれているので、YouTubeにアップされるとしても先のことになりそうかな」

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

🔗 LastPassと1PasswordがFIDO/WebAuthnへの対応を発表(Publickeyより)


つっつきボイス:「そうそう、LastPassと1PasswordがWebAuthnに対応するそうですね」「WebAuthnの普及が進むのはいいことだと思います👍: スマホの指紋認証や顔認証と組み合わせられるようですし、今後そういうのを作る会社も出現するんじゃないかな」

参考: パスワード不要の認証「WebAuthn」とは?|「FIDO」の構成技術を解説|ブログ|NRIセキュア

「ちなみに自分は1Password使ってます」「私も」「Windowsだとそれほどメリットはないけど1Password使ってます」

🔗JavaScript

🔗 Node 16のサポート期間短縮


つっつきボイス:「BPS社内Slackでも話題になっていましたね」「2023年9月ってもう来年じゃないですか」「Node.jsとOpenSSLってそんなに強結合しているんだろうか🤔」

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

🔗 HTTP 関連 RFCの3行まとめ


つっつきボイス:「最近HTTP/3も含めてRFCがたくさん出ましたね(ウォッチ20220614)」「ところでRFCが10000番台になったら5桁にすんなり移行できるのかな?」「これはためになる解説👍」


  • RFC 9110: HTTP Semantics

「RFC 9110は、HTTPのリファクタリングで、その上にHTTP/3などの仕様が構築されたのか、なるほど」「RFC 9111: HTTP Cachingでmust-understandが追加されてる」「HTTP/2のPriorityがなくなってますね: 難しくて誰も使いこなせなかったということで下の方にあるRFC 9218でdeprecateされてる」「やっぱり難しかったんですね」

参考: HTTP2 のプライオリティ制御 - Qiita
参考: RFC 9110 — HTTP Semantics (日本語訳)


  • RFC 9114: HTTP/3

「HTTP/3は例のQUICを使っていて、QUICにTLS1.3が含まれているのでエンドツーエンド暗号化になっている、そうそう」「そういえばExpect-CTフィールドとかHPKPというのもあったな〜」

参考: Certificate Transparency の仕組みと HPKP から Expect-CT への移行 | blog.jxck.io
参考: HTTP/3 (RFC 9114) をざっくり翻訳してみた (前編) - Qiita


  • RFC 9205: Building Protocols with HTTP

「RFC 9205はベストプラクティス集なのか」「RFC形式のベストプラクティスって珍しい感じですけど」「こういう新しい仕様を定義しないようなRFCは、実はちょこちょこ出されていますね」「なるほど」

参考: RFC 9205 — Building Protocols with HTTP(日本語訳)


  • RFC 9211: The Cache-Status HTTP Response Header Field

「RFC 9211ではCache-Statusフィールドが定義された: 記事にもあるx-cache-hitはたしかVarnishでも使っていて、ここにhitやmissが入ることで、キャッシュにヒットしたかどうかがわかる」「なるほど」

参考: Private CDN | Varnish Software


  • RFC 9213: Targeted HTTP Cache Control

「RFC 9213のCDN-Cache-Controlは特定のキャッシュだけ有効にするフィールド: たしかに最近は多段キャッシュが当たり前になっていて、これまでCDNが独自拡張していた部分なので、標準化は必要でしょうね」


「3行でまとめてくれているのマジで助かる」「著者ががっつり勉強会を開催しているのも凄いですね↓」

🔗言語/ツール/OS/CPU

🔗 gron: JSONを行単位データに変換

tomnomnom/gron - GitHub


つっつきボイス:「JSONを1行1データに変換してgrepできるのは便利」「これはなかなかいい発想のツール: 1行1データのテキスト形式はUnixで長年使われていて実績もあるし高速化のノウハウもあるので、取り回しが利くのがいいですね👍」「これ、使おうっと!」


後で手元のwebmanifest.jsonを変換してみました。

# gron ./app/assets/stylesheets/webmanifest.json
json = {};
json.background_color = "#fff";
json.description = "An app to help proofreading in Japanese";
json.display = "standalone";
json.icons = [];
json.icons[0] = {};
json.icons[0].sizes = "192x192";
json.icons[0].src = "icon-192.png";
json.icons[0].type = "image/png";
json.icons[1] = {};
json.icons[1].sizes = "512x512";
json.icons[1].src = "icon-512.png";
json.icons[1].type = "image/png";
json.name = "enno.jp";
json.short_name = "enno";
json.start_url = ".";

後編は以上です。

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

週刊Railsウォッチ: GitLabがRailsにこだわる理由、Rails7アップグレードのハマりどころほか(20220620前編)

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

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

Ruby Weekly

Publickey

publickey_banner_captured


CONTACT

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