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

週刊Railsウォッチ:TruffleRubyでdig_fetchを実装、ruby/debug gem、AWSハンズオン教材ほか(20210901後編)

こんにちは、hachi8833です。遅ればせながら私もRubyKaigi Takeout 2021のTシャツを注文しました。

参考: Novelties - RubyKaigi Takeout 2021

週刊Railsウォッチについて

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

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

🔗Ruby

🔗 TruffleRubyでdig_fetchを実装して高速化

# 同記事より
def self.dig_fetch(obj, idxs)
  idxs_size = idxs.size
  n = 0
  while n < idxs_size
    idx = idxs[n]

    obj = obj[idx]
    if obj.nil?
      raise KeyError.new("key not found: #{idx.inspect}", :receiver => self, :key => idx)
    end
    n += 1
  end

  obj
end

つっつきボイス:「dig_fetchというメソッド名がスゴい」「Rubyのdigfetchはデータ構造が見えていれば高速化の余地はあるかも」「そういえばruby-jp Slackで最近Rubyのdigfetch周りが話題になっていたのを見かけた気がします」「お、知りませんでした」

参考: instance method Hash#fetch (Ruby 2.3.0)
参考: Hash#dig (Ruby 3.0.0 リファレンスマニュアル)

「TruffleRubyはOracle Labsがこれだけ精力的に手を加え続けているんだから、どこかのproductionで使われていてもよさそう」「気になりますね」

oracle/truffleruby - GitHub

後で探すと、ShopifyがTruffleRubyのproduction利用に向けて実験を重ねているという記事を見かけました。またRubyKaigi Takeout 2021でもShopifyのメンバーがTruffleRubyの正規表現について発表することになっています。

参考: Optimizing Ruby Lazy Initialization in TruffleRuby with Deoptimization — Development (2021)
参考: Just-in-Time Compiling Ruby Regexps on TruffleRuby -- Schedule - RubyKaigi Takeout 2021

🔗 ko1さんのdebug gemブログ


つっつきボイス:「ko1さんがruby/debugのブログを始めたそうです」「お〜、こういう情報が記事として記録されていくのは大事👍」「歴史大事ですね」「そうでないと端から失われていってしまうので」「relineを使ってdebugにREPL機能も追加されたのか」「記事でも紹介されているst0012さんのruby/debug紹介記事↓は近々TechRachoで翻訳を公開します」

参考: A Sneak Peek of Ruby's New Debugger! - DEV Community
参考: REPL - Wikipedia

ruby/reline - GitHub

🔗 その他Ruby


つっつきボイス:「大倉さんがRubyConf 2021に登壇🎉」「英語で登壇つよい」「RubyConf 2021はオンラインとオフライン両方で開催とは頑張ってる」「開催地のデンバーは米国コロラド州で、州の布告に基づいてイベント開催してるようですね」

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

🔗 Amazon MemoryDB for Redis


つっつきボイス:「Amazon MemoryDB for RedisはRedisの互換実装によるサービスで、先々週ぐらいに発表されていましたね: 値段はお安くないですが、Redisを自前で立てると運用が大変なので、こういうサービスはやはり便利だと思います👍」

🔗 東大のAWSハンズオン教材


つっつきボイス:「このAWSハンズオン教材は昨年公開されていたヤツかな」「ホントだ、2020年となってました」「東大クラスでないとなかなかこれだけの教材は用意できないでしょうね」「特に考えなくても上から順にやっていけば終わるので、東大の単位としては取りやすい方かも」「たまに考えないといけない場面で詰まるかもしれないので、TAやSAのサポートは必要かもしれませんね」

参考: 大学職員のTA・SAの仕事の違いは? | 大学職員の仕事・なり方・年収・資格を解説 | キャリアガーデン

「逆に東大のCPU実験授業はCPUつくってコンパイラつくって動作テストするところまでやるというエグさ」「そうそう、東大の名物授業」

参考: ほんとうのコンピュータ自作/CPU実験 -- 東大 理学部情報科学科/大学院情報理工学系研究科|情報科学科NAVIgation

「東大のAWSハンズオン教材は、内容の賞味期限が切れないうちにやるのがいいと思います👍」「そうそう、今年なら十分いける」「こういうハンズオン授業は教材アップデートのためにも毎年やって欲しいですね」

🔗 その他クラウド

つっつきボイス:「Dockerfileでヒアドキュメントが書ける機能が正式にリリースされた🎉」「これで&& \を書かなくてよくなりますね」「変数展開もできる↓」「今までなかったのが不思議だったぐらい」

# moby/buildkit READMEより
# syntax = docker/dockerfile:1.3-labs
FROM alpine
ARG FOO=bar
COPY <<-eot /app/foo
    hello ${FOO}
eot

参考: Dockerで新しくサポートされるようになったヒアドキュメントを試してみました。 | オスースBlog

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

🔗 ブラウザのデザインモード


つっつきボイス:「これ今頃知りました」「ブラウザコンソールでdocument.designMode = "on"を入力するとブラウザが編集可能になるのね」「ずっと以前からHTMLElement.contentEditableという属性を使うとどの要素でも編集可能にできますけど、designModeは初めて見た」

参考: Document.designMode - Web API | MDN
参考: HTMLElement.contentEditable - Web API | MDN

「ちなみにブラウザ用WYSIWYGエディタによってはHTMLElement.contentEditableを使って実装しているものがあります」「お〜」「しかもHTMLElement.contentEditableを使うとHTMLのスタイルタグも自動的に付けられるのでHTML的に扱いやすいんですよ」

HTMLElement.contentEditableは相当昔からあった」「IE5の独自仕様だったのが取り入れられたという記事↓があったのでかなり古そう」「document.designModeもMDNにIE6に関する記述があるので同じぐらい古そうですね」

参考: HTMLのcontenteditable属性 - 備忘帳 - オレンジ工房
参考: "contentEditable" | Can I use... Support tables for HTML5, CSS3, etc

🔗言語/ツール/OS/CPU

🔗 クラック


つっつきボイス:「朝起きたら自宅の3Dプリンタからこんなのが出力されてビビったというReddit記事だそうです」「あぁクラックされたのね」「これはビビる」「普通のネットワークプリンタなんかもクラッキングされやすいという話は昔からありますけどね」

「ところで3Dプリンタも昔よりだいぶ使いやすくなりましたよね」「自宅に置くまではまだやれてないです」「よく使うなら買いたいけど、まだそこまではいかない」「コンビニで3Dプリントできたらいいんですけどね」「専有時間が長いから難しいんじゃないかな」「専門店で3Dプリントやったことならあります」「試行錯誤やトラブルシュートとかも考えると、最初はサポートのある場所でやってみるのがいいかもですね」


後編は以上です。

バックナンバー(2021年度第3四半期)

週刊Railsウォッチ: Rails 7でのimport maps導入、Steepで型を導入、KubernetesでRailsを動かすためのガイドほか(20210830前編)

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


CONTACT

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