Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby

Ruby on Rails: 本番イメージが起動することをGitHub Actionで確認するメモ📝

本番環境をDockerイメージを使ってデプロイするときに思わぬ変更で本番環境のRailsアプリケーションが起動できないことがあります。 それを事前に検知できたら便利ということで最低限Railsのサーバーが立ち上がりヘルスチェックのエンドポイントが正常なレス…

Ruby: RSSのパースが`This is not well formed XML\nentity expansion has grown too large`で落ちた時の対処法メモ📝

結論「REXML::Security.entity_expansion_text_limitに任意の値を設定する。」 結論としては上記の通りなのですが、個人で運営しているサービスで、Ruby標準ライブラリのRSSによるパース時にThis is not well formed XML\nentity expansion has grown too la…

🚃Rails newで生成される本番用Dockerfileを読んでみる🐳

以下の通り、Rails v7.1 から新規アプリケーション生成時にDockerfileが生成されるようになりました。 2.1 新規RailsアプリケーションでDockerfileが生成されるようになった 新規Railsアプリケーションでは、デフォルトでDockerがサポートされるようになりま…

Ruby v3.3.3でnet-pop-0.1.2のinstallに失敗する際の対処法メモ📝

ruby v3.3.3でbundle install時に以下のエラーが発生した。 Downloading net-pop-0.1.2 revealed dependencies not in the API or the lockfile (net-protocol (>= 0)). Running `bundle update net-pop` should fix the problem. どうやらruby v3.3.3に同梱…

Vite Rubyでdocker-composeで立ち上げた時もHMRを動くようにするメモ📝

Vite Rubyを使っていたDockerで立ち上げた環境でHMRをしようと思いvite.config.tsでserver.hostをtrueにしてみたが、なぜかhostが変わらずハマったので解決方法をメモ server.host サーバーがリッスンすべき IP アドレスを指定します。 0.0.0.0 もしくは tru…

Rails wayなフロントエンド環境を試してみたメモ📝

以下のようなpropshaft、JavaScript Bundling for Rails(TypeScript, Rollup)、CSS Bundling for Rails(TailwindCSS)、View Componentを使ったRails wayなフロントエンド環境を試したみたので感想とかをメモ GitHub - rails/propshaft: Deliver assets for R…

Ruby: 外部からprivateなメソッドをpublicにする方法メモ📝

好ましくはないですが、通常Rubyでprivateなメソッドを呼び出したい時にはsendを使うケースが多いです。 docs.ruby-lang.org しかしライブラリの破壊的変更等によりpublicだっだメソッドがprivateになる等、すでに大量に依存しているケースですべてをsendに…

Ruby: 個人サービスをRuby v3.3.0にアップデートした💎✨

以下の問題があったのでRuby v3.3.0へのアップデートを見送っていたのですが、 madogiwa0124.hatenablog.com Docker Hubの公式イメージに修正が入り正常に動作するようになったようなのでRuby on Rails製の個人サービスをRuby v3.3.0にアップデートしました✨…

Ruby on Rails: Capybaraで特定の要素が無くなるのを待つ方法MEMO

Capybaraで、読み込み中を表すコンポーネントが消えるのを待ってからスクショを撮りたいみたいな時に特定の要素が消えるのを待つ方法をMEMO 結論だけ言うと以下のようにスクリーンショットを習得する前にローダーが無くなることを判定すれば良い。 page.has_…

Ruby on Rails: CPSを有効化後にテスト環境で`content_security_policy_nonce`で空文字が返却されエラーになる件の対応方法MEMO

個人のWebサービスでconfig.content_security_policy_report_only=trueを外し、CSP違反があった場合にブラウザエラーを発生させるようにしたところ、Sytem Specが軒並み落ちるようになり対応したのでやったことをメモ 事象 原因 解決策 参考 事象 ブラウザエ…

Ruby: `define_method`でキーワード引数を持つメソッドを定義するメモ📝

Rubyのdefine_methodを使うと外部からレシーバーに任意のメソッドを定義できますが、キーワード引数を持つメソッドを定義するときにやり方を迷ったのでメモ docs.ruby-lang.org define_methodは以下のようにblockを渡してメソッドを定義できますが、block引…

Ruby on Rails: GoodJobをRailsアプリケーションと同一プロセスで実行するメモ📝

Heroku等で運用しているとバッチサーバーを別のプロセスで実行するとお金が掛かったりするのでGoodJobを用いている場合にRailsアプリケーションと同一プロセスで起動する方法をメモ GoodJobについてはこちら madogiwa0124.hatenablog.com やり方としては簡単…

Ruby: Ruby 3.3アップデート後に`bin/rails`系のコマンド実行時にconcurrent-rubyでSegmentation faultが発生する件のメモ📝

個人のWebサービスがRuby 3.3アップデート後にbin/rails系のコマンド実行時にconcurrent-rubyでSegmentation faultが発生したのでメモ $ bin/rails c /app/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/atomic/lock…

Ruby: Haml v6アップデート時のカスタム属性の振る舞いの互換性を維持するメモ📝

Haml v6からHamlの内部実装がHamlitに置き換わりパフォーマンス向上等のメリットがありますが、 github.com 以下のissueでコメントされている通り、 github.com Vue.js等を利用している場合に以下のようなfalsyの値がv5系では<cutsom-element />となっていたのが、 %cutsom-ele</cutsom-element>…

`vscode-standard-ruby`でプリインストールのrubyが利用されてしまうのを直した時のメモ📝

vscode-standard-rubyでプリインストールのrubyで実行されてしまいパッケージマネージャーで関しているバージョンで実行されずLSPが落ちてしまいハマったので対応したことをメモ github.com 事象 解決方法 参考 事象 以下のようにターミナルで確認するとパッ…

