give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

Everyday Rails - RSpecによるRailsテスト入門がRails 7.1とRuby 3.3に対応しました!

お知らせ

僕が翻訳している電子書籍「Everyday Rails - RSpecによるRailsテスト入門」をアップデートしました🎉
すでに本書を購入されている方はLeanpubのサイトから最新版の電子書籍ファイルを無料でダウンロードできます。

leanpub.com

2024年版のアップデート内容

今回のアップデート内容は以下の通りです。

  • サンプルアプリケーションをRails 7.1 + Ruby 3.3 + rspec-rails 6.1で再作成
  • これに伴い、サンプルアプリのリポジトリURLも変更
  • 新しいサンプルアプリのコードや挙動にあわせて、本書の記述を修正
  • リンク切れしていたいくつかのリンクを新しいURLに修正

Rails 7.1で作った新しいサンプルアプリケーションは以下のGitHubリポジトリに置いています。

github.com

とはいえ、書籍としてはほとんど内容は変わっていません。
Rails 7.0も7.1もRSpecの使い方を学ぶ上では考え方を大きく変えるようなポイントはない、と思ってもらって大丈夫です。

細かすぎて伝わらない変更点

ほとんど同じ、とはいうものの、細かい点では若干変わっています。
その変更点に誰も気付かれないのはちょっと悲しいので、変更点をいくつか紹介します。

「タスク完了」のUIをHotwireを使って実装した

Everyday Railsのサンプルアプリには「タスク完了」のチェックボックスをクリックすると、即DBが更新される機能があります。
Rails 7.1版のサンプルアプリではこの機能をHotwireを使って実装してみました。

github.com

letter_opener_webを導入した

サンプルアプリではメールを送信する機能があるのですが、開発環境でメールがちゃんと送信できたのかどうかはRailsのログを確認するぐらいしかありませんでした。
(ただし、テストコード内ではRSpecを使って送信されたメールの内容をテストしています)

Rails 7.1版のサンプルアプリではletter_opener_webを導入しています。
そのため、 http://localhost:3000/letter_opener にアクセスすれば送信されたメールの内容が確認できます。


不要なアップロードファイルを削除するコードが変わった

Rails 7.1ではrails newしたタイミングで、tmp/storage/.keepというファイルが作成されます。
第10章ではこれまで

config.after(:suite) do
  FileUtils.rm_rf(ActiveStorage::Blob.service.root)
end

というコードで不要なアップロードファイルを削除していました。
ですが、これだとtmp/storage/.keepも一緒に削除してしまいます。
そこで、以下のコードに変更して不要なディレクトリだけを削除するようにしました。

config.after(:suite) do
  Pathname(ActiveStorage::Blob.service.root).each_child do |path|
    path.rmtree if path.directory?
  end
end

Rails 7.1やRuby 3.3では警告が発生する箇所の修正

いくつかのgemではRails 7.1やRuby 3.3で実行すると警告が出るものがあったので、Rails 7.1版のサンプルアプリケーションではやむを得ずGitHubリポジトリ上のgemのコードを参照するなどして警告の発生を回避しています。
これらの回避策はあくまで一時的なものなので、正式対応版がリリースされ次第、元のコードに直す予定です。

Capybara 3.39.2

2024.2.3追記
Capybara 3.40.0がリリースされて下記の問題が解消したため、サンプルアプリも最新のCapybaraを使うようにアップデートしました。

Rack 3を使っているとCapybaraが原因で"Rack::Handler is deprecated and replaced by Rackup::Handler" という警告が発生します。
github.com

すでに修正コードはmasterブランチにマージ済みですが、まだ正式リリースされていないため、GemfileでGitHub上のコードを参照するようにしています。

# Gemfile
# Waiting for https://github.com/teamcapybara/capybara/pull/2706 to be released
gem "capybara", github: "teamcapybara/capybara"
Geocoder 1.8.2

Ruby 3.3を使っていると、Geocoderが原因で以下のような警告が発生します。

warning: csv was loaded from the standard library, 
but will no longer be part of the default gems since Ruby 3.4.0. 
Add csv to your Gemfile or gemspec.

すでに修正コードはmasterブランチにマージ済みですが、まだ正式リリースされていないため、GemfileでGitHub上のコードを参照するようにしています。

