Comments

項目20におけるfetchを利用したコード例の代替案

wakairo @wakairo

(hash[key] ||= []) << value、私は普通に読めて大丈夫なコードですが、一般的にはどうなのでしょうね。

ちなみに私の場合、こちらのコードよりもfetchのコードの方が読むのに時間がかかるかもしれません。というのも、Rubyの公式ドキュメントを読んで、fetchの仕様を確認して、なぜfetchを使ったのかしばし考えて、というように時間をかけてしまいそうだからです。

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

ChatGPT searchのTips

wakairo @wakairo
Last edited

ドメイン(Webサイト)を指定しての回答生成

「~ドメインから」とプロンプト(質問文)に入れることで、特定のドメイン(Webサイト)の情報を基にした回答を生成してくれます。情報ソースを指定したいときなどに便利そうです。

備考

このTopicとCommentは、11/11に全面的に改定しました。

0
Raw
https://www.techtips.page/en/comments/413
💡3
😄1
🔄1
🔧1

IrfanViewがv4.70になってからwingetソースでのインストールが上手く行かない

wakairo @wakairo
Last edited

問題

2024年10月26日現在、以下のコマンドのように、wingetがソースとなっている方のパッケージIDを指定してwingetからインストールを試みても、IrfanViewが起動できないので、インストールが上手く行っていないと思われる。

winget install --id "IrfanSkiljan.IrfanView"

対応策

最新版になるのが多少遅れても良いのであれば、Microsoft Storeからインストールする。なおMicrosoft Storeからであれば、Microsoft StoreのGUIからインストールしても、Microsoft Storeの方のパッケージIDを指定してwingetコマンドからインストールしても、どちらでも大丈夫のようである。

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

minitestにおける不等号などの二項演算子を用いたアサーション

wakairo @wakairo
Last edited

minitestにおいて、不等号などの二項演算子(例:<, >, <=, =>)を用いたアサーションをしたいときには、 assert_operator()が利用できます。

assert_operator()を用いるメリット

assert_operator()を用いるメリットとして、アサーションが失敗した時の情報が多くなることが挙げられます。

以下のように、assert_operator()を使用した場合は、

x, y = 0, 1
assert_operator x, :>, y

アサーション失敗のメッセージにおいて、以下のように変数の中身も表示してくれます。

Expected 0 to be > 1.

比較して、以下のように単純に記述した場合は、

x, y = 0, 1
assert( x > y )

以下のようにアサーションに失敗した以外の情報を得ることが出来ません。

Expected false to be truthy.

(参考)assert_not_operator

ちなみにrailsのテスト環境では、assert_not_operatorもあります。

0
Raw
https://www.techtips.page/en/comments/347
🙋1
❤️1

rails 7.0からrails 7.1への移行(アップデート、アップグレード)で必要な作業

wakairo @wakairo

Rails 7.1で追加されたパスワード関連エラーメッセージへの対応

has_secure_passwordを利用しているモデルがあり、かつ、英語以外のロケールへ対応している既存アプリでは、 rails 7.1で追加されたエラーの種類であるpassword_too_longに対応するエラーメッセージの訳文を追加する必要があります。 (追加をしないとパスワードが長すぎた場合のエラーメッセージが英語で表示されます。)

なお、本件の詳細についてはこちらをご覧下さい。

0
Raw
https://www.techtips.page/en/comments/333
❤️1

Rails 7.1では、パスワードに関してエラーメッセージの種類が増えた

wakairo @wakairo
Last edited

Rails 7.1に取り込まれたこちらのプルリクエストによって、 ActiveModel::SecurePasswordhas_secure_passwordメソッドを利用している場合のパスワードのバリデーションにおいて、 パスワード文字列が72バイト以内かどうかのチェックが行われるようになりました。 そして、72バイトを超えている場合には、password_too_longという新しい種類のエラーが出るようになりました。

この変更に伴って、日本語表示のRailsアプリでは、password_too_longのエラーメッセージの日本語訳を用意する必要があります。 具体的には、以下の階層の所に以下のような日本語訳が必要となります。

ja:
  errors:
    messages:
      password_too_long: が長すぎます
0
Raw
https://www.techtips.page/en/comments/332
🔄1
🔧1

Emailアドレスとして適切かどうかのチェックに使えるURI::MailTo::EMAIL_REGEXP

wakairo @wakairo
Last edited

rubyの標準添付ライブラリであるuriに存在しているURI::MailTo::EMAIL_REGEXPは、 ある文字列が規格上Emailアドレスとして適切かどうかのチェックに以下のように利用できます。