rbenv+nodebrewからasdfに移行したので作業メモ📝

rbenv+nodebrewからasdfに移行してみたのでやったことをメモしておきます github.com asdfインストール 公式はgit cloneの方法のようだが、homebrewからinstallできるようなのでinstall https://asdf-vm.com/guide/getting-started.html#_2-download-asdf $ …

Ruby on Rails: テスト用にrouteを動的に追加するメモ📝

テスト用にRoutingを動的にいじってテストしたいことがたまにあるのでやり方をメモ まず以下のようなテスト用のhelperを用意します。 中でやっていることは動的にrouteを追加するdraw_test_routesとそれをリセットするreload_routes!を実装しています。 modu…

Ruby on Rails: メーラー関連のファイルを`app/mailers`に集約するメモ📝

Ruby on RailsでメーラーのViewはデフォルトでapp/views配下に置かれてしまい数が多くなってくるとControllerからrenderされるものとMailerからrenderされるものが混在してしまい見通しが悪くなるケースがあります。 メーラーのビューは app/views/name_of_m…

VSCodeの`rebornix.ruby`から`shopify.ruby-lsp`に乗り換えるメモ

今までVSCodeでRubyを使うときにはrebornix.rubyを使うことが多かったと思うのですが、 marketplace.visualstudio.com 現状は非推奨となっており、 Shopify's ruby-lsp and associated vscode-ruby-lsp are recommended alternatives to this extension. It …

Ruby on Rails: 個人のサービスをRails v7.1にアップデートしたのでやったこととかメモ📝

2023/10/05にRuby on Rails v7.1がリリースされました rubyonrails.org 個人のwebサービスなので以下のように規模はかなり小さめですがやったこととかをメモ +----------------------+--------+--------+---------+---------+-----+-------+ | Name | Lines …

Ruby on Rails: Content Security Policyを使ってみたのでMEMO

Ruby on Rails 5.2からContent Security Policyヘッダーを設定するDSLが提供されました。 2.5 Content Security Policy Rails 5.2 ships with a new DSL that allows you to configure a Content Security Policy for your application. You can configure a…

Ruby: proc(lamda)を定義時ではなく呼び出したインスタンスのコンテキストで実行する方法MEMO

Proc(lamda)を定義時ではなく実行時のコンテキスで実行する際にちょっとハマったのでメモ 結論: instance_exec(&proc)で実行すれば良かった。 以下のような外部で定義したprocを受け取って実行した際にhello! by Caller.と出ることを期待したのですが実行す…

Ruby: RSpecのカスタムマッチャを作る方法MEMO📝

RSpecのカスタムマッチャの作り方をいろいろ調べたのでメモ 作り方 RSpec::Matchers.defineを使う moduleで定義する おわりに 参考 作り方 RSpec::Matchers.defineを使う カジュアルな追加方法としてRSpec::Matchers.defineで追加する方法があります。 以下…

Ruby on Rails: Gem等の外部から`config.x`を使わずにネストしたカスタム設定を追加する方法MEMO📝

Ruby on Railsを拡張するGemを作成する等、デフォルトの振る舞いといったものRails.application.configureで設定できるようにしたいなぁと思ったのですが、config.xは使わずにネストしたカスタム設定をいい感じに追加する方法をメモ🗒 Railsガイドを見ると以下…

Ruby on Rails: Viewを作らずにControllerからVue.jsのSFCを指定してrenderできないか試したMEMO

はじめに 基本方針 実装したコード 利用例 おわりに はじめに RailsでVue.jsを採用している場合、Vue SFCのscoped cssを利用してCSS周りの統制と取りたくなりますが、RailsのView層に色々要素を書いてしまうとそれも難しくなってきます。 vue-loader-v14.vue…

`ruby-openai`を使ってRubyでChat GPTのAPIを呼び出すMEMO

Ruby on Rails製の個人のWebサービスにOpen APIのChat GPTを使った機能を盛り込んだ時にruby-openaiを使うと簡単にリクエス部分を実装できたので、ほとんど公式READMEの通りですがメモ github.com API KEYの取得方法等は以下の記事を参考にしてください。 ma…

Ruby 3.2.0で導入されたYJITをHerokuで有効化する

Ruby 3.2.0で導入されたYJITをHerokuで有効化してみたのでやり方をメモ github.com HerokuでYJITを有効化する 結論だけ言うと、以下のコマンドを実行して環境変数RUBYOPTに--enable-yjitを指定してあげればです✨ heroku config:set RUBYOPT="--enable-yjit" …

Mac OS: rbenvでRuby 3.2.0をinstallが失敗したので対応方法をメモ📝

昨年末Ruby 3.2.0がリリースされましたね✨ www.ruby-lang.org 今更ながらローカルのRubyのバージョンをrbenvで3.2.0に上げようと思ったのですがエラーが発生したのでその対応方法とかをメモ 発生した問題 解決方法 発生した問題 いつもどおり以下のコマンド…

Ruby on Rails: webpack + SimpackerからVite + Vite Railsに移行するメモ📝

最近個人のサービスのフロントエンド周りをタイトル通りwebpack + SimpackerからVite + Vite Railsに移行したので対応したこととかをメモ 前提事項 Vite v.3.2系のHMRは使わない構成になります Vite Rubyを使うとbin/viteで起動しないといけないっぽかったの…

rspecの`--pattern`オプションを使って特定のパスのテストだけ実行するMEMO📝

Railsを使っていてRSpecでststem specとrequest specのテストだけ実行したい時とかに--pattern関連オプションを利用すると便利だったので使い方をメモ RSpecの--patternの使い方 公式Doc relishapp.com Help $ bundle exec rspec -h # ... -P, --pattern PAT…