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

週刊Railsウォッチ: 改訂2版『プロを目指す人のためのRuby入門』、『研鑽Rubyプログラミング β版』ほか(20211207後編)

こんにちは、hachi8833です。

週刊Railsウォッチについて

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

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

🔗Ruby

🔗 改訂2版『プロを目指す人のためのRuby入門』発売


つっつきボイス:「まさに今日(注: 12/2のつっつきの日)発売された🎉」「これは買わなきゃ」「チェリーが1個から2個に増えているのもポイント高い」

「改訂2版ではRubyコミッターたちがみっちりレビューしてくださったそうです」「大事なポイント👍」「すごい」「本の売れ行きの初速がいいと次回の版も出しやすくなるので、皆さん買いましょう」「今ポチりました〜」

🔗 asmrepl: Rubyで書かれたアセンブラREPL(Ruby Weeklyより)

tenderlove/asmrepl - GitHub

参考: REPL - Wikipedia


つっつきボイス:「@tenderloveさんがまた面白いものをRubyで作っていました」「コンソールでアセンブラのREPLが動く、なるほど」

# 同リポジトリより
(rip 0x00000001033a4001)> mov rax, 5
=============== REGISTER CHANGES ===============
rax     000000000000000000 => 0x0000000000000005

(rip 0x00000001033a4009)> rax
0x0000000000000005
(rip 0x00000001033a4009)>

「ところで何のアセンブラだろう?」「Ruby VM(YARV)か、はたまたMIPSあたりかなと思ったら、リポジトリのAboutにx86 64ビットと書いてあった」「言われてみれば64ビットだけど、アセンブラを見ただけで何のCPUかわかるレベルでなかった...」「強い人だとわかるのが凄い」

参考: YARV - Wikipedia
参考: MIPSアーキテクチャ - Wikipedia

「予想ですが、CPU上で直接アセンブラを実行しているわけではないのかなという気がしました: インタプリタなら動いた瞬間にレジスタの値が変わりそう」「エミュレーションかも」「もしかするとコンテキストスイッチすればできるのかもしれませんが」

「お、asmreplの依存関係にfiskが入っている」「fiskも@tenderloveさんが作ったんですね(ウォッチ20210713)」「fiskはもともとwilsonというプロジェクトにインスパイアされたのか」「fiskはエミュレーションとかではなくちゃんとx86アセンブラそのものが動きそうに見えるので、もしかするとasmreplもエミュレータではないのかも🤔」

tenderlove/fisk - GitHub

seattlerb/wilson - GitHub

🔗 Ruby 3.1の構文


つっつきボイス:「koicさんが、RuboCopのRuby 3.1対応に関連してRuby 3.1の構文の変更点をまとめてくださいました」「2本目のRuboCopエラー対処方法の記事もありがたい🙏」

「匿名ブロック委譲の構文&が入るのね↓」「新しめの変更らしく、Ruby 3.1のpreview1ではまだ動きませんでした」「知らないとちょっと驚きそうな書き方かも」

# 同記事より
def foo(&)
  bar(&)
end

「そうそう、パターンマッチにpinオペレータ^が追加される🎉」

# 同記事より
Prime.each_cons(2).lazy.find_all { _1 in [n, ^(n + 2)] }.take(3).to_a
#=> [[3, 5], [5, 7], [11, 13]]

「1行パターンマッチのメソッド呼び出しで丸かっこ()が省略可能になる↓」

# 同記事より: Ruby 3.0ではエラー
[1, 2] => a, b

「引数のforwardingでメソッド仮引数の丸かっこ()が省略可能↓、これもありますね」

# 同記事より: Ruby 3.0ではエラー
def foo a, ...
end

「知らないとびっくりしそうな新構文が割とある感じですね」「...が生で出たりすると一瞬考えそう」「今回は抑えめですが、Rubyは新構文を比較的積極的に取り入れる傾向がありますね」

🔗 callerの隠れた機能(Ruby Weeklyより)


つっつきボイス:「callerというメソッドがあるんですね」「callerは、自分を呼び出したものをinspectするのに使います: たしかKernelモジュールにあった↓」「なるほど」「Kernelモジュールにどんなメソッドがあるかは一度眺めておいて損はないと思います」

参考: Kernel.#caller (Ruby 3.0.0 リファレンスマニュアル)

「記事にもあるcaller_locations↓はよくデバッグで使いますね: コールスタックをどこまで掘るかを引数で指定できる」「なるほど」「でないとコールスタックが深くなったときに大変」「記事ではcallerのベンチマークも取っていますね」

# 同記事より
loc = caller_locations(1, 1)

