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の場合のインストール作業全体の例は、こちらのページで紹介されています。ご参考まで。
Home イベント Omotesando.rb Omotesando.rb #108 @wakairo 2025/04/03 21:25 [お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。 Connpass: https://omotesandorb.connpass.com/event/349392/ それぞれのLTなどについての簡単な記録です。 スポンサーLT:ブルーモ証券株式会社様勉強会から起業に至った話 勉強会でLTをして、スピーカーデックに資料を挙げていた XでDM来て、これがきっかけで起業した 会社紹介 ポートフォリオ機能に特徴 「新しいデジタル銀行」を作る エンジニアを募集中 RubyKaigiスポンサーをやります RubyKaigi 2025予習会 ClaudeにKaigiの概要をまとめさせた パフォーマンス関連が多い、パーサーが熱く語られる場所として珍しい 各セッションの概観 大倉さん、神速さん、牧さん、それぞれの注目セッション初参加の人向けアドバイス 興味のあるセッションを聞く セッションを詰めすぎず、人的交流にも時間を使う セッション・トークはあとからYouTubeで見られる 予習できるものとできないものがある メインホールがRuby本体の話、ホールBは英語しかない 小さいホールは満席になって入れない可能性あり
Home イベント Shinjuku.rb Shinjuku.rb #98 「生活発表会」 @wakairo 2025/03/28 20:16 [お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。 Connpass: https://shinjukurb.connpass.com/event/348729/ それぞれのLTなどについての簡単な記録です。 junji-ogawa0421「基本情報技術者試験」たどりついた本 出るとこだけ:分からない人はこの本でまずだまされて イラストでわかる基本情報技術者:これ取り組んで その先に アルゴリズム×疑似言語 トレーニングブック パーフェクトラーニング どう学んだか ポイント: 習慣化 hamachan「音楽やってて良かったたこと」 多少の失敗ではマジくじけない:音楽は1000のうち1つあたるか 人前で話す時に、緊張していない風に見せることが出来る:とにかく堂々と話す プログラミングがめっちゃ楽に感じる:作曲活動は答えのない答えを探す活動 どんな天才も努力家には叶わないことに気づいた:売れた人はみんな努力していた どんなことでもコツコツやるという癖が付いた。 terfno「論理配列について」 キーボードには配列がある。物理配列と論理配列がある。 論理配列の代表がqwerty。もっと効率が良いのがドボラック。 大西配列;英語と日本語の両方で効率が良い配列 新配列にはメリットがあるが、大きなデメリットは「配列のポータビリティが低い」こと このデメリットを緩和するユーティリティを作っている。
Home イベント Omotesando.rb Omotesando.rb #107 @wakairo 2025/03/06 20:59 最終更新 2025/03/06 21:08 [お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。 Connpass: https://omotesandorb.connpass.com/event/346292/ それぞれのLTなどについての簡単な記録です。 スポンサーLT:IBJ様 会社概要、経営理念 事業内容:婚活サービス、少子化対策につながる! 少子化を解決するには結婚カップルを増やすこと! 既婚女性が産む子供の数はあまり減っていない 唯一無二のビジネスモデル 婚活後のライフデザイン事業も手がける IBJに入ったらこういう働き方が出来る 幅広く活躍できる 若くから活躍できる 他職種の同期と連携してサービス開発ができる エンジニアゼミ・ハッカソン BackendはほぼRails 採用ページ: https://recruit.ibjapan.jp/ hamachan「Ruby型推論は楽しいぞ」 型推論とは 加算できない型同士のときにエラーを出すなど 字句解析 "class"やクラス名などを認識して、その順番からRubyコードを解析・理解 データの持ち方 今後やっていくこと 設計をしっかりする テストを整える その他 字句解析はGoで実装している Goを選んだのは、1日で覚えられて、自分に合っていると思っているから s.mototsune「みんな知ってるfresh_when」 rubyonrails.orgを見ていたらfresh_whenがいた 2021年12月にはWebページに載っていた Rails v2.2.1からいたメソッド 要するに、キャッシュ関係のヘッダを設定でき、必要に応じて304を返せる 応用例:TURBOのprefching over linkで大量のリクエストが飛ぶが、fresh_whenで304を返せば転送量をグッと削減できる ただしキャッシュには要注意のところがあるので、気を付けましょう。過去にはキャッシュ絡みで見せてはいけない情報を流してしまった事例もあります。 わこー「Sinatraってなんで動いているの?」 なんでこんな簡潔なコードで動くのか コードを読んでみる:delegatorが怪しいので、そこを読む extendでgetをトップレベルにくっつけていた at_exitでlistenしている Sinatraを参考に、MCP-RBを作ってみた https://zenn.dev/funwarioisii/articles/8af78b25fad89b https://github.com/funwarioisii/mcp-rb Kirika_K2「最近休日にやっていること」 休日にやっていること:picoruby-esp32 従来比較で何が面白いか ESP32の資産が使えるように M5stackの資産が使えるように M5stackにはローカルLLMを動作させるモジュールなど面白いものがある⇒買いました picoruby-esp32を通して、早くLLMモジュールを実行できるようにしたい sinsoku「RBS::Trace」 https://github.com/sinsoku/rbs-trace https://rubykaigi.org/2025/presentations/sinsoku_listy.html#day1 Kaiba「LLM Fixerの紹介」 https://www.youtube.com/watch?v=K-xFKFVf9sY
Home Software Libraries Ruby actionpack params.expectで配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要 @wakairo 2025/02/25 15:59 最終更新 2025/02/25 16:00 ちなみに、RuboCopにrequireとpermitの組み合わせからexpectへの書き換えを自動でやってもらうことは可能ですが、配列パラメータの許可に関してはRuboCopが自動書き換えに失敗する場合があります。 その理由は以下の記述は、配列のパラメータも配列でないパラメータも許可してしまうため、RuboCopとしては配列なのかそうでないのかの判定が機械的に行えないためであると考えられます。 permit(user: [:name]) より詳しくは、前述の記事のこちらの箇所を参照ください。
Home Software Libraries Ruby actionpack params.expectで配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要 @wakairo 2025/02/25 15:43 Rails8では、requireとpermitに代わるより安全な新しいメソッドとして、strong parametersへexpectが導入されました。 expectでは、安全面への配慮から、配列のパラメータを指定する方法がpermitに比べ厳格化されています。 具体的には、配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要となりました。 配列のパラメータを許可する具体的な方法(引用元: expectのAPIドキュメント)は以下の通りです。 params = ActionController::Parameters.new(comments: [{ text: "hello" }, { text: "world" }]) params.expect(comments: [[:text]]) # => [#<ActionController::Parameters { "text" => "hello" } permitted: true>, # #<ActionController::Parameters { "text" => "world" } permitted: true>] なお、安全のためにexpectがこの二重の括弧の記法を採用した背景については、Rails 8: strong parametersの新しいparams.expectの使い方(翻訳)を参照ください。
Home イベント Shinjuku.rb Shinjuku.rb #97 「個人開発発表 LT大会!」 @wakairo 2025/02/06 19:07 小林悟史さんの発表スライドの情報を追記しました。
`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の場合のインストール作業全体の例は、こちらのページで紹介されています。ご参考まで。
Omotesando.rb #108
[お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。
Connpass: https://omotesandorb.connpass.com/event/349392/
それぞれのLTなどについての簡単な記録です。
スポンサーLT:ブルーモ証券株式会社様
勉強会から起業に至った話
会社紹介
RubyKaigi 2025予習会
大倉さん、神速さん、牧さん、それぞれの注目セッション
初参加の人向けアドバイス
Shinjuku.rb #98 「生活発表会」
[お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。
Connpass: https://shinjukurb.connpass.com/event/348729/
それぞれのLTなどについての簡単な記録です。
junji-ogawa0421「基本情報技術者試験」
たどりついた本
その先に
どう学んだか
ポイント: 習慣化
hamachan「音楽やってて良かったたこと」
どんなことでもコツコツやるという癖が付いた。
terfno「論理配列について」
キーボードには配列がある。物理配列と論理配列がある。
論理配列の代表がqwerty。もっと効率が良いのがドボラック。
大西配列;英語と日本語の両方で効率が良い配列
新配列にはメリットがあるが、大きなデメリットは「配列のポータビリティが低い」こと
このデメリットを緩和するユーティリティを作っている。
Omotesando.rb #107
[お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。
Connpass: https://omotesandorb.connpass.com/event/346292/
それぞれのLTなどについての簡単な記録です。
スポンサーLT:IBJ様
hamachan「Ruby型推論は楽しいぞ」
s.mototsune「みんな知ってるfresh_when」
わこー「Sinatraってなんで動いているの?」
Kirika_K2「最近休日にやっていること」
sinsoku「RBS::Trace」
Kaiba「LLM Fixerの紹介」
params.expectで配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要
ちなみに、RuboCopに
require
とpermit
の組み合わせからexpect
への書き換えを自動でやってもらうことは可能ですが、配列パラメータの許可に関してはRuboCopが自動書き換えに失敗する場合があります。その理由は以下の記述は、配列のパラメータも配列でないパラメータも許可してしまうため、RuboCopとしては配列なのかそうでないのかの判定が機械的に行えないためであると考えられます。
より詳しくは、前述の記事のこちらの箇所を参照ください。
params.expectで配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要
Rails8では、
require
とpermit
に代わるより安全な新しいメソッドとして、strong parametersへexpect
が導入されました。expect
では、安全面への配慮から、配列のパラメータを指定する方法がpermit
に比べ厳格化されています。 具体的には、配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要となりました。配列のパラメータを許可する具体的な方法(引用元:
expect
のAPIドキュメント)は以下の通りです。なお、安全のためにexpectがこの二重の括弧の記法を採用した背景については、Rails 8: strong parametersの新しいparams.expectの使い方(翻訳)を参照ください。
Shinjuku.rb #97 「個人開発発表 LT大会!」
小林悟史さんの発表スライドの情報を追記しました。