irb(main):001> require 'uri'
=> true
irb(main):002> URI::MailTo::EMAIL_REGEXP
=> /\A[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/
irb(main):003> URI::MailTo::EMAIL_REGEXP.match?('[email protected]')
=> true
irb(main):004> URI::MailTo::EMAIL_REGEXP.match?('[email protected]')
=> false
irb(main):005> URI::MailTo::EMAIL_REGEXP.match?('[email protected]')
=> false

Railsガイドでも、 このEMAIL_REGEXPを用いてemailのバリデーションを行う方法を以下のように紹介しています。

validates :email, format: { with: URI::MailTo::EMAIL_REGEXP }

URI::MailTo::EMAIL_REGEXPを使うメリット

TechRachoの記事によると、URI::MailTo::EMAIL_REGEXPの正規表現はHTML規格書から持ってきているため、 URI::MailTo::EMAIL_REGEXPを使ったバリデーションはブラウザがinput type="email"で行うバリデーションと一致するというメリットがあります。

余談

URI::MailTo::EMAIL_REGEXPは、 Rubyリファレンスマニュアルにも Ruby標準ライブラリリファレンスにも、実は記載されていません。 ですので、URI::MailTo::EMAIL_REGEXPを利用するのは少々裏技的な側面があるのかもしれません。 ただ、上述の通り、Railsガイドや記事で取り上げられるぐらいに認知されていますので、利用しても大丈夫なのではないかと思います。

0
Raw
https://www.techtips.page/en/comments/331
😄1
🔧1
💡1

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

wakairo @wakairo
Last edited

GitHub Actionsの設定ファイルでsetup-rubyを使う時に、 以下のようにruby-versionのところで.ruby-versionと指定すると、 GitHubレポジトリからチェックアウトされたプロジェクトの中にある .ruby-versionという名前のファイルで指定されているrubyのバージョンが GitHub Actionsのsetup-rubyで使われます

      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: .ruby-version
          bundler-cache: true

jobsが複数あって、同じバージョンで複数回setup-rubyをしているときなどには、バージョン記述の重複がなくなって有用だと思います。

(参考)

この指定方法は、railsの新規アプリのGitHub Actionsの設定で利用されています。

0
Raw
https://www.techtips.page/en/comments/330
❤️1

rails 7.1からrails 7.2への移行(アップデート、アップグレード)で必要な作業

wakairo @wakairo
Last edited

rails 7.2への移行におけるアイコン画像

bin/rails app:updateコマンドを実行すると以下の2つのアイコン画像ファイルがpublic/に作成されますが、
これら2つのファイルは、rails newで生成される新規railsアプリ用のファイルであるため、既存アプリでは単純に削除してしまい、 従来通りのアイコン画像とアイコン設定(faviconやapple-touch-icon)を用いれば大丈夫です。 (もちろん、既存アプリにおいてアイコン設定が適切に行われている場合の話です。)

  • icon.png
  • icon.svg

ちなみに、以下の通りrails 7.2では、新規アプリのアイコン設定が大幅に更新されています。 rails 7.2のこの新たなアイコン設定は、既存アプリにおいてもアイコン設定を見直す際に役立つかもしません。

(参考)rails 7.2.1の新規アプリのアイコン設定

以下が、新規アプリ用のテンプレートファイルからコピーしたrails 7.2.1の新規アプリのアイコン設定です。

    <link rel="manifest" href="/manifest.json">
    <link rel="icon" href="/icon.png" type="image/png">
    <link rel="icon" href="/icon.svg" type="image/svg+xml">
    <link rel="apple-touch-icon" href="/icon.png">

新たなアイコン画像ファイルによるアイコン設定に関与しているプルリクエストは、 PR #50526PR #50629です。 3つのアイコン画像ファイル(apple-touch-icon-precomposed.png、apple-touch-icon.png、favicon.ico)が削除され、 2つのアイコン画像ファイル(icon.png、icon.svg)が追加されています。 また、manifestに関しては、PWAに関する新機能に関連して導入されています。

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

rails 7.1からrails 7.2への移行(アップデート、アップグレード)で必要な作業

wakairo @wakairo
Last edited

rails 7.2ではassertionがないテストに対して警告が出るようになった

現象

rails 7.2では、Minitestを使ったテストに関して、assert系メソッドが1つも呼ばれないテストがあると"Test is missing assertions"という警告が出るようになりました。

警告が出ないようにする方法

各テストでassert系メソッドが最低1回は実際に呼ばれるようにして下さい。 例外が起きないことを確認するテストではassert_nothing_raisedメソッドを用いて下さい。 なお、警告の回避方法を含め、こちらの記事が参考になるかもしれません。

関連するプルリクエストとコミット

この機能はPR #51625で導入され、このときはrailsアプリの設定によって挙動を変えられるようになっていました。 その後、commit 6a6c7e6によって機能が単純化され、単に常に警告が出力されるだけになりました。 その後、PR #51693で関係するコードを綺麗にする作業などが行われています。

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