- Ruby / Rails関連
週刊Railsウォッチ(20200929後編)RubyKaigi Takeout 2020 感想戦@仮想松本が盛況、Puma 5のスリープソート、GitHub Codespacesほか
こんにちは、hachi8833です。
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
⚓Ruby
⚓RubyKaigi Takeout 2020 感想戦@仮想松本
つっつきボイス:「この感想戦はとてもよかった❤️」「感想戦と思えないぐらい濃い内容でしたね」「何しろRubyKaigiの中の人やMatzまで登場してましたし、いい感じのユルさで自分は好き」「この感想戦に参加できた人はラッキーだったと思いますよ」
「そうそう、この感想戦でノベルティ申し込んだらこういうのが届きました↓」「あ、スゴい」「SmartHRさんおよび関係者の皆さまに感謝します🙇」
SmartHRさんのRubyKaigi takeout感想戦イベント頂きもの。開運堂の白鳥の湖。なんだこれ?あえて言うなら西洋風の落雁?と思ったら公式サイトでもそのようなことが書いてあった。とりあえず一つ食べて「これは紅茶だな」と思わせる良いお茶請け感 https://t.co/KWEhRzGO3u pic.twitter.com/JlMgxHzD3s
— Masato Mori (@morimorihoge) September 21, 2020
morimorihogeより追記(2020/09/30): RubyKaigiは会議自体ももちろん充実しているんですが、毎回開催地のごはんなりお酒なりを堪能するのも大きな楽しみの一つなので、今回の感想戦ノベルティはまさにそうした「仮想松本」感を得られる内容で嬉しかったですね。同じものを食べたり飲んだりする「場の共有」感みたいなものが得られてよかったです。
⚓HerokuのRubyオブジェクトアロケーション削減
つっつきボイス:「TechRachoの翻訳記事でよくお世話になってるschneemsさんのHeroku技術ブログです」「ライフチェンジングですって」
「ざっと眺めた感じでは、Railsをきちんとパフォーマンス計測しながらコードを地道に改善してアロケーションを減らしたということみたい」「順当にやるべきことをやっていった感じですね」「パフォーマンス改善はそういうのが大事」「EuRuKoというカンファレンスで発表した内容なのね↓」
なお次回のEuRuKoは来年5月にフィンランドのヘルシンキで開催予定となっています↓。
- サイト: /Euruko 202[0|1]/i
⚓Puma 5がリリース
つっつきボイス:「ついにPuma 5出ましたね🎉」「Pumaの中の人の記事で、近々翻訳を公開します(注: 公開済み↓)」
参考: puma/architecture.md at master · puma/puma
参考: Puma の内部構造やアーキテクチャを追う | バベルの図書館は完成しない
「記事のnakayoshi forkというネーミングが面白すぎ😆」「@_ko1さんのgem名を元にしたそうです↓」
「今は本番RailsサーバーでもPumaがガンガン使われていますし、Puma 5にアップグレードするのはいいんじゃないでしょうか」「私もオレオレRailsアプリを早速Puma 5に上げました」「そういえば最近はUnicornをあまり使わなくなってきた印象がありますね」
参考: Unicorn vs Puma vs Passengerの比較まとめ | Scout APM Blog
⚓ スリープソート
「タイトルにもなってるsleep sortってこの記事で初めて知りました」「あぁ、このsleep sortって昔たしか4chan的なところで流行ったジョークアルゴリズムですよ: いろんな数値をその秒数だけスリープさせることでソートするというヤツです」「あ、ネタですか😆」「1〜1000の数値でスリープかければ1000秒後にはソートされるはずという」
# 同記事より
10000 \_ puma 5.0.0 (tcp://0.0.0.0:9292) [puma]
10001 \_ puma: cluster worker 0: 10000 [puma]
10002 \_ puma: cluster worker 1: 10000 [puma]
10003 \_ puma: cluster worker 2: 10000 [puma]
10004 \_ puma: cluster worker 3: 10000 [puma]
参考: 画期的(?)なソートアルゴリズム「Sleep Sort」:濃縮還元オレンジニュース|gihyo.jp … 技術評論社
「Webサーバーみたいにずっとリッスンしながら空いているワーカーにリクエストを割り当てていくようなアプリケーションだと、大量に押し寄せたリクエストを空いているリソースに一気に割り当ててしまうとしばらく応答不能になるだろうから、ちょっとずつでもいいのでワーカースレッドにあえて空きを作るような形で割り当てる方が、実はユーザーに優しかったり攻撃に強かったりするのかもってちょっと思いました」「Webサーバーならではの戦略という感じですね」
翻訳記事についてこんなご感想も見かけました↓。
スリープソートを実際のプロダクトで採用してる例初めて見た / 他2件のコメント https://t.co/YsEnkyI29I “Puma 5がリリース!スリープソートによる高速化など(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社” https://t.co/YxUsT91sGC
— snaka®︎ (@snaka) September 25, 2020
⚓ コードネームよもやま話
「ところでPuma 5のコードネームのSpoony Bardというのがどうやらファイナルファンタジー由来だそうです」「Bard(吟遊詩人)っていかにもRPG🧚♂️」「そのSpoonyという語が英語圏では相当違和感があるらしくて珍訳として有名なんだそうです」「なるほどこれね↓😆」
参考: モンスター/【ぎんゆうしじん】 - ファイナルファンタジー用語辞典 Wiki*
⚓RactorベースのWebサーバーを書いてみた(Ruby Weeklyより)
# 同記事より
require 'webrick'
CPU_COUNT = 4
workers = CPU_COUNT.times.map do
Ractor.new(pipe) do |pipe|
loop do
s = pipe.take
# raises "can not access non-sharable objects in constant HTTP by non-main Ractors (NameError)"
req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP)
req.parse(s)
s.print "HTTP/1.1 200\r\n"
s.print "Content-Type: text/html\r\n"
s.print "\r\n"
s.print "Hello world!\n"
s.close
end
end
end
つっつきボイス:「お、Ractor記事」「この間知人のPython使いと話したんですけど、どうやってGIL(グローバルインタプリタロック)を回避するかという話の流れで、Ractorのようなものがないとマルチプロセッサを使い切れないのでやっぱりRactorは大事だよねという話になりました」「そういえばPythonにもGILがあるって聞きました」「Pythonの場合はたしかmultiprocessとか言う名前のpipライブラリが有名らしいです」「なるほど」
参考: Pythonで並列処理をするなら知っておくべきGILをできる限り詳しく調べてみた - Qiita
参考: multiprocess · PyPI
「今の世の中はI/Oが詰まってCPUが余る傾向にありますね: 今の自分のマシンもCPU使用率が50%を超えることがめったにありませんし」「わかります」「16コアもあるとそうそう埋まりませんけど😆」「でしょうね😆」「で、そういう余っているCPUリソースを使ううえでRactorが大事になってくるんじゃないかなと」
「まあビジネスロジックでRactorを使う機会は直近あまりなさそうですけど、Ractorは知っておく方がいいと思います」「lambdaはI/Oから遠いことが多いので、lambdaを書くときにRactorが有効かもしれませんね」
参考: ruby/ractor.ja.md at ractor · ko1/ruby
「Pumaは今後Ractorを取り入れるんでしょうか?」「当然検討はすると思いますけど、今のRailsアプリだとRackミドルウェアがRactorの上で動くようにできてないから難しいかもしれませんね: Rackミドルウェアより手前の前処理部分ならRactorで高速マルチスレッドできるかもしれませんけど」「なるほど」
⚓ その他Ruby
以下はつっつき会後に見つけたツイートです。
RubyWorld Conference 2020の基調講演者が、まつもとゆきひろ、David Heinemeier Hansson氏の2名に決定いたしました。
David Heinemeier Hansson氏の基調講演は、まつもとゆきひろがインタビューを行う形式で実施します。#rubyworldhttps://t.co/IFPULa2JgR
— RubyWorld Conference (@RubyWorldConf) September 28, 2020
⚓DB
⚓最近のデータベース技術
つっつきボイス:「BPS社内Slackに貼っていただいた記事です」「そうそう、個別の新技術についてはともかく、この『ビジネスの中核をなす「ラストワンマイル」のエッジケースがあること』↓という書き方が気に入りましたね: NoSQLとはまさにこれという感じ」「あぁたしかに!」「パート2が出たらまた読もうかな😋」
私は、特定のデータタイプや問題に特化した、このような優れた技術の「専門的な」DBのファンです。従来のRDBMSの素晴らしいところは、ユースケースの非常に広い配列をカバーするのに十分な汎用性を持っていることですが、時には(a)「キッチンシンク」システムの能力を超えた、(b)ビジネスの中核をなす「ラストワンマイル」のエッジケースがあることです。
同記事より(強調は編集部)
「ほとんどのことはRDBでやれますし、実際やればいいんですけど、RDBではカバーしきれないエッジケースというものがあって、そこをサポートするためにNoSQLが存在するという気持ちがありますね」「ふむふむ」「なので、RDBを置き換えるようなタイプのNoSQLはあんまり信用してない😆: これまでRDBで培ってきた設計方法が使えるかというと使えなかったりしますし、スケールはできてもシステムの仕様上の拡張性が乏しくなったりしますし」
⚓ その他DB
Rails(というかActiveRecord)の機能を知るたびに「DBはPostgreSQLを使うのが無難だな」という気持ちになっていく。PostgreSQL Onlyがときどきある。
— 神速 (@sinsoku_listy) September 22, 2020
つっつきボイス:「@kamipoさんがRailsのぽすぐれ独自機能を頑張ってくれていますし、もう時代はぽすぐれというか、特に理由がないならぽすぐれでいいんじゃないかと声を大にして言いたいですね」
「MySQL onlyな機能は最近のRailsにはあんまりない感じでしょうか?」「そこはわかりませんが、ただMySQLの方が圧倒的に速いシチュエーションはたしかにあるので、ユースケースをきっちり押さえたうえでMySQLを選択するのはもちろんありです🧐」「なるほど」「それにMySQLも8.x以降はWITH
句が使えるようになったりとか以前に比べて随分よくなりましたし、まあそれでも個人的にはぽすぐれが好きですけど❤️」
⚓言語/ツール/OS/CPU
⚓GitHub Codespaces
4連休最終日の成果です。
入門 GitHub Codespaces Beta (解説編)https://t.co/bO2I1qroip
— masa寿司 (@masa_iwasaki) September 22, 2020
つっつきボイス:「GitHub Codespacesについて早速まとめ記事が出ました」「GitHub上でこのプロジェクトをCodespacesで開発するボタンみたいなのをポチるとVMが作られて、そこにVSCodeで接続して編集したりできるという印象」「ベータ中は無料なんですね」「ノリとしてはAWSのCloud9っぽいかも」「コンテナベースですって👀」
参考: AWS Cloud9(Cloud IDE でコードを記述、実行、デバッグ)| AWS
「VSCodeの出来がいいのでGitHub Codespacesへの期待が膨らんでいる感じはありますけど、Codespacesを運用するうえでのベストプラクティスも今後積み上げていく必要があるかも」「GitHubと統合されていてポチりだけでやれるのは強い」「今後この方向で充実していけばiPadとかChromebookとかだけで本格的に開発できるようになると思うのでそこが重要でしょうね」
⚓ リモートIDEいまむかし
「こういうリモートIDEはこれまで何度も現れたり消えたりしてましたけど、そろそろブレイクするかも🤔」「今のようなリモートワーク時代だとなおさらそうかもしれませんね」「この手のクラウドIDEには着眼点がいくつかあって、たとえばCPUがx86系でなくてもいいとか、あるいはルート環境がなくてもお手軽にインストールできるとか」「ふむふむ」「もうひとつは複雑な環境構築手順をシンプルにして、新メンバーの開発環境セットアップをやりやすくすること」
「今までの環境構築だと、たとえばgit cloneする前に公開鍵をいくつも登録して、seedデータをどこそこから持ってきて、このコマンドを順に実行して...みたいに面倒なことをしてましたけど、そういう手間を軽減して作業の立ち上がりを早くできるというメリット」
⚓ Dockerの影響
「ただ、そういう需要はDockerが普及したことでだいぶ下がったと思います😆」
「Docker普及前はクラウドIDEにそういうメリットを期待する部分がありましたけど、Dockerでひととおり環境が作れるようになった今なら、GitHubでポチるだけで作業できるようになるとか、初心者がすぐコードを触れるようになるとか、数回ポチるだけでプルリクが作れるぐらい統合を進める方が求められるかも」「GitHubなら本当にやりそうですね」「GitHubもそのつもりでCodespaces作ったんでしょうし、そういう統合が進んだらいろいろ変わってきそう」
「BPS社内のGitLabでも、リポジトリのプルリクをブラウザ上のWeb IDEで直接編集してコミットまでできるようになってますけど、そういう感じでGitHub Codespacesも統合が進むといいなって思います」「GitHub Codespacesの今後に期待ですね」
以下はつっつき会後に見つけたツイートです。
GitHub codespacesのドキュメント読んでたらVS Code Remote 使うとターミナル中に表示されるリモートサーバーのURLクリックすると自動でポートフォワーディングしてくれることを知った。開発環境のホストlocalhost縛り問題はすでに解決していたのであった。https://t.co/rdXIQ4vSML
— masa寿司 (@masa_iwasaki) September 28, 2020
後編は以上です。
バックナンバー(2020年度第3四半期)
週刊Railsウォッチ(20200928前編)Ruby 3.0.0 Preview 1リリース、Rails Guidesにconcernsのドキュメント追加、Sidekiq 2020エディションほか
- 20200915後編 RubyKaigi 2020 Takeoutの動画出揃う、イタリア語でRuby、AWS Summit Online開催中ほか
- 20200914前編 10月のKaigi on Rails情報発表、JS入れ過ぎRailsアプリ、テストで便利なpuffing-billy gemほか
- 20200908後編 Shopify版Rubyスタイルガイド、JavaScript Primerが2.0に、GitHub Container Registryほか
- 20200901後編 RubyKaigi 2020 Takeout登壇者発表、Ruby開発版が2.8から3.0へ、マイクロサービス分割ほか
- 20200831前編 GitHubがRuby 2.7にアップグレード、Durationに変換メソッドが追加、hair_triggerでデータベーストリガほか
- 20200825後編 Rubyクラスライブラリをgem化、Rubyテストフレームワークrr、ChromebookでWindowsが動くほか
- 20200824前編 「Active Jobスタイルガイド」は有用、SiderがGitLabに対応、eager loading時のselectを修正ほか
- 20200818後編 ruby_jardデバッガがスゴい、RubyオンラインマニュアルにEdit機能が追加、Ruby 2.7のBundlerを消す方法ほか
- 20200817前編 お盆も続くRails改修、Rails 6.1にManyモナドが入る?rails-auth gemでクライアント認証ほか
- 20200811山の日短縮版 RSpec Queueでパラレルテスト、カロリーメイトとRubyのコラボ、Rubyのcoercionほか
- 20200804後編 「RubyKaigi Takeout 2020」9月オンライン開催、メールバリデータtruemail、Gitのmasterが変更可能にほか
- 20200803前編 書籍『パーフェクトRuby on Rails』増補改訂版、マルチDBで抽象クラスをscaffold生成、GitLabがPumaに乗り換えほか
- 20200721後編 『パーフェクトRuby on Rails』増補改訂版発売間近、scan_left gemでレイジーなinjectほか
- 20200720前編 10月開催「Kaigi on Rails」CFP募集中、enumにデフォルト値設定機能、RailsでBitemporal Data Modelほか
- 20200714後編 ruby-warning gemでワーニングを手軽に抑制、rubocop -aの振る舞いが変わる、書籍『MySQL徹底入門 第4版』ほか
- 20200713前編 rspec-openapiでスキーマ自動生成、Rails Architect Conf動画、
where()
ハッシュキーに比較演算子条件を書ける機能ほか - 20200707後編 Rubyで無名structリテラル提案、書籍『AWS認定ソリューションアーキテクト』、21世紀のC言語ほか
- 20200706前編 Railsでのマルチテナンシー実装戦略を比較、Railsでサブクエリを使う、URI.parserが非推奨化ほか)
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。