@ledsun blog

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

Rails

オートローダー設計調査

ruby.wasmでオートロードする - @ledsun blog でModule#const_missingをつかってオートローダーを書いてみました。 Module#const_missingのAPIで、汎用的なオートローダーを書くのは少し難しそうなことがわかりました。 難しそうですが、どれくらい難しいの…

Ruby on RailsはRack 3をサポートしていますか?

budle outdated コマンドを実行するとrackの新しいバージョンが出ていることを教えてくれます。 Gem Current Latest Requested Groups rack 2.2.6.2 3.0.4.1 さて、Ruby on RailsはRack 3に対応しているのでしょうか? いいえ、していません。 下記のプルリ…

Railsのタスクを作成する

あるRailsアプリケーションではファイルアップロードのジョブの途中で失敗すると、処理途中のレコードやアップロードしたファイルが残ります。 削除の手順はわかっています。 次の2つのコマンドでDBに残ったデータとアップロードしたファイルが消せます。 bi…

Rails 7のload_async

Rails 7の新機能を見ていて次の機能があることに気がつきました。 Ruby on Rails 7の主要な新機能・機能追加・変更点 - Qiita ActiveRecord::Relation#load_asyncを使用することによって、非同期でSQLクエリを実行し、結果を取得することができるようになり…

Railsガイド日本語訳への貢献

雑談会 - @ledsun blog で 昔使ってたDelayed::Jobがなくなっていた と書いたら次のような情報を頂きました。 ちなみに、Railsガイドの英語版を見ると、Delayed::Jobの記載はありますね~https://t.co/mSD6s4Gz5N— thinkAmi (@thinkAmi) August 14, 2022 修…

雑談会

今年の4月から社内のslackでハドルを使って、週一で30分の(技術的なテーマで)雑談をしています。 今回は僕が司会の回だったので、ActiveJobのバックエンドについて質問しました。 スレッドワーカーのSidekiqで並列化できるわけもなく - @ledsun blog でSid…

thorのワーニング

現象 あるRailsアプリケーションのRailsのバージョンを6.1.5にアップグレードしたところ、rails consoleを実行すると次のようなthor gemのワーニングがでるようになりました。 ledsun@MSI:~/pubannotation►bin/rails c Deprecation warning: Expected string…

activerecord-importのチューニング(失敗編)

データベースへのデータ取り込みを速くしたいです。 すでにactiverecord-importを使っているので、これが速くできると嬉しいです。 GitHub - zdennis/activerecord-import: A library for bulk insertion of data into your database using ActiveRecord. Th…

コントローラーでもビューでも呼び出せるヘルパーメソッドを作るにはhelper_methodを使う

root_user?みたいた権限チェックするメソッドを定義したいです。 権限チェックするメソッドはビューでもコントローラーでも使いたいことが多いです。 ビューでは権限によって項目を表示したりしなかったり切り替えたい コントローラーでは権限があるときだけ…

Ruby on Rails のcheck_boxヘルパーはhiddenのinput要素を作る

疑問 check_box | Railsドキュメント によれば check_box 'page', 'freezeflag', {}, true, false と書けば、次のようなHTMLを出力します。 <input name="page[freezeflag]" type="hidden" value="false" /> <input id="page_freezeflag" name="page[freezeflag]" type="checkbox" value="true" /> なぜcheckboxのinput要素だけでなく、hiddenのinupt要素も作るのでしょうか? 理由 …

アクションメソッドが存在しないルーティングをみつけるスクリプト

すこし伝統があるRailsアプリケーションを修正しようとしました。 config/routes.rbにすでに使っていないルーティングが残っていることに気がつきました。 対応するアクションメソッドの実装がないため、使っていないルーティングだと判断しました。 温かみ…

RailsのminitestのシステムテストをヘッドレスChromeで実行する

test/test_hlelper.rbで次のように設定してもヘッドレスモードになってくれませんでした。 Capybara.default_driver = :selenium_chrome_headless Capybara.register_driver :selenium_chrome_headless do |app| options = Selenium::WebDriver::Chrome::Opt…

WSL上のchromeをselenium-webriverで動かすつもりだった俺は

WSLとselenium-webdriver - @ledsun blog の続きです。 WSLからWindowsのChromeを動かそうとしました。 起動までは上手く来ました。 WSLからWindows上のChromeへの接続に失敗しました。 今回は、WSL上にChromeをインストールすれば問題なく動くだろうと試し…

WSLとselenium-webdriver

RailsのシステムテストをWSLで実行しようと、軽い気持ちで初めてみました。 意外と難しいです。 ポイント次の2点です WindowsのホストOSのChromeを動かそうとすると、ホストはlocalhostでは参照できない (GUIのない)WSLのChromeを動かそうとするときは、ヘ…

tengu_p Railsエディション

def tengu_p(*args) args.each.with_index(1) { |msg, i| Rails.logger.debug '👺' * i + msg.inspect } end アプリケーション実行時もデバッグプリントできるように、Rails.loggerを使います。。

