IntelliJ IDEAを使ってJava6のコードをJava7に変換する

こんにちは、kintone開発チームの田中裕一(@yuichielectric)です。 新MacBook Airを買ったら、奥様になんでRetinaじゃないのに買ったのと詰められる毎日です。

さて、kintoneプロジェクトでは、つい先日JDKのバージョンを6から7に上げる作業を行いました。

Java7では、言語自体に以下のような機能追加が入っています。

  • ダイアモンド記法
  • switch文でString型をマッチ
  • 複数の例外をまとめてcatch
  • try-with-resources

これらの新しい構文を使うと、これまで以上に簡潔にコードを書くことが出来るようになりますが、既存のコードが大量にあるため、手作業で全てを変更することは手間がかかりますし、ミスも起きてしまいそうです。

そこで、今回は既存のJava6で書かれたコードをツールを使って自動的にJava7の新しい構文に起きかえる方法を紹介します。

IntelliJ IDEA

今回は、IntelliJ IDEAを使用してコードを自動変換しました。

余談ですが、kintone開発チーム内では最近、空前のIntelliJブームが起きており、ここ数カ月でチームメンバーの半分以上がEclipseからIntellJに乗り換えています。 また別の機会にIntelliJについては語りたいと思います。

さて、ではやり方の説明です。 ここでは前提として、コードは既にIntelliJ上のプロジェクトとして読み込まれているものとします。

変換手順

1. プロジェクトで使用するJDKを1.7にする

選択肢に1.7がない場合は、「New」から追加して下さい。(※ 事前にJDK自体はインストールしておく必要があります。)

jdk

2. メニューから「Analyze > Inspect code」を選択

analyze

3. ダイアログ内の「Inspection profile」をクリック

dialog

4. ダイアログ内の「Java language level migration aids」のみにチェックを入れ、OK

languageLevel

5. 実行が開始される

executing

結果

kintoneプロジェクト(javaのクラスが3000弱)に対してこの処理を行った所、大体数十秒程で完了しました。 結果は以下のように表示され、古い構文を使っている箇所をリストアップしてくれます。

result

この時点ではまだコードは変換されておらず、単に変換出来る箇所をリストアップしてくれているのみです。 ここからコードを変換するには各項目を右クリックして「Apply Fix」を選択します。

これだけで、ダイアモンド記法を使っていないコードを自動的にダイアモンド記法に変換してくれたり、複数のcatchを一つにまとめてくれたりします。 IntelliJで検査、修正できる内容はまだまだこれだけではなく、僕もまだ全貌が把握できていません。 Javaに限らずHTMLなども検査出来るようです(参考)。

まとめ

Java6のコードをIntelliJを使って自動的にJava7の新構文に変換する方法を紹介しました。 もともとこの機能はJava6からJava7へのコード変換だけではなく、その他のコード上の直したほうが良い点を検出して修正までしてくれる機能なので、既にJava7に移行している方にもお勧めの機能です。

JetBrains社の回し者みたいな記事になってしまいましたが、本当に便利で最初に気づいた時には感動したので、是非みなさんも使ってみて下さい!