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

週刊Railsウォッチ: attr_accessorが通常のメソッドより速い理由、ES2022の新機能ほか(20220628後編)

こんにちは、hachi8833です。

週刊Railsウォッチについて

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

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

🔗Ruby

🔗 attr_accessorが通常のメソッドより速い理由を理解する(Ruby Weeklyより)


つっつきボイス: 「attr_accessorを手動で実装して比較してみると、ネイティブのattr_accessorの方が速いんですね↓」「ネイティブのコードはいろいろ最適化が進んでいそう」

# 同記事より
                 user     system      total        real
attr_writer  0.316426   0.002821   0.319247 (  0.319398)
value=       0.424947   0.004253   0.429200 (  0.429279)

                 user     system      total        real
attr_reader  0.292869   0.002937   0.295806 (  0.295810)
value        0.349404   0.000952   0.350356 (  0.350363)

attr_accessorはバイトコードを生成していないのでオーバーヘッドが発生しないという結論: 単にベンチマークを取るだけでなく、理由の解明とその方法まで解説しているのがいいですね👍」

🔗 Rubyのパターンマッチング記事(Ruby Weeklyより)


つっつきボイス:「記事が結構長いので流し見ですが、後半でCSV::Rowのキーがパターンマッチで処理されているのが面白い↓」「雰囲気でパターンマッチングを使ってきたけど、こういう使い方はいいかも」

# 同記事より
# :call-seq:
#   row.deconstruct_keys(keys) -> hash
#
# Returns the new \Hash suitable for pattern matching containing only the
# keys specified as an argument.
def deconstruct_keys(keys)
  if keys.nil?
    to_h
  else
    keys.to_h { |key| [key, self[key]] }
  end
end
# 同記事より
require "csv"

data = CSV.parse(<<~ROWS, headers: true, header_converters: :symbol)
  Name,Department,Salary
  Bob,Engineering,1000
  Jane,Sales,2000
  John,Management,5000
ROWS
pp data.select { _1 in name: /^J/ } 
[#<CSV::Row name:"Jane" department:"Sales" salary:"2000">,
 #<CSV::Row name:"John" department:"Management" salary:"5000">]

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

destructure_keysは、定義しておくとパターンマッチで処理できるようになるメソッドですね」「RailsのActive Modelでも最近定義されていましたね(ウォッチ20220516)」

Rails 7: Active Modelにパターンマッチングが追加(翻訳)


「そういえばRuby Weeklyにもパターンマッチングで書いたJSONパーサーが紹介されていました↓」

参考: JSON parser with pattern matchingRuby Weeklyより)

🔗 TruffleRubyがM1向けにビルド可能に(Ruby Weeklyより)


つっつきボイス:「TruffleRubyもM1 Mac環境でビルド成功🎉」「2020年からやってたんですね」「TruffleRubyのベースになっているGraalVMの頑張りがそもそも凄い」「Oracleがオープンソースでここまで力を入れているのも興味深いですね」

参考: GraalVM

🔗 設計・セキュリティ

🔗 情報セキュリティ事故対応アワード

※本日17時開始につき、ウォッチ公開時には既に始まっているはずです🙏


つっつきボイス:「徳丸先生のツイートで知りました」「セキュリティ事故が起きたけど対応が素晴らしかった企業を表彰するイベント」「事故を防ぐ方ではなくて対応の方ですか」「審査員にも徳丸先生がいますね」

「そういえばUSBメモリ紛失の件がちょうどニュースになっていますね↓」「そうそう、Twitterにもいろいろ流れてます」

参考: USBメモリ紛失の尼崎市、記者会見でパスワードの桁数暴露 ネット騒然 「悪例として最高の手本」 - ITmedia NEWS

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

🔗 Kubernetesを使うにはまだ早い


つっつきボイス:「この記事は普段から感じていたことをうまく説明してくれていてよかった👍」

