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

週刊Railsウォッチ: SorbetのRuby AOTコンパイラが公開、「Compiler Explorer」にRubyが追加、Ractorで非同期通信ほか(20210823後編)

こんにちは、hachi8833です。もろもろの事情で後編の公開が遅れました🙇。

週刊Railsウォッチについて

  • 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙏

TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)

🔗Ruby

🔗 SorbetのRuby AOTコンパイラ(Ruby Weeklyより)


つっつきボイス:「まだ実験段階だそうです」「SorbetのRuby用コンパイラはJITではなくAhead-Of-Time(事前)方式で、これまでStripe社内のみで使っていたのが公開されたみたい」「今度のRubyKaigi Takeout 2021でこれの話が聞けそうな気がしますね」「あ、そうかも」

参考: 事前コンパイラ - Wikipedia


同記事より

その後発表されたRubyKaigi Takeout 2021のスケジュールを確認してみましたが、Sorbetを手掛けているStripe社のスピーカーは惜しくもいませんでした。

🔗 Compiler ExplorerにRubyも追加(Ruby Weeklyより)


つっつきボイス:「Compiler Explorer?」「なるほど、こういうふうにソースコードをコンパイルできるのか↓」「このサイトのサポート言語にRubyも加わったそうです」「お〜、たとえば左にRubyのコードを書くと右にコンパイル結果が出力されるんですね」


godbolt.orgより

「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

つっつきボイス:「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

「Elasticは明らかに法人ですが、Redisはどうだったかな...Redis Labsがスポンサーになっているのか↓」

参考: Redis Labs - Wikipedia

「正直、ElasticsearchやRedisってできれば自前ではホスティングしたくないサービスの筆頭」「そうそう、自分たちで運用するとつらいヤツ」「Redisはスケールアップするときに一度止めないといけないとか、ノウハウが結構必要になるので、できればやっぱりクラウドのものを使いたい」

「以前NVIDIAのCUDAがEULAに記載された利用方法を後から変更したために、データセンターに導入できなくなってビットコインを掘ったりするのに使えなくなったことがありましたね」「ありゃ〜」「利用要件を回避するためにやむなく古いCUDAを使い続けたりしているそうです」「後から変えるとやっぱりもめますよね」「以前機械学習で遊んだときにCUDAを入れたことありますが、めちゃデカかった」

参考: CUDA - Wikipedia
参考: エヌビディアが消費者向けGPUのライセンスを変更、データセンターへの導入を禁止 | 日経クロステック(xTECH)

🔗 JavaScript

🔗 Deno 1.13にネイティブHTTPサーバーAPIが搭載

denoland/deno - GitHub


つっつきボイス:「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を直接測定していないので精度があまり高くないと言われています」

自宅作業環境の二酸化炭素濃度をM5Stack+CCS811で計測してみた

「こうした商用センサーの精度はいろいろ難しい面があって、製造側にしてみれば精度が高くなくても売れればいいというモチベーションがある一方、それを指摘する側は手間もかかるし訴訟リスクもあるしお金にもならないということになりやすい」「あ〜たしかに」

「元記事では大学の研究室がやっていますけど、これは果たして大学の仕事なのかという面もあるわけです: たとえば国や非営利の公的機関が大学の研究室に依頼してこうした精度を調査するしくみができれば、精度の低い商用センサーを使ったために論文のデータが信頼できなくなるということも減ってよいと思うんですけどね」「ふむふむ」「こういう調査は今後の新製品に対して継続的に実施する必要もありますし、ロットによって違いが生じたりもするので、本来は国や非営利の公的機関が定期的に研究室に調査を依頼するのが望ましいと思います」「なるほど」「製品として売られているセンサーの精度みたいなテーマは世の中でとても有用ですが、単体では論文になりにくいんですよ」


後編は以上です。

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

週刊Railsウォッチ: カウンタキャッシュをスレッドセーフに更新、Journey::Ast追加、GitLabをAWS Graviton2で動かすほか(20210818前編)

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

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

Ruby Weekly

Publickey

publickey_banner_captured


CONTACT

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