# Gemfile
# Waiting for https://github.com/alexreisner/geocoder/issues/1642 to be released
gem "geocoder", github: "alexreisner/geocoder"

ちなみにgeocoderに修正のプルリクエストを送ったのは僕です。

github.com

また、Ruby 3.3で警告が出る理由については以下のQiita記事で説明しています。

qiita.com

Devise 4.9.3

Rails 7.1を使っていると、Deviseが原因で以下のような警告が発生します。

DEPRECATION WARNING: 
`Rails.application.secrets` is deprecated in favor of `Rails.application.credentials` 
and will be removed in Rails 7.2. 

この問題はIssueとしてすでに報告されていますが、2024年1月9日時点ではまだOpenのままです。

github.com

この警告を回避するため、config/initializers/devise.rbで以下の記述を追加しています。

# config/initializers/devise.rb
# NOTE: Please remove the following lines when https://github.com/heartcombo/devise/issues/5644 is fixed
require 'devise/version'
raise "Issue 5644 might be fixed" unless Devise::VERSION == "4.9.3"
config.secret_key = Rails.application.secret_key_base

まとめ

というわけで、このエントリでは「Everyday Rails - RSpecによるRailsテスト入門がRails 7.1とRuby 3.3に対応しましたよ」というお知らせを書いてみました。

Rails 7.0と7.1で変わる部分はほとんどないものの、公式に「Rails 7.1でも本書の内容は有効ですよ!」とアナウンスしてあれば、安心して本書を購入できるんじゃないかなと思います。

また、すでに本書を持っている人も、「変更点がほとんどない=本書で学んだRSpecの知識は最新の開発環境でもまだ有効」ということがわかって安心できるのではないでしょうか?

これからも引き続き最新版のRailsやRSpecに対応していく予定ですので、みなさん今後とも「Everyday Rails - RSpecによるRailsテスト入門」をよろしくお願いします。
(購入済みの方は周りの人にお勧めしてもらえると嬉しいです!😄)

leanpub.com

Q. どうやって購入するの?

本書の購入手順は以下のブログ記事で詳しく説明されているので、こちらをご覧ください。
tomoyuki65.com

また、そのほかのよくある質問に関しては以下のエントリにまとめています。
興味がある方はこちらをご覧ください。
blog.jnito.com

あわせて読みたい

「Everyday Rails - RSpecによるRailsテスト入門」も「プロを目指す人のためのRuby入門」も、「出版したら終わり、にしない技術書」を目指しております。

ついに老眼鏡デビュー👓

とうとう買っちゃいました。老眼鏡です。

しかし、「老眼」って響きが悪いですよね。「老」って。。
まあ、加齢によるものだから仕方ないけどさ・・・。

こんな症状が出てきました

この1年ぐらいですかねー。

「スマホの字(wikipediaとか)がなんか見にくいぞ」

とか

「お菓子の箱に書かれた原材料の字が見にくいぞ」

みたいなことが増えてきました。

あと、ギターの弦を替えるときに1〜3弦がちゃんとペグポストに巻き付いているのか裸眼では確認しづらくなりました。

ボールペンとかで書類に字を書くときも、ペン先がブレて見えるので「たぶんこのへん」とペン先の位置を脳内で想像しながら字を書かなければいけなくなってきました。

この状態でも別に日常生活が送れないわけではないですが、何か物を見るときに「ちょっとしんどいな」と思う場面がちょくちょく増えてきた感じです。

老眼は誰も避けられない人類の宿命

まあ今年で47ですからね。
「ついに来るべきものが来たか」という感じでさっさと受け入れることにしましたよ。

聞くところによると老眼は絶対に避けられない老化現象らしく、努力でどうこうなるものではないみたいです。
これを読んでるみなさんも、あと何年かしたら必ず老眼はやってくるんですよ。ふっふっふ。

見える、見えるぞ・・・!!

というわけで、正月明けに眼科に行って老眼鏡の処方箋を作ってもらい、知り合いの眼鏡屋さんで老眼鏡を作ってもらいました。

老眼鏡を掛けるとスマホの字やお菓子の原材料がはっきりくっきり見えるようになりました。
老眼鏡ありがたや〜。

悲しい気持ちがまったくない、と言ったらウソになりますが、「遅かれ早かれみんなそうなるもの」と考えれば「まあ、しゃあないよね」という感じです。
あまり無理せず、眼鏡の力を借りながら日常生活を送っていこうと思います〜。

