Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ(20200929後編)RubyKaigi Takeout 2020 感想戦@仮想松本が盛況、Puma 5のスリープソート、GitHub Codespacesほか

こんにちは、hachi8833です。

  • 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄

Ruby

RubyKaigi Takeout 2020 感想戦@仮想松本


つっつきボイス:「この感想戦はとてもよかった❤️」「感想戦と思えないぐらい濃い内容でしたね」「何しろRubyKaigiの中の人やMatzまで登場してましたし、いい感じのユルさで自分は好き」「この感想戦に参加できた人はラッキーだったと思いますよ」

「そうそう、この感想戦でノベルティ申し込んだらこういうのが届きました↓」「あ、スゴい」「SmartHRさんおよび関係者の皆さまに感謝します🙇」

morimorihogeより追記(2020/09/30): RubyKaigiは会議自体ももちろん充実しているんですが、毎回開催地のごはんなりお酒なりを堪能するのも大きな楽しみの一つなので、今回の感想戦ノベルティはまさにそうした「仮想松本」感を得られる内容で嬉しかったですね。同じものを食べたり飲んだりする「場の共有」感みたいなものが得られてよかったです。

HerokuのRubyオブジェクトアロケーション削減


つっつきボイス:「TechRachoの翻訳記事でよくお世話になってるschneemsさんのHeroku技術ブログです」「ライフチェンジングですって」

「ざっと眺めた感じでは、Railsをきちんとパフォーマンス計測しながらコードを地道に改善してアロケーションを減らしたということみたい」「順当にやるべきことをやっていった感じですね」「パフォーマンス改善はそういうのが大事」「EuRuKoというカンファレンスで発表した内容なのね↓」

なお次回のEuRuKoは来年5月にフィンランドのヘルシンキで開催予定となっています↓。

Puma 5がリリース

puma/puma - GitHub


つっつきボイス:「ついにPuma 5出ましたね🎉」「Pumaの中の人の記事で、近々翻訳を公開します(注: 公開済み↓)」

Puma 5がリリース!スリープソートによる高速化など(翻訳)

参考: puma/architecture.md at master · puma/puma
参考: Puma の内部構造やアーキテクチャを追う | バベルの図書館は完成しない

「記事のnakayoshi forkというネーミングが面白すぎ😆」「@_ko1さんのgem名を元にしたそうです↓」

ko1/nakayoshi_fork - GitHub

「今は本番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サーバーならではの戦略という感じですね」

翻訳記事についてこんなご感想も見かけました↓。

コードネームよもやま話

「ところで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

以下はつっつき会後に見つけたツイートです。

DB

最近のデータベース技術


つっつきボイス:「BPS社内Slackに貼っていただいた記事です」「そうそう、個別の新技術についてはともかく、この『ビジネスの中核をなす「ラストワンマイル」のエッジケースがあること』↓という書き方が気に入りましたね: NoSQLとはまさにこれという感じ」「あぁたしかに!」「パート2が出たらまた読もうかな😋」

私は、特定のデータタイプや問題に特化した、このような優れた技術の「専門的な」DBのファンです。従来のRDBMSの素晴らしいところは、ユースケースの非常に広い配列をカバーするのに十分な汎用性を持っていることですが、時には(a)「キッチンシンク」システムの能力を超えた、(b)ビジネスの中核をなす「ラストワンマイル」のエッジケースがあることです
同記事より(強調は編集部)

「ほとんどのことはRDBでやれますし、実際やればいいんですけど、RDBではカバーしきれないエッジケースというものがあって、そこをサポートするためにNoSQLが存在するという気持ちがありますね」「ふむふむ」「なので、RDBを置き換えるようなタイプのNoSQLはあんまり信用してない😆: これまでRDBで培ってきた設計方法が使えるかというと使えなかったりしますし、スケールはできてもシステムの仕様上の拡張性が乏しくなったりしますし」

参考: NoSQL - Wikipedia

その他DB


つっつきボイス:「@kamipoさんがRailsのぽすぐれ独自機能を頑張ってくれていますし、もう時代はぽすぐれというか、特に理由がないならぽすぐれでいいんじゃないかと声を大にして言いたいですね」

「MySQL onlyな機能は最近のRailsにはあんまりない感じでしょうか?」「そこはわかりませんが、ただMySQLの方が圧倒的に速いシチュエーションはたしかにあるので、ユースケースをきっちり押さえたうえでMySQLを選択するのはもちろんありです🧐」「なるほど」「それにMySQLも8.x以降はWITH句が使えるようになったりとか以前に比べて随分よくなりましたし、まあそれでも個人的にはぽすぐれが好きですけど❤️」

言語/ツール/OS/CPU

GitHub Codespaces


つっつきボイス:「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の今後に期待ですね」


以下はつっつき会後に見つけたツイートです。


後編は以上です。

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

週刊Railsウォッチ(20200928前編)Ruby 3.0.0 Preview 1リリース、Rails Guidesにconcernsのドキュメント追加、Sidekiq 2020エディションほか

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

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

Ruby Weekly

Publickey

publickey_banner_captured


CONTACT

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