- Ruby / Rails関連
週刊Railsウォッチ: VSCodeでRubyコード実行結果を表示、rubygems.orgがgem作者に多要素認証を呼びかけほか(20220621後編)
こんにちは、hachi8833です。RubyKaigi 2022のCFPが一昨日締め切られました。
Final Call: CFP for RubyKaigi 2022 closes at midnight today (in JST). Don't forget to submit your proposal(s) within 6.hours.from_now! 🥷💨 https://t.co/mLjIuqCsyM #rubykaigi
— RubyKaigi (@rubykaigi) June 19, 2022
🔗Ruby
🔗 Ruby's rstfilter extension: Rubyコードの各行の実行結果をその場で表示できるVSCode拡張
笹田さんの新作 / “rstfilter VSCode extension による新しい Ruby の開発体験のご紹介” https://t.co/gYuZGmVdZq
— Watson (@watson1978) June 13, 2022
つっつきボイス:「Ruby's rstfilter extensionとは?」「VSCodeでRubyコードをその場で保存・実行して評価の結果を表示できるのか、これはシンプルで発想が面白い!」「いちいちシェルに戻らずに実行できるのがいいですね」
「pp
をRubyコードに追加すれば同じようなことはできますけど、pp
って消し忘れがちなんですよね」「それ私だ」「こないだもやっちまいました」「リポジトリにプッシュしてプルリク出してから、レビュアーをアサインしようとして、ふと見るとpp
が残ってたりする」「あれは気まずいですよね😅」「pp
があったら基本的に消し忘れを疑うので、この間コードで正当なpp
が使われていたときも消し忘れかなと思いましたね」
参考: library pp
(Ruby 3.1 リファレンスマニュアル)
🔗 rubygems.orgがメジャーなgemに多要素認証の設定を呼びかけ
gemのセキュリティ強化のため、人気の高いgemの開発者はgemを管理するのに二要素認証(MFA)が必須になるようです。最近各所でライブラリに悪意あるコードが仕込まれてた、っていう話題が多いもんねえ。
Making popular Ruby packages more securehttps://t.co/grbwwH1S1g
— Junichi Ito (伊藤淳一) (@jnchito) June 13, 2022
つっつきボイス:「2022/06/13から、少なくとも上位100のメジャーなrubygemsパッケージメンテナーを対象に、多要素認証(MFA)が設定されていない場合は警告を表示するようにしたそうです」「この間から実施されると言われていたヤツですね: ライブラリを公開する人は多要素認証などで乗っ取りを防ぐの大事👍」
参考: 多要素認証 | 用語解説 | 野村総合研究所(NRI)
🔗 Rubyパーサーを作ってみた(Ruby Weeklyより)
つっつきボイス:「natalie_parserというパーサー↓を作ってみたという記事です」「C++で書かれてる」「コンパイラの勉強のために書いてみた感じがいいですね👍」
🔗 言語つくりよもやま話
「ところで、記事中できっかけとなった以下の本と続編の『Writing a Compiler in Go』は一通りやってみたことがあって、yaccやbisonなどのお便利ツールを使わずにパーサーを手書きするあたりがとてもいい本でした」「大学の教科書でもそういう感じにコンパイラを作ったりしますね」
参考: Yacc - Wikipedia
参考: Bison - Wikipedia
「それまでクロージャは単なる副作用的な機能なのかなと思っていたんですが、明示的に実装する必要があることをこの本で初めて知りました」「クロージャを言語でサポートするには、lambda式や無名関数をどうするかなども含めていろいろ必要になってくるでしょうね」「著者がクロージャを実装するくだりでものすごく喜んでいたのが印象的でした」
🔗 最近のRubyコア事情: 4月版
つっつきボイス:「以前取り上げた(ウォッチ20220412)、Rubyコアの更新を追いかけている人の記事ですね」「ちなみに4月版となっていますが公開は5月でした」
「io-nonblock gemがRubyコアに入っていたのをこの記事で初めて知りました」「io-nonblockは文字通りノンブロッキングI/Oのライブラリですね: Ractorなどで使いたくなりそう」
参考: IO#nonblock
(Ruby 3.1 リファレンスマニュアル)
🔗 Rubyで作るRISC-Vシミュレータ
Link: Rubyでできる!RISC-Vシミュレータの作りかた 〜 From 4649 To HELLO WORLD 〜 - esm アジャイル事業部 開発者ブログ https://t.co/XV5gN1cpJT
— Yukihiro Matz (@yukihiro_matz) June 11, 2022
つっつきボイス:「永和システムマネジメントのアジャイル事業部技術ブロクの記事です」「RISC-VシミュレータをRubyで作ったのか」「rv32simという名前で、RISC-Vのかなり小さなサブセットらしい」「こういうのは自分で作ることで理解が深まるのがいいですね👍」
「以前@tenderloveさんがx86 64のアセンブラREPL↓を作ってたのを思い出した(ウォッチ20211207)」「一度はこういうものを作ってみたくなりますよね」
🔗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_at
とupdated_at
「created_at
やupdated_at
は、タイムゾーンをどうするかも考えないと」「MySQLのDATETIME
型は存在しない日時も入れることが可能で、TIMESTAMP
型は実在可能な日時しか入れられなかったはず」
「そうそう、MySQLにはON UPDATE CURRENT_TIMESTAMP
という便利な構文がありますね」「PostgreSQLにはないのか...」「記事にもあるように、PostgreSQLだとトリガーを3つも書かないといけなくなる」
参考: MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3.5 TIMESTAMP および DATETIME の自動初期化および更新機能
🔗 設計・セキュリティ
🔗 Hertzbleed攻撃
これは凄い。CPUが負荷に応じて動的に周波数を変える仕組みを使い、命令の処理にかかる時間を測ることでデータを抜き取ると言う脆弱性がx86系プロセッサで実証されたと
名前もハートブリード脆弱性をもじって Hertzbleed にしているが洒落ている https://t.co/CIQ3L8Yrrs
— 堀 正岳(ほりまさたけ)@ めほり (@mehori) June 14, 2022
つっつきボイス:「元ツイートの見出しにはremote timing attackとあって、このHertzbleed攻撃を実証できたらしいけど、日本語記事を見てもよくわからない...」「CPUが負荷に応じて動的に周波数を変える仕組みは、サイドチャネル攻撃に使えそうな要素ではありますね」
これは排熱に余裕のあるときにCPUが周波数を上げて処理速度を向上させたり、周波数を動的にコントロールして消費電力を削減する「周波数スケーリング」技術をターゲットにしたもので、幅広い製品に影響するという。
この脆弱性は、同じプログラムが状況によって異なるCPU周波数で実行され、その結果、処理の実測時間に変化が生じることから機密データを推測できるようになるというもの。研究者らによると、実際に「SIKE(Supersingular Isogeny Key Encapsulation)」アルゴリズムをターゲットに、リモートから鍵を抽出できることを実証したという。
同記事より
「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にアップされるとしても先のことになりそうかな」
- YouTubeチャンネル: USENIX - 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を行単位データに変換
つっつきボイス:「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前編)
- 20220614後編 Rubyの実行モデル解説記事、shale gem、HTTP/3がRFC 9114にほか
- 20220613前編 Hotwireをアプリ構築で学ぶ、Active RecordのDurationとPostgreSQL intervalデータ型ほか
- 20220607後編 Shopifyのlanguage server ruby-lsp、PostgreSQL 15 Beta 1リリースほか
- 20220606前編 BasecampのHotwireページネーション、Query Object、Lograge gemほか
- 20220531 Railsコミュニティアンケート結果発表、書籍『Sustainable Web Development with Ruby on Rails』ほか
- 20220524後編 Railsコアチームとコミッターに新メンバー、ruby-buildでのRust YJITサポートほか
- 20220523前編 Hotwireの用途解説記事、RubyKaigi 2022プロポーザル募集開始ほか
- 20220517後編 rubygemsに「scoped gems」の提案、RSpecのブロック構文ほか
- 20220516前編 Active Modelで属性のパターンマッチをサポート、猫でもわかるHotwire入門ほか
- 20220511後編 Ruby 3.2.0devにRust版YJITがマージ、Docker Compose V2ほか
- 20220510前編 Active RecordにPromiseと非同期集計メソッドがマージ、climate_control gemほか
- 20220419後編 RubyのGCコンパクション改修、jemalloc、ReDoSの自動検出修正ほか
- 20220418前編 RailsConf 2022が5月17〜19日開催、認可機能解説記事ほか
- 20220412後編 HashieでRubyのハッシュを強化、最近のRubyコア解説記事ほ
- 20220411前編 Turbo Railsチュートリアル、Active Recordの「Leaky Abstraction」を削減ほか
- 20220406後編 RBS関連記事、Ruby formatterプロジェクト、Google Cloud Runほか
- 20220404前編 Ruby 3.2.0 Preview 1リリース、Rails向けDocker環境ジェネレータ、scientist gemほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)