こんにちは! RubyMine Advent Calendar 20143日目の記事です。さて、皆さんはRubyMineのReformatという機能は活用していますでしょうか? ん? 未だに手でインデントを揃えているって? 今すぐReformatを使いましょう!
Reformatとは
コード中のインデントやスペースなどを、言語別の設定にあわせて整形し直してくれる機能です。
下の画像のように、Preference > Editor > Code Style
以下に言語別の設定を行う場所があります。

Code Styleの設定を元に、常に一定の見た目を保持できる点が、Reformatの優れているポイントです。
手動でReformatをかける
まずは手動でReformatをかける方法から。例えば以下のようなインデントの崩れているHTMLソースがあったとしますね。このインデントを直してみましょう。

Find Action(Cmd + Shift + A)から、

「reformat」と打ち込むと「Reformat Code」という候補が出てくるので、returnキーを押します。

すると、ファイル単位でReformatを行うか、ディレクトリ単位で行うのか選ぶモーダルダイアログが表示されます。選択範囲のある場合は、「Selected Text」を選ぶことで選択範囲内のみReformatを行うようにすることも可能です。

そしてReformatを行った結果が以下のような形です。綺麗にインデントされていますね。

自動でReformatをかける
いちいち手動でReformatをかけていても良いのですが、自動でかけることもできます。ただし、ファイル保存時にかけるのではなく、ファイルのコミット時に自動的にReformatが行われるようにする設定になります。
設定の方法は、コミット時(Cmd + K)に「Reformat code」というオプションにチェックを入れておくだけ。

これでファイルのコミット前に、自動的にコードがReformatされるようになります。変なインデントのコードをコミットしなくて済むので安心ですね。
常に一定したReformatを行う、という考え方
例えばGo言語にはgo fmt
というコードの見た目を整形するためのコマンドが標準で用意されています。これは、
「みんな機械的に同じ見た目のコードにすれば良いじゃん(整形の仕方で論争するコストがもったいないよね)」
ということなんだと僕は解釈していて、機械的に同じ見た目にすることで、
- インデントやスペースの空け方に対する宗教論争がなくなる(例えばprivateのあとはインデントするのかしないのか?等)
- コードレビュー時にインデント云々のつまらない指摘がなくなる
- みんな同じようなインデントやスペースの空け方になるので、読みやすくなる
といった効用が生まれると考えています。
そういうわけで、RubyMineのReformat機能を使う/使わないに関わらず、コードの見た目は自動的に整形する(気にしなくする)という文化を作ることで、コーディング全体の生産性が一段階アップするのではないかと思います。
とはいえ、せっかくのRubyMineの機能なので、RubyMineを使っている方は積極的に使ってみてください!
おまけ
僕のRubyのCode Styleの設定はこんな感じです。



JSONみたいなフォーマットで書き出せれば良いんですけどね。。