- Ruby / Rails関連
週刊Railsウォッチ(20201216後編)Ruby 3.0.0-rc2とRuboCop 1.6がリリース、Ruby 3の静的型解析記事、CentOS 8のEOLが短縮ほか
こんにちは、hachi8833です。
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
- お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙇
⚓Ruby
⚓ Ruby 3.0.0-rc2リリース(Ruby公式ニュースより)
Ruby 3.00-rc2 is released https://t.co/QJ1EzlebmX
It introduces
* RBS
* TypeProf
* Ractor (experimental)
* Fiber Scheduler
* REPL (irb) speed up
and more!— 成瀬 (@nalsh) December 8, 2020
つっつきボイス:「Ruby 3.0.0のRC2がついに出ましたね」「Rubyはクリスマスにメジャーリリースするのが通例なので、もう後2週間🎄」「2.xから3は大きいですけど、無事に出てくれるかしら?」「大丈夫だと思いますよ」「今もTypeProf周りとかにゴリゴリ手を入れているようですし、たぶんギリギリまで作業するでしょうね」
「あ、今になってRuby 3.0アドベントカレンダーがあることに気づいた↓(後で読もうっと)」
参考: Ruby 3.0 Advent Calendar 2020 - Qiita
つっつきの後で、上の記事の中から銀座Rails#26で@osyoさんが発表したスライドを見つけたので貼っておきます。
他のRuby関連アドベントカレンダーも貼っておきます。
参考: Ruby Advent Calendar 2020 - Qiita
参考: Ruby その2 Advent Calendar 2020 - Qiita
参考: 一人 bugs.ruby Advent Calendar 2020 - Qiita
⚓ Rubyがruby-build-v20201210でM1チップでのビルドに対応
Released ruby-build-v20201210 with OpenSSL-1.1.1i.
This version supports M1 chip. So, you can build Ruby 2.7.2 and 3.0.0-preview with `arm64` arch. https://t.co/IRTAVaG0Wk— Hiroshi SHIBATA (@hsbt) December 10, 2020
「M1チップ上で、インテルバイナリでないarm64バイナリのRubyが動くようになったとは」「お〜すげ〜!」「M1 Macまだ持ってないけど嬉しいです😂」
⚓ Ruby 3.0の静的型解析関連記事
また、Ruby 3 の静的型解析には RBS 、TypeProf 、Steep 、Sorbet など固有名詞がいっぱいあるので、関係性をざっくりまとめておきましたhttps://t.co/2BmTMhBlCY
— Yusuke Endoh (@mametter) December 9, 2020
Qiita記事書きました。Ruby 3.0の新機能「型チェック(正確には型定義)」について、基本な使い方をまとめてみました〜。
Rubyで型チェック!動かして理解するRBS入門 〜サンプルコードでわかる!Ruby 3.0の主な新機能と変更点 Part 1〜 https://t.co/IRtm735qMW #Qiita
— Junichi Ito (伊藤淳一) (@jnchito) December 6, 2020
つっつきボイス:「そうそう、@mameさんの静的型解析関連記事が2本も出ていましたね」「@mameさんの解説が記事の形でみっちり書かれているのが本当にありがたい🙏」「動画を見るには集中力も必要だし、高度な話題を扱うとたまについていけなくなりますけど、文章で書かれていると自分のペースで読めますよね」「Ruby 3.0の静的型解析周りの機能については@jnchitoさんもやっているように自分で触って理解するのがいいでしょうね」「後で読まなきゃ」
「@mameさん記事の冒頭で、RBSとTypeProfとSteep/Sorbetの違いを3行でまとめてくれているのも助かる!」「新しいのでどれがどれだかたまにわからなくなりがちでした😅」「Ruby 3にバンドルされるのがRBSとTypeProfで、SteepやSorbetは自分で導入できるツールということか」
「今やってるRailsアプリ、Ruby 3.0にアップグレードしようかな、どうしようかな?」「動作確認してみるのはよいと思います!」「後はRailsで使うgemがどのぐらい3.0で動くかでしょうね」「あ、それもそうか」「しばらくは動作確認の期間になるかな」
⚓ RuboCop本体も1.6がリリース
RuboCop 1.6 is out! No new cops this time around, but plenty of improvements here and there. The release notes are here https://t.co/gDFIGrbPfo Enjoy! #AdventOfOSS
— Bozhidar Batsov (Bug) (@bbatsov) December 9, 2020
つっつきボイス:「こちらはRuboCop本体のアップグレードです」「え、RuboCop本体はちょっと前にやっと1.0になった気がするんですけど、もう1.6ですか!この間やっとRuboCopを0.8xに上げたところなのに...」「リリース履歴を見てみよう↓」
「1.0のリリースが今年2020年の10月!」「1.3も28日前ですね」「わずか2か月で1.6とは」「1.6にいたってはsome hours agoですね(つっつき時点)」「これは早い」「怒涛の勢い」「RuboCopは1.0になるまでが長かったですけどね」
「自分のRailsアプリなどでRuboCop本体を最新のものにアップグレードすることについては基本的に問題はないと認識してます(rubocop.ymlの更新はそれなりに手間だと思いますが)」
⚓ Rubyコードにend
が余分にあるエラーをsyntax_search gemで修正する(Ruby Weeklyより)
つっつきボイス:「TechRacho翻訳記事でもお世話になっているRailsコントリビューターの@schneemsさん↑の最近の記事で、Rubyコードのend
が1個多いエラーを解決するためにsyntax_search
というツールを使ったそうです」「余分なend
がどこにあるのかわかりにくいのあるある😆」
「ところでこれってIDEとかのlinterにかければ一発でできるのでは?」「あ、それもそうか」「でもこうやって直したくなった気持ちもわかる」
⚓ RubyのRange#bsearch
では0と無限大の中間値が「1.5」になる(Ruby Weeklyより)
つっつきボイス:「Range#bsearch
はRubyの二分探索(binary search)メソッド」「0と無限大の中間値って数学的にはどうなるんでしたっけ?」「数学好きなkazzさんが今日のつっつきにいてくれれば聞けたのに😢」「記事によるとRubyのRange#bsearch
的には1.5が中間値ということになるのかな?」「0とinfiniteの中間値を取るのがそもそもありなのかどうかが気になる...」
参考: Range#bsearch
(Ruby 2.7.0 リファレンスマニュアル)
参考: 二分探索 - Wikipedia
「記事ではビット表現を図解してそのあたりを追求してますね↓」
⚓DB
⚓ Slackで使われているVitess(DB Weeklyより)
つっつきボイス:「Vitessは以前ちょっとだけウォッチで取り上げたことがあって(ウォッチ20181225)、YouTubeのバックエンドでも使われていたそうです」
「記事の冒頭を見ると、Slackも立ち上がりの頃はLAMPで構築されていたと書かれているところに歴史を感じますね」「ランプ?」「Linux、Apache、MySQL、PHPのことで、昔からよくある組み合わせです」「あ、そういう言葉があるんですか😳」「今のSlackの規模だとMySQL単体ではもう無理でしょうね」
「Vitessはこの図のような概念らしい↓」「記事によるとSlackのSQLトラフィックの99%がVitessに置き換わったそうです」
「VitessのバックエンドはMySQLなのか」「MySQLをこういう感じにドーピングというか拡張するツールは昔からいろいろありますね」「Vitessは配下にあるMySQLサーバーのテーブル群をクラスタリングしてアクセスできるようadaptしてくれるみたい」「Vitessはこの図のような感じでクエリを分散したりシャーディングをすごく賢く行うなどの最適化を図るんでしょうね↓」
「Vitess面白そうだけど、後から導入するのは大変なんでしょうか?」「この種の製品は、アプリケーションからVtGateにアクセスするときはMySQLと同じにやれるようにすると思うので、たぶん移行はそこまで大変じゃないと思いますけどね」「アプリケーションからするとつなぎ先を変えるだけという感じですか?」「アプリケーションコードを変える部分は少ないと思います」「お〜!」
「たぶん別製品だったと思いますけど、このような感じで既存のDB接続に挟んでいい感じに強化するツールの営業を昔受けたのを思い出しました」「そういえばHAProxyなんてのもあったかも↓」「HAProxyはVitessと設計上の位置が割と近そうですが、Vitessはテーブル同士のlocalityとかまで考慮してクラスタリングするようなので、よりDB特化したツールのイメージを感じますね」「Vitessはオープンソースなのか」「この種のソフトウェアは商用が多いです」
「この記事↓をざっと見た感じでは、Vitessにはkeyspaceという概念があるとのことなので、アプリケーションからはVitessのデータベースとして見えるようですね」「なるほど」「おそらくスキーマ定義さえされていれば、普通にクエリを投げるだけならMySQLとほぼ等価に扱えそうな雰囲気は感じられる」「そこから先は記事やドキュメントを詳しく読まないとですね」
参考: Vitess(ヴィテス)をさわってみよう!(Part 1) | スマートスタイル TECH BLOG|データベース&クラウドの最新技術情報を配信
⚓クラウド/コンテナ/インフラ/Serverless
⚓ 書籍『イラストでわかるDockerとKubernetes』
つっつきボイス:「はてブでバズっていました」「図を多用してわかりやすく解説するのは大事ですね👍」「Kubernetes界隈は動きが早いので、最新情報を取り入れるにもよさそう」「5年前と比べたらKubernetesも相当変わってるんだろうな...」
⚓言語/ツール/OS/CPU
⚓ CentOS 8がサポート期間を繰り上げて2021年に終了
参考: CentOS 8が2021年で終了することに関する基礎知識 - orangeitems’s diary
つっつきボイス:「CentOS 8の件、これを踏んだプロジェクトはつらいでしょうね」「CentOS使っているところは今後どうするか相談中みたいですよ」「そんなに影響あるんでしょうか?」「SI方面でよくある、パッケージのデフォルト構成を変えずに使いたいような要件の固い開発プロジェクトが主に影響を受けると思いますし、実際CentOSはそういうところでよく使われているんですよ」「なるほど、ちょっと想像が付きました」「CentOSは日本で使っているところが割と多いですね」
「この記事↓にもありますけど、今回CentOS 8のEOL(end-of-life)が大きく短縮されたために、今ではCentOS 7の方がEOLが長いんですよ」「まさかEOLが逆転するとは思いませんよね」「CentOS 7を使っているところはEOLが変わらないので難を逃れられますけど、CentOS 8を使っているところは...😇」
「たとえばPHPの5系のような古いバージョンはPHPの公式ではサポート終了していますが、CentOSだとその後もサポートされていたりするんですよ」「そういえばCentOSのPHPって割と古かった覚えがあります」「CentOS 7ですら、今PHPのデフォルトバージョンを調べてみると5.4ですね」「そんなに前のバージョンだったとは...」
「そのようなPHPはPHP公式では既にサポートされなくなっていますが、CentOSでは致命的な脆弱性についてはパッチを当て続けてくれていたんですよ」「そうそう」「古いPHPが必要なプロジェクトでは、あえてCentOSを選んで主要なパッチがサポートされるようにすることもあります(すべてをサポートするわけではありませんが)」「PHPのバージョンを上げるのが大変だったのを思い出しました😢」「PHPが古いとフレームワークのバージョンも上げられなかったりしますよね」「CakePHPも2から3に上げるのは大変だって聞きました」「2から3はアーキテクチャが変わるので大変です」(以下延々)
参考: CakePHP - Build fast, grow solid | PHPフレームワーク
追記(2020/12/16): 以下の記事もどうぞ。
参考: CentOS Streamは継続的デリバリーです - 赤帽エンジニアブログ
⚓その他
⚓ おかえりなさい
「はやぶさ2」帰還報道のときよく使われる映像って本設の観測装置による映像じゃなくて寄附金原資のCAM-H映像なんだよね。このマスコミと科学者の需要ギャップを意識出来ること、そしてカメラ3つ積んでるのに広報用に4つ目を積もうと判断できるそのセンスがプロジェクトを救ってきたのだと思う pic.twitter.com/OntbDKWPYw
— しきしま (@shikishima) December 8, 2020
つっつきボイス:「はやぶさ2のカプセルが無事帰ってきました」「あれ、帰ってきてたの知らなかった」「テレビあんまり見てなくて実感があまりなかったけど、ニュースでは報道されてるのかな?」「NHKが結構力入れて報道してました」
昔買った『探査機はやぶささん』(JAXA監修)↓を久しぶりに読み返しちゃいました。
その後カプセル内から砂粒が確認されたそうです↓。
回収したカプセル内部の「サンプルキャッチャA室」内に多数の粒子を確認しました(日本時間12/15 11時10分頃)。
第1回タッチダウンで採取したリュウグウのサンプルと考えられます。
写真では茶色っぽく見えますが、担当者曰く「真っ黒」とのこと。
サンプルリターン大成功です! pic.twitter.com/BVIq3kUXe7— 小惑星探査機「はやぶさ2」 (@haya2_jaxa) December 15, 2020
参考: はやぶさ2「大粒試料どっさり、言葉失った」 小箱開封で黒い石確認 - 毎日新聞
後編は以上です。
バックナンバー(2020年度第4四半期)
週刊Railsウォッチ(20201214前編)Rails 6.1の直近コミットを見る、RuboCop Rails 2.9リリース、ar_lazy_preload gemほか
- 20201209後編 Ractorベンチマーク記事、Railsで複合主キーを使う、AWS re:Invent 2020ほか
- 20201208前編 レガシーRailsアプリを引き継ぐときの6つの作業、サーバーレスプロジェクトをRailsに移行ほか
- 20201202後編 Rails 6.1 RC2リリース、Ruby STMの詳細な解説記事、RSpecのdiffを見やすくするsuper_diff gemほか
- 20201201前編 switch_pointがActive Record 6.0でサポート終了、Rails DBトランザクションの落とし穴ほか
- 20201124 strict loading violationの振る舞いを変更可能に、Railsモデルのアンチパターン、quine-relayとさまざまなクワインほか
- 20201117後編 Rubyのパターンマッチングが3.0で本採用に、AWS Lambdaサイズを縮小する、AppleのM1チップほか
- 20201116前編 6.1のActive Storageでimage_processing gemが必須に、Webアプリ設計の変遷とフロントエンド領域の再定義ほか
- 20201111後編 RubyConf 2020が11/17〜19オンライン開催、GitHub Container Registryベータ開始、スマートロックほか
- 20201110前編 Rails 6.1 RC1がリリース、Railsアプリに最適なEC2インスタンスタイプ、n_plus_one_control gemほか
- 20201028後編 RuboCop 1.0.0 stable版がリリース、Ruby DSLのGUIフレームワークGlimmer、Keycloakほか
- 20201026前編 Shopifyのerb-lint gem、Form Objectを使いやすくするyaaf gem、railsrcの機能追加ほか
- 20201021後編 webpack 5リリースでWebpacker対応開始、AWS Lambda Extensions発表、Pythonにマクロ構文追加提案ほか
- 20201020前編 Percona Toolkitは優秀、Active Admin非公式ガイド、Railsをリアクティブにするガイドほか
- 20201013後編 ruby-type-profilerがtypeprofにリネーム、AWS API Gatewayの実行ログは便利、M5Stackほか
- 20201012前編 Railsの隠し機能routing visualizer、action_args gem、N+1用goldiloader gemほか
- 20201006後編 Rubyの
defined?
キーワード、Ractorベースのジョブスケジューラ、Caddy Webサーバーほか - 20201005前編 Ruby 2.7.2がリリース、Shopifyのモジュラー化gem「packwerk」、stimulus_reflexほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。