Rails全般
field_with_errorsクラスを消す
フォームでvalidationエラーが出ると新しいdivで囲われてしまう。
レイアウトが崩れるのをとりあえず防ぎたい:
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
html_tag.html_safe
end
参考URL: Remove Rails field_with_errors wrapper
Rails Console(IRB)の候補を表示しない
Ruby 3系だと、Rails Console(IRB)の入力中に候補が表示されるようになった。
APP_PATH █
ARGF █
ARGV █
AbstractController █
ActionCable █
ActionController █
ActionDispatch █
ActionPack █
ActionView █
ActiveJob
Addrinfo
候補表示そのものは必要だと思うのだが、タイピングの途中に出す必要はないと思う。
それどころかIRBの表示もどこかバグっぽくて、この表示のせいで入力している文字が消えるという致命的なバグがある。
こういうのはPRYとかのgemでオプトインするべきであって、IRBは可能な限り単純でいてほしかった。
とはいえ、カスタマイズが可能なのでホームディレクトリに.irbrcを作成する。
IRB.conf[:USE_AUTOCOMPLETE] = false
とてもよくなった。
一応環境変数でも変更できるようだ。
export IRB_USE_AUTOCOMPLETE=false
Rails Console(IRB)のプロンプトをカスタマイズする方法
せっかく.irbrcを作ったので、古き良きIRBにする。
# シンプルなプロンプトを使う
IRB.conf[:PROMPT][:MY_PROMPT] = {
:PROMPT_I => ">> ",
:PROMPT_S => "?> ",
:PROMPT_C => "-> ",
:RETURN => "=> %s\n"
}
IRB.conf[:PROMPT_MODE] = :MY_PROMPT
この表示がデフォルトだといいのに。
$ rails c
Loading development environment (Rails 7.0.8)
>>
非常によくなった。
.railsrc
とても今更ではあるのだが、毎回rails newするときに必ず-Tなどのオプションを指定している。
MiniTestはまだよいのだが、--skip-action-mailboxなどは大文字で省略できないので大抵はrails new --minimalかrails new --helpで一覧からいちいち選択していた。
あまり気に留めていなかったのだが、.irbrcがホームディレクトリにあることを考えると.railsrcも同様にあってもよいのではないかと思えてきた。
--database=postgresql
--skip-keeps
--skip-action-mailer
--skip-action-mailbox
--skip-action-text
--skip-active-storage
--skip-jbuilder
--skip-test
とりあえずほぼ毎回選ぶであろう選択肢を選んだ。
以下は選択したコメント:
--database=postgresql
ここ最近はPostgresではなくSQLiteで書き始めることが多い。
db:system:changeがあるとはいえ、デプロイするには必ずPostgresに変更しなければならないので指定しておく。
単純に毎回-d=postgresqlをタイプするのが面倒だっただけかもしれない。
--skip-keeps
これは逆に今回から採用することに決めた。
tmpとかlogをGitLabに表示しておきたいから残していたのでこれは--no-skip-keepsにするかもしれない。
--skip-action-mailer
ActionMailerはいつかは使いたいと思っているものの、だいたいは別の手段に落ち着く。
--skip-action-mailbox
正直興味はあるものの、ActionMailer使わないのであれば採用する理由はない。
--skip-action-text
Trixはリリースされた当時は非常にニーズを捉えていると思っていた。 ただし毎回ブログを作りたいわけではないし、もしブログを作るとしてもMarkdownをサポートしたいと思う。 そうなるとTrixを使いたいと思う機会はなかなか想定できない。 もう少しクセのないエディタならまた違った捉え方だったかもしれない。
--skip-active-storage
ActiveStorageは一時期使おうとしていたのだが、やはりCarrierWaveのほうが私は好きだ。
これも将来的にこの中に含まれなくなる可能性はあるかもしれないが、rails routesが汚染されるのがどうも気に入らない。
--skip-jbuilder
JBuilderはMVCを体現していると思うし、あまり嫌いではない。 でもJSONはシリアライズするほうがより一般的だと思う。
--skip-test
ミニマリストという感じがしてはかっこいい。 でもそれだけである。 MiniTestでもテスト書けなくはないけれど、やはりRSpecに比べるとわざわざこれを好んで書く理由はない。
--no-skip-action-cable
この設定はリストに含まれていないけれども、ほぼ必ずといっていいほどActionCableは除外していた身からするとこれは大きな進歩だと思う。 利用するにはRedisが必須だけども、Rails自体はRedisを全く設定しなくても動く。 WebSocketというのも敬遠していた理由だけれども、今後Hotwireを使っていきたいのが大きい。
--template=TEMPLATE
正直試してみたかったのだが、Gemfileはできる限りbundle addで悲観的に追加したい。
そう考えると他にできそうなことは少ないのでスルーした。
.rubocop.ymlをサーバー経由する
たまたまKredisのRuboCopを見ていたら記述がたったのこれだけであった:
inherit_from: https://raw.githubusercontent.com/rails/rails/main/.rubocop.yml
これをやることによって手元の編集をいちいちする必要がないというか、複数のプロジェクト間で毎回似たようなファイルを定義する必要がなくなった。
問題はこれをどこで管理するかなのかだが、GitHubでオープンソース管理しているのであればGitHubに任せるのが理にかなってはいる。 しかし私の場合は極力GitHubよりもGitLabでリポジトリを管理したいので、GitLabのSnippet機能を使うことにした。
このアプローチで少々厄介なのはrubocopコマンドを実行するとローカルに少々長いファイルが生成されてしまうようだ:
.rubocop-https---raw-githubusercontent-com-rails-rails-main--rubocop-yml
そのためVSCodeで以下のような設定を追加した。
{
"files.exclude": {
"**/.rubocop-*": true
}
}
これは結構強力な設定で、Explorerからも除外する設定だ。 これもしばらく運用してみてローカル管理がしっくりくるのか、いずれ結論を出したいと思う。
SVGを表示する方法
あまり見慣れないrawというヘルパーメソッドを使用している。
module IconHelper
def svg(file_name)
icons_path = Rails.root.join("app/assets/icons").join(file_name)
File.open(icons_path) do |f|
raw f.read
end
end
end
参考URL: How do I display SVG image in Rails?
テンプレートのログを隠す
最近ではView Componentを使えば似たような事ができなくもない事に気がついたのだけれども、モデルの数だけrenderが呼ばれるのが鬱陶しく感じる。
とはいえSQLのログやコントローラのパラメータは表示しておきたいので次のオプションを有効にすることにした。rails dev:cacheみたいにファイルで制御できるようにしてもよさそうではある。
Rails.application.config.action_view.logger = nil