- Ruby / Rails関連
READ MORE
こんにちは、hachi8833です。
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
つっつきボイス:「この感想戦はとてもよかった❤️」「感想戦と思えないぐらい濃い内容でしたね」「何しろ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は会議自体ももちろん充実しているんですが、毎回開催地のごはんなりお酒なりを堪能するのも大きな楽しみの一つなので、今回の感想戦ノベルティはまさにそうした「仮想松本」感を得られる内容で嬉しかったですね。同じものを食べたり飲んだりする「場の共有」感みたいなものが得られてよかったです。
つっつきボイス:「TechRachoの翻訳記事でよくお世話になってるschneemsさんのHeroku技術ブログです」「ライフチェンジングですって」
「ざっと眺めた感じでは、Railsをきちんとパフォーマンス計測しながらコードを地道に改善してアロケーションを減らしたということみたい」「順当にやるべきことをやっていった感じですね」「パフォーマンス改善はそういうのが大事」「EuRuKoというカンファレンスで発表した内容なのね↓」
なお次回のEuRuKoは来年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*
# 同記事より
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で高速マルチスレッドできるかもしれませんけど」「なるほど」
以下はつっつき会後に見つけたツイートです。
RubyWorld Conference 2020の基調講演者が、まつもとゆきひろ、David Heinemeier Hansson氏の2名に決定いたしました。
David Heinemeier Hansson氏の基調講演は、まつもとゆきひろがインタビューを行う形式で実施します。#rubyworldhttps://t.co/IFPULa2JgR
— RubyWorld Conference (@RubyWorldConf) September 28, 2020
つっつきボイス:「BPS社内Slackに貼っていただいた記事です」「そうそう、個別の新技術についてはともかく、この『ビジネスの中核をなす「ラストワンマイル」のエッジケースがあること』↓という書き方が気に入りましたね: NoSQLとはまさにこれという感じ」「あぁたしかに!」「パート2が出たらまた読もうかな😋」
私は、特定のデータタイプや問題に特化した、このような優れた技術の「専門的な」DBのファンです。従来のRDBMSの素晴らしいところは、ユースケースの非常に広い配列をカバーするのに十分な汎用性を持っていることですが、時には(a)「キッチンシンク」システムの能力を超えた、(b)ビジネスの中核をなす「ラストワンマイル」のエッジケースがあることです。
同記事より(強調は編集部)
「ほとんどのことはRDBでやれますし、実際やればいいんですけど、RDBではカバーしきれないエッジケースというものがあって、そこをサポートするためにNoSQLが存在するという気持ちがありますね」「ふむふむ」「なので、RDBを置き換えるようなタイプのNoSQLはあんまり信用してない😆: これまでRDBで培ってきた設計方法が使えるかというと使えなかったりしますし、スケールはできてもシステムの仕様上の拡張性が乏しくなったりしますし」
Rails(というかActiveRecord)の機能を知るたびに「DBはPostgreSQLを使うのが無難だな」という気持ちになっていく。PostgreSQL Onlyがときどきある。
— 神速 (@sinsoku_listy) September 22, 2020
つっつきボイス:「@kamipoさんがRailsのぽすぐれ独自機能を頑張ってくれていますし、もう時代はぽすぐれというか、特に理由がないならぽすぐれでいいんじゃないかと声を大にして言いたいですね」
「MySQL onlyな機能は最近のRailsにはあんまりない感じでしょうか?」「そこはわかりませんが、ただMySQLの方が圧倒的に速いシチュエーションはたしかにあるので、ユースケースをきっちり押さえたうえでMySQLを選択するのはもちろんありです🧐」「なるほど」「それにMySQLも8.x以降はWITH
句が使えるようになったりとか以前に比べて随分よくなりましたし、まあそれでも個人的にはぽすぐれが好きですけど❤️」
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には着眼点がいくつかあって、たとえばCPUがx86系でなくてもいいとか、あるいはルート環境がなくてもお手軽にインストールできるとか」「ふむふむ」「もうひとつは複雑な環境構築手順をシンプルにして、新メンバーの開発環境セットアップをやりやすくすること」
「今までの環境構築だと、たとえばgit cloneする前に公開鍵をいくつも登録して、seedデータをどこそこから持ってきて、このコマンドを順に実行して…みたいに面倒なことをしてましたけど、そういう手間を軽減して作業の立ち上がりを早くできるというメリット」
「ただ、そういう需要は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
後編は以上です。
週刊Railsウォッチ(20200928前編)Ruby 3.0.0 Preview 1リリース、Rails Guidesにconcernsのドキュメント追加、Sidekiq 2020エディションほか
where()
ハッシュキーに比較演算子条件を書ける機能ほかソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。