@ledsun blog

無味の味は佳境に入らざればすなわち知れず

Ruby

RubyのDateからTimeへ移行する道程、いまここ

RubyKaigiでRubyの改善のために、次の協力が求められていました。 youtu.be RubyのDateライブラリーのメンテナンスが行われていません。 Dateと同じ機能がほとんどTimeで提供されています。 strptime, parseなどはDateの機能が残っています。 この機能をTime…

nbodyのチューニング

benchmarksgame-team.pages.debian.net のスクリプトをチューニングします。 特に知見はないので、思いついた色々なパターンを試して、雰囲気を掴んでみましょう。 ソースコードはURLのみ載せます。 変更前 https://github.com/ledsun/nbody/blob/main/hoge.…

Ruby 3.0のJITの特性

Ruby 3.0のJITのすごさを体験する - @ledsun blogのスクリプトは引数で計算回数を指定することができます。 5000万回計算するとJITありはなしの2倍近い速度になりました。 施行回数を減らすとどうなるでしょうか? ~ time ruby hoge.rb 500 -0.169075164 -0.…

Ruby 3.0のJITのすごさを体験する

Benchmarks Game(旧Shootout)のn-bodyのRubyコードを18%高速化しておきました! @yukihiro_matz #rubykaigiRuby #2 が従来のバージョン(232.08秒)、Ruby #3 が自分の改善版(188.10秒)ですhttps://t.co/nmzuNtYnuX— Yusuke Endoh (@mametter) September…

文章中のサンプルコードが壊れていませんか?

ドキュメントにサンプルコードを書くことがありますが、しばしば壊れていることがあります。 読む方からすると、ちゃんとチェックして欲しいと思いますが、 書く方からすると、文章のどこにスクリプトがあるか探すのも大変だし、それをいちいち動かして確認…

Rails 7 のリリーススケジュールの目標

https://github.com/rails/jsbundling-rails/issues/16#issuecomment-918439258 Rails 7 is going to ship an alpha as soon as this week. Then probably the first beta within a month. Maybe quicker. And then final 1-2 months after that. So let's s…

Rails 7のデバッガ は byebug から ruby/debugになる

ruby-jpのslackでmrknさんが次のissueを紹介していました。 github.com 最初にこのissueを見たときは今から移行しようか迷っているのかと思いました。 Railsのコミットをあさったら、もう少し、と言っても18時間ぐらい前に、次のissueがありました。 github.…

Rails 7でJavaScriptバンドラーとCSSプロセッサを同時に起動するときはforemanを使うらしい

jsbundling-railsとcssbundling-rails両方に修正が入りました。 Add bin/dev via foreman to run multiple processes · rails/jsbundling-rails@91d8d2b · GitHub Add bin/dev to run multiple processes · rails/cssbundling-rails@1ed4dc5 · GitHub ポイン…

cssbundling-railsの誕生

github.com jsbundling-railsのCSSプロセッサ版です。 jsbundling-railsのissueでJavaScriptバンドラー以外をサポートしないのか聞かれてDHHは次のように答えました。 https://github.com/rails/jsbundling-rails/issues/4#issuecomment-914039291 Although …

jsbundling-rails

github.com esbuild-rails - @ledsun blogで紹介したesbuild-railsの後継Gemです。 最初は次の2つのGemのようにバンドラー毎に、別々のGemとして作られていました。 https://github.com/rails/esbuild-rails https://github.com/rails/rollupjs-rails 三つ統…

Rails 7のフロントエンド政策

world.hey.com DHHからご神託がありました。 僕の理解は次の通りです。 一番のオススメはHotwireとimport maps。HEY(Gmailクローン)も作れるし大抵のWebアプリケーションはこれでいける JavaScriptをバンドルしたい人はesbuild/rolllup/webpackの好きなも…

esbuild-rails

DHHが空のRailsアプリケーションにesbuildをインストールするGemを作りました。 中身を見てみます。 GitHub - rails/esbuild-rails: Bundle and transpile JavaScript in Rails with esbuild You develop using this approach by running esbuild in watch m…

実行するたびに決まった順番で値を返すRubyスクリプトはなぜか自分を書き換える

Webアプリケーションのテストに使う端末を決定するために、最初はruby -e 'p %w(iPad Firefox Android).sample'とランダムで値を返していました。 使っていると、ランダムよりは順番がよいと感じました。 また、順番も前回使った端末を覚えていて、その次か…

ActiveRecordでjoinする練習

