Ruby初心者に絶対オススメのAtomパッケージ『rubocop-auto-correct』。


知っている人は知っていましたが、その昔、まつもとさんにEmacs実践入門の本書に寄せてを書いてもらった時、実は僕はまだRubyを1行も書いたことがありませんでした。しかし、あれから3年、いまでは普通にRubyを書くようになりました。
そこで、本日はRubyを書く際に、僕が便利に利用しているAtomパッケージのひとつを紹介したいと思います。

RuboCop

さて、初心者がRubyを書く際に、とても頼りになるGemがあります。それがRuboCopです。新しい言語を学ぶ際、シンタックスチェッカーは必須ツールですが、RuboCopは、スタイルガイドに従って自分の書いたコードが、RubyとしてGoodかBadか判断して警告してくれるため、他の言語は書いたことあるけどRubyは初めて、という人にとって、とてもありがたいツールです。
そんなRuboCopには「-a / --auto-correct」オプションがあり、これを利用すると、機械的に修正可能なコードを自動的に修正してくれます。
この機能を見たとき、僕はGoのgofmtコマンドと、go-modeのgofmt-before-save()を思い出しました。これは、gofmtコマンドを利用して編集中のバッファを保存タイミングで自動的に整形してくれるという便利機能です。
この機能を利用すると、EmacsでGoを書くとき、インデントを一切気にすることなく、コードを書けるようになるため、これこそがエディタのあるべき姿だと感動していました。
RuboCopとauto-correct機能を見たとき、これはエディタがサポートするべき機能であると直感したため、go-modeを参考にAtomパッケージとして作成したのが、rubocop-auto-correctです。

rubocop-auto-correct


rubocop-auto-correctを一言で言えば、Atomで編集しているRubyコードにRubocopの-aオプションを適用するパッケージです。具体的な動作は、スクリーンキャストを見ていただくとして、一例を紹介すると、次のような感じです。

# こんなコードが
def badName
  if something
    test
    end
end

# このように自動修正されます
def badName
  test if something
end

このパッケージは、いまでは個人的にRubyを書く上で欠かすことのできないツールになっています。例えば、純粋な文字列にダブルクオートを使っていると、RuboCopはシングルクオートを使えとお怒りになりますが、いちいち手で修正するのは面倒で、うっかり忘れてしまうこともあるでしょう。
そんな時、rubocop-auto-correctがあれば、保存するだけで勝手に修正を行ってくれます。お陰で、言語毎のコーディングスタイルを意識することなく、中身のみに集中してコードを書くことができるようになるのです。

rubocop-auto-correctの設定。

rubocop-auto-correctには幾つかの設定を用意しています。

Auto Runオプション

Auto Runオプションは、有効化するとファイル保存時に自動的に修正してくれるオプションです。僕は有効にして利用しています。

Correct Fileオプション

Correct Fileオプションは、有効化するとバッファではなく、ファイルを直接修正するように動作を変更します。無効化時は、ファイルではなくバッファに修正を行うため、保存するまでファイルには反映されません。僕はこちらも有効にしています。

Notificationオプション

Notificationオプションは、有効化するとRuboCopによって修正が行なわれた場合、AtomNotificationManagerを利用して通知を行ってくれます。通知がうざい場合は、無効化にしましょう。

Rubocop Command Pathオプション

Rubocop Command Pathオプションは、RuboCopのパスが正しくAtomに伝わっていない場合や、特定のパスにインストールされたRuboCopコマンドを利用したい場合などに、RuboCopコマンドのパスを直接指定するためのオプションです。
標準では、パスなしのrubocopコマンドを利用するようになっています。

その他。

リポジトリはこちらとなっていますので、利用してみて、もし何か要望や改善があればissueなりPRなりでご報告お願いします。
なお、個人的にはこれと同じ機能のESLint版が欲しいと思っているのですが、ESLint 2.0.0で待望の自動修正機能が入るようなので、リリースされたら作成したいと思います。
それでは楽しいRubyライフをお過しください。