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

週刊Railsウォッチ:書籍『Polished Ruby Programming』、DragonRuby、ES2021の新機能ほか(20210629後編)

こんにちは、hachi8833です。

週刊Railsウォッチについて

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

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

🔗Ruby

🔗 VSCodeのRubyデバッガextension「VSCode rdbg Ruby Debugger」


つっつきボイス:「@ko1さんのRubyデバッガがリリースされました🎉」「早くもやってみた記事が出てますね」「binding_pryで頑張らなくてもいいのか:後で入れようっと」「ツイートでちょくちょく進捗を横目で見ていました」「私もです」「自分はVSCode使っていないけど、もっといろんなやってみた記事が出て使用感がわかるといいですね」

「以下も見つけました」「ivarはインスタンス変数」「Rubyで参考実装を作ってみるとこういうこともわかってきたりしますよね: パフォーマンスは後からが基本」

🔗 DragonRuby


dragonruby.orgより


つっつきボイス:「おー、DragonRubyはRubyMotionと同じ人たちがやってるのね」「mrubyベースのクロスプラットフォームなRubyランタイムか」「AndroidやラズパイやWasm(WebAssembly)やNintendo Switchでも動くのか」「名前がかっこいい」「ドラゴンのロゴもイケてますね🐉」

「DragonRuby Game Toolkitも出してるのね↓」「これでRubyのゲームが書けるのか〜」「最近のゲームのクレジットでRubyのコードが使われているのをたまに見かけますね」「そうそう、あります」「これもそういう感じで使えそう」「Toolkitは有料なんですね」「こういう組み込みのニーズは確実にあるので、必要な人は買ってみてもいいでしょうね」

「このあたりの話題をRubyKaigiで見たような記憶があったな🤔」「RubyでSWITCHのゲーム作る話していたのを見ました〜↓」

参考: Building a game for the Nintendo Switch using Ruby - RubyKaigi 2019


後で知りましたが、以下によると「月収1000ドル以下」「学生」「熱狂的ラズパイ使い」のいずれかであれば申請のうえで無料ライセンスを発行してもらえるそうです。

DragonRuby/dragonruby-game-toolkit-contrib - GitHub

🔗 DWARF

以下のツイートで気になりました。


つっつきボイス:「DWARFはデバッグ情報保存方式の標準で、ものすごく昔からあります」「サイトが昔っぽいのでそんな気がしてましたが、そうでしたか」「DWARFの規格そのものはよく知りませんが、CやC++などのデバッガでこの用語が頻出していたのを覚えてます」「DWARFについて調べていて以下のサイトを見つけました↓」「@k0kubunさんだ」

参考: Rubyist Hotlinks 【第 38 回】国分崇志 さん -- DWARFについての記述あり
参考: デバッグ情報の歩き方 - Qiita

🔗 書籍『Polished Ruby Programming』予約受付中


つっつきボイス:「7/9に発売予定の書籍だそうです」「著者はあのJeremy Evansさんか!」「Jeremyさんといえば、RubyKaigiのクロージングキーノートで超濃い話をしていたのが忘れられません↓」

参考: Optimization Techniques Used by the Benchmark Winners - RubyKaigi 2019

「ググったらamazon.comの方が出てきたけど、amazon.co.jpで検索し直したら出てきた↓」「amazon.comで買うとKindleアカウントが別になっちゃうから不便ですよね」「そうそう」

「Jeremyの本なら相当期待できそう」「日本語版ないのかな〜」「まだpreorder中ですから😆」「お、こんないいものを発見↓」「@kakutaniさんが依頼を受けてこの本を査読した記録なんですね」「これはありがたい」「kakutaniさんが翻訳するのかな?」「この分量でこの内容だとある程度時間はかかりそうですね」

参考: Polished Ruby Programming翻訳査読書(のようなもの)

「おぉ、この査読書を見た感じではかなりよさそう👍」「しかもRuby 3.0対応ですって」「"現状で入手しやすい類書は特にない"、自分もそう感じますね」「なるほど」「"適切な変数の使い方"みたいな視点のある本はあまり見かけたことがありませんし、Rubyの本は書き味の話からメタプロの話に進むことがよくあるんですが、この本はどちらかというとRubyのしくみにより近いところを追っているように思えました」「書籍のコード例のリポジトリまで公開されてるんですね↓」

PacktPublishing/Polished-Ruby-Programming - GitHub


@kakutaniさんは以下の書籍の共訳も手掛けました。

🔗DB

🔗 スライド『SQL Training 2021』