Railsをcloneしてきたリポジトリでirbを使って練習します。 ~ bundle exec irb -r active_record class Organization < ActiveRecord::Base; end class User < ActiveRecord::Base; belongs_to :organization; end ActiveRecord::Base.establish_connection(…

引数13万個の関数呼び出し

Rubyのバッチ処理でFile.deleteでたくさんのファイルを消していたらSystemStackError: stack level too deepという見慣れないエラーが起きました。 再帰などしていないのに、スタックを使い切るのはなぜでしょう? File.delete(*to_delete) こんな感じで呼び…

RubyのdelegateみたいなことをJavaScriptでやる

Rubyのdelegate Rubyにはdelegateというメソッドがあります。 docs.ruby-lang.org あるクラスのメソッドを、依存するインスタンスに委譲するメソッドです。 次のように使います。 delegate [:first, :last] => :@arr ぱっと見不思議ですが、ハッシュ { [:fir…

activerecord_umlをrails runnerから起動する

結論 このコミットです。 github.com springを使いたい activerecord_umlは、Railsアプリケーションを読み込んでいます。 大きなRailsアプリケーションでは起動に時間が掛かります。 RailsではGitHub - rails/spring: Rails application preloaderを使って起…

activerecord_uml gemを公開しました

rubygems.org rake releaseで苦戦しました。 gem signinしてもうんともすんとも言いませんでした。 どうやら古いAPI Keyが~/.gem/credentials残っていたのが良くなかったようです。 https://rubygems.org/profile/api_keys でAPI Keyを作り直し、~/.gem/cred…

rails runnerを使う代わりに実行コマンドでRailsの環境を読み込む

Load the Rails environment with the run command instead of using the … · ledsun/activerecord_uml@e58e990 · GitHub ↑の変更で、行けました。 使用イメージは以下の通りです。 ~ activerecord_uml Computer <html> <body> <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script> <script>mermaid.initialize({startO…</body></html>

bundle installせずにrails runnerからgemのコマンドを実行する

GitHub - k0kubun/gem-default: Change a non-default gem to a default gem in your local environment を使ってgemをdefault gem化します gemをrequireして実行するスクリプトを標準入力で、rails runnerに渡します ~ gem install gem-default Fetching ge…

activerecord_uml

gistのURLを覚えることは不可能なので、ActiveRecordを継承したクラスのクラス図を描くRubyスクリプトをgemにしてみました。いまのところrubygemsには公開していません。 github.com bundle installすると次のように呼び出せます。 ~ bin/rails runner Activ…

複数クラスの図示に対応する

~ curl -s https://gist.githubusercontent.com/ledsun/76d5485644685f19c98f88000a971d00/raw/68d4730c4e9b3fbf35d352e0a97b094f8b1cd39f/class_diagram.rb | bin/rails runner - Dictionary Association User こういう感じで引数で複数のクラスを指定した…

ActiveRecordを継承したクラスのクラス図を開くワンライナー

curl -s https://gist.githubusercontent.com/ledsun/76d5485644685f19c98f88000a971d00/raw/ec1251e6b00cda7d9c350178dc445052e87a3e21/class_diagram.rb | bin/rails runner - Computer | browser 実行するとこういう感じです。 gyazo.com 種を明かします…

ActiveRecordを継承したクラスのmermaid.jsクラス図を作るワンライナー

curl https://gist.githubusercontent.com/ledsun/76d5485644685f19c98f88000a971d00/raw/a1aa3df955ee8829b7041c1c6cda11610978d393/class_diagram.rb | bin/rails runner - Computer 実行すると次の感じです。 ~ curl https://gist.githubusercontent.com/…

Railsで静的ファイル配信をするときに圧縮ファイルを優先して返す機能

僕はこの機能の存在を今日知りました。 Railsで、public_file_serverを有効にするとpublicディレクトリ配下にある静的ファイルをファイルを配信できます。 このとき、hoge.cssファイルの代わり(または一緒に)gzip圧縮したhoge.css.gzファイルを置いておく…

ActiveRecordを継承したクラスからUMLクラス図を作る

DBの情報からER図を生成するツールはいくつかあります。 またUMLを生成するツールもあります。 同じような感じで、UMLをActiveRecordから取得します。 この手法の利点はメソッド情報がとれることにあります。 model_name = ARGV[0] class_name = Object.cons…

dotenv-railsを使っていたら環境変数を読込使っていなかったら無視する

begin require 'dotenv/load' rescue LoadError # 何もしない end 参考 GitHub - bkeepers/dotenv: A Ruby gem to load environment variables from `.env`.

引数で受け取ったクラス名からActiveRecordを継承したクラスを作る

require 'active_record' model_name = ARGV[0] Object.const_set model_name, Class.new(ActiveRecord::Base) 参考 Object::ARGV (Ruby 3.0.0 リファレンスマニュアル) ruby - Dynamic Class Definition WITH a Class Name - Stack Overflow

既存のRailsプロジェクトからカラム情報を取得する(成功)

config/database.ymlを直接読み込むと"pool"=>"<%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>"という謎の情報が取得され、正しいデータベースへの接続情報が得られません。 <%=と%>はeRubyスクリプトです。 Railsアプリケーションなdatabase.ymlは厳密には…

既存のRailsプロジェクトからカラム情報を取得する(原因)

既存のRailsプロジェクトなので、rails consoleで使用しているデータベースへの接続情報を見れば原因がわかるはずです。 ~ bin/rails console Running via Spring preloader in process 24178 Loading development environment (Rails 6.1.3.2) irb(main):00…