Categories

Latest comments

`yield :foo`と`content_for :foo`の使い分け

wakairo @wakairo

動機

Rails 8.0.2でrails newをして生成されたapp/views/layouts/application.html.erbでは、 以下のようにyield :foocontent_for :fooが混在していました。

<html>
  <head>
    <title><%= content_for(:title) || "Sample" %></title>
(中略)
    <%= yield :head %>

content_forのAPIドキュメントによれば yield :foocontent_for :fooの働きが等価となる場合もあるのですが、 このapplication.html.erbの例のように、片方に統一されず両方を利用しているケースがあったので、 yield :foocontent_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 :foocontent_for :fooの戻り値は、この例ではどちらも" Foo\n"であり、同じになります。

しかし、ビュー側で前述のような記述がなく:fooに対して設定が行われていなかった場合、 yield :fooの戻り値が空文字列("")であるのに対し、content_for :fooの戻り値はnilであり、 戻り値が異なります。

設定されていない場合にcontent_for :foonilを戻す性質を利用することで、<title><%= content_for(:title) || "Sample" %></title>のような設定されているかどうかに応じて挙動を切り替えるコードを短く書くことができます。

0
Raw
https://www.techtips.page/en/comments/1040

Omotesando.rb #109

wakairo @wakairo

[お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントや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!

結論

  • ペアのメソッドで用いる
  • より危険な方に「!」を付ける
0
Raw
https://www.techtips.page/en/comments/1007
😄2

Raspberry Pi Pico W用の新規プロジェクトの作り方

wakairo @wakairo

無印の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が点滅したら成功です。

0
Raw
https://www.techtips.page/en/comments/975

Rais8でPropshaftを使う環境ではapplication.jsでbootstrapをimportする

wakairo @wakairo

Rais8から標準となったPropshaftを使っている場合でのbootstrap-rubygemのインストールについてです。

結論としましては、公式GitHubレポジトリのインストール方法にある「Sprockets」のところより前はPropshaftでも同様に作業を進め、その後はPropshaftの場合は以下の2行をapp/javascript/application.jsに追加すればインストール完了です。

import "@popperjs/core"
import "bootstrap"

なお、Propshaftの場合のインストール作業全体の例は、こちらのページで紹介されています。ご参考まで。

0
Raw
https://www.techtips.page/en/comments/974

Omotesando.rb #108

wakairo @wakairo

[お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。

Connpass: https://omotesandorb.connpass.com/event/349392/

それぞれのLTなどについての簡単な記録です。

スポンサーLT:ブルーモ証券株式会社様

勉強会から起業に至った話

  • 勉強会でLTをして、スピーカーデックに資料を挙げていた
  • XでDM来て、これがきっかけで起業した

会社紹介

  • ポートフォリオ機能に特徴
  • 「新しいデジタル銀行」を作る
  • エンジニアを募集中
  • RubyKaigiスポンサーをやります

RubyKaigi 2025予習会

  • ClaudeにKaigiの概要をまとめさせた
    • パフォーマンス関連が多い、パーサーが熱く語られる場所として珍しい
  • 各セッションの概観

大倉さん、神速さん、牧さん、それぞれの注目セッション

初参加の人向けアドバイス

  • 興味のあるセッションを聞く
  • セッションを詰めすぎず、人的交流にも時間を使う
    • セッション・トークはあとからYouTubeで見られる
  • 予習できるものとできないものがある
  • メインホールがRuby本体の話、ホールBは英語しかない
  • 小さいホールは満席になって入れない可能性あり
0
Raw
https://www.techtips.page/en/comments/941

Shinjuku.rb #98 「生活発表会」

wakairo @wakairo

[お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントやX(旧Twitter)などでお気軽にお伝えください。

Connpass: https://shinjukurb.connpass.com/event/348729/

それぞれのLTなどについての簡単な記録です。

junji-ogawa0421「基本情報技術者試験」

たどりついた本

  • 出るとこだけ:分からない人はこの本でまずだまされて
  • イラストでわかる基本情報技術者:これ取り組んで

その先に

  • アルゴリズム×疑似言語 トレーニングブック
  • パーフェクトラーニング

どう学んだか

ポイント: 習慣化

hamachan「音楽やってて良かったたこと」

  1. 多少の失敗ではマジくじけない:音楽は1000のうち1つあたるか
  2. 人前で話す時に、緊張していない風に見せることが出来る:とにかく堂々と話す
  3. プログラミングがめっちゃ楽に感じる:作曲活動は答えのない答えを探す活動
  4. どんな天才も努力家には叶わないことに気づいた:売れた人はみんな努力していた

どんなことでもコツコツやるという癖が付いた。

terfno「論理配列について」

キーボードには配列がある。物理配列と論理配列がある。
論理配列の代表がqwerty。もっと効率が良いのがドボラック。

大西配列;英語と日本語の両方で効率が良い配列

新配列にはメリットがあるが、大きなデメリットは「配列のポータビリティが低い」こと
このデメリットを緩和するユーティリティを作っている。

0
Raw
https://www.techtips.page/en/comments/908

Omotesando.rb #107

wakairo @wakairo
Last edited

[お知らせ]こちらのまとめに追加して欲しい内容があるなど、ご要望等ございましたら、下の所からのコメントや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ってなんで動いているの?」

Kirika_K2「最近休日にやっていること」

  • 休日にやっていること:picoruby-esp32
  • 従来比較で何が面白いか
    • ESP32の資産が使えるように
    • M5stackの資産が使えるように
  • M5stackにはローカルLLMを動作させるモジュールなど面白いものがある⇒買いました
  • picoruby-esp32を通して、早くLLMモジュールを実行できるようにしたい

sinsoku「RBS::Trace」

Kaiba「LLM Fixerの紹介」

0
Raw
https://www.techtips.page/en/comments/875

params.expectで配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要

wakairo @wakairo
Last edited

ちなみに、RuboCopにrequirepermitの組み合わせからexpectへの書き換えを自動でやってもらうことは可能ですが、配列パラメータの許可に関してはRuboCopが自動書き換えに失敗する場合があります。

その理由は以下の記述は、配列のパラメータも配列でないパラメータも許可してしまうため、RuboCopとしては配列なのかそうでないのかの判定が機械的に行えないためであると考えられます。

permit(user: [:name])

より詳しくは、前述の記事のこちらの箇所を参照ください。

0
Raw
https://www.techtips.page/en/comments/843

params.expectで配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要

wakairo @wakairo

Rails8では、requirepermitに代わるより安全な新しいメソッドとして、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の使い方(翻訳)を参照ください。

0
Raw
https://www.techtips.page/en/comments/842