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

週刊Railsウォッチ(20210323後編)GitHub Actionsで使えるruby/setup-ruby、中高生国際Rubyプログラミングコンテスト2020ほか

こんにちは、hachi8833です。

週刊Railsウォッチについて

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

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

🔗Ruby

🔗 RubyのRBS: soutaroさんスライドとgem_rbs_collection


つっつきボイス:「soutaroさんのスライドです」「Ruby 3の静的型検査を開発した経緯などを解説しているんですね」

「お、Javaなどの言語にあるジェネリクス的な構文も検討していたのか↓」「コレクションの扱いを考えたらこの落とし所はわかる気がします」



参考: ジェネリックプログラミング - Wikipedia

Rubyスタイルガイドを読む: コレクション(Array、Hash、Setなど)

「スライドで以下のリポジトリも紹介されていました↓」「こちらはコレクションはコレクションでも別のコレクションですね」「gemsディレクトリを開くと、RailsのコンポーネントなどのRBSファイルが集められている」「RBSファイルはまだGitHubでシンタックスハイライトが効かないのか...」

ruby/gem_rbs_collection - GitHub

untypedな部分もまだありますね↓」「通常のRBSファイルの他にgeneratedファイルも置かれています」

# https://github.com/ruby/gem_rbs_collection/blob/main/gems/actionpack/6.0.3.2/actioncontroller.rbs#L95
module AbstractController::Callbacks::ClassMethods
  def before_action: (*untyped) -> void
  def around_action: (*untyped) -> void
  def after_action: (*untyped) -> void
  def skip_before_action: (*untyped) -> void
  def skip_around_action: (*untyped) -> void
  def skip_after_action: (*untyped) -> void
  def prepend_before_action: (*untyped) -> void
  def prepend_around_action: (*untyped) -> void
  def prepend_after_action: (*untyped) -> void
  def append_before_action: (*untyped) -> void
  def append_around_action: (*untyped) -> void
  def append_after_action: (*untyped) -> void
end

RubyのRBSについては『WEB+DB PRESS Vol.121』の「特集: Ruby 3」でもsoutaroさんが詳しい記事を書いています↓。

🔗 ruby/setup-ruby: ビルド済みRubyを5秒でセットアップ

ruby/setup-ruby - GitHub


つっつきボイス:「お、ruby/setup-rubyですね」「fork元はどこかな?」「あれ、リポジトリの左上に"generated from actions/javascript-action"って書かれてる」「generated fromってforked fromとどう違うんだろう?」

後で探すと、以下の記事でgenerated fromってforked fromの違いについて解説されていました。

参考: GitHubのTemplate Repository機能のすゝめ - Qiita

「このactionsはGitHub Actionsのことです↓」「あ、なるほど」

「ruby/ruby-setupにあるRubyのビルド済みバイナリをGitHub ActionsのCIなどで手軽に利用できるんですね」「以下のOSがサポートされてる↓」

OS 推奨バージョン その他のサポート対象バージョン
Ubuntu ubuntu-latest (= ubuntu-18.04) ubuntu-20.04, ubuntu-16.04
macOS macos-latest (= macos-10.15) macos-11.0
Windows windows-latest (= windows-2019) windows-2016

「READMEにあるGitHub Actions用yamlファイルのようにuses: ruby/setup-ruby@v1と書いてRubyのバージョンなどを指定するだけで使えるのか↓」「Ruby公式が提供しているのはありがたい🙏」「こうやって手軽に使えるのは嬉しいですね」

# 同リポジトリより
name: My workflow
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: ruby/setup-ruby@v1
      with:
        ruby-version: 2.6   # .ruby-versionファイルは不要
        bundler-cache: true # 'bundle install'を実行してインストール済みgemを自動でキャッシュする
    - run: bundle exec rake

つっつきの後で、ruby/setup-ruby以前に使われていたactions/setup-rubyがアーカイブ化されたことを以下の記事で知りました。

こうして、晴れて全プラットフォームのVMでRubyコミュニティが提供する公式バイナリに一本化された後で、actions/setup-ruby はarchivedされました。引き続きactions/setup-ruby を使っても、ruby/setup-rubyに乗り換えても使われるバイナリは同じということになりますから、丁寧な移行ですね。action実行時にdeprecatedのメッセージが出るようになったので、これまで ruby/setup-ruby の存在を知らなかった開発者も乗換えをしているようです。VMのtoolcacheに入っているRubyバイナリは actions/setup-ruby を使わなければ自力でPATHを通さない限り使われることはないはずなので、今後新しくVMとして追加されるOSでは toolcacheにそもそもRubyが入らない(必要無い)ということになるかもしれません。
同記事より

actions/setup-ruby - GitHub

🔗 パッチモンスター中田さんインタビュー


つっつきボイス:「パッチモンスターの異名を持つnobuさんこと中田さんのインタビューです」「これだけ長い間継続的にRubyにコミットする活動を続けているのは本当に凄い」「Rubyの歴史のごく初期から活動していたんですよね」「そうそう、RubyKaigi↓などでRubyの歴史の話になるとたいていnobuさんの話も出ますね」

以下はつっつき後に見つけたツイートです。なお今年7月に予定されていたRubyKaigi 2021はキャンセルとなり、RubyKaigi Takeout 2021として秋にオンライン開催されます。

