LoginSignup
23
13

More than 5 years have passed since last update.

Rubyの高速フォーマッター ` rufo ` を導入してみた

Last updated at Posted at 2017-08-08

前から少し気になっていたrufoというRubyのフォーマッターを試してみました。チームやリポジトリのコード規約によっては結構使えそうな感じです。

ruby-formatter/rufo

Ruby formatter の短縮形で rufo という名前になっています。
Rubocopのように文法などのチェック機能はなく純粋なフォーマッターです。

個人的には Unobtrusive by default という思想が好きで、基本的に設定しないとフォーマットしないよというスタンスが良いと思ってます。

vimの保存時にrufoでフォーマットをかける

vimのプラグインはruby-formatter/rufo-vimを利用します。

$ gem install rufo

rufoをインストールした後にrufo-vimを導入します。
dein.vimを使って *.toml でプラグインを管理している場合は、以下のような感じになります。

.dein.toml " dotfileとして管理したかったため、僕は ` .dein.toml ` という名前で管理しています
+# Formatter
+[[plugins]]
+repo = 'ruby-formatter/rufo-vim'

.vimrc
+" --------------------------------
+" ruby-formatter/rufo-vim
+" --------------------------------
+" Enable rufo (RUby FOrmat)
+let g:rufo_auto_formatting = 1

:w すると以下のような感じでフォーマットされます。

https://gyazo.com/c117a76bb5d3d1457f155e62c850dafa

上記のように = の位置を合わせるのは場所によっては微妙なのですが、以下のようにハッシュの中は : の後の位置を合わせたい派です。今のところ =: の後の位置を合わせるオプションが同じなのでちょっと困っています。

     {
 -      site: Settings.title,
 -      reverse: true,
 -      title: Settings.title,
 +      site:        Settings.title,
 +      reverse:     true,
 +      title:       Settings.title,
        description: Settings.description,
 -      keywords: Settings.keywords,
 -      canonical: request.original_url,
 +      keywords:    Settings.keywords,
 +      canonical:   request.original_url
      }

ちなみに最初にvimのプラグインを入れてみたところまったく動かず「動作確認してないやろ・・・」ってなりましたが、issueをあげたらちゃんと対応してくれました。(コードをforkしたのですが、vim script初心者でぐぬぬとなったので修正までは至りませんでした)

rufoでフォーマットするときの設定

.rufo をプロジェクトを配置します。READMEを読むとどこのフォルダにあっても良いみたいですが、プロジェクトのルートフォルダにおくのが良いと思います。

rufoのリポジトリの .rufo をベースにしてrubocopの設定をみながらひとまず以下のような設定で導入してみました。
https://github.com/ruby-formatter/rufo/blob/master/.rufo

チームやリポジトリのコード規約やrubocopとの調整が少し時間がかかりそうな印象があります。

.rufo
indent_size                 2
spaces_inside_hash_brace    :always
spaces_inside_array_bracket :never
spaces_around_equal         :one
spaces_in_ternary           :one
spaces_in_suffix            :one
spaces_in_commands          :dynamic
spaces_around_block_brace   :one
spaces_after_comma          :dynamic
spaces_around_hash_arrow    :one
spaces_around_when          :one
spaces_around_dot           :no
spaces_after_lambda_arrow   :no
spaces_around_unary         :no
spaces_around_binary        :one
parens_in_def               :yes
double_newline_inside_type  :no
visibility_indent           :align
trailing_commas             :never
align_comments              true
align_assignments           true
align_hash_keys             true
align_case_when             true
align_chained_calls         true

最後に

まだ若いフォーマッターということもあってもう少しプライベートで触ってみながら業務で携わっているプロダクトに入れたいな、と思いました。
また、チームに導入する上でメンバーが使用しているエディタのプラグインがあることが重要だと思っているのですが、今のチームでは僕以外はRubyMineを使っており、まだRubyMineのプラグインはないので今すぐには導入できなそうな気がしてます。

参考

https://github.com/ruby-formatter/rufo
https://github.com/ruby-formatter/rufo-vim

23
13
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
23
13