レコード削除時 ActiveRecord::StaleObjectError は発生する?

楽観的ロックシリーズの三回目です。 楽観的ロックを使ったRuby on Railsアプリケーションを作って動きを確かめる - @ledsun blog 楽観的ロックをあつかう編集画面 - @ledsun blog レコード削除時は ActiveRecord::StaleObjectError は発生するのか? します…

楽観的ロックをあつかう編集画面

楽観的ロックを使ったRuby on Railsアプリケーションを作って動きを確かめる - @ledsun blog の続きです。 楽観的ロックで競合が起きるとActiveRecord::StaleObjectErrorが起きます。 エラー画面が表示されます。 編集画面に競合エラーを表示 ActiveRecord::…

楽観的ロックを使ったRuby on Railsアプリケーションを作って動きを確かめる

昔からある機能です。 Rails 0.9.3からの機能あったようです*1。 よくわかっていないので、説明してみます。 Railsガイドの説明 Railsガイドでは次のように説明されています。 Active Record クエリインターフェイス - Railsガイド 楽観的ロックでは、複数の…

人はFat Modelを恐れサービスを求め ドメインモデルは貧血に至る

この文章は祈りです。 主にRuby on Railsアプリケーションを想定した話です。 Ruby on Railsアプリケーションでは、Fat Model問題という問題が起きることがあります。 ドメインオブジェクトが肥大化しメンテナンスしにくくなる問題です。 Fat Model問題に対…

rails ujsを学ぶ

一昔前のRailsではJavaScriptを簡単に使う機能としてrails ujsがありました。 Rails ガイドにも説明があります。 railsguides.jp 「UJS: Unobtrusive(控えめな)JavaScript」 主な用途は www.inodev.jp JSの処理で確認ダイアログとして「マジでログアウトす…

Fat Model問題

Fat Model問題を説明してみましょう。 ここでいうFat Model問題とはRuby on Raisを使って書かれたWebアプリケーションにおいてモデルクラスが大きくなりすぎる問題のことをいいます。 Ruby on Railsでは、MVC(model-view-controller)というアーキテクチャ…

PostgreSQLのユーザー作成

Railsアプリケーションの開発環境を構築するときに時々はまります。 ローカルにインストールされているPostgreSQLを使うとアプリケーションごとにPostgreSQLのユーザーが微妙に違うことがあります。 例えばpostgresというユーザーがないと次のようなエラーが…

Node.js 17でRails 6.1 の bin/webpackを実行するとエラーが起きる

Node.js 17がインストールされた環境でbin/webpackコマンドを実行すると次のエラーが起きます。 ~ bin/webpack node:internal/crypto/hash:67 this[kHandle] = new _Hash(algorithm, xofLen); ^ Error: error:0308010C:digital envelope routines::unsupport…

RubyZip 3.0 is coming!

Rails 6.1の、特にテストのあるアプリケーションをbundleすると次のような警告がでます。 Post-install message from rubyzip: RubyZip 3.0 is coming! ********************** The public API of some Rubyzip classes has been modernized to use named pa…

Ruby on Railsを前提としたナチュラルキーとサロゲートキーの話

若手のWeb系プログラマとナチュラルキーとサロゲートキーの話をしました。 適当なこと言ってないか不安になったのて、調べ直しました。 DB データのサロゲートキー | knooto おおむね SI 系は自然キー派、Web 系はサロゲートキー派の傾向がある とても同意で…

esbuildでjQueryを使う方法

jQueryやそのプラグインはESモジュールになっていないので、そのままだとesbuildで上手く依存関係が解決されません。 とくにRails 7では、esbuildが推奨されているので、躓く人も多そうです。 そこの対応方法の動画がありました。見ましたが試していません。…

One Person Framework

world.hey.com DHHのRails 7に込めたお気持ちブログです。 僕は「Railsは、フロントエンド専門家とバックエンド専門家が分業して使うためのフレームワークでなくて、一人のエンジニアがUIからデータベースまで全部作れるようにするためのフレームワーク」と…

I won't let you pay me for my open source

world.hey.com めっちゃ長かったです。 すごく雑に言うと「OSSは癒やし。お金をもらってしまうと癒やしが仕事に変わってしまう」な内容のようです。 本当はDHH自身の体験を織り交ぜた、もっといい話なんですが、僕の理解力と表現力でフィルターするとそんな…

WSLでRailsを動かす時に躓いたこと

WSLっていうかUbuntuだと思います。 結論からいうと libsqlite3-dev libffi-dev を入れておきましょう。 libsqlite3-dev gem install rails -v 7.0.0.alpha2してrails newすると次のエラーがでます。 An error occurred while installing sqlite3 (1.4.2), a…

Rails 5.2からGemfileと.ruby-versionに期待するRubyのバージョンを記載するようになった

いくつかののRailsアプリケーションを触っていると、アプリケーションによってGemfileにRubyのバージョンが書かれていたり書かれていなくて不思議でした。 Rails 5.2からはbin/rails newしたときに、作成するGemfileにRubyのバージョンを記載するようになり…