えにしテック15周年記念カンファレンスの発表資料です。 https://enishi-tech-15th-anniv-conf.peatix.com/ 資料中で参照しているURLは以下です: https://github.com/rails/rails/milestone/87 https:…
![2024年のRailsと自由について考える](https://cdn-ak-scissors.b.st-hatena.com/image/square/b266358d1bda9609e77ea9076e32c5fcb7080f37/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fa200ed1eda2442feacc7583e88a7cce8%2Fslide_0.jpg%3F30805311)
2024年5月15日から17日まで、沖縄県那覇市の那覇文化芸術劇場なはーとでRubyKaigi 2024が開催されました。3日目の基調講演はRubyの作者である、まつもとゆきひろさんが登壇し、「Better Ruby」というタイトルで講演を行いました。 まつもとさんは、Rubyの良さ、Rubyをより良くするための4つの側面、Rubyの未来像について話しました。 まつもとさんによるキーノート Rubyの良さ 「Rubyは本当に素晴らしい言語で、これを日本語で自画自賛と言います」とまつもとさんは話し始め、Rubyの良さについて順に紹介しました。 楽しい まず最初にRubyの良いところとして、コードを書いていて楽しいという点を取り上げました。Rubyの公式サイトにある「A PROGRAMMER'S BEST FRIEND」というスローガンは、「プログラマーがコードを書くときにRubyが友であ
こんにちは。SREのkyontanです。Rubyが大好きなのでRubyの話をします。ちなみにリクルートはRubyKaigi 2024へGold Sponsorとして協賛しています! *1。ぜひ沖縄でお会いしましょう。 これはあるアプリケーションのメモリ消費量を示すグラフなのですが、まさかgemを入れ替えるだけでこんなに嬉しい変化が見られるとは思っていませんでした。今日はそんなgemの話をします。 話は遡って2023年4月のある日、インターネットを眺めていたところ、ShopifyがpitchforkというOSSを公開したという情報が目に留まりました。 調べてみると、どうやら著名なRackサーバー実装の1つであるunicornの派生版であり、メモリ使用量の削減に特化しているらしいのです。 github.com これはスタディサプリ小中高のあのリソースドカ食いマイクロサービス第一位である api
感想 スレッドベース 参考 unicornはプロセスベース pumaはスレッドベース MRIのスレッド Jruby・Rubiniusのスレッド スロークライアント railsへの導入 設定 参考URL 設定ファイルの読み込み 設定項目 bind: バインド port: バインド(portとhost) ssl_bind: バインド(SSL) workers: ワーカー数 threads: スレッド数のmin・max environment: 環境 demonize: デーモン化 pidfile: pidファイル置き場 stdout_redirect: 標準出力/標準エラーを出力するファイル preload_app!: プリロード before_fork{}: 各ワーカーのフォーク前の処理 on_worker_boot{}: 各ワーカーのboot前の処理 prune_bundler: phas
この記事で扱っていること 本記事ではRuby 3.3で導入されたPrismという新しいパーサーについて扱っています Prismが持つ「パース時に問題が発生した場合でも可能な限り意味のある結果を返却する」という機能に着目して下記について話します Rubyを記述する際の開発者体験がどれくらい向上しているのか? 「可能な限り意味のある結果」をどうやって組み立てているのか? 最後に主テーマから外れますが、Prismの動かし方についても話しています はじめに こんにちはウォンテッドリーで推薦基盤の改善をやっているnasaです 去年の12/25にもRubyの最新バージョンがサンタさんから届きました。https://www.ruby-lang.org/ja/news/2023/12/25/ruby-3-3-0-released/ 最新バージョンのRuby 3.3.0ではPrismという新しいパーサーが導
I'm not sure yet what to think of this proposal, but if it gets introduced, please lets make sure to improve the allignment of the ennnnnd. Rather than: Yasushi ANDO wrote: module MyModule class MyClass def my_method 10.times do if rand < 0.5 p :small ennnnnd please put the first character of the ennnnd in the same column as the outermost construct it closes: module MyModule class MyClass def my_m
今年で30歳、社会人9年目、在米5年目になった。今年は 趣味でRJITを作り、仕事でYJITを超高速化した 初めて論文を国際会議に投稿し、採択された 子供とプリスクールに行き始めた という感じの一年だった。 仕事 大変ありがたいことに、自分が今一番興味のある仕事であるYJITの高速化に集中できた一年だった。 いろいろやったが、代表作は以下の三つかなと思う。 スタックオペランドのレジスタアロケータ 最適化未対応なメソッド呼び出しのフォールバック 例外ハンドラのコンパイル どれもベンチマークがかなり速くなった。 特に二つ目と三つ目は、自分で発案してかつ主に僕が重要性を訴えていた奴で、 それらで大きな成果が出たときはかなり達成感があった。 単独のPRでRailsベンチが7%速くなった時はこりゃ昇給するわと思ったが、実際めちゃくちゃ昇給した。 ベンチマークも速くしている一方、僕は本番アプリの最適化
僕はRustでRubyのJITを書く仕事をしているのだが、去年の12月くらいから、趣味ではRubyでRubyのJITを書いている。 それまではC言語でコード生成を行なうMJITを5年くらいメンテしていたのだが、先月、Rubyで機械語を直接アセンブルするRJITに差し替えた。 github.com なので、今Rubyのmasterブランチには、会社で業務として開発しているRust製のYJITと、僕が趣味で開発しているRuby製のRJITの2つのJITコンパイラが存在している。余談だが、JITの開発をしすぎてRubyの作者であるまつもとさんのコミット数を最近抜いた。 なぜMJITをやめたのか MJITも結構がんばっていて、去年開発していたRuby 3.2ではMJITのコンパイラの実装をCからRubyにフルスクラッチした上、バックグラウンド処理をpthreadからfork + SIGCHLDで行
Ruby 3.3.0 が公開されました。Ruby 3.3ではPrismという新しいパーサーの追加、新しいパーサージェネレーターであるLramaによるBisonの置き換え、RJITという新たなJITの仕組みを追加、YJITの高速化など様々な改善が行われています。 Prism default gemとしてPrismパーサを導入しました。 Prismは、Ruby言語のためのポータブルで、エラートレラントで、保守可能な再帰下降パーサです。 Prismは本番環境で使用する準備が整っており、積極的にメンテナンスされています。Ripperの代わりに使用することができます。 Prismの使用方法については、詳細なドキュメンテーションがあります。 Prismは、CRubyに内部的に使用されるCライブラリと、Rubyコードを解析する必要がある任意のツールに使用できるRuby gemの2つのコンポーネントを持っ
日本のハワイ、宮崎よりお送りします。yoshinoです。 先日、XMLでレスポンスを返すAPIがあったので、require 'rexml/document'でロードしてXMLをパースしようとすると、cannot load such file -- rexml/documentが起きてしまう事象に遭遇しました。 Ruby 3.0.0 Releasedによれば、Ruby3.0からrexmlとrssはbundled gemになったようです。 このリリース記事では、libraryとして次のような言葉が使われていて、 standard libraries ( stdlib files ) default gems bundled gems default gemsでもbundled gemsでもないgem (その他のgem ) 「具体的に何が違うんだっけ?」となったので、この4つの言葉について調べま
Development Division/Repro Team/Feature 1 Unit の Watsonです。Feature 1 Unit は Repro Tool の機能開発と保守を担っています。 弊社でも利用している Oj gem のパフォーマンス改善 PR を送った話と、その PR の内容について共有します。 ことのはじまり 以前、同僚が Ruby on Rails で JSON を返す REST API を作成した際、JSON のエンコード部分のパフォーマンス計測をしていました。JSON のエンコード方法は JSON.generate、ActiveSupport::JSON.encode、Oj gem を利用する方法など色々ありますが、私としては Oj gemの ほうがパフォーマンス的にいいだろうからそちらを利用したほうが良いのではと思っておりました。 計測結果を拝見したら確
Rubyのコードを目にすると、 他の言語と似た部分があることに気が付くはずです。 構文の多くは、(他の言語の中でも特に)PerlやPython、 Javaプログラマーにとって馴染みのあるものになっています。 もしあなたがそうした言語に慣れ親しんでいるのなら、 Rubyを学ぶのはおそらくどうってことないはずです。 このドキュメントは2部構成になっています。 このページでは、プログラミング言語XからRubyへ移ってくる際に役立つ情報をざっと紹介します。 個別のページでは、Rubyの主な言語機能を紹介しつつ、 あなたが慣れ親しんできた言語との比較を行います。 求められていること: 言語XからRubyへ C・C++からRubyへ JavaからRubyへ PerlからRubyへ PHPからRubyへ PythonからRubyへ 重要な言語機能と知っておくべきこと ここでは、Rubyを学習する中で出会
こういうのはどうかという最近の考えを書いておきます。とはいっても、だいたいはgraphql-rubyのドキュメントに書いてあります。Rails + graphql-ruby + RSpecが前提です。 各フィールドのテスト フィールドから正しく値を取得できるか、つまりRailsのモデルとgraphql-rubyとの連携が正しいかという点をテストします。次のようにスキーマのオブジェクトから型情報を取得して、resolveを実行します。 # たとえば spec/graphql/types/user_type_spec.rb に書く user_type = MySchema.types['User'] user = FactoryBot.create(:user, name: 'Foo') expect(user_type.fields['name'].resolve(user, nil, ni
こんにちは。サーバーサイドエンジニアの山田です。 Rubyに型システムが入ってからしらばく経ちましたが、弊社のRailsプロジェクトの一部でもRBSを導入しました。 そのことについて昨年行われたKaigi on Rails 2022にて「RBSとSteepで始める型のあるRails開発とその運用」というタイトルで発表しました。 この記事では発表の内容についてあらためて整理した内容やその後の状況について紹介します。 記事の目的 RBSを導入した背景 対象となるRailsアプリケーション どうやって進めたか RBSの分類 ディレクトリ構成 自作クラス・モジュールなどのRBS GemのRBS(RBS Collectionにあり) GemのRBS(RBS Collectionになし) 当初の運用ルール 変更後の運用ルール RBS Railsから生成されるRBS 標準ライブラリのRBS CIの導入
(自分はRailsを書くことが多く、フロントエンドの経験は乏しいです。見方にだいぶ偏りがあると思いますので、そのあたり差し引いてお読みいただければと思います〜🙇♂️) こんにちは〜。Hotwireを仕事で使う機会があったので、実際に使ってみて感じた、良かった点、辛かった点、向いているケース、向いていないケースを共有します〜。 Hotwireとは? Turbo Driveとは? Turbo Framesとは? Turbo Streamsとは? Stimulusとは? Hotwireのデモ 良かった点 サーバーサイドに集中できる Railsの資産をフルに活かせる 後付けで段階的にSPA風の挙動を追加できる 学習コストが低い 開発コストが低い WebSocketは必須ではない 辛かった点・辛くなりそうな点 DOM更新時にレスポンスを待たないといけない SPAのユーザー体験とはだいぶ違う He
最近Rubyを学び直したり、アルゴリズムの基礎練をしたりしているのだが、debug.gemおよびvscode-rdbgが便利すぎるので紹介。 debug.gemやvscode-rdbgとは debug.gem( https://github.com/ruby/debug )とは最近のRubyのモダンなdebugger。これまでlib/debug.rbやbyebug、debaseなどがあったが、それらのいくつかの課題を解決したdebuggerとなっている。Ruby 3.1 の debug.gem を自慢したい - クックパッド開発者ブログ に背景や基本的な使い方が詳しく載っている。 またRubyKaigi 2022のruby/debug - The best investment for your productivity - RubyKaigi 2022でも紹介された。Scriptable
■ Ruby の中にある解決できると嬉しい人が多分多いタフな問題 Ruby 開発チーム(コアチーム)には壺と呼ばれる、「これができるととても嬉しい」というネタを放り込む hackmd のページがあります。issue などにして作ったところで誰かが進めるわけでもないし、project にしても epic すぎるが、いつかは何かやりたいという大きさのものを思いついたらすぐに入れています。 今回は Ruby Advent Calendar 2022 の14日目の記事として、この壺の中から熟成された夢をいくつか取り出してご紹介します。 ライブラリのRactor 対応 Ruby 3.0 の目玉として入った Ractor ですが、Ruby のライブラリが Ractor で動くかというとまだわからない、むしろ動かないだろう、というステータスです。RubyGems や Bundler でネットワークアクセ
FactoryGirlでテストデータを定義する時に、transientとtraitを活用すると色々捗るという話。 transientは実際に作成するデータと直接関係無い新しいattributeを定義する機能。 そこで定義されたものは実際のmodelにはセットされないしattributes_forでも出力されません。 何のために使うかというと作成時に挙動を変更するためのフラグや追加データとして利用するのが一般的です。 traitは属性の定義を一纏めにして名前を付けられる機能です。 parentを指定したfactoryの継承とは違い、traitは単体ではfactoryとして機能しません。 あるfactoryの特定の状態に名前を付けて、付け外しできるようにする、というのが主な使い方になります。 例えば、あるfactoryをある時はadminある時は非adminで作りたい時等に有効です。 個人的に
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く