jobs:scan_ruby:runs-on:ubuntu-latesttimeout-minutes:10steps:-name:Checkout codeuses:actions/checkout@v4-name:Set up Rubyuses:ruby/setup-ruby@v1with:ruby-version:.ruby-versionbundler-cache:true-name:Scan for common Rails security vulnerabilities using static analysisrun:bundle exec brakeman --no-pager
Windows Terminalの日本語表示は複数のフォントを指定することで改善できます
複数のフォントが設定出来たのですね。単一のフォントしか使えないのに比べると、意図した表示の仕方に大分しやすくなりますね。良い情報をありがとうございます。
ちなみに、Microsoftは現在Cascadia Nextという日本語に対応した等幅フォントを開発しているそうですので、このフォントの採用などでWindows Terminalの日本語表示がデフォルト設定のままでも良い感じになると良いですね。
Brakemanの--safe-methodsオプションはXSSチェック専用
役立つ情報ありがとうございます。
リンク先のGitHubのディスカッションを覗いてみたのですが、「poor naming」という表現があり、
--safe-methods
というオプション名が紛らわしいということは認識されているみたいですね。それから、"use the ignore file instead"というポリシーだそうですので、XSSチェック以外のタイプの警告は、1つずつ無視の設定をして欲しいというのがBrakemanの開発側の考えのようですね。
既存のRailsアプリへのBrakemanの導入
Rails 7.2から新規アプリケーションにおいてBrakemanがデフォルトで有効になりました。 このTopicでは、7.1以前で作成した既存RailsアプリにBrakemanを後から導入して、Brakemanに関して7.2の新規アプリ相当の状態にセットアップする方法をご紹介します。
Brakemanのインストール
まず以下のように、Gemfileの
group :development, :test
のところにbrakemanを追加します。次に
bundle install
を実行します。以上でBrakemanのインストールが出来ました。
ローカル環境でのBrakemanの実行
以下のコマンドでBrakemanを実行でき、デフォルトのチェックを行えます。
全てのチェックを実行する場合には、以下のオプション付けて実行します。
警告の無視に関する設定と管理を行う場合は、以下のオプション付けて実行します。
以下のように、これら2つのオプションを同時に指定して実行することも出来ます。
なお、Brakemanの詳細については公式ドキュメントをご覧ください。 また、brakemanコマンドのオプションについては日本語訳もあります。
GitHubワークフロー(CI)でのBrakemanの実行
.github/workflows/ci.ymlに相当するファイルがなければ作成します。 この.ymlファイルを編集して、以下のように
jobs
の下にscan_ruby
ジョブを追加します。ymlファイルの設定に関する注意点
timeout-minutes:
の設定は、実行時間に対して十分余裕を持たせて下さい。ruby-version: .ruby-version
」という設定は、プロジェクトルートにある.ruby-versionという名前のファイルで指定されているrubyのバージョンという意味になります。この設定についての詳細はこちらのTopicをご覧下さい。項目20におけるfetchを利用したコード例の代替案
(hash[key] ||= []) << value
、私は普通に読めて大丈夫なコードですが、一般的にはどうなのでしょうね。ちなみに私の場合、こちらのコードよりも
fetch
のコードの方が読むのに時間がかかるかもしれません。というのも、Rubyの公式ドキュメントを読んで、fetch
の仕様を確認して、なぜfetch
を使ったのかしばし考えて、というように時間をかけてしまいそうだからです。ChatGPT searchのTips
ドメイン(Webサイト)を指定しての回答生成
「~ドメインから」とプロンプト(質問文)に入れることで、特定のドメイン(Webサイト)の情報を基にした回答を生成してくれます。情報ソースを指定したいときなどに便利そうです。
備考
このTopicとCommentは、11/11に全面的に改定しました。
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ガイドや記事で取り上げられるぐらいに認知されていますので、利用しても大丈夫なのではないかと思います。