おまけ

老眼鏡を買ったついでに新しいサングラスもゲットしましたよ。
(ただし、これは度が入ってないただのサングラスです)

あわせて読みたい

基本的に視力は良いので眼鏡とは無縁だったんですが、3年前に乱視補正用の眼鏡を買ってます。
仕事中(パソコンを触るとき)はいつもこの眼鏡をかけてます。
blog.jnito.com

天気のいい日はサングラスをかけると、とても目が楽です。
とくに車の運転をする人はサングラスをかけると良いと思います。
blog.jnito.com

【DIY】電子レンジのアース線を緑から黒に変えてみた

タイトルの通りですが、電子レンジのアース線を緑から黒に変えてみました。

我が家のコンセントのレイアウト上、アース線は、

から引っ張ってくるしかないんですが、我が家のキッチンは白と黒を基調としているので、緑色の「ザ・アース線」みたいな電線がキッチンを這っているとそこだけ浮いてしまいます。

というか、妻が「やだ!これじゃ美しくない💢」と申すので、ホームセンターに行って黒いアース線を買ってDIYしてみました。

手順

以下のページを参考にしながら取り付けてみました。

電子レンジにアース線は必要ですか?/アース線の接続について教えてください。:日立の家電品

  1. 電装圧着工具のワイヤーストリッパー機能を使って、アース線のビニール被覆を剥ぐ
  2. 圧着端子をアース線につなぎ、電装圧着工具の圧着ペンチ機能を使ってアース線と端子を圧着する
  3. 電子レンジ本体に元からつながれているアース線を外し、新しいアース線を取り付ける
    (image https://kadenfan.hitachi.co.jp/support/range/q_a/a29.html)
  4. 電装圧着工具のワイヤーカッター機能を使って、アース線を適切な長さにカットする
  5. 電装圧着工具のワイヤーストリッパー機能を使って、アース線のもう片方のビニール被覆を剥ぐ
  6. コンセントのアース端子にアース線を取り付ける

ちなみに圧着端子って今回初めて使ったんですが、正しい圧着と間違った圧着があるようです。
ホームセンターに説明用の看板があったので、今回はこれを参考にしながら圧着しました。


オプション:コードステッカーでアース線を固定する

取り付け作業はここで終わってもいいのですが、アース線が壁にピタッとくっついてる方が美しいので、コードステッカーを使ってアース線を壁に固定するようにしました。


養生テープを間に挟んで壁紙を保護

ただし、コードステッカーをそのまま壁に貼り付けると、粘着力が強いため取り外す際に壁紙も一緒に剥がれてしまう恐れがあります。
そこで養生テープを先に壁紙に貼り、その上からコードステッカーを貼り付けています。
こうすれば取り外す際に壁紙を傷めることはありません。

この方法のデメリットはコードステッカーの粘着力が弱まってしまうことですが、アース線を固定するだけなら養生テープぐらいの粘着力でも十分です。

まとめ

はい、というわけでこれで完成です!!

変更前の写真を取り忘れてしまってbefore/afterを比較できないのがちょっと残念ですが、「いかにもアース線」という雰囲気は払拭できたんじゃないかな〜と思います。
わざわざアース線の色を変えたい、と思う人は滅多にいないと思いますが、興味がある方は参考にしてみてください!

おまけ:プラグ形漏電遮断器(ビリビリガード)はどうなの?

実は電子レンジの背後にはアース端子のないコンセントがあります。
ネットを調べているとコンセントにアース端子が付いてない場合は、代わりにプラグ形漏電遮断器(ビリビリガード)を付けると良い、という話を見かけました。
これを使えばアース線そのものを無くせるかもしれません。

が、いろいろ調べていると、「プラグ形漏電遮断器=アース線ではないので、できればアース線を使う方が望ましい」という意見もちらほら見かけました。
まあ、滅多に漏電なんて起きないと思うので何が真実なのかよくわからないところもありますが、万が一感電するようなトラブルが起きると怖いため、今回は従来通りアース線を取り付ける方法にしてみました。

あわせて読みたい

以下のエントリにリフォーム直後のキッチンの写真が載ってます。
リフォーム直後はトースターと炊飯器が置いてあったので、中央のコンセントが隠れてアース線も目立たなかったんですよねえ。(どこに行った?トースターと炊飯器)
blog.jnito.com