- Ruby / Rails関連
週刊Railsウォッチ(20210323後編)GitHub Actionsで使えるruby/setup-ruby、中高生国際Rubyプログラミングコンテスト2020ほか
こんにちは、hachi8833です。
🔗Ruby
🔗 RubyのRBS: soutaroさんスライドとgem_rbs_collection
つっつきボイス:「soutaroさんのスライドです」「Ruby 3の静的型検査を開発した経緯などを解説しているんですね」
「お、Javaなどの言語にあるジェネリクス的な構文も検討していたのか↓」「コレクションの扱いを考えたらこの落とし所はわかる気がします」
「スライドで以下のリポジトリも紹介されていました↓」「こちらはコレクションはコレクションでも別のコレクションですね」「gemsディレクトリを開くと、RailsのコンポーネントなどのRBSファイルが集められている」「RBSファイルはまだ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ですね」「fork元はどこかな?」「あれ、リポジトリの左上に"generated from actions/javascript-action"って書かれてる」「generated fromってforked fromとどう違うんだろう?」
後で探すと、以下の記事でgenerated fromってforked fromの違いについて解説されていました。
参考: GitHubのTemplate Repository機能のすゝめ - Qiita
「このactionsはGitHub Actionsのことです↓」「あ、なるほど」
Showing is better than telling.
See GitHub Actions with built-in CI/CD, in action 👀https://t.co/cLaLdgsz1A pic.twitter.com/OiwMF9UGLp
— GitHub (@github) August 10, 2019
「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がアーカイブ化されたことを以下の記事で知りました。
“actions/setup-ruby が archived になっていた - masa寿司の日記” https://t.co/g2rcnLlFrQ
— Isao Shimizu (@isaoshimizu) March 19, 2021
こうして、晴れて全プラットフォームの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が入らない(必要無い)ということになるかもしれません。
同記事より
🔗 パッチモンスター中田さんインタビュー
つっつきボイス:「パッチモンスターの異名を持つnobuさんこと中田さんのインタビューです」「これだけ長い間継続的にRubyにコミットする活動を続けているのは本当に凄い」「Rubyの歴史のごく初期から活動していたんですよね」「そうそう、RubyKaigi↓などでRubyの歴史の話になるとたいていnobuさんの話も出ますね」
以下はつっつき後に見つけたツイートです。なお今年7月に予定されていたRubyKaigi 2021はキャンセルとなり、RubyKaigi Takeout 2021として秋にオンライン開催されます。
Link: RubyKaigi Takeout 2021 https://t.co/KxX0EaACEi
— Yukihiro Matsumoto (@yukihiro_matz) March 11, 2021
「Rubyのコミットログからコミットの動きとコミッターの活動をアニメーション化した動画がありましたよね、あそこにもnobuさんの姿がしょっちゅうあった覚えがあります」「前にウォッチで取り上げたことがありましたね」
後で過去記事を探しましたが当該動画がなくなっていたので、社内で教えてもらった以下のツイートを貼ります。
Rubyの22年に渡るコミットの歴史を可視化してみました。Rubyを愛する方たちへのクリスマスプレゼントになれば幸いです。#Ruby pic.twitter.com/wrDu6UXcTh
— hinastory (@hinastory999) December 24, 2019
「ところで、このインタビュー記事を書いた中薗昴さんという方はシステムエンジニアと技術ライターの仕事を半分ずつやっていてすごいなと思いました」「技術記事は専門性が重要なのでそういう素養は大事ですね: 専門性が高まりすぎると読者が少なくなるのが悩みどころですが」
「技術に強いライターと言えば、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 コミッターになりました - pockestrap -- おめでとうございます🎉
- 元記事: 「中高生国際Rubyプログラミングコンテスト2020 in Mitaka」受賞作品を発表:EdTechZine(エドテックジン)
- 元記事: 半年かけてやっと動いた”Hello, World!" Ruby言語をまつもとゆきひろ氏が17歳から開発した理由 - ログミーTech
つっつきボイス:「中高生国際Rubyプログラミングコンテスト2020、しかもin Mitaka?」「Mitakaって東京の三鷹市?」「恥ずかしながら、このイベントを初めて知りました」「これは知らなかった」「しかも国際」「公式サイトを見ると2011年から毎年開催されているんですね↓」「サイトを見ると三鷹市が後援団体にリストアップされてるから確かに三鷹市だ」「三鷹市は以前からベンチャーの投資が盛んなことで知られていてインキュベーション施設もありますが、プログラミング教育にも力を入れているんですね」
参考: 中高生国際Rubyプログラミングコンテスト in Mitaka
参考: 三鷹市SOHOパイロットオフィス 施設概要 | 株式会社 まちづくり三鷹
以下はつっつき後に見つけたツイートです。
中高生国際Rubyプログラミングコンテスト
ゲーム部門にて 最優秀賞をいただきました🎉🎉🎉
ありがとうございます!Windows PC だったら遊べると思うので、良かったら実際に遊んでみてください!
ソースコード 👇https://t.co/qPc3YslpFg#ルビコン #Ruby https://t.co/luEe7UICcL
— そう (@_sou_dev) March 6, 2021
🔗クラウド/コンテナ/インフラ/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ほか
- 20210316後編 testdouble/standard gem、DockerfileベストプラクティスとDockerfileのlintツールhadolintほか
- 20210315前編 Active Recordのenum関連改修、Active SupportのEnumerableでpluckが使えるほか
- 20210309後編 RubyのIRBに隠れているイースターエッグ、Power Automate Desktop、SQLクエリのありがちなミス6つほか
- 20210303後編 Bundlerのセキュリティ修正、Rubyのガベージコレクション記事、Rubyが2/24に誕生日ほか
- 20210222 ActiveRecord::Relationの新メソッドload_asyncとexcluding、Active Jobのperform_laterの改善ほか
- 20210209後編 Rubyでミニ言語処理系を作る、Kernel#getsの意外な機能、CSSのcontent-visibilityほか
- 20210208前編 Rails次期リリースがバージョン7に決定、thoughtbotのアプリケーションセキュリティガイドほか](/hachi8833/2021_02_08/103801)
- 20210202後編 Ruby 3 irbのmeasureコマンド、テストを関数型言語のマインドセットで考えるほか
- 20210201前編 Webpackerのガイドがマージ、RailsはRuby 3でどのぐらい速くなったかほか
- 20210126後編 Google Cloud FunctionsがRubyをサポート、Ruby 3のパターンマッチングでポーカーゲームほか
- 20210125前編 Railsリポジトリのデフォルトブランチがmainに変更、Rails 6.1はMySQLのENUM型に対応済みほか
- 20210120後編 Ruby 3.0の新機能で遊ぶ、RubyスニペットをJSに変換するRuby2JS、rspec-parameterized gemほか
- 20210113後編 Ruby 3.0 Ractor解説記事、Vercelホスティングサービス、教育用OS xv6ほか
- 20210112前編 Active Recordの範囲指定バリデーション改善、soleとfind_sole_byメソッド、AlgoliaとRailsほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)