@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

Ruby

RailsをセキュリティチェックするGem

www.youtube.com で、紹介されているなかで brakeman bundler-audit を、試してみました。 どちらも使うのはめちゃ簡単です。 Gemfileに次のような記述を追加します。 group :development do gem 'brakeman' gem 'bundler-audit' end あとは bundle bundle e…

Rails 5.0.7.2とMinitest 5.14.4で --verbose オプションをつけるとエラーがおきる

minitestをつかったRailsアプリケーションを5.0にアップデートするときに不思議な現象に出会いました。 bin/rails test は通るのに bin/rails test —verbose でエラーになる 不思議・・・です。 ~ bin/rails test Run options: --seed 4913 # Running: .....…

Rails 4.2のtest-unitに苦戦する

Railsのバージョンを上げようと思って、3年ぶりくらいにRails 4.2のアプリケーションに触りました。 テストコードがあるのですが、test-unitです。 この組み合わせを触るのが久しぶりなので苦戦しました。 コミットログを見る限り、3年前に自分でテストコー…

名探偵、Rails 6.0のDNSリバイディング攻撃対策を探すの巻

前提条件 マイクロサービスをdocker composeで動かしていました。 Ruby on RailsでできたAPIサーバーのRailsのバージョンを6.1.4.1に上げました。 するとAPIサーバーは 403 Forbidden を返すようになりました。 奇妙なことに、ホストOSからリクエストを送る…

kaigion_rails_newにてライトニングトークをしました

kaigionrails.doorkeeper.jp 話の背景は Rails 7 はユニバーサルJavaScriptモジュールの夢を叶えるか? - @ledsun blog です。 内容 www.youtube.com 文字だとこんな感じです。 書きおこしではないです。 練習中に作ったトークスクリプトままです。 細部は違…

Separation of positional and keyword arguments in Ruby 3.0に対応した

SPARQL::Client.new endpoint_url, endpoint_options のようにオプションのハッシュを渡している場所に、**をつけて次のように直しました。 SPARQL::Client.new endpoint_url, **endpoint_options このコンストラクタの実装は次の通りです。 https://github.…

Rails 7はESモジュールをどう扱うのか?

www.youtube.com の手順で作成したRailsアプリケーションの動作を見てみましょう。 このRailsアプリケーションの http://localhost:3000/posts のHTML、特にheadタグを見ます。 Post一覧画面のheadタグ なかでも気になるのは次の行です。 <script type="module">import "applicatio</script>…

Sprocketから要らなくなった機能を削減したPropshaft

"Propshaft is an asset pipeline library for Rails. It's built for era where bundling assets to save on HTTP connections is no longer urgent, where JS and CSS is either compiled by dedicated Node.js bundlers or served directly to the browse…

プログラミング言語Rubyを修正する方法

RubyのDateからTimeへ移行する道程、いまここ - @ledsun blog で、RubyのTimeにパッチを投げると取り込まれやすそうだということがわかりました。 どうのような手順で、Rubyの修正、パッチの提出をすれば良いのでしょうか? Kaigi on Rails new と言う去年の…

Rails 7 のActiveStrageはデフォルトではImageMagickの代わりにlibvipsを使う

Rails 7 αを試して、エラーで躓いているところ - @ledsun blogでCould not open library 'libvips.42.dylib': dlopen(libvips.42.dylib, 5): image not foundというメッセージを含むエラーが起きたので、ググったところ次のissueが見つかりました。 github.c…

Rails 7 αを試して、エラーで躓いているところ

www.youtube.com を真似て素振りしていきます。 rails new showtell 最初は--devオプションをつけて、ローカルに入っているRailsがインストールされて失敗しました。 cd showtell bin/rails g scaffold post title:string content:text bin/rails action_tex…

Rails 7 ではアプリケーション作成時にBulma(CSSフレームワーク)のインストールもできるようになりそう(なった)

github.com 最初はBulmaはNode.jsを使ってコンパイルしないからとクローズされました。 カスタマイズする際はsassを使ってコンパイルするので再オープンされました。 CSSフレームワークインストール用のGemがRails本体から分かれたからなのか、結構柔軟に取…

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…