21
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RubyAdvent Calendar 2022

Day 10

RSpecの.rspecファイルは # を使ってもコメントアウトされない(のでプルリクを送ってマージされた!)

Last updated at Posted at 2022-12-10

はじめに

RSpecでは.rspecというファイル1にデフォルトのオプションを書き込むことができます。

.rspec
--format documentation
--warnings

.gitignore.zshrcなど、.で始まる設定ファイルは#を使って行コメントを書くことができます2。きっと、.rspecでも同じようにコメント化できるのではないでしょうか?やってみましょう。

.rspec
# --format documentation
--warnings

.rspecを書き替えたのでRSpecを実行してみます。

$ bundle exec rspec
HomeController
  returns a 200 response
  #index
    responds successfully

NotesController
  #index
    searches notes by the provided keyword

(以下略)

あれっ、--format documentationが無効化されてない!!😭

ちなみに期待していた結果はこうです。

$ bundle exec rspec
......................................................................

Finished in 2.19 seconds (files took 1.67 seconds to load)
70 examples, 0 failures

いったいなんでなのー!?

RSpec Core 3.12までは#は無視される

いろいろ調べたところ、.rspec#を使ったコメントアウトに対応しておらず、ただ単に#は無視されます。
そのため、# --format documentationと書いても--format documentationが有効化されたままになったのです。

もう少し詳しく

どうも設計思想として、.rspecに書かれた内容はコマンドラインで渡すオプションと同じ扱いになっているようです。

つまり、以下のような.rspecがあった場合は、

.rspec
--format documentation
--warnings

以下のように実行したのと同じ扱いになるわけです。

$ bundle exec rspec --format documentation --warnings

とはいえ、#のようなオプションとして無効な文字列が.rspecに含まれていると、

.rspec
# --format documentation
--warnings

RSpec本体の内部ロジックで#は無視されて、結局以下のコマンドを実行したのと同じ扱いになっていました。

$ bundle exec rspec --format documentation --warnings

RSpec Core 3.13以降なら#でコメントアウトできる(はず)

うーん、これはちょっと挙動として不自然でわかりづらくないですか?と思ったのでRSpecにissueを投げてみました。

そして、.rspecファイルで#を使ったコメントアウトが使えるようにするためのプルリクエストを出してみました。

その結果・・・なんとか無事にマージされました!🎉

Screen Shot 2022-12-10 at 16.48.35.png

この記事を書いている時点ではまだリリースされていないですが、順調にいけばRSpec Coreの次のリリース(おそらく3.13?)でこのコメントアウト機能が使えるようになるはずです!

Screen Shot 2022-12-10 at 16.51.05.png

2024.2.5追記
RSpec Core 3.13がリリースされ、ようやくこの変更が日の目を見ることになりました! :tada:

おまけ

ちなみにRSpec関連の記事をたくさん書いてる僕ですが、RSpecのコードにコントリビュートするのはこれが初めてです😅

  1. 厳密には.rspec以外のファイル名でもオプションは指定可能です(参考

  2. コメント化する文字が # でない設定ファイルもありますが、割合的には # が多いように思います。

21
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?