概要
リファクタリングとかしなければいけないのは分かるけど、具体的にどうしたらいいのか分からなかったり、そうした題材みたいなものって少ないかと思います。
この記事では仮想のアプリケーションを元にRuby on RailsのコードをRubocopを使ってキレイにしていく題材を紹介します。
開発環境
- Mac
- Ruby:2.5.1
- Rails:5.2.6.2
準備
- こちらのファイルをダウンロードします。
- ターミナルを開いて以下の操作を行ってください
$ cd $ mkdir try_code $ cd try_code $ mv ~/Downloads/experience_rubocop_app-main ~/try_code/experience_rubocop_app $ cd experience_rubocop_app $ rbenv local 2.5.1 $ gem install bundler -v 2.1.4 $ bundle install $ bin/rails db:migrate $ bin/rails db:seed
- 上記まで完了したら、
bin/rails s
でサーバーを立ち上げます。 - 以下のような画面が表示されたら準備完了です。
体験手順
まずは仮想アプリケーションを触って見てください。どんなアプリケーションか体験してもらったら、以下にあげるファイルを確認しましょう。
- config/routes.rb
- app/controllers/posts_controller.rb
- app/controllers/change_posts_controller.rb
コードを見ていろいろ思うところはあるかと思いますが、一旦ターミナルでbundle exec rubocop
を実行してみましょう。
すると、以下の画像のようにRubocopからの指摘事項が確認できるかと思います。
この指摘事項、もっと言えばbundle exec rubocop
コマンドを実行して何も指摘されない状態にできれば、一定基準のコードになります。
*Rubocopの対象から外したりすることもできますが、今回は用意されている仮想アプリケーションの設定に沿ってコードをキレイにしてみましょう。
一度に全ての指摘項目を修正するのは大変なので、config/routes.rbに絞って修正を試してみましょう。
config/routes.rbで指摘されているのは、以下の4つですね。
指摘箇所は表示されているとおりですが、その指摘内容を見てみると以下の2つが指摘されているのが分かりますね。
- Layout/SpaceInsidePercentLiteralDelimiters: Do not use spaces inside percent literal delimiters.
- Layout/SpaceInsideArrayPercentLiteral: Use only a single space inside array percent literal.
これらを翻訳したり、検索した先の公式の記載からどんなことが指摘されているのかを確認してみましょう。その上で、該当箇所・config/routes.rbファイルを修正してbundle exec rubocop
を実行し、指摘項目数が42個から38個になるようにトライしてみましょう。
config/routes.rbを修正した際のターミナルは以下のような表記になるかと思います。
今回の指摘事項の修正は割りかし軽微なもので物足りなかったかもしれません。
物足りなく感じた方、より良いコードを書くためにもう少し取り組みたい方、Fat controllerを解消したいけど具体的にどうしたらいいのかがよく分からない方などなど、残りの指摘事項をどうしたら解消できるか挑戦してみていただけると嬉しいです。
*修正のイメージが難しい方でも、どうしたらそれができるかを以下のファイルのコメントに書いているので、コメントを読みながら取り組んでもらえると嬉しいです!
① posts_controller.rbの修正:config/routes.rbのときと同様に指摘項目を翻訳したり、検索したりして修正してみましょう!
② change_posts_controller.rbの修正:同ファイル内に書かれているコメントも参考に修正してみましょう。
③ change_posts_copntroller.rbの"Fat Controller"解消:app/models/post.rb内のコメントを参考にロジックをモデルに移行させてみましょう。