- Ruby / Rails関連
週刊Railsウォッチ: attr_accessorが通常のメソッドより速い理由、ES2022の新機能ほか(20220628後編)
こんにちは、hachi8833です。
🔗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)」
「そういえばRuby Weeklyにもパターンマッチングで書いたJSONパーサーが紹介されていました↓」
参考: JSON parser with pattern matching(Ruby Weeklyより)
🔗 TruffleRubyがM1向けにビルド可能に(Ruby Weeklyより)
つっつきボイス:「TruffleRubyもM1 Mac環境でビルド成功🎉」「2020年からやってたんですね」「TruffleRubyのベースになっているGraalVMの頑張りがそもそも凄い」「Oracleがオープンソースでここまで力を入れているのも興味深いですね」
参考: GraalVM
🔗 設計・セキュリティ
🔗 情報セキュリティ事故対応アワード
2021年のインシデント対応を対象にした「情報セキュリティ事故対応アワード」を6月28日(火)17時~開催します。
なんと、今年は3団体が登壇してくださる予定です!https://t.co/gsgSvWOVH3
※ お申込締切は27日(月)15時です— 【公式】TECH+(セミナー情報) (@itsearch_mynavi) June 22, 2022
※本日17時開始につき、ウォッチ公開時には既に始まっているはずです🙏
つっつきボイス:「徳丸先生のツイートで知りました」「セキュリティ事故が起きたけど対応が素晴らしかった企業を表彰するイベント」「事故を防ぐ方ではなくて対応の方ですか」「審査員にも徳丸先生がいますね」
「そういえばUSBメモリ紛失の件がちょうどニュースになっていますね↓」「そうそう、Twitterにもいろいろ流れてます」
参考: USBメモリ紛失の尼崎市、記者会見でパスワードの桁数暴露 ネット騒然 「悪例として最高の手本」 - ITmedia NEWS
🔗クラウド/コンテナ/インフラ/Serverless
🔗 Kubernetesを使うにはまだ早い
Don’t use Kubernetes yet. Great read from @mattrickard about the application of Kubernetes to teams, particularly small ones and the (dis)economies of scale.https://t.co/1lHXK2fpkQ pic.twitter.com/rJQxc6hse9
— Kris Nóva (@krisnova) June 20, 2022
つっつきボイス:「この記事は普段から感じていたことをうまく説明してくれていてよかった👍」
「結局Kubernetesは、それ専門に面倒を見てくれるSREエンジニアがいない状況ではいろいろ難しいと思います」「記事冒頭でも大は小を兼ねないと書かれていますね」「小規模チームでの導入は考えものという指摘も納得」
参考: SRE とは| Red Hat
🔗JavaScript
🔗 ES2022の新機能
つっつきボイス:「はてブでバズっていた記事です」「お〜みっちり書かれていますね👍」「JavaScriptを学べるjsprimer.netも早々にES2022に対応したそうです↓」
https://t.co/jz2VoxJkk4 のウェブ版も今日リリースされたES2022に対応しました🚀
JSをES2022ベースで学べます。"JavaScript Primer 4.0.0: ECMAScript 2022に対応したJS本"https://t.co/sQIdoOtn5A
今後に向けた改善案とかレビュアーも募集してます!
リリースノート: https://t.co/It7A10VxaC
— azu (@azu_re) June 22, 2022
「#
でプライベートなフィールドを宣言できるようになってる」「名前でプライベートかどうかを分ける構文にしたんですね」「プライベートメソッドを明示的に書けるのはよさそう👍」
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でどの程度変換できるか」「そこですよね」
🔗言語/ツール/OS/CPU
🔗 GitHub Copilotが正式サービスに(Publickeyより)
つっつきボイス:「これでベータ登録してない人も使える🎉」「今後はサブスクが必要になるんですね」
「GitHub Copilotの設定にパブリックリポジトリからの学習結果を使うかどうかという項目があったので、パブリックリポジトリのコードで自分のコードが汚染されるのではという点については配慮している感じかな: ちなみに自分はオンにしましたけど」「ふむふむ」「学習に使われたコードのライセンスをGitHub側でどこまで厳密にチェックしているかはわかりませんが、徹底するのは難しいかもしれませんね」
「GitHub Copilotは便利なので有料になっても使いますけど、ひとつ悩ましいのが購入方法なんですよ: 現時点だとGitHubアカウントごとに個別の購入処理を行わないといけなくて、会社で一括購入して社員に割り振るといったことができない」「これは切実...」「社員のGitHubアカウントに会社のクレジットカード番号を入力するのも考えものですし、経費精算もGitHubの領収書はドル建てなので円で支払えないし」「このあたりはGitHubとMicrosoftに頑張って欲しい🙏」
🔗 Raspberry Pi Zero 2 W
2508円というラズパイらしい価格で出てくれた。が、案の定在庫切れだし、Amazonでは1万以上で売っている →
性能5倍の「Raspberry Pi Zero 2 W」が国内販売開始 - PC Watch https://t.co/UMULsEJi1l
— dragoner@1日目東シ77b (@dragoner_JP) June 21, 2022
つっつきボイス:「2,508円は安い」「でもあっという間に売り切れて買えなくなっちゃってますね」「狙ってたのに〜😢」
「基盤の大きさに合う手頃なサイズのディスプレイがなかなかないんですよね」「ラズパイ用のディスプレイは昔からあるけど本体より高いし」「スマホを外付けディスプレイとして使えたらいいのに」「タブレットでもそういう機能をあまり見かけませんね」「知人が買ったUMPCあたりの超小型ラップトップは珍しくディスプレイ入力が可能で、めちゃくちゃ羨ましかったのを覚えてます」「たしかに珍しい」「ディスプレイ入力できる端末がもっと増えて欲しいな〜」
後編は以上です。
バックナンバー(2022年度第2四半期)
週刊Railsウォッチ: Kaigi on Rails 2022がCFP公開、Discordの公式Railsサーバーが一般公開ほか(20220627前編)
- 20220621後編 VSCodeでRubyコード実行結果を表示、rubygems.orgがgem作者に多要素認証を呼びかけほか
- 20220620前編 GitLabがRailsにこだわる理由、Rails7アップグレードのハマりどころほか
- 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ウォッチタグ)