Posted at

IntelliJ IDEAでファイル保存時にcode formatする

More than 5 years have passed since last update.


ヒューマンエラーを防ごう

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等のコーディング規約を拝借できる


マクロを登録する

スクリーンショット 2013-12-11 2.51.21.png

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


保存時に実行されるようキーバインド

スクリーンショット 2013-12-11 2.51.21.png

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に登録したアクションが指定されているか確認


試してみよう


  • 以上で登録は終了。実際に確認してみましょう。


最後に

どこかに間違い、アドバイス等ございましたらぜひご指摘ください。また、「変更分だけフォーマットかけたいならこっちの方が早くね?」的なものがありましたらご教授ください。