- Ruby / Rails関連
週刊Railsウォッチ: 改訂2版『プロを目指す人のためのRuby入門』、『研鑽Rubyプログラミング β版』ほか(20211207後編)
こんにちは、hachi8833です。
🔗Ruby
🔗 改訂2版『プロを目指す人のためのRuby入門』発売
ブログ書きました。今日は改訂版チェリー本の発売日なので、改訂版の見どころをまとめてみました!できるだけ多くの人に見てもらいたいので拡散してもらえると嬉しいです🙏
Ruby 3.0に完全対応、だけじゃない!?改訂2版「プロを目指す人のためのRuby入門」が発売されました🍒 https://t.co/z21dpUaqhR— Junichi Ito (伊藤淳一) (@jnchito) December 1, 2021
つっつきボイス:「まさに今日(注: 12/2のつっつきの日)発売された🎉」「これは買わなきゃ」「チェリーが1個から2個に増えているのもポイント高い」
「改訂2版ではRubyコミッターたちがみっちりレビューしてくださったそうです」「大事なポイント👍」「すごい」「本の売れ行きの初速がいいと次回の版も出しやすくなるので、皆さん買いましょう」「今ポチりました〜」
🔗 asmrepl: Rubyで書かれたアセンブラREPL(Ruby Weeklyより)
参考: 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もエミュレータではないのかも🤔」
🔗 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の最近の改修
- PR: Add support for ownership calls and requests by sonalkr132 · Pull Request #2748 · rubygems/rubygems.org
- PR: Add an initial rbs template to `bundle gem` skeleton by hsbt · Pull Request #5041 · rubygems/rubygems
つっつきボイス:「2つともruby-jp Slackで見かけたプルリクです」「Rubygems.orgで何か変わるんでしょうか?」「1つ目は、gemのオーナーシップをリクエストできるフォームの追加だそうです」「なるほど、ところで今さらですがrubygems.orgってRailsで構築されているんですね」「あ、ホントだ」「しかもきちんとメンテナンスされていて凄い」「NewRelicが入っているとか、そっちが気になってしまう😆」
「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プログラミング β版』が電子書籍でリリース
各位買ってくれたのむ!!!! » 研鑽Rubyプログラミング β版 – 技術書出版と販売のラムダノート https://t.co/4UjE1SP3Vg #研鑽Ruby
— Kakutani Shintaro (@kakutani) November 30, 2021
つっつきボイス:「あの『Polished Ruby Programming』の日本語版『研鑽Rubyプログラミング』のβ版が電子書籍のみでリリースされました」「ついに、というかもうなんですね🎉」「早!」
「β版では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前編)
- 20211201後編 Railsで「Read Model」を使う、Ruby Prize 2021受賞者決定、pru gemほか
- 20211129前編 フォームヘルパーの改修、Railsの監査ログgem比較、DHHとimport-mapほか
- 20211116後編 Ruby Struct入門、書籍『進化的アーキテクチャ』、AWS Web問題集ほか
- 20211115前編 Rails 7がRuby 3.1のClass#descendantsに対応、GitHub Issue風ファイルアップローダほか
- 20211110後編 JSON.parseの機能、Opal 1.3、async gem、Linuxコマンドチートシートほか
- 20211102後編 2021年度Rubyアソシエーション開発助成、Rails REST APIレベルで楽観的ロックほか
- 20211101前編 Rails 7アセットパイプライン解説記事、ロジックをapp/operatorsで整理ほか
- 20211026後編 YJITがRuby 3.1向けにマージ、ripperのドキュメント化、crontabの罠ほか
- 20211025前編 insert_allやupsert_allのタイムスタンプ自動更新、rails/contextsにロジックを置くほか
- 20211019後編 ruby/debugをChromeでリモートデバッグ、Rubyアプリの最適化ほか
- 20211018前編 Railsリポジトリで進行中のPropshaft、inverse_ofを自動推論ほか
- 20211012後編 Ruby 3.1にYJITマージのプロポーザル、Rubyのmagic historyメソッド、JSのPartytownほか
- 20211011前編 ServerTimingミドルウェア追加、paramsで数値キーを許可、Railsで多要素認証ほか
- 20211006後編 ruby/debug 1.2.0リリース、Railsにはthorが入っている、tendejitほか
- 20211004前編 Rails 7でbyebugがruby/debugに変更、GitHub Codespacesをサポートほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)