「Rubyのコミットログからコミットの動きとコミッターの活動をアニメーション化した動画がありましたよね、あそこにもnobuさんの姿がしょっちゅうあった覚えがあります」「前にウォッチで取り上げたことがありましたね」

後で過去記事を探しましたが当該動画がなくなっていたので、社内で教えてもらった以下のツイートを貼ります。


「ところで、このインタビュー記事を書いた中薗昴さんという方はシステムエンジニアと技術ライターの仕事を半分ずつやっていてすごいなと思いました」「技術記事は専門性が重要なのでそういう素養は大事ですね: 専門性が高まりすぎると読者が少なくなるのが悩みどころですが」

「技術に強いライターと言えば、CPU関連の濃い記事を昔からたくさん書いている大原雄介さんの記事はとてもアツいですよ↓」「お〜」「プロフィールを見るとハードウェア製作に携わってて、ある時期からライターに転じたんですね」

参考: Yusuke Ohara -Top Page-
参考: ASCII.jp:ロードマップでわかる!当世プロセッサー事情

「失敗したCPUについて大原さんが書いた記事は半端なく面白いので時間のあるときに読んでみるといいと思います」「これですね↓」

参考: 人気連載「忘れ去られたCPU黒歴史」の書籍が10日に発売! - 週刊アスキー

🔗 ブロックで設定するアレは何と呼ぶのか


つっつきボイス:「Rubyでコンフィグをブロックで設定する、ああこれのことですね↓」

# 同記事より
Foo.configure do |config|
  config.name = "foo"
  config.email = "foo@example.com"
end

「Railsのコンフィグもこういう感じで書けますよ」「あ、たしかに」「この記事ではそういうコンフィグを自分で書けるようにする方法が紹介されていますね」

参考: Rails アプリケーションを設定する - Railsガイド

# railsgudes.jpより
config.generators do |g|
  g.orm :active_record
  g.test_framework :test_unit
end

「この書き方に名前があってもいい気がしてきました」「結局『blockで設定するヤツ』になっちゃうかな😆」

「ちなみにこういう書き方ではRubyのクラスインスタンス変数が使われるので、マルチスレッドのアプリで使う場合は注意が必要です」「あ、そうか」

参考: クラス変数とクラスインスタンス変数を理解する - Qiita

「起動後にグローバル設定してその後変更されないならいいんですが、マルチスレッドで動かしながら設定値を更新すると死を招くので、Railsであれば設定をCurrentAttributesに入れるなどの対策を取る必要があります」「なるほど」「マルチスレッドで更新するときに気をつけるべきことなので、記事のコードの書き方は問題ありません」

「なお、クラスインスタンス変数を使わずにコンフィグそのものをインスタンス化するなど、他にも方法はいろいろ考えられます」

🔗 2021年のmruby情報


つっつきボイス:「最近のmruby事情がまとまっていてありがたい」「mrubyをこれから学ぶ人向けの情報があるのもいいですね👍」「紹介されている書籍も新しい↓」

🔗 その他Ruby


つっつきボイス:「中高生国際Rubyプログラミングコンテスト2020、しかもin Mitaka?」「Mitakaって東京の三鷹市?」「恥ずかしながら、このイベントを初めて知りました」「これは知らなかった」「しかも国際」「公式サイトを見ると2011年から毎年開催されているんですね↓」「サイトを見ると三鷹市が後援団体にリストアップされてるから確かに三鷹市だ」「三鷹市は以前からベンチャーの投資が盛んなことで知られていてインキュベーション施設もありますが、プログラミング教育にも力を入れているんですね」

参考: 中高生国際Rubyプログラミングコンテスト in Mitaka
参考: 三鷹市SOHOパイロットオフィス 施設概要 | 株式会社 まちづくり三鷹

以下はつっつき後に見つけたツイートです。

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

🔗 Graviton 2ベースのAmazon Aurora(Publickeyより)


つっつきボイス:「BPS社内Slackに貼られていたのを拾いました」「AWSが独自開発したArmベースのGraviton 2は、RDSでの利用だと比較的使いやすいのがいいですね👍: Graviton 2をEC2などで使おうとすると、Dockerイメージのバイナリ互換性などの問題がつきまとうので簡単に移行できませんが、TCPレベルで接続するRDSならプロセッサの種類はそれほど関係なくなるので」「なるほど」

参考: AWS、自身でプロセッサを開発していく姿勢を明らかに 独自開発の第二世代ARMプロセッサ「Graviton 2」発表:AWS re:Invent 2019 - ITmedia NEWS
参考: Amazon RDS(マネージドリレーショナルデータベース)| AWS

「何かあるとすれば、PostgreSQLやMySQLをカリカリにチューニングして動かそうとするとGraviton 2での最適化がまだあまり進んでいなくて思ったほどパフォーマンスが出ない、といったことはあるかもしれませんが、普通に使う分にはほぼ影響はないだろうと思います」「お〜」「機会があったら使ってみようかな」


後編は以上です。

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

週刊Railsウォッチ(20210322前編)Active Recordのstrict loadingの修正、セキュリティリリースのポリシー追加、N+1チェッカーprosopite gemほか

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

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

Publickey

publickey_banner_captured


CONTACT

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