「結局Kubernetesは、それ専門に面倒を見てくれるSREエンジニアがいない状況ではいろいろ難しいと思います」「記事冒頭でも大は小を兼ねないと書かれていますね」「小規模チームでの導入は考えものという指摘も納得」

参考: SRE とは| Red Hat

🔗JavaScript

🔗 ES2022の新機能


つっつきボイス:「はてブでバズっていた記事です」「お〜みっちり書かれていますね👍」「JavaScriptを学べるjsprimer.netも早々にES2022に対応したそうです↓」

#でプライベートなフィールドを宣言できるようになってる」「名前でプライベートかどうかを分ける構文にしたんですね」「プライベートメソッドを明示的に書けるのはよさそう👍」

See the Pen
class field
by Takeshi Kano (@tonkotsuboy)
on CodePen.

「モジュールのトップレベルにawaitを書けるようになった↓」

# 同記事より
await new Promise((resolve) => {
  setTimeout(() => {
    alert("ヨーソロー!");
    resolve();
  }, 1000);
});

at(-1)で要素の末尾を取れるようになった↓」「RubyとかならmyArray[-1]みたいにやれるけど、JSに今までなかったんですね」「後方互換に配慮した結果こういう書き方になったんでしょうね」

# 同記事より
const myArray = ["りんご", "バナナ", "ぶどう"];
console.log(myArray.at(-1)); // ぶどう

hasOwn()でオブジェクトに指定のプロパティがあるかどうかをチェックできるようになった↓」「こういうのもJSになかったとは」

See the Pen
hasOwn
by Takeshi Kano (@tonkotsuboy)
on CodePen.

「さしあたって気になるのは、ES2022の新しい構文がBabelでどの程度変換できるか」「そこですよね」

参考: Plugins List · Babel

🔗言語/ツール/OS/CPU

🔗 GitHub Copilotが正式サービスに(Publickeyより)


つっつきボイス:「これでベータ登録してない人も使える🎉」「今後はサブスクが必要になるんですね」

「GitHub Copilotの設定にパブリックリポジトリからの学習結果を使うかどうかという項目があったので、パブリックリポジトリのコードで自分のコードが汚染されるのではという点については配慮している感じかな: ちなみに自分はオンにしましたけど」「ふむふむ」「学習に使われたコードのライセンスをGitHub側でどこまで厳密にチェックしているかはわかりませんが、徹底するのは難しいかもしれませんね」

「GitHub Copilotは便利なので有料になっても使いますけど、ひとつ悩ましいのが購入方法なんですよ: 現時点だとGitHubアカウントごとに個別の購入処理を行わないといけなくて、会社で一括購入して社員に割り振るといったことができない」「これは切実...」「社員のGitHubアカウントに会社のクレジットカード番号を入力するのも考えものですし、経費精算もGitHubの領収書はドル建てなので円で支払えないし」「このあたりはGitHubとMicrosoftに頑張って欲しい🙏」

🔗 Raspberry Pi Zero 2 W


つっつきボイス:「2,508円は安い」「でもあっという間に売り切れて買えなくなっちゃってますね」「狙ってたのに〜😢」

「基盤の大きさに合う手頃なサイズのディスプレイがなかなかないんですよね」「ラズパイ用のディスプレイは昔からあるけど本体より高いし」「スマホを外付けディスプレイとして使えたらいいのに」「タブレットでもそういう機能をあまり見かけませんね」「知人が買ったUMPCあたりの超小型ラップトップは珍しくディスプレイ入力が可能で、めちゃくちゃ羨ましかったのを覚えてます」「たしかに珍しい」「ディスプレイ入力できる端末がもっと増えて欲しいな〜」


後編は以上です。

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

週刊Railsウォッチ: Kaigi on Rails 2022がCFP公開、Discordの公式Railsサーバーが一般公開ほか(20220627前編)

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

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

Ruby Weekly

Publickey

publickey_banner_captured


CONTACT

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