2023年12月25日、Ruby 3.3.0がリリースされ、様々な新機能が加えられました。本連載では実際に携わった皆さんにその新しいRubyをご紹介いただきます。
STORES株式会社でRubyインタプリタ開発をしている笹田です。お正月に新年早々おでんを腐らせてしまったので、今年は作ったらさっさと食べることを目標にしたいと思います。 この記事では、主に私が開発している、Ruby 3.3で導入されたM:Nスレッドについて紹介します。 M:Nスレッドはスレッドの性能向上のために導入されました。M個(大きな数)のRubyスレッドをN個(十分小さい数)のネイティブスレッドだけで実行するというモデルで、スレッド管理のオーバヘッドを抑えられる方法として知られており、ほかにもGo言語などで利用されています。今後、大量のネットワーク接続を処理するといったことをRubyで記述することを検討したい場面が出てくるしれません。そのようなときにRubyでスイスイとプログラムが書ければいいなと思っており、その一貫です。最終的には、Ractorを用いた軽量な並列・並行アプリケーシ
RubyではRBSという言語で型を記述できます。Ruby 3.2から3.3では、RBSは2.8から3.4にバージョンアップしました。 RBSではこの1年でさまざまな機能追加やバグ修正が活発に行われ、520個のファイルに変更が加えられ、56,464行の追加と、26,172行の削除が行われました! 私、栗原はその内の95個のファイルに変更を加え、7474行の追加と2341行の削除に関わりました。 この記事では、この一年RBS界隈を追い続けてきた私から、RBSのアップデートを中心にRubyの型の世界の変化をまとめて紹介します。Rubyで仕事をしている方、RBSに興味はあるけど最新情報は追えていなかった方の力になれれば幸いです。 RBSとは Ruby 3.0からRubyに標準添付されている型システムの総称であり、ライブラリ名でもあります。RBSファイルは、Rubyファイルとは別のファイル・別の言語
Ruby 3.3にはRubyのREPLであるIRB v1.11.0が同梱されました。新しいIRBでは補完機能やdebug.gemとの連携が強化されました。 この記事では、型補完の追加、補完ダイアログの色変更API、デバッグに便利な機能、その他便利な機能追加について紹介します。 なお、IRBはDefault gemsのため、Ruby 3.3.0以外のバージョン[1]でもgem update irbやbundle add irbでインストールすることで最新のIRBを利用できます。 動作確認環境 記事内容はRuby 3.3.0、IRB v1.11.1、Reline v0.4.1、repl_type_completor v0.1.2で動作確認しています。 IRBの補完機能の強化 IRBでは、型による補完機能の強化、補完ダイアログの色変更APIの追加が行われました。 型補完の導入 今までは正規表現を
Ruby 3.3リリース! 新機能解説 Lrama LRパーサジェネレータが切り開く、Rubyの構文解析の未来 シンプルで強力な文法はRubyの特徴のひとつだと言われています。その文法を技術的に支えているのがパーサです。Ruby 3系のひとつの目標として、LSPやRBS、TypeProfをはじめとした各種ツールの拡充があります。それらのツールは多くの場合AST(抽象構文木)というプログラムをパースした結果を対象に解析を行います。そこでこれらのツールに対してより良いAPIを提供するべく、Rubyのパーサを刷新する動きが活発になっています。 最新のRuby 3.3ではパーサの内部に大規模な改善が入っています。この記事ではRuby 3.3で導入されたLrama LALR (1) パーサジェネレータについて紹介します。 パーサジェネレータ ——パーサをどのようにして実装するか パーサを実装す
Ruby 3.3リリース! 新機能解説 Prism:エラートレラントな、まったく新しいRubyパーサ Prismは、Ruby 3.3.0にバンドルされた新しいライブラリで、プログラミング言語Rubyの新しいパーサであるPrismパーサのバインディングです。Prismはエラートレラント、移植性、メンテナンス性、高速性、効率性を考慮して設計されています。この記事では、Prismの歴史、設計、API、そして今後の課題について取り上げます。 使用方法 Rubyバインディングを通してPrismパーサを使うにはrequire "prism"をして、Prismモジュールのparseメソッド、または他のparse_*系のメソッドを呼んでください。次に例を示します。 require "prism" Prism.parse("1 + 2") parseメソッドは、パース結果のオブジェクトを返します。こ
Ruby on Railsはどのように生まれ、発展してきたのか[後編]。作者DHH氏やコアチームが語る動画「Ruby on Rails: The Documentary」が公開 最も有名なWebアプリケーションフレームワークの1つである「Ruby on Rails」は、もともと37signals社が社内向けに開発したフレームワークでした。 現在ではGitHubやShopifyなど大規模なWebサービスを支えるRuby on Railsも、登場初期には「スケールしない」という批判にさらされ、また競合となるフレームワークが登場するなどの経緯を経ています。 こうしたRuby on Railsのこれまでを、作者であるDavid Heinemeier Hansson(以下、DHH)氏や関係者が振り返る動画「Ruby on Rails: The Documentaryが、昨年(2023年)11月に公開
「1999年か2000年頃、私は37signalsというWebデザイン企業を経営していました。2人のビジネスパートナーとWebデザインを受注していたのです」(Fried氏) Fried氏は本業とは別に再度プロジェクトとしてオンライン書籍データベースの開発に取り組んでいました。開発はPHPで行っていたものの、Fried氏はプログラミングでつまづきます。 当時はまだStackOverflowのような技術的な質問に答えてくれる掲示板などなかった時代。Fried氏はブログに「誰かこの問題を解決する方法をご存じですか?」と書き込みます。 するとデンマークからメールが届きます。メールを書いてきたのがDHH氏でした。 「私は(37signals社の)Signal vs. Noiseというブログを以前から熱心にフォローしていました」とDHH氏。 「ブログで彼の質問を見て、私は『おお、この答えを知っているぞ
先日、privateなクラスメソッドを定義しようとして、つまづきました。 なので、僕が実装に失敗したパターンと正しい実装方法を記載したいと思います。 失敗パターン まず、僕が実装に失敗したパターンです。何事もなく呼び出せてしまっています。 class C private def self.def1 p 'def1' end end C.def1 # "def1" 正しい実装方法 Module#private_class_methodを使う場合 次に、正しく実装した場合です。想定通りdef1がprivateメソッドになっているので、呼び出すことが出来ませんでした。 class C def self.def1 p 'def1' end private_class_method :def1 end C.def1 # a.rb:9:in `<main>': private method `def1
Ruby 3.3リリース! 新機能解説 Ruby 3.3 YJITのメモリ管理とRJIT 〜すべてが新しくなった2つのJITを使いこなす 2023年12月25日、Ruby 3.3.0がリリースされ、様々な新機能が加えられました。本連載では実際に携わった皆さんにその新しいRubyをご紹介いただきます。 RubyはJust-In-Time(JIT)コンパイラという機能を備えており、これを有効化すると実行時に機械語を生成して様々な最適化が行なわれ、実行が高速になります。Ruby 3.3にはYJITとRJITという2つのJITコンパイラがあり、デフォルトでは無効になっていますが、それぞれ--yjitと--rjitで有効化できます。 この回では、Ruby 3.3でYJITの性能特性が変化した点や、YJITに新たに追加された便利な機能、またRJITはどのように使うものであるかについて解説します。 YJ
こんにちは。SHE株式会社エンジニアのおはるです🐱 📝 この記事について SHEでは、Rails GraphQL API の権限管理の仕組みとして directives を導入することになりました。 導入にあたりチームでとても良いディスカッションができたため、せっかくなので意思決定までの過程や実際の導入例を記事にしたいと思います。 検討した内容をまとめた前編と、実際の導入事例をまとめた後編の2本立てとなり、この記事は前編にあたります。 ▼ 後編はこちら 前提: 技術スタック バックエンド Ruby Ruby on Rails graphql-ruby フロントエンド TypeScript React 🌱 背景 まずは、そもそもなぜ Rails GraphQL API に 権限管理を導入することになったのか?どんな課題感があったのか?について記載します。 現状 SHE のアプリケーショ
Gemfile での Ruby バージョンの指定を、値の直書きではなく .ruby-version からの読み込みに変更する設定です。 https://github.com/rubygems/rubygems/pull/6876 例えば、Rails アプリケーションなんかで Gemfile に .ruby-version と同じ 3.3.0 を指定しているようであれば、以下のように記述できます。 -ruby '3.3.0' +ruby file: '.ruby-version' asdf に類するものを使っているようであれば、ruby file: '.tool-versions' と記します。 https://github.com/rubygems/rubygems/pull/6898 この設定によって Ruby のアップデート時のバージョンの更新ポイントを減らすことができます。 なお、古
教育の地産地消! 島根県 "Rubyの街" で開催「第1回 Matz葉がにロボコン」! 松江高専が主催し学生たちも運営、こども達は Smalruby(改) でプログラミングし保護者はラインズマン! かに雑炊缶を手に、特急やくもで向かうは、 松江市「第1回 Matz葉がにロボコン」! 参加選手数は40+7組、多い! こちらの かにロボ たちはみんな多脚、 ロボコンの見方「タミヤ」製! こちらの大会の最大の特徴は、 主催が「松江高専」であること。 杉山研究室が一丸となって取り組んでいて、 大会の運営シシテムも学生たちの、 手作り! 頼もしい、がんばれ! そして大会の名前にもある通り、Rubyの まつもとゆきひろ さんも協力してくれています。 もちろん副賞は 松葉蟹 ! 第1回にしてオープン部門(中学生以上)があるとのことで、 福野くんといっしょに参戦! そしてこちらの大会のユニークな特徴「ライ
vscode-ruby-lightの開発中に考えたことを書いていきます。今回は、内部で利用しているRuby用パーサーのtree-sitter-rubyからPrismへの移行について書きます。 @ruby/prismパッケージの概観 Prismは、JavaScriptからもその実装を利用できるよう、@ruby/prismという名前でnpmパッケージを公開しています。 何が含まれているパッケージなのかというと、まずWASMバイナリという形でコンパイルされたPrismの実装と、それを便利に使うためのJavaScriptの実装、それからTypeScript向けの型定義ファイルが含まれています。これらはESModuleという形式に従ってモジュール化されています。またruby/prismのリポジトリ内に、JavaScript向けの簡単なドキュメントも含まれています。 もちろん、本拡張でもこのnpmパッ
2023.12.28 Ruby 3.3.0: aarch64-linux環境でFiber.new{ }.resumeを呼ぶと落ちる問題 この記事の内容は現在進行中なので、今後状況が変わる可能性があります。 M1 Macbook Pro 2021, Sonoma 14.2.1 Ruby: 3.3.0 Rails: 7.2.1 Docker: 24.0.6, build ed223bc Docker Desktop for Mac: 4.25.2 (129061) Docker Hub: 3.3.0-slim-bookworm 経緯 Ruby 3.3.0リリースの翌日にDocker Hubでも公式のRubyコンテナが公開されました。 ちょうど某所で「M1 MacのDocker環境でRuby 3.3.0ベースのRailsを動かすと落ちる」という書き込みをたまたま見かけました(その後書き込みは削除
Ruby 3.3がリリースされた。YJITには非常に多くの改善が含まれたリリースだったが、 NEWS解説記事やリリースパーティーでは 2点しか触れられなかったので、この記事ではRuby 3.3でYJITがどう改善されたかについて解説する。 YJITは既に実用段階 YJITはRuby 3.1で導入されたが、Ruby 3.2の時点でexperimentalのマークが外れ、実用段階となった。 Ruby 3.2では、以下のような企業で性能改善が報告された。 DeNA: 40% 高速化 GMOペバボ: 18% 高速化 STORES: 6.5-7.5% 高速化 Timee: 10% 高速化 メドピア: 2.8% 高速化 BOOK☆WALKER: 20-30% 高速化 Discourse: 15.8-19.6% 高速化 Lobsters: 26% 高速化 CompanyCam: 20-40% 高速化 弊
IRBの最新の自動補完機能を誰よりも使ってるぺん(@tompng)です。 IRBの補完についてGoogleで検索すると disable turn off などと書かれた記事ばかりが出てくるのですが、今のIRBは自動補完の問題点がかなり解消しています。 無効化設定している人はいますぐ ~/.irbrc を開いて IRB.conf[:USE_AUTOCOMPLETE] = false と書かれている行を消しましょう。 自動補完の問題点とどう解消されたか 補完ダイアログが大きくて邪魔・入力行が上にずれる ターミナルの高さとカーソルの位置に応じて、補完ダイアログの表示サイズを調整するようになりました。 https://github.com/ruby/reline/pull/542 色が見づらい 見た目をカスタマイズするAPI Reline::Face が導入されました。(ドキュメント) https
概要 原著者の依頼を受けて翻訳・公開いたします。 英語記事: Unveiling the big leap in Ruby 3.3’s IRB | Rails at Scale 原文公開日: 2023/12/25 原著者: Stan Lo -- ruby/irb、ruby/reline、ruby/tracerのメンテナーです 本記事では、Ruby 3.3でIRBに導入された主な機能強化と、現時点で来年に導入が予定されている機能について詳しく解説いたします。 Ruby 3.3のIRB強化の要点: デバッグ機能強化 オートコンプリートの使用感を強化 全体的な使用感を改善 耳より情報: Ruby 2.7以降のプロジェクトであれば、Gemfileにgem "irb"を追加することで、Ruby 3.3に今すぐアップグレードしなくてもRuby 3.3と同じバージョンのIRB(v1.11.0)を利用でき
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く