Home Software Libraries Ruby propshaft SprocketsからPropshaftへの移行に関する注意点 @wakairo 2025/12/21 16:33 Propshaftは.erbを処理しない Sprocketsは拡張子が .erb のファイル(例: foo.scss.erb)を処理しますが、Propshaftは処理しません。 そのため、Sprockets で .erb を処理している場合、Propshaftへ移行するには次のいずれかの対応が必要になります。 .erb の利用をやめ、プレーンなCSS/SCSSなどに書き換える .erb の処理を、Propshaftに渡す前の前処理として別途組み込む
Home Software Libraries Ruby propshaft SprocketsからPropshaftへの移行に関する注意点 @wakairo 2025/12/21 15:00 Propshaftへの移行に際して、tailwindcss-railsまたはdartsass-railsを選ぶのもあり Propshaftの公式移行手順では、CSS関連の処理が必要な場合の選択肢として cssbundling-rails のみ紹介されていますが、 tailwindcss-rails と dartsass-rails という選択肢もあります。cssbundling-railsのREADMEには、選び方のヒントが掲載されています。
Home Software Libraries Ruby propshaft SprocketsからPropshaftへの移行に関する注意点 @wakairo 2025/12/21 14:54 SprocketsからPropshaftへの移行手順は、 以下のPropshaftの公式手順で基本的には問題ないと思いますが、 この公式手順に記載されていないものを中心に、 移行における注意点をこのTopicで集約できればと思います。 https://github.com/rails/propshaft/blob/main/UPGRADING.md
Home Software Libraries Ruby omniauth OmniAuthを利用したログインのボタンやリンクではTurboをオフにした方が無難 @wakairo 2025/12/21 14:24 最終更新 2025/12/21 14:24 OmniAuthを利用すると外部サービスの認証情報を用いたログインが可能となりますが、 そのログインのボタンやリンクでは、以下のようにdata: {turbo: false}を付けてTurboをオフにしないと、ログインが機能しない場合があります。 <%= button_to "Login with GitHub", "/auth/github", data: {turbo: false} %> なお、公式のREADMEにあるRails向けサンプルでもdata: {turbo: false}が用いられています。 また、Rails 7からは、Turboがデフォルト構成に組み込まれ有効になっているため、OmniAuthを利用する際は本件への注意が必要です。
Home Software その他 setup-ruby setup-rubyにおける.ruby-versionを用いたバージョン指定 @wakairo 2025/12/19 14:37 ruby-version:が無いときのデフォルト動作では、まず.ruby-versionを読みに行くのですね。知りませんでした。 ちなみに少し調べてみたら、2020年のv1.3.0のときから既にそういう仕様のようですね。 それから、railsの新規アプリのGitHub Actionsの設定も現在はruby-version:を省略するようになっていますね。
Home Software その他 Podman Podmanのreplaceオプションを使ってワンコマンドでPodを作り直す @wakairo 2025/12/17 14:53 最終更新 2025/12/17 17:01 以下のコマンドの実行などで、Podに対応するKubernetes YAMLファイルを一度用意しておけば、 podman generate kube mypod -f=mypod.yaml replaceオプションを利用した以下のコマンドで1つで、PodとそのContainerの停止から削除、再生成までを一度に行えます。 podman play kube mypod.yaml --replace Imageの更新について Kubernetes YAMLファイル内でimagePullPolicy:を指定していないlatestタグのImageは、 replaceを利用した前述のコマンドの実行により、Imageの更新(pull)も併せて行われます。 latest以外のタグのImageが更新された形でPodを再生成したい場合は、 以下のコマンドでImageを更新してから、replaceを利用した前述のコマンドを実行します。 podman pull example/image:tag 参考情報 https://docs.podman.io/en/latest/markdown/podman-kube-play.1.html#replace https://github.com/containers/podman/issues/4880 https://kubernetes.io/docs/concepts/containers/images/#imagepullpolicy-defaulting
Home Software Libraries Ruby actionview `yield :foo`と`content_for :foo`の使い分け @wakairo 2025/05/17 12:26 動機 Rails 8.0.2でrails newをして生成されたapp/views/layouts/application.html.erbでは、 以下のようにyield :fooとcontent_for :fooが混在していました。 <html> <head> <title><%= content_for(:title) || "Sample" %></title> (中略) <%= yield :head %> content_forのAPIドキュメントによれば yield :fooとcontent_for :fooの働きが等価となる場合もあるのですが、 このapplication.html.erbの例のように、片方に統一されず両方を利用しているケースがあったので、 yield :fooとcontent_for :fooの使い分けについて調べる事にしました。 結論 基本的には、yield :fooを使う。ただし、以下の2つのケースではcontent_for :fooを使う。 ケース1:ヘルパーメソッドの中では、yieldは利用できないので、content_for :fooを使う。 ケース2:ビュー側で設定されているかどうかに応じて挙動を切り替えるコードを短く書くときにはcontent_for :fooを使う。 詳細yieldはヘルパーメソッドの中では利用できない content_forのAPIドキュメントに書かれている通り、 content_forは以下の例のようにヘルパーメソッド内で利用可能ですが、yieldは利用できません。 module StorageHelper def stored_content content_for(:storage) || "Your storage is empty" end end yieldとcontent_forでは、設定されていないときの戻り値が異なる ビュー側で以下のように:fooに対して設定が行われていた場合、 <% content_for :foo do %> Foo <% end %> yield :fooとcontent_for :fooの戻り値は、この例ではどちらも" Foo\n"であり、同じになります。 しかし、ビュー側で前述のような記述がなく:fooに対して設定が行われていなかった場合、 yield :fooの戻り値が空文字列("")であるのに対し、content_for :fooの戻り値はnilであり、 戻り値が異なります。 設定されていない場合にcontent_for :fooがnilを戻す性質を利用することで、<title><%= content_for(:title) || "Sample" %></title>のような設定されているかどうかに応じて挙動を切り替えるコードを短く書くことができます。
Home イベント Omotesando.rb Omotesando.rb #109 @wakairo 2025/05/08 20:39 [お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。 Connpass: https://omotesandorb.connpass.com/event/353394/ それぞれのLTなどについての簡単な記録です。 スポンサーLT:SmartHR 様System Spec(結合テスト) SmartHRではCapybaraを使っている 通常はヘッドレスブラウザでテスト 網羅的なテストになると数千行に どこで何の操作が行われているのかを知りたい -> 設定を1つ変更すればバックグラウンドでブラウザを立ち上げられる エンジニア募集中ですスポンサーLT:Hubble 様 契約書の管理クラウド 契約をAIで回す 技術スタック:バックエンドでRubyやRailsを利用している コミュニケーション力のある方を特に募集中 kaiba「TRICKのはじめかた」 TRICKとは超絶技巧プログラミングコンテストのこと TRICK ルールがある 提出方法:メール TRICKを始めるには mameさんの著書を読むと良い TRICKのデモhatsu「MySQL・Not null制約・alter table」 active_record_doctor gemを使って制約が無いカラムを探した オンラインDDLがあるとはいえ、本番環境にNot null制約を足して大丈夫か? -> 調査した。 注意点として、ロック時間を短くすることなど s.mototsune「僕はRubyを書き続けるのか」 発表資料: https://blog.saeki-mototsune.com/articles/5 マインドの話 今後のキャリアについて悩む中 参加したRuby Kaigi 2024 Rubyを好きだから書き続けていたことを思い出した Rubyは戻ってくる場所を用意してくれている BlaticRuby(ラトビア)に参加してきます Samuel Williams(自動コーディングを用いたライブコーディング) Rubyでワームゲームを実装 Toshio Maki(地域rbドリンクアップをRubyKagi2025でやってみた) スケジュール決め 店決め 料金決め 会計報告 良かったこと 反省点など 函館でもやってみたい。他の地域rbと連携してやりたい。 Yuto Urushima「Rubyの!メソッドをちゃんと理解する」 !がついたメソッドの定義 もともとの理解 元のオブジェクトを変更する場合 例外をなげる場合 聞いてみて分かったこと 雰囲気で決まっているのでは? 「ペア」のより危険な方に付く 変わった例: exitとexit!結論 ペアのメソッドで用いる より危険な方に「!」を付ける
Home その他 Raspberry Pi Pico Raspberry Pi Pico W用の新規プロジェクトの作り方 @wakairo 2025/04/07 17:32 無印のPicoではなく「Raspberry Pi Pico W」向けの新しい開発プロジェクトの作り方の紹介です。 ベースとなるのは、ラズパイの公式C/C++ SDKドキュメントページ で紹介されている「Getting started with Raspberry Pi Pico-series」という名前のPDF の「Manually Create your own Project」の項目で紹介されている無印Pico向けのやり方です。 この無印Pico向けから変えるのは、まずtest.cの中身をpico-examples/blink/blink.cの中身とすることです。前述のPDFのtest.cはPico Wに対応していないので、Pico Wに対応しているこのblink.cのコードに差し替えます。 次に、 CMakeLists.txtでは、PDFの内容に以下の記述を追加します。ちなみに、この追加は前述のpico-examples/blink/のCMakeLists.txtを参考にしています。 if (PICO_CYW43_SUPPORTED) target_link_libraries(test pico_cyw43_arch_none) endif() 最後に、一連のビルドコマンドの中で、以下のようにcmakeのところで-DPICO_BOARD=pico_wオプションを付けます。ちなみにこれは、「Manually Create your own Project」の項目で付けるように書かれています。 mkdir build cd build export PICO_SDK_PATH=../../pico-sdk cmake .. -DPICO_BOARD=pico_w make 以上でPico Wに書き込むためのtest.uf2が出来るはずですので、これを実際に書き込んでLEDが点滅したら成功です。
Home Software Libraries Ruby bootstrap-rubygem Rais8でPropshaftを使う環境ではapplication.jsでbootstrapをimportする @wakairo 2025/04/07 10:42 Rais8から標準となったPropshaftを使っている場合でのbootstrap-rubygemのインストールについてです。 結論としましては、公式GitHubレポジトリのインストール方法にある「Sprockets」のところより前はPropshaftでも同様に作業を進め、その後はPropshaftの場合は以下の2行をapp/javascript/application.jsに追加すればインストール完了です。 import "@popperjs/core" import "bootstrap" なお、Propshaftの場合のインストール作業全体の例は、こちらのページで紹介されています。ご参考まで。
SprocketsからPropshaftへの移行に関する注意点
Propshaftは.erbを処理しない
Sprocketsは拡張子が
.erbのファイル(例:foo.scss.erb)を処理しますが、Propshaftは処理しません。 そのため、Sprockets で.erbを処理している場合、Propshaftへ移行するには次のいずれかの対応が必要になります。.erbの利用をやめ、プレーンなCSS/SCSSなどに書き換える.erbの処理を、Propshaftに渡す前の前処理として別途組み込むSprocketsからPropshaftへの移行に関する注意点
Propshaftへの移行に際して、tailwindcss-railsまたはdartsass-railsを選ぶのもあり
Propshaftの公式移行手順では、CSS関連の処理が必要な場合の選択肢として cssbundling-rails のみ紹介されていますが、 tailwindcss-rails と dartsass-rails という選択肢もあります。cssbundling-railsのREADMEには、選び方のヒントが掲載されています。
SprocketsからPropshaftへの移行に関する注意点
SprocketsからPropshaftへの移行手順は、 以下のPropshaftの公式手順で基本的には問題ないと思いますが、 この公式手順に記載されていないものを中心に、 移行における注意点をこのTopicで集約できればと思います。
https://github.com/rails/propshaft/blob/main/UPGRADING.md
OmniAuthを利用したログインのボタンやリンクではTurboをオフにした方が無難
OmniAuthを利用すると外部サービスの認証情報を用いたログインが可能となりますが、 そのログインのボタンやリンクでは、以下のように
data: {turbo: false}を付けてTurboをオフにしないと、ログインが機能しない場合があります。なお、公式のREADMEにあるRails向けサンプルでも
data: {turbo: false}が用いられています。また、Rails 7からは、Turboがデフォルト構成に組み込まれ有効になっているため、OmniAuthを利用する際は本件への注意が必要です。
setup-rubyにおける.ruby-versionを用いたバージョン指定
ruby-version:が無いときのデフォルト動作では、まず.ruby-versionを読みに行くのですね。知りませんでした。ちなみに少し調べてみたら、2020年のv1.3.0のときから既にそういう仕様のようですね。
それから、railsの新規アプリのGitHub Actionsの設定も現在は
ruby-version:を省略するようになっていますね。Podmanのreplaceオプションを使ってワンコマンドでPodを作り直す
以下のコマンドの実行などで、Podに対応するKubernetes YAMLファイルを一度用意しておけば、
replaceオプションを利用した以下のコマンドで1つで、PodとそのContainerの停止から削除、再生成までを一度に行えます。Imageの更新について
Kubernetes YAMLファイル内で
imagePullPolicy:を指定していないlatestタグのImageは、replaceを利用した前述のコマンドの実行により、Imageの更新(pull)も併せて行われます。latest以外のタグのImageが更新された形でPodを再生成したい場合は、 以下のコマンドでImageを更新してから、
replaceを利用した前述のコマンドを実行します。参考情報
`yield :foo`と`content_for :foo`の使い分け
動機
Rails 8.0.2でrails newをして生成されたapp/views/layouts/application.html.erbでは、 以下のように
yield :fooとcontent_for :fooが混在していました。content_forのAPIドキュメントによれば
yield :fooとcontent_for :fooの働きが等価となる場合もあるのですが、 このapplication.html.erbの例のように、片方に統一されず両方を利用しているケースがあったので、yield :fooとcontent_for :fooの使い分けについて調べる事にしました。結論
yield :fooを使う。ただし、以下の2つのケースではcontent_for :fooを使う。content_for :fooを使う。content_for :fooを使う。詳細
yieldはヘルパーメソッドの中では利用できない
content_forのAPIドキュメントに書かれている通り、 content_forは以下の例のようにヘルパーメソッド内で利用可能ですが、yieldは利用できません。
yieldとcontent_forでは、設定されていないときの戻り値が異なる
ビュー側で以下のように:fooに対して設定が行われていた場合、
yield :fooとcontent_for :fooの戻り値は、この例ではどちらも" Foo\n"であり、同じになります。しかし、ビュー側で前述のような記述がなく:fooに対して設定が行われていなかった場合、
yield :fooの戻り値が空文字列("")であるのに対し、content_for :fooの戻り値はnilであり、 戻り値が異なります。設定されていない場合に
content_for :fooがnilを戻す性質を利用することで、<title><%= content_for(:title) || "Sample" %></title>のような設定されているかどうかに応じて挙動を切り替えるコードを短く書くことができます。Omotesando.rb #109
[お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。
Connpass: https://omotesandorb.connpass.com/event/353394/
それぞれのLTなどについての簡単な記録です。
スポンサーLT:SmartHR 様
System Spec(結合テスト)
網羅的なテストになると数千行に
どこで何の操作が行われているのかを知りたい
-> 設定を1つ変更すればバックグラウンドでブラウザを立ち上げられる
エンジニア募集中です
スポンサーLT:Hubble 様
kaiba「TRICKのはじめかた」
TRICK
TRICKを始めるには
TRICKのデモ
hatsu「MySQL・Not null制約・alter table」
s.mototsune「僕はRubyを書き続けるのか」
発表資料: https://blog.saeki-mototsune.com/articles/5
Samuel Williams(自動コーディングを用いたライブコーディング)
Toshio Maki(地域rbドリンクアップをRubyKagi2025でやってみた)
Yuto Urushima「Rubyの!メソッドをちゃんと理解する」
もともとの理解
聞いてみて分かったこと
変わった例: exitとexit!
結論
Raspberry Pi Pico W用の新規プロジェクトの作り方
無印のPicoではなく「Raspberry Pi Pico W」向けの新しい開発プロジェクトの作り方の紹介です。
ベースとなるのは、ラズパイの公式C/C++ SDKドキュメントページ で紹介されている「Getting started with Raspberry Pi Pico-series」という名前のPDF の「Manually Create your own Project」の項目で紹介されている無印Pico向けのやり方です。
この無印Pico向けから変えるのは、まずtest.cの中身をpico-examples/blink/blink.cの中身とすることです。前述のPDFのtest.cはPico Wに対応していないので、Pico Wに対応しているこのblink.cのコードに差し替えます。
次に、 CMakeLists.txtでは、PDFの内容に以下の記述を追加します。ちなみに、この追加は前述のpico-examples/blink/のCMakeLists.txtを参考にしています。
最後に、一連のビルドコマンドの中で、以下のようにcmakeのところで
-DPICO_BOARD=pico_wオプションを付けます。ちなみにこれは、「Manually Create your own Project」の項目で付けるように書かれています。以上でPico Wに書き込むためのtest.uf2が出来るはずですので、これを実際に書き込んでLEDが点滅したら成功です。
Rais8でPropshaftを使う環境ではapplication.jsでbootstrapをimportする
Rais8から標準となったPropshaftを使っている場合でのbootstrap-rubygemのインストールについてです。
結論としましては、公式GitHubレポジトリのインストール方法にある「Sprockets」のところより前はPropshaftでも同様に作業を進め、その後はPropshaftの場合は以下の2行をapp/javascript/application.jsに追加すればインストール完了です。
なお、Propshaftの場合のインストール作業全体の例は、こちらのページで紹介されています。ご参考まで。