2020年9月8日火曜日

Ruby prettier 入門

概要

Ruby prettier は Ruby のソースコードを整形してくれるツールです
今回は簡単な使い方を紹介します

環境

  • macOS 10.15.6
  • Ruby 2.7.1p83
    • prettier 0.20.1

インストール

  • bundle init
  • vim Gemfile
gem "prettier"
  • bundle install

とりあえず使ってみる

とりあえずどんな感じで整形してくれるか確認してみます
以下のようなコードがあった場合に prettier を使ってみます

  • vim app.rb
puts "hoge"; puts "hoge"; puts "hoge"; puts "hoge"; puts "hoge"
puts "hoge"; puts "hoge"; puts "hoge"; puts "hoge"
puts "hoge"; puts "hoge"; puts "hoge"
puts "hoge"; puts "hoge"
puts "hoge"

prettier は rbprettier というコマンドを使います
--write を使うと指定のファイルをそのまま上書きして整形します

  • bundle exec rbprettier --write app.rb

以下のように整形してくれます

puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'
puts 'hoge'

1 行でブロックを書いた場合にどうなるか

Ruby では map などを使って配列などを別の配列に加工するなどの処理を良くすると思います
またそういった場合にブラケットを使ってブロックを 1 行で書くこともあると思います
例えば以下のようなコードだとどうなるか確認します

puts (1..5).map { |v| v if v % 2 == 0 }.compact
  • bundle exec rbprettier --write app.rb

結果は特に整形されることなくそのままでした
1 行ブロックはちゃんと考慮してくれているようです
ただ do ... end を使ったブロックの場合は 1 行で書いても整形します

puts (1..5).map do |v| v if v % 2 == 0 end.compact

これは以下のようになりました

puts (1..5).map do |v|
  if v % 2 == 0vend
end.compact

複数行のブロックは do ... end を使うのが Ruby 的にもルールなので、これは当然といえば当然だと思います

オプション

.prettierrc というファイルに整形時のオプションを指定することができます
例えば Ruby の場合ダブルクォートは変数展開が使えます
しかし変数展開する必要がないのにダブルクォートを使っている場合に自動的にシングルクォートに変換してくれる機能があります

  • vim .prettierrc
{
  "preferSingleQuotes": true
}
  • vim app.rb
puts "hoge"
  • bundle exec rbprettier --write app.rb

これを以下のように整形してくれます

puts 'hoge'

他にも printWidth で 1 行の最大文字数を設定したり tabWidth でインデント時のタブの数を設定できます
Ruby で使えるすべてのオプションはこちらが参考になります

関数間の改行やクラス間の改行挿入

試してみたのですがどうやら改行挿入はやってくれない感じでした
例えば以下のようなコードは prettier してもそのままでした
オプションも見つからなかったのでこのあたりは手動で頑張るしかなさそうです

def hoge
  puts 'hoge'
end
def hoge2
  puts 'hoge2'
end

class Hoge
  def hoge
    puts 'hoge'
  end
end
class Fuga
  def fuga
    puts 'fuga'
  end
end

最後に

Ruby のコードを自動整形することができる prettier を使ってみました
シンプルなフォーマッタなので使いやすい反面細かいところは自力で頑張るしかなさそうです
もう少し詳細に整形したい場合などは rubocop などを使ってチェックすると良いかなと思います
(※rubocop 自体はフォーマッタではなくフォーマットチェックツールなので注意)

個人的にはフォーマッタはシンプルな方が好きです
理由はフォーマッタのルールが厳しすぎてビルド時にいろいろな警告やエラーが発生しそれの対応をするほうが面倒な場面が多いからです

参考サイト

0 件のコメント:

コメントを投稿