Open yonta opened 1 month ago
Ruby 3.3.5もきてるから、先にこっち上げちゃおう
YJITはRuby3.3以上とRails7.2から
RailsガイドのRailsアップデート手順わかりやすくて助かる。 自分でも追っかけてみて、だいたいこんな感じでいけそう。
bundle update rails
config/initializers/new_framework_defaults_X_X.rb
のコメントアウトを1行ずつ外してチェック
config/application.rb
のconfig.load_defaults(X.X)
を上げる
config/initializers/new_framework_defaults_X_X.rb
はいらないRubyのアップデートでcloudinary gemが警告出すようになった。 ostructってgemがRuby 3.5からデフォルトジェムじゃないからGemfileに追加しろ、って警告 cloudinaryのバージョンを上げることで対応。
Rails 7.1.4に上げた。 結構デフォルト設定が変わっている。
Rails7.1でlisten gemがデフォルトで入らなくなってた。
使える・使えないがあると開発時に混乱しそう。 SAKAZUKIでも削除することにする。
デフォルト設定あれこれしたときにspring削除しちゃった…。 デフォルトRailsだとGemfile上ではコメントアウトされており、手動でオンできる。
spring status
で起動してるかチェックできるbundle install
とbundle exec spring binstub --all
でインストールbin/spring binstub --remove --all
とGemfileから削除してbundle install
でアンインストールRailsの起動を早くするし、入れた状態を復帰しておく。
rspec
まわすとRails.application.config.secrets
が7.2で使えなくなるぞってdeprecate警告でるけど、どこで使ってる?
警告の該当ライン見ても使ってないが。
とりあえず7.2にしてみてエラーが出たらまた考える。
うおー、7.2.1にするぞ!
7.2.1の変更点 結構かわってる
devcontainer、GitHub CI、Rubocop OMAKASE、YJIT、Brakemanあたりが気になるね。
Rails 7.2.1をインストールしてから、rails new --database=postgresql --javascript=esbuild --devcontainer testapp_container
でどんなプロジェクトができるのか覗いてみましょうね。
.devcontainer
ディレクトリができる
.github/dependabot.yml
.github/workflows/ci.yml
run: bin/brakeman --no-pager
run: bin/rubocop -f github
なるものがrun: sudo apt-get update && sudo apt-get install --no-install-recommends -y google-chrome-stable curl libjemalloc2 libvips postgresql-client
run: bin/rails db:test:prepare test test:system
あたりuses: actions/upload-artifact@v4
TODO:もう少し設定内容を精査する必要がある
require
で各種プラグインを読み込み
Metrics/BlockLength
の除外対象にspecファイルを追加するrubocop-capybara
はCapybara/XXXXCops
のような名前空間で生成map
ではdo end
より{ }
を使うDisabledByDefault
でCopsを全部オフにしてから、使うやつだけEnabledしている
Style/AsciiComments
なんかは常にオフになってたbundle update
後に自動でオンになってから、不要ならオフにしよう# bad
func(a,
b)
# good
func(
a,
b,
)
# bad
foo = if expression
'bar'
end
# good
foo =
if expression
'bar'
end
[arg]
よりArray(arg)
の形を優先する[nil]
のようなにるにるを防げるし入れておくべきarr[0]
よりarr.first
を優先f = File.open("file")
よりFile.open("file") do |f| ~~~ end
を優先f.close
しないといけないcollect
とmap
のように別名を持つメソッドで片方を強制するretun nil
でなくreturn
に統一each
などの手続きスタイルはdo ~ end
、map
などの関数型スタイルは{ ~ }
を使うRSpec/ContextWording
で設定RSpec/ContextWording:
Prefixes:
- when
- with
- without
- if
- unless
- for
- before
- after
- during
Rails.application.config.yjit = false
を設定するBrakeman は、Ruby on Rails アプリケーションのセキュリティ脆弱性をチェックする静的解析ツールです。
--run-all-checks
をつけると使われるチェッカーが増える
--format github
ひょっとしてSpringももういらないか。 Rails公式も「今のマシンスペックだと対して効果ないからデフォルトオフにするわ」って言ってるな。
実際、spring周りで複雑になって起動しないとかトラブルのも辛い。 消すかー。
bundle update
かけて全部アップデートすると、webdirverがアップデートされてcapybaraがwebdriverのdeprecated警告だすようになっちゃうな。
Rails 7.2を動かすためのアップデート以外のbundle update
は後回しにしよう。
Rails 7.2してrails app:update
!!!
Rubocopの設定変えたら、ERBファイルがめっちゃLintに引っ掛かるようになった。 そりゃそうだ。 直すぞ!
何やら新しいの見つけたので、比較してみる。
.erb-lint.yml
で設定が可能<%
の後にスペースが入っているか、とか<% %>
ルビーブロックごとに解析するので、複数ブロックにまたがる解析はできない・エラーする
<% a = 1 %>
の後にa
を使う箇所があっても、unuseに引っ掛かる<% if n == 0 %>
は未完成のif式なので解析できないn.zero?
を使え、という解析ができない(致命的).rubocop.yml
の設定がそのまま使われる<%
のようなインデントがあると、インデントレベルを認識できない(致命的)
<% page_title "Test" %>
を検知できない(致命的)
erblint | rubocop-erb | ||
---|---|---|---|
エラー数 | 28 | 48 | 複数ブロックにまたがって解析するrubocop-erbのほうが検出数が多い |
autocorrect | 28 | 47 | エラー数に比例して多いだけなので差はあまりない |
.rubocop.ymlを継承 | o | o | |
.rubocop.ymlを継承して一部変更 | o | △ | できるが、設定を変えるには別ファイルが増える。例えば、.rubocop-erb.yml を作って以下のようにして、rubocop --config .rubocop-erb.yml と叩く必要がある |
<% if n == 0 %> |
x | o | 未完成の式なので、Style/NumericPredicateが検出できない |
<%a %> |
o | x | erblintは独自Linterで検出 |
inherit_mode:
merge:
- Exclude
inherit_from: .rubocop.yml
require:
- rubocop-erb
AllCops:
Include:
- "**/*.html.erb"
Style/MethodCallWithArgsParentheses:
IgnoreMacros: false
<% page_title "Test" %>
<%= t "this.is.also.good" %>
<% n = 0 %>
<% b = if n == 0 then 1 else 2 end %>
<%
def hogehogehogehogehogehoge(str1, str2)
str1 + str2
end
%>
<% if n == 0 %>
<% a = 1 %>
<% else %>
<% a = hogehogehogehogehogehoge "012345678901234567890123456789012345678901234567890123456789",
"abcdefghijklmnopq" %>
<% end %>
<html>
<body>
<%= a %>
</body>
</html>
できることとできないことあるし、併用するか…。
でかい変更になったので、baseブランチを作ってそこに各種変更を1個ずつマージPRにする方式にしよう
Rails 7.2がきたぞ! YJITを使ってローリスクハイリターンだ!
やること
参考になりそうなもの