つっつきボイス:「BPS社内Slackに貼っていただいたスライドです」「枚数が凄いですね」「157ページってもう技術書並かも」「スライドなので書籍のようなまとめ方とは違いますが、大事なことはひととおり盛り込まれているようなので、データベースをまったく知らない人向けの資料としてよさそう👍」

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

🔗 GitHub Issuesの強化


つっつきボイス:「GitHub issueの強化、今日見かけたのでとりあえずベータ登録してみました」「私も登録しました」「これは何が変わるんでしょうか?」「まだ情報があまりなさそうですが、issue tracker機能が拡張されてJiraのような感じでリッチに管理できるようですね」「へ〜」「GitHub Codespacesもベータ登録したけどまだ結果出てないんですよね: GitHub issueの強化はいつお試しできるかな?」

参考: Jira | 課題 & プロジェクト追跡ソフトウェア | Atlassian

「こういう高度な機能はGitLabが先行していることが多くて、"GitLabですべてできる世界"を目指しているところがありますが、GitHub Codespacesやこれを見ているとGitHubもそういう世界を目指すことにしたのかもしれませんね」「なるほど」

「ちなみに弊社では、開発者向けのissue管理と、顧客と行う上流工程向けのissue管理を分けていることがよくあります: 開発者向けはGitHub Issuesでいいと思うんですが、上流工程向けのissue管理は取り扱いの敷居がもう少し低いものが望ましいので、Backlogを使うこともよくあります↓」「Backlog使ってますね」

参考: タスク管理、ファイル共有もできるプロジェクト管理ツールBacklog

🔗JavaScript

🔗 ES2021が正式な仕様に


つっつきボイス:「そうそう、ES2021がapproveされましたね」「何か変わるんでしょうか?」「ブラウザには既に新機能が実装されているので何かが急に変わるわけではなくて、仕様として正式なものになったということですね」「あ、なるほど」「すぐ消える心配なしに安心して新機能を使えるようになったのはいい👍」

参考: Ecma International approves new standards - Ecma International

_で桁区切りできる機能はRubyでお馴染みですね」「見覚えあります」「replaceAll()もどことなくRubyっぽいかも」「文字列操作メソッドはいくらあっても足りないぐらいですよね」

// 同記事より
100_000_000;  // 1億(100,000,000)

Promise.anyもよさそう」

// 同記事より
Promise.any([
  promise1, promise2, promise3
]).then(first => {
  // 3つのpromiseのうち、最初に解決したpromiseが出力される
  console.log(first)
});

「演算子の||=&&=はRubyにもありますけど、??=はなかったかな」「??=は値がnullundefinedのときに代入: undefinedはJavaScriptでよく登場するのでいかにもJavaScriptらしい演算子ですね」

// 同記事より
let a = null;
a ??= "🐈";
console.log(a); // 結果: "🐈"

let b = "🐷";
b ??= "🐈";
console.log(b); // 結果: "🐷"

「弱参照(WeakRef)という概念があるのか」「GCしていいものをこれで指定するんですね」「"可能であれば使用を避けるのがよい"、たしかにGCは複雑なので使いこなしも複雑そう」「どういうときに使うのかあまり想像できないかも」

// 同記事より
const myObject = { name: "田中" };
// myObjectへの弱参照が作られる
const ref = new WeakRef(myObject);

「最近JavaScriptを書かないといけないことが増えてきたんですけど、Rubyに慣れているとJavaScriptの書き方の違いに戸惑うこともちょくちょくあるんですよ」「わかります」「letを避けて極力constにするために何かと使い捨ての関数を作ってはmap()するとか、文化が違うといえばそれまでなんですが、ちょっと消化不良というかもやもやした気持ちになるときがあります」

「Rubyだと変数をなるべくイミュータブルにするような書き方はあまりしないんですけど、JavaScriptだと何とかしてconstに落とし込もうとする傾向がどこかにあって、実際letで書いてみると何となく今風のJavaScriptではないのかなと思うこともあります」「constにするのが有効なシチュエーションはたしかにありますけど、ちょっとした文字列操作ぐらいなら普通に変数に再代入してもよさそうですし、何となくやりすぎ注意な気もしますけどね」「Reactのように関数に渡すものをなるべくイミュータブルに保つのはとても納得できます」

参考: React – ユーザインターフェース構築のための JavaScript ライブラリ


つっつき後に以下の記事も出ていました。

参考: ES2021/ES2022を知ろう | フューチャー技術ブログ
参考: ES2021に対応したJavaScript Primer 3.0を公開しました - JavaScript入門 | Web Scratch


後編は以上です。

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

週刊Railsウォッチ: GitLab 14.0のbreaking changes、Railsのセキュリティ脅威解説シリーズ記事ほか(20210628前編)


CONTACT

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