- Ruby / Rails関連
週刊Railsウォッチ(20201209後編)Ractorベンチマーク記事、Railsで複合主キーを使う、AWS re:Invent 2020ほか
こんにちは、hachi8833です。
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
- お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙇
⚓Ruby
⚓ Ractorはどのぐらい速いか(Ruby Weeklyより)
つっつきボイス:「RubyやRailsのベンチマーク記事↓でおなじみのNoah GibbsさんがRactorのベンチも取ってみたそうです」「お〜」
「初期セットアップのオーバーヘッドの表↓を見た感じでは、Ractorのその部分はスレッドより速そう」
「次のベンチマークの表↓を見ると、Ractorはスレッドとほぼ同じぐらいで、標準偏差が他の項目より大きいのか」「ホントだ」
「記事の末尾には、Ractorは2コアだと最大で16%速いこともあると書かれてる」「記事にもあるようにRactorはこれからの技術ですが、この結果を見ると少なくとも遅くはならなさそうですし、Ractorに本格的に取り組んでみるのはよさそうですね👍」
この記事は翻訳してみたいです。
⚓ Rubyの内部関数のバグを修正した話(Ruby Weeklyより)
つっつきボイス:「-p
や-i
のようなオプションはRubyのワンライナーで使われることがありますね」「どうやらRubyのそういうオプションをshebangに書いたときに内部でパースの結果をチェックしていなかったらしい↓」
# (同記事のshebangを無効な内容に置き換えたもの: これでも動いてしまう)
#!/some/invalid/dir/ruby -pi.bak
BEGIN {
puts "It is starting!"
}
$_.gsub!(/perl/, "ruby")
# 同記事より
$ echo "I like perl, it is my favourite language." > temp.txt
$ ruby script.rb temp.txt
It is starting!
$ cat temp.txt
I like ruby, it is my favourite language.
$ cat temp.txt.bak
I like perl, it is my favourite language.
なお、-i.bak
は拡張子を変えてバックアップするオプション、-p
は$_
の値を出力するオプションだそうです。
参考: Rubyの起動 (Ruby 2.7.0 リファレンスマニュアル)
「こんなバグよく見つけましたよね」「shebangで-pi.bak
みたいな指定って普通やらないと思いますけどね...自分はたぶん今後も使わないかも」「記事の最後でRubyにプルリク投げてマージされたそうです↓」
このバグ修正はRuby 2.6や2.7にもバックポートされるそうです(#17117)。
⚓ Rubyのdefault gemとbundled gemの違い(RubyFlowより)
つっつきボイス:「Bundlerのdefault gemとbundled gemの違いについて解説した記事です」「gem化されてないライブラリも含めると3種類になるとかがよく話題になりますね」「@hsbtさんのこの発表は、そのあたりや今後の動きについて詳しく解説してくれているのでとても参考になります↓」
参考: bundled gem と default gem の違い - @znz blog
⚓DB
⚓ Railsで複合主キーを導入する(Ruby Weeklyより)
つっつきボイス:「Shopifyの記事です」「記事の前半ではShopifyがマルチテナントアーキテクチャであることなどを考慮して、通常の主キーに代えてshop_id
とorder_id
による複合主キーを使う方向に寄せることを考えたという話などをしていますね」「ふむふむ」
# 同記事より
class Order < ApplicationRecord
self.primary_key = :id
# 省略
end
「そして上のモデルに対応するのが以下のSQLテーブル定義↓ですが、お〜、これを見ると複合主キーはあくまでデータのローカリティ(局所性)を高める、つまりインデックス用にだけ使うけど、Railsのサロゲートキーは変えずに残しておくという考え方のようですね」「あ、そういうことですか!」「PRIMARY KEYにはshop_id
とid
を指定しているけど、id
のAUTO_INCREMENTは変えずに残しているあたりがそういう感じ」
-- 同記事より
CREATE TABLE `orders` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`shop_id` bigint(20) NOT NULL,
-- (他のカラムは省略)
PRIMARY KEY (`shop_id`,`id`),
KEY `id` (`id`)
-- (他のセカンダリキーは省略)
)
「ちなみにRailsには昔からcomposite_primary_keysという複合主キーの定番gemがあるんですけど↓、こちらは他のgemとの組み合わせなどによっては副作用が生じることもあるので、そういうときには他のgem向けにRailsのサロゲートキーが別途欲しくなることも考えられそう」
「Shopifyのようにサロゲートキーと複合主キーを両方持つやり方はちょっと特殊に思えますが、マルチテナンシーなどの要件がうまくマッチすれば、複合主キーをこのように使うこともあるのかもしれませんね」「なるほど」「Shopifyのような実装は、一般的な複合主キーの実装ではあまり見かけない感じに思えますが、いろいろ興味深いです👍」
「ところで、記事の中でlhm(large hadron migrator)という粒子加速器みたいな名前のツールが紹介されていました↓」「見た感じでは、Shopifyが作った独自のデータマイグレーションツールのようで、複合主キーとは直接関係なさそうかな」「Percona Toolkitを使った似たようなマイグレーションツールがあったかも」
⚓クラウド/コンテナ/インフラ/Serverless
⚓ AWS re:Invent 2020での各種発表(Publickeyより)
- New for AWS Lambda – Container Image Support | AWS News Blog(Publickey記事)
- Amazon DevOps Guru | ML-powered cloud operations service to improve application availability(Publickey記事)
- Amazon ECR(Docker イメージの保存と取得)| AWS(Publickey記事)
- Babelfish for Aurora PostgreSQL (Preview) | Amazon Web Services(Publickey記事)
- Amazon Connect Voice ID – Amazon Web Services(Publicke記事y)
- [速報]AWS、ピザボックスサイズのAWS Outpostsなど小型化した2機種を発表。AWS re:Invent 2020 - Publickey
- AWS Trainium - Amazon Web Services (AWS)(Publickey)
- Announcing Amazon EC2 Mac instances for macOS(Publickey)
つっつきボイス:「そのうちまとめ記事が出そうですが一応」「今回のAWS re:Inventも、AWS LambdaがDockerコンテナをサポートしたとかいろいろ発表されていますね: この見出しの他には、AWS Lambdaの課金が100ミリ秒単位だったのが1ミリ秒単位に変わったという発表もありました↓」「あ、そうでしたか」「1ミリ秒課金になったことで、重いDockerコンテナを使うよりもAWSの既存のランタイムを使う方がよい局面も出てくるかもしれませんね(どこまでやるかにもよりますが)」
参考: [アップデート] Lambdaの実行時間の課金単位が1ミリ秒に短縮されました #reinvent | Developers.IO
「見出し最後のEC2 Macインスタンスは力技で面白かった」「社内Slackでbabaさんが『Mac miniを物理的にずらっと並べてるのか』ってウケてたヤツですね↓」「AWSのアナウンスにも、仮想化したmacOSではなくてMac miniコンピュータを使っていると書かれていますね」
「ただEC2 Macインスタンスはアナウンスにも書かれているようにminimum host allocation durationが24時間なので、ビルドのときだけ立ち上げるような使い方だとコストがかさみそうなのは今後改良して欲しいかな」「出先でPCとMacを両方使いたいけど2台も持ち運んでいられないような人にはありがたいかも」「将来M1のインスタンスも使えるようになったらまた違ってきそうですね」「これでリモート開発やリモートデバッグができるようになって、Macを買わなくてもiPhoneアプリを開発できるようになったらよさそう(Appleのライセンスでそこまで許されるかどうかにもよるでしょうけど)」
⚓CSS/HTML/フロントエンド/テスト/デザイン
⚓ 2021年度のWebデザイントレンド
つっつきボイス:「来年のWebデザイントレンドか」「以下に日本語のまとめ記事もあります↓」
参考: ついに出た!2021年注目のWebデザイン人気トレンド9個まとめ - PhotoshopVIP
「Neumorphismは、新しいSkeumorphismということらしい」「スキュー?」「だいぶ昔のiPhoneのアイコンなどで使われていた実物っぽいデザインがたしかSkeumorphismと呼ばれていましたね」「Neumorphismの影の付き方とかがそれっぽいかも」
以下はつっつき後に見つけたツイートです。
ニューモーフィズムは、一昔前に流行った「スキューモーフィズム」のリアルな質感と、フラットやマテリアルデザインのようなシンプルさを組み合わせた新しいスタイル。言葉の由来も、New(新しい)+Skeumorphism(スキューモーフィズム)からきた造語。https://t.co/qMf54v4QdW
— ひとやすみくん@広告プランナーのメモ (@1q3_japan) February 6, 2020
「Abstract Art Compositionは、20世紀前半のモンドリアンの絵みたいな感じなのかな」「こういう感じのデザインはSVGで軽量に作りやすそうですし、CSSのレンダリングやアニメーションと相性がよさそうなので、それもあって流行りつつあるのかなと思いました」
「PARALLAX ANIMATION」「SCROLLING TRANSFORMATIONS」はよく見る
「ABSTRACT ART COMPOSITONS」は日本だと少ない気がするけど海外は多いついに出た!2021年注目のWebデザイン人気トレンド9個まとめ https://t.co/pY3bZDWtA2 @photoshopvip
— ssshun (@s_s_s_hun) December 1, 2020
参考: Broadway Boogie Woogie - Wikipedia
「主に海外の流行のようなので、ものによっては日本に入ってくるまで時間差があるかもしれませんが、こういう記事を一度眺めておくと、今後デザイナーに「XXのような感じでお願いします」と大枠の指定を出したりするときに役立つと思います👍」
⚓その他
⚓ Big SurとRuby
仕事用のMacをBig Surにアップグレードして4日目ですが、今のところ問題は起きてません。この調子で普通に使えそうな雰囲気です✌️
Rubyプログラマが勢いで仕事用のMacをBig Surにアップグレードしてみた - give IT a try https://t.co/YYm8s8Mnd4
— Junichi Ito (伊藤淳一) (@jnchito) December 3, 2020
Big Surにアップグレードして何が一番嬉しいかって、Mac起動時の「ジャーーン」音が4年ぶりに復活したことだわー。https://t.co/dFeB54NBr5
— Junichi Ito (伊藤淳一) (@jnchito) November 29, 2020
つっつきボイス:「ついに@jnchitoさんも開発環境をBig Surに移行」「そういえばHomebrewもBig Surで動くようになったらしいので↓、MySQLを複数入れたりもできるでしょうね」
参考: 「macOS Big Sur」に対応、M1での動作も可能になった「Homebrew 2.6.0」 - 窓の杜
「昔はMySQLやぽすぐれをHomebrewで複数バージョンインストールして管理してましたけど、今ならもうDockerでやりたい」「そうですよね」「もちろんローカル環境でたくさんのプロジェクトを扱うのでなければ今までどおりHomebrewなどでインストールすればいいと思いますけど、自分の場合はいろんなプロジェクトを扱っているので、昔みたいにMySQLやPostgreSQLやRedisのバージョンが3つずつぐらい同居すると、メモリを食いすぎるので手動で起動したりとかいろいろつらい」「ポート番号も使い分けないといけないのもつらいです😢」「Dockerはやっぱりありがたい」
なお、Docker Desktop for MacもBig Surに対応したそうです↓。
参考: Docker for Mac Stable release notes | Docker Documentation
後編は以上です。
バックナンバー(2020年度第4四半期)
週刊Railsウォッチ(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など)です。