Categories
├─Books Cloud services Events Standard TechTips Others
├─Software
│ ├─Mac OS Programming languages Windows Others
│ ├─Libraries
│ │ └─C C++ Java JavaScript Python Ruby Rust Others
│ └─Unix
│ └─Unix commands Others
└─Web
└─Document Service Others
項目20におけるfetchを利用したコード例の代替案
Effective Rubyの「項目20 ハッシュのデフォルト値を利用することを検討しよう」では、
a. ハッシュにエントリが存在しない場合には配列作成してから配列に要素を追加し、
b. ハッシュにエントリが存在する場合にはそのエントリである配列に要素を追加する
という動作をするコードとして、
fetch
を使う以下のようなコードサンプルが提示されている。このコードを実際に動かす簡単な例として、自然数を偶数と奇数に分けるコードを以下に示す。
さて、この
hash[key] = hash.fetch(key, []) << value
と同じ動作をする別のコードとして、以下の代替案があるのだが、本書では触れられていない。こちらのコードの方が、
key
が2回登場しないという面でDRY原則的には優れている。 具体的には、2カ所で同じにしないといけないところをうっかり違うものにしてしまうというミスを防ぐことができる。なお、Rubyの式がオブジェクトを常に返すことを利用したこのような書き方に慣れていないプログラマには、このコードは理解しづらいかもしれず、それがデメリットになるかもしれない。そういうときには、以下のように2行で書くと良いかもしれない。
APGのPatternsはWeb部品の実装コードのサンプルとしても参考になる
ARIA Authoring Practices Guide (APG)にはPatternsというページがあり、こちらでカルーセルやタブ、ツールチップといったWeb部品の実装コードのサンプルが紹介されています。
これらのコードサンプルは、HTMLのaria属性の付与方法について参考になるのはもちろんのこと、実際に動作するHTML・CSS・JavaScriptのコードが一通りそろっているため、こういったWeb部品の実装方法の一事例として参考になります。
例えば、タブのコードサンプルはExample of Tabs with Automatic Activationのページで「Open In CodePen」のボタンをクリックすることで見られます。
ChatGPT searchのTips
ドメイン(Webサイト)を指定しての回答生成
「~ドメインから」とプロンプト(質問文)に入れることで、特定のドメイン(Webサイト)の情報を基にした回答を生成してくれます。情報ソースを指定したいときなどに便利そうです。
備考
このTopicとCommentは、11/11に全面的に改定しました。
Placekittenはサービス終了?
2024年に入って、Placekittenはもう何ヶ月も上手く動作していない模様。なので、ダミー画像用のサービスとしては、他のサービスに乗換が必要そう。
ちなみに、Placekittenに近いサービスとして、 https://placecats.com/ というサイトがあるそうです。
参考
IrfanViewがv4.70になってからwingetソースでのインストールが上手く行かない
問題
2024年10月26日現在、以下のコマンドのように、wingetがソースとなっている方のパッケージIDを指定してwingetからインストールを試みても、IrfanViewが起動できないので、インストールが上手く行っていないと思われる。
対応策
最新版になるのが多少遅れても良いのであれば、Microsoft Storeからインストールする。なおMicrosoft Storeからであれば、Microsoft StoreのGUIからインストールしても、Microsoft Storeの方のパッケージIDを指定してwingetコマンドからインストールしても、どちらでも大丈夫のようである。
minitestにおける不等号などの二項演算子を用いたアサーション
minitestにおいて、不等号などの二項演算子(例:<, >, <=, =>)を用いたアサーションをしたいときには、
assert_operator()
が利用できます。assert_operator()
を用いるメリットassert_operator()
を用いるメリットとして、アサーションが失敗した時の情報が多くなることが挙げられます。以下のように、
assert_operator()
を使用した場合は、アサーション失敗のメッセージにおいて、以下のように変数の中身も表示してくれます。
比較して、以下のように単純に記述した場合は、
以下のようにアサーションに失敗した以外の情報を得ることが出来ません。
(参考)
assert_not_operator
ちなみにrailsのテスト環境では、
assert_not_operator
もあります。rails 7.0からrails 7.1への移行(アップデート、アップグレード)で必要な作業
Rails 7.1で追加されたパスワード関連エラーメッセージへの対応
has_secure_password
を利用しているモデルがあり、かつ、英語以外のロケールへ対応している既存アプリでは、 rails 7.1で追加されたエラーの種類であるpassword_too_long
に対応するエラーメッセージの訳文を追加する必要があります。 (追加をしないとパスワードが長すぎた場合のエラーメッセージが英語で表示されます。)なお、本件の詳細についてはこちらをご覧下さい。
Rails 7.1では、パスワードに関してエラーメッセージの種類が増えた
Rails 7.1に取り込まれたこちらのプルリクエストによって、
ActiveModel::SecurePassword
のhas_secure_password
メソッドを利用している場合のパスワードのバリデーションにおいて、 パスワード文字列が72バイト以内かどうかのチェックが行われるようになりました。 そして、72バイトを超えている場合には、password_too_long
という新しい種類のエラーが出るようになりました。この変更に伴って、日本語表示のRailsアプリでは、
password_too_long
のエラーメッセージの日本語訳を用意する必要があります。 具体的には、以下の階層の所に以下のような日本語訳が必要となります。Emailアドレスとして適切かどうかのチェックに使えるURI::MailTo::EMAIL_REGEXP
rubyの標準添付ライブラリであるuriに存在している
URI::MailTo::EMAIL_REGEXP
は、 ある文字列が規格上Emailアドレスとして適切かどうかのチェックに以下のように利用できます。Railsガイドでも、 このEMAIL_REGEXPを用いてemailのバリデーションを行う方法を以下のように紹介しています。
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ガイドや記事で取り上げられるぐらいに認知されていますので、利用しても大丈夫なのではないかと思います。setup-rubyにおける.ruby-versionを用いたバージョン指定
GitHub Actionsの設定ファイルでsetup-rubyを使う時に、 以下のように
ruby-version
のところで.ruby-version
と指定すると、 GitHubレポジトリからチェックアウトされたプロジェクトの中にある .ruby-versionという名前のファイルで指定されているrubyのバージョンが GitHub Actionsのsetup-rubyで使われます。jobsが複数あって、同じバージョンで複数回setup-rubyをしているときなどには、バージョン記述の重複がなくなって有用だと思います。
(参考)
この指定方法は、railsの新規アプリのGitHub Actionsの設定で利用されています。