Tech Racho エンジニアの「?」を「!」に。
  • 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.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チップでのビルドに対応

「M1チップ上で、インテルバイナリでないarm64バイナリのRubyが動くようになったとは」「お〜すげ〜!」「M1 Macまだ持ってないけど嬉しいです😂」

Ruby 3.0の静的型解析関連記事


つっつきボイス:「そうそう、@mameさんの静的型解析関連記事が2本も出ていましたね」「@mameさんの解説が記事の形でみっちり書かれているのが本当にありがたい🙏」「動画を見るには集中力も必要だし、高度な話題を扱うとたまについていけなくなりますけど、文章で書かれていると自分のペースで読めますよね」「Ruby 3.0の静的型解析周りの機能については@jnchitoさんもやっているように自分で触って理解するのがいいでしょうね」「後で読まなきゃ」

「@mameさん記事の冒頭で、RBSとTypeProfとSteep/Sorbetの違いを3行でまとめてくれているのも助かる!」「新しいのでどれがどれだかたまにわからなくなりがちでした😅」「Ruby 3にバンドルされるのがRBSとTypeProfで、SteepやSorbetは自分で導入できるツールということか」

soutaro/steep - GitHub

sorbet/sorbet - GitHub

「今やってるRailsアプリ、Ruby 3.0にアップグレードしようかな、どうしようかな?」「動作確認してみるのはよいと思います!」「後はRailsで使うgemがどのぐらい3.0で動くかでしょうね」「あ、それもそうか」「しばらくは動作確認の期間になるかな」

RuboCop本体も1.6がリリース


つっつきボイス:「こちらは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より)

zombocom/syntax_search - GitHub


データベースのランダム読み出しは要注意(翻訳)

つっつきボイス:「TechRacho翻訳記事でもお世話になっているRailsコントリビューターの@schneemsさん↑の最近の記事で、Rubyコードのendが1個多いエラーを解決するためにsyntax_searchというツールを使ったそうです」「余分なendがどこにあるのかわかりにくいのあるある😆」

Syntax Search: Extra 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より)

vitessio/vitess - GitHub


つっつきボイス:「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はオープンソースなのか」「この種のソフトウェアは商用が多いです」

参考: HAProxy - Wikipedia

「この記事↓をざっと見た感じでは、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のカプセルが無事帰ってきました」「あれ、帰ってきてたの知らなかった」「テレビあんまり見てなくて実感があまりなかったけど、ニュースでは報道されてるのかな?」「NHKが結構力入れて報道してました」


昔買った『探査機はやぶささん』(JAXA監修)↓を久しぶりに読み返しちゃいました。

その後カプセル内から砂粒が確認されたそうです↓。

参考: はやぶさ2「大粒試料どっさり、言葉失った」 小箱開封で黒い石確認 - 毎日新聞


後編は以上です。

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

週刊Railsウォッチ(20201214前編)Rails 6.1の直近コミットを見る、RuboCop Rails 2.9リリース、ar_lazy_preload gemほか

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

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

Ruby 公式ニュース

Ruby Weekly

DB Weekly

db_weekly_banner


CONTACT

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