ヒューマンエラーを防ごう
IntelliJ IDEAのMacroとReformat codeの機能を使って、作業ブランチから変更のあった差分だけコードフォーマットを適用するように設定したので、そのメモ。ファイル保存時に設定したコーディング規約に沿って整形されるので、行儀の悪いコードがプロダクトコードに入ることを防げる。
プロジェクト内において定められたコーディング規約に違反しているコードや、単純なミスによる修正は、そのコードを書いた側にも、レビューする側にも負担となる。ましてやそれを手で修正しているのであれば、頻度こそ下がるものの(これは開発者の性格的による側面もありそうだが)、ミスは永遠になくなることはない。
目視には限界があるし、コードの行儀を整えてくれるもの(PHPだと http://cs.sensiolabs.org/ とか)もあるが、バージョン管理下で作業する場合には、作業分とは関係のない変更がコミットに入るのが厄介である。そこで、IntelliJのReformat codeを利用する。Reformatする際にOnly VCS changed text
という便利な項目にチェックを入れておくと、変更箇所だけにフォーマットを適用できる。
Mac版IntelliJ IDEAでのコマンドで記述してあるので、WindowsおよびLinux版を使用している方は適宜読み変えてください。
手順
プロジェクトのコーディング規約に合わせる
Preferences -> Code Style
- プロジェクトごとに設定可能
- 使用する言語を適宜設定
- PHPの場合、Set from... -> Predefined Style でPSR1/PSR2やSymfony2等のコーディング規約を拝借できる
マクロを登録する
Edit -> Macros -> Start Macro Recording
- この後マクロを登録するので、以下のコマンドを実行
- Command + Option + l (エル)
- Command + s(vimmerは:wで)
- Edit -> Macros -> Stop Macro Recording
- 名前をつける。適当にformat and save fileとかで
Reformat codeのダイアログが表示されるので、セレクトボックスは現在のファイルを、下のOnly VCS changed textにチェックを入れる。Do not show this dialog in the futureにもチェックを入れてしまおう。もしこのダイアログを再表示したくなったら、Preferences -> Editor -> Formatting -> Show "Reformat code" dialog にチェックを入れればOK
保存時に実行されるようキーバインド
Preferences -> Keymap -> Macros -> format and save file -> add keyboard shorcut
- Enter Keyboard Shortcutのダイアログが表示される
- 2回までのキーアクションを登録できる
- 普通の人はFirst StrokeにCommand + s
- VimmerはFirst StrokeにShift + ;、Second Strokeにwとかで
- OKを押して、Keymapに登録したアクションが指定されているか確認
試してみよう
- 以上で登録は終了。実際に確認してみましょう。
最後に
どこかに間違い、アドバイス等ございましたらぜひご指摘ください。また、「変更分だけフォーマットかけたいならこっちの方が早くね?」的なものがありましたらご教授ください。