- Ruby / Rails関連
週刊Railsウォッチ: SorbetのRuby AOTコンパイラが公開、「Compiler Explorer」にRubyが追加、Ractorで非同期通信ほか(20210823後編)
こんにちは、hachi8833です。もろもろの事情で後編の公開が遅れました🙇。
🔗Ruby
🔗 SorbetのRuby AOTコンパイラ(Ruby Weeklyより)
- 元記事: Sorbet Compiler: An experimental, ahead-of-time compiler for Ruby · Sorbet
- sorbet/compiler at master · sorbet/sorbet
We're big believers in multi-year infrastructure bets. After a few years of Ruby infra work, our in-house Ruby compiler is now 22–170% faster than Ruby's default implementation for Stripe's production API traffic. If interested in working on such problems, we're hiring!
— Patrick Collison (@patrickc) June 30, 2021
つっつきボイス:「まだ実験段階だそうです」「SorbetのRuby用コンパイラはJITではなくAhead-Of-Time(事前)方式で、これまでStripe社内のみで使っていたのが公開されたみたい」「今度のRubyKaigi Takeout 2021でこれの話が聞けそうな気がしますね」「あ、そうかも」
その後発表されたRubyKaigi Takeout 2021のスケジュールを確認してみましたが、Sorbetを手掛けているStripe社のスピーカーは惜しくもいませんでした。
🔗 Compiler ExplorerにRubyも追加(Ruby Weeklyより)
- サイト: Compiler Explorer
つっつきボイス:「Compiler Explorer?」「なるほど、こういうふうにソースコードをコンパイルできるのか↓」「このサイトのサポート言語にRubyも加わったそうです」「お〜、たとえば左にRubyのコードを書くと右にコンパイル結果が出力されるんですね」
「Rubyのバージョンも2.5.9〜3.0.2から選べる、やだこれスゴい」「バージョンによってコンパイル結果が変わる可能性もあるので、選べるのはありがたい」「コンパイルボタンはどこかなと思ったら、書いた途端にコンパイルされるみたい」「Rubyの場合はVMの命令シーケンス(ISeq)をdisasm
した結果が出るのか」「これは面白い!」「C言語にするとCPUとコンパイラのさまざまな組み合わせを選べました」
# godbolt.orgより
== disasm: #<ISeq:<compiled>@example.rb:1 (1,0)-(4,3)> (catch: FALSE)
0000 definemethod :square, square ( 2)[Li]
0003 putobject :square
0005 leave
== disasm: #<ISeq:square@example.rb:2 (2,0)-(4,3)> (catch: FALSE)
local table (size: 1, argc: 1 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
[ 1] num@0<Arg>
0000 putstring "" ( 3)[LiCa]
0002 leave
参考: RubyVM::InstructionSequence#disasm
(Ruby 3.0.0 リファレンスマニュアル)
「ちょっとしたコード最適化で部分的なコンパイル結果をチェックしたり、結果の比較をプルリクに添えたりするのに使えるかも👍: 自分でここまでカリカリにチューニングするかどうかはわからないけど」「なるほど!」「コードの最適化では、なぜかこう書く方が速いということもあったりしますけど、そういうときに納得したり説得したりするときの材料に使えそう」「何より見てて楽しい」「見てて楽しいですね」
🔗 Ractorで安全な非同期通信の実験(Ruby Weeklyより)
つっつきボイス:「Ractorを初めてやってみた記事だそうです」「Ractorでノンブロッキングに書く方法とブロッキングに書く方法が紹介されていますね: ここまでできればほぼスレッド並かも」「お〜」「このブログには他にもいろんなRuby記事があってよさそう👍」
# 同記事より
receiver_ractor = Ractor.new do
loop do
message = Ractor.receive
sleep 1
puts "Processed #{message}"
end
end
counter = 0
while true
counter += 1
receiver_ractor.send(counter)
end
参考: ruby/ractor.md at master · ruby/ruby
参考: class Thread
(Ruby 3.0.0 リファレンスマニュアル)
🔗 その他Ruby
ドキュメントに書いてあるかなと探してみたら、ここにあった。
> Any gem that does not specify membership in any group is placed in the `default` group.https://t.co/wMsrk1Gdgh
— Masafumi Koba (@ybiquitous) August 11, 2021
つっつきボイス:「bundle install --without default
とは?」「おそらくですが、Rubyのbundlerを普通に実行するとGemfile.lockにあるgemを全部インストールしますけど、そうではなくて特定のgemだけをインストールしたいということでしょうね」「あ〜なるほど」「Gemfile.lockに書かれている特定のgemだけインストールしたい、他のはインストールしたくないという状況かなと思いました」「こうやるとできるんですね」
参考: rubygems/bundler at master · rubygems/rubygems
🔗クラウド/コンテナ/インフラ/Serverless
🔗 ElasticのクライアントライブラリとAWS OpenSearch(Publickeyより)
つっつきボイス:「ああ、ElasticとAWSのこのニュースは考えさせられましたね」
「Elasticがこうするまでのいきさつってどんなでしたっけ?」「以下の記事などにあるように以前からRedisやElasticなどがAWSに申し立てしています↓」
参考: AWSをElasticが名指しで非難。ElasticsearchとKibanaのライセンスを、AWSが勝手にマネージドサービスで提供できないように変更へ - Publickey
「ElasticがElastic Cloud上で運営しているElasticsearchのホスティングサービスがAWSのサービスと競合する点(ElasticのはAWSより後ですが)や、AWSがElasticsearchという商標を使ってサービスしている点などが問題視されているようです」「あ〜」
参考: Amazon Elasticsearch Service(Elasticsearchを簡単にデプロイ、保護、運用)| AWS
参考: Elastic Cloud:マネージドのElasticsearchと検索 | Elastic
「いちユーザーとしては、既に持っているAWSアカウントでELK Stackを立てられるのは便利かつ嬉しいし、Amazon ESもそれなりに息の長いサービスなので、既に使われているプロダクトも結構世の中にあるはず」「ふむふむ」「今回ElasticSearch公式がクライアントライブラリに手を加えたことで、こうした"善意の"ユーザーまで影響を受けるようになってしまうのはいろいろ残念」
参考: ELK Stack: Elasticsearch、Logstash、Kibana | Elastic
「もちろんElasticの言い分もとても理解できるんですが、こういう現場の前方互換が失われるような変更を入れられてしまうと、長く使われる可能性のあるエンタープライズ系のシステムで使うのをちょっとためらうかも」「気持ちわかります」
「もうひとつ気になるのが、Elasticと似たような形でAWSと対立しているRedisなどの動向」「Redisもですか」
参考: Redis、MongoDB、Kafkaらが相次いで商用サービスを制限するライセンス変更。AWSなどクラウドベンダによる「オープンソースのいいとこ取り」に反発 - Publickey
Level up your player experience with #realtime responsiveness. Learn how you can power your most demanding #gaming use cases with the world’s most popular in‑memory #database here 🎮: https://t.co/rQ4zB2CbOF pic.twitter.com/Jk92ex3iuE
— Redis (@Redisinc) August 16, 2021
「Elasticは明らかに法人ですが、Redisはどうだったかな...Redis Labsがスポンサーになっているのか↓」
「正直、ElasticsearchやRedisってできれば自前ではホスティングしたくないサービスの筆頭」「そうそう、自分たちで運用するとつらいヤツ」「Redisはスケールアップするときに一度止めないといけないとか、ノウハウが結構必要になるので、できればやっぱりクラウドのものを使いたい」
「以前NVIDIAのCUDAがEULAに記載された利用方法を後から変更したために、データセンターに導入できなくなってビットコインを掘ったりするのに使えなくなったことがありましたね」「ありゃ〜」「利用要件を回避するためにやむなく古いCUDAを使い続けたりしているそうです」「後から変えるとやっぱりもめますよね」「以前機械学習で遊んだときにCUDAを入れたことありますが、めちゃデカかった」
参考: CUDA - Wikipedia
参考: エヌビディアが消費者向けGPUのライセンスを変更、データセンターへの導入を禁止 | 日経クロステック(xTECH)
🔗 JavaScript
🔗 Deno 1.13にネイティブHTTPサーバーAPIが搭載
つっつきボイス:「Denoって今どのぐらい使われているのかな?」「追ってみたことはありませんが、かなり頻繁にアップデートされているようです」「今調べて知りましたが、Denoは次世代のNodeみたいな位置づけなんですね」「Nodeの作者がさまざまな反省を込めてDenoを作ったそうです」
参考: DenoとNode.jsの大きな違い - keroxpのScrapbox
「CloudFrontのLambda@EdgeのようなエッジコンピューティングとかだったらDenoは十分いけるかなという気持ちはありますね」「お〜」「いきなり大規模なものに使うのはまだためらいがありますが、小規模なプログラムならイレギュラーなことも起こりにくいでしょうし、マイクロサービス的なものと新しいプログラミング言語環境は割と相性がよさそうな印象もあります」
参考: CloudFront Lambda@Edge での AWS Lambda の使用 - AWS Lambda
🔗CSS/HTML/フロントエンド/テスト/デザイン
🔗 ちいさなWebブラウザを作ってセキュリティを学ぶ
つっつきボイス:「お、今年のセキュリティ・キャンプ↓はどことなく大学の集中講義みたいな雰囲気」「スライドはアウトラインで、その下の資料に詳しく書かれているそうです」「セキュリティ・キャンプも今の御時世なのでオンライン開催か」「こういう資料を無料で参照できるのはいい👍」
参考: セキュリティ・キャンプ:IPA 独立行政法人 情報処理推進機構
「セキュリティ・キャンプの対象はメインが高校生で次点が大学生、ときには中学生もいたりするんですよ」「こういう場で学べる今の若者は強いですね」「オンライン開催になったことで以前より参加しやすくなった反面、こういう独特の場のアツい空気みたいなものに触れる機会がなくなったのは残念」「そうなんですよね...」
🔗言語/ツール/OS/CPU
🔗 CO2センサー
つっつきボイス:「これは自分も見かけて、いい記事だと思いました👍」「そう言えば以前CO2センサーの記事を出してましたよね↓」「そうそう、自分が記事で使ったセンサーはCO2を直接測定していないので精度があまり高くないと言われています」
「こうした商用センサーの精度はいろいろ難しい面があって、製造側にしてみれば精度が高くなくても売れればいいというモチベーションがある一方、それを指摘する側は手間もかかるし訴訟リスクもあるしお金にもならないということになりやすい」「あ〜たしかに」
「元記事では大学の研究室がやっていますけど、これは果たして大学の仕事なのかという面もあるわけです: たとえば国や非営利の公的機関が大学の研究室に依頼してこうした精度を調査するしくみができれば、精度の低い商用センサーを使ったために論文のデータが信頼できなくなるということも減ってよいと思うんですけどね」「ふむふむ」「こういう調査は今後の新製品に対して継続的に実施する必要もありますし、ロットによって違いが生じたりもするので、本来は国や非営利の公的機関が定期的に研究室に調査を依頼するのが望ましいと思います」「なるほど」「製品として売られているセンサーの精度みたいなテーマは世の中でとても有用ですが、単体では論文になりにくいんですよ」
- PDF: 安価で粗悪な CO2センサの見分け方~5千円以下の機種、大半が消毒用アルコールに強く反応~
- 論文: Accuracy verification of low-cost CO2 concentration measuring devices for general use as a countermeasure against COVID-19 | medRxiv
後編は以上です。
バックナンバー(2021年度第3四半期)
週刊Railsウォッチ: カウンタキャッシュをスレッドセーフに更新、Journey::Ast追加、GitLabをAWS Graviton2で動かすほか(20210818前編)
- 20210810 システムテスト用headlessドライバにCupriteが追加、rails-mini-profiler、Jeremy Evansインタビューほか
- 20210804後編 Rubyの可変長アロケーションプロジェクト、サーキットブレーカーgem、EC2-Classicが終了へほか
- 20210803前編 SorbetでRailsアプリの型シグネチャを書く、activerecord-cte gemとanycable-client gem
- 20210720後編 ruby-gitでGit操作、最近のruby/debug、stdgems.org、Windows 365 Cloud PCほか
- 20210719前編 GitHubによるdisable_joins解説、MemoWise gemでメモ化、RailsのDDoS攻撃対策ほか
- 20210713後編 ruby-spacyで自然言語処理、Ruby製x86-64アセンブラ、『タイムゾーン呪いの書』ほか
- 20210712前編 AR::Relation#destroy_allがバッチ分割に変更、Active Record暗号化解説、sidekiq-unique-jobsほか
- 20210706後編 GitHub CopilotのAI補完、Pure Ruby実装のRuby JIT rhizome、PostgreSQLのPG-Strom拡張ほか
- 20210705前編 DI的な書き方が必要なとき、脆弱性学習用アプリRailsGoat、brakemanは優秀ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)