@ledsun blog

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

Rails

レコード削除時 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のバージョンを記載するようになり…

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からリクエストを送る…

Rails 7 はユニバーサルJavaScriptモジュールの夢を叶えるか?

2009年に発表されたCommonJSの夢。この夢が叶えられるかもしれない時がきています。それもJavaScriptではないRuby on Railsによってです。 JavaScriptのライブラリ管理の歴史を紐解いてみましょう。 モジュール前夜 jQueryによるプラグイン管理がありました…

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…

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本体から分かれたからなのか、結構柔軟に取…

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…

sprockets-css-purgerのAPIを考えるために、tailwindcssとPurgeCSSの境界を考える

sprockets-css-purgerの姿を想像する - @ledsun blogの続きです。 tailwindcssからPurgeCSSを呼び出している箇所 https://github.com/tailwindlabs/tailwindcss/blob/v2.2.15/src/lib/purgeUnusedStyles.js#L188-L220 const purgeCSS = new PurgeCSS() purge…

sprockets-css-purgerの姿を想像する

DHHはsprockets-css-purgerというCSSをパージするための汎用的なGemが欲しいようです。 github.com This is btw and open invitation to anyone who'd like to work on this とありますので、誰がやっても良いようです。ところで、このbtwってどういう意味…

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 ポイン…