Categories

Latest comments

SprocketsからPropshaftへの移行に関する注意点

wakairo @wakairo

Propshaftは.erbを処理しない

Sprocketsは拡張子が .erb のファイル(例: foo.scss.erb)を処理しますが、Propshaftは処理しません。 そのため、Sprockets で .erb を処理している場合、Propshaftへ移行するには次のいずれかの対応が必要になります。

  • .erb の利用をやめ、プレーンなCSS/SCSSなどに書き換える
  • .erb の処理を、Propshaftに渡す前の前処理として別途組み込む
0
Raw
https://www.techtips.page/en/comments/1080

SprocketsからPropshaftへの移行に関する注意点

wakairo @wakairo

Propshaftへの移行に際して、tailwindcss-railsまたはdartsass-railsを選ぶのもあり

Propshaftの公式移行手順では、CSS関連の処理が必要な場合の選択肢として cssbundling-rails のみ紹介されていますが、 tailwindcss-rails と dartsass-rails という選択肢もあります。cssbundling-railsのREADMEには、選び方のヒントが掲載されています。

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

SprocketsからPropshaftへの移行に関する注意点

wakairo @wakairo

SprocketsからPropshaftへの移行手順は、 以下のPropshaftの公式手順で基本的には問題ないと思いますが、 この公式手順に記載されていないものを中心に、 移行における注意点をこのTopicで集約できればと思います。

https://github.com/rails/propshaft/blob/main/UPGRADING.md

0
Raw
https://www.techtips.page/en/comments/1078
❤️2
😄1
🔧1

OmniAuthを利用したログインのボタンやリンクではTurboをオフにした方が無難

wakairo @wakairo
Last edited

OmniAuthを利用すると外部サービスの認証情報を用いたログインが可能となりますが、 そのログインのボタンやリンクでは、以下のようにdata: {turbo: false}を付けてTurboをオフにしないと、ログインが機能しない場合があります。

<%= button_to "Login with GitHub", "/auth/github", data: {turbo: false} %>

なお、公式のREADMEにあるRails向けサンプルでもdata: {turbo: false}が用いられています。

また、Rails 7からは、Turboがデフォルト構成に組み込まれ有効になっているため、OmniAuthを利用する際は本件への注意が必要です。

0
Raw
https://www.techtips.page/en/comments/1077
🔧1

setup-rubyにおける.ruby-versionを用いたバージョン指定

wakairo @wakairo

ruby-version:が無いときのデフォルト動作では、まず.ruby-versionを読みに行くのですね。知りませんでした。

ちなみに少し調べてみたら、2020年のv1.3.0のときから既にそういう仕様のようですね。

それから、railsの新規アプリのGitHub Actionsの設定も現在はruby-version:を省略するようになっていますね。

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

setup-rubyにおける.ruby-versionを用いたバージョン指定

takuma_tech Takuma @takuma_tech

setup-rubyのREADMEに以下の記述がありますので、 ruby-version:を設定ファイルにあえて書かないことで、.ruby-versionに設定することも可能です。

If the ruby-version input is not specified, .ruby-version is tried first, followed by .tool-versions, followed by mise.toml

設定ファイルをできるだけ簡潔にしたいなら書かない選択もありですし、逆に分かりやすさを重視するなら明示的に書くのも一案です。どちらを取るかは悩ましいところですね。

0
Raw
https://www.techtips.page/en/comments/1075
😄2
🔧1
💯1

Podmanのreplaceオプションを使ってワンコマンドでPodを作り直す

wakairo @wakairo
Last edited

以下のコマンドの実行などで、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

参考情報

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

`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