puts "  --> called from #{loc.path} at line #{loc.lineno}"
puts "      (full path: #{loc.absolute_path})"
# 同記事より
$> ruby tea.rb
1 teaspoon per cup...
Pouring water and waiting 3.5 minutes...
Ssssip! Mmmm, Assam.
  --> called from tea.rb at line 9
      (full path: /Users/alextaylor/code/tea.

参考: Kernel.#caller_locations (Ruby 3.0.0 リファレンスマニュアル)

「デバッガに入ったときにこれらのメソッドでコールスタックを取れるのは便利👍」

🔗 Rubygemsの最近の改修


つっつきボイス:「2つともruby-jp Slackで見かけたプルリクです」「Rubygems.orgで何か変わるんでしょうか?」「1つ目は、gemのオーナーシップをリクエストできるフォームの追加だそうです」「なるほど、ところで今さらですがrubygems.orgってRailsで構築されているんですね」「あ、ホントだ」「しかもきちんとメンテナンスされていて凄い」「NewRelicが入っているとか、そっちが気になってしまう😆」

rubygems/rubygems.org - GitHub

「2つ目は、bundle gemを実行したときにRBSのテンプレートも追加するようにする改修だそうです」「これは話題になっていましたね: こうやってコンベンションを定めることでRBSの作成と利用を促進していくのは大事👍」「RBSはsigディレクトリに置くことになるのね↓」

# bundler/lib/bundler/cli/gem.rb#75
      templates = {
        "#{Bundler.preferred_gemfile_name}.tt" => Bundler.preferred_gemfile_name,
        "lib/newgem.rb.tt" => "lib/#{namespaced_path}.rb",
        "lib/newgem/version.rb.tt" => "lib/#{namespaced_path}/version.rb",
+       "sig/newgem.rbs.tt" => "sig/#{namespaced_path}.rbs",
        "newgem.gemspec.tt" => "#{name}.gemspec",
        "Rakefile.tt" => "Rakefile",
        "README.md.tt" => "README.md",
        "bin/console.tt" => "bin/console",
        "bin/setup.tt" => "bin/setup",
      }

参考: Rubyで型チェック!動かして理解するRBS入門 〜サンプルコードでわかる!Ruby 3.0の主な新機能と変更点 Part 1〜 - Qiita

ruby/rbs - GitHub

🔗 『研鑽Rubyプログラミング β版』が電子書籍でリリース


つっつきボイス:「あの『Polished Ruby Programming』の日本語版『研鑽Rubyプログラミング』のβ版が電子書籍のみでリリースされました」「ついに、というかもうなんですね🎉」「早!」

『Polished Ruby Programming』(Jeremy Evans著)を読みました

「β版では6章までなんですね」「ラムダノートから出版しているのがなるほど感」「たしかにラムダノートの読者に刺さりそうな内容ですよね」「Rubyがメインでないラムダノートの読者にもアピールしそう」「ちょうどn月刊ラムダノートの最新号が出てたので買っちゃいました↓」

参考: n月刊ラムダノート Vol.3, No.2(2021)(電子書籍のみ) – 技術書出版と販売のラムダノート

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

🔗 Amazon ECR PublicからDocker公式イメージが取得可能に(Publickeyより)


つっつきボイス:「BPS社内Slackに貼っていただいた記事です」「ようやく実現されました🎉」

「Docker Hubからイメージを取得しなくてもよくなったということでしょうか?」「そうですね、Docker HubのミラーがAWS内に用意されたので、AWS環境からdocker pullしたときに通信がAWS環境内で完結するようになって、転送費用もかからなくなるはず」「なるほどありがたい」「少し前にDocker Hubからのpullに制限がかかるようになったので、Docker Hubのミラーから取れるのはとてもありがたい」

参考: Docker HubのRate Limitにやられた話 - OPTiM TECH BLOG

「今までなかったのが不思議ですよね」「憶測ですが、外部との転送が多い方がAWSの収入になるからじゃないかな」「それあるかも」

🔗 電子帳簿保存法の改正


つっつきボイス:「電子帳簿保存法の改正って自分には関係ないのかなと思っていましたけど」「ポイントは記事にもあるように、オンライン取引の証憑(しょうひょう)類はデジタルデータのまま保存しておかなければならなくなることですね: 紙に印刷する必要がなくなって便利になったとも言えるけど、逆にオンライン領収書を紙に印刷して保存するのがNGになる」「あ〜」

「紙の領収書をスキャンして保存するのがOKになったことの方が大きいかも」「なるほど」「ファイル名が日付_取引先名_金額でなければいけないのがちょっと面倒そうですけど」「ファイル名ぐらいはしょうがないですよ」「デジタルで保存できるだけでもかなりありがたいし、ソフトウェアエンジニアの場合は経費の領収書が大量になることはほぼないので、ファイル数は大した数にはならないでしょうね」

「あとは記事にもあるように、2023年度から始まるインボイス制度も大きい」

参考: インボイス制度の概要|国税庁
参考: 一人親方が確認すべきインボイス制度とは?年間売上1,000万円以下に消費税の納税義務!?| 会計ソフト マネーフォワード クラウド

「ところで、以前の青色申告は仕分けなどがとても面倒でしたけど、今はマネーフォワードやfreeeのようなサービスがあるので随分楽になりましたよね」「そうそう」

参考: バックオフィスから経営を強くする「マネーフォワード クラウド」
参考: 無料から使えるクラウド会計ソフト freee | クラウド会計ソフト freee会計


後編は以上です。

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

週刊Railsウォッチ: sanitize_sql_likeは重要、X-XSS-Protectionヘッダーのデフォルト変更、kredis gemほか(20211206前編)

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

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

Ruby Weekly

Publickey

publickey_banner_captured


CONTACT

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