LoginSignup
2

More than 1 year has passed since last update.

posted at

updated at

Organization

【Eclipse】QuickFixを使って流れるようなコーディング

はじめに

背景

  • 最近弊社ではt_wadaさんに講演して頂いたり、皆でt_wadaさんのライブコーディング動画を視聴しTDDの考え方やユニットテストをキャッチアップしていく機会が増えました。(個人的にあまりやって来なかったので良い機会)
  • そのライブコーディング動画でt_wadaさんのコーディング見てると、普段自分がEclipseを使ってJavaでコーディングしてるときより「あれ?なんか流れがスムーズだな」と思った点があったので、それをきっかけに「もっと流れよくコーディングしたい」なぁと思い、自分が普段使うEclipseのショートカットと組み合わせてこうすれば自分なりにスムーズだと思う方法をメモがてらまとめようと思います
    • (流れよくとはなんぞやという感じもありますが。。手数少なくってイメージかな)

何ができるの?

  • Eclipseのショートカット、おもにQuickFix(ctrl+1)を使ってスムーズ(少し手数少なく)にコーディングができるようになる

題材とするコード

TDD Boot Camp 2020 Online #1 基調講演/ライブコーディングで取り上げられている、FizzBuzz問題のコードです。

このコードをライブコーディング動画ではテスト駆動で実装していきます。
(以下は、動画で実装途中のコードを引用しているので完全なロジックではないです)

プロダクトコード
public class FizzBuzz {

    public String convert(int i) {
        //ここにfizbuzzのロジックを実装していく
        return "1"; 
    }

}
テストコード
public class FizzBuzzTest {

    @Test
    public void _1を渡すと文字列1を返す() throws Exception {
        //準備
        FizzBuzz fizzbuzz = new FizzBuzz();
        //実行
        String actual = fizzbuzz.convert(1); 
        //検証
        assertEquals("1", actual);
    }
}

いつもの自分の手順

まぁ、テスト駆動開発で普段開発していないので、プロダクトコード(ここではFizzBuzzクラス)から実装していきます。

プロダクトコード(FizzBuzzクラス)の実装

  • 「Package Exproler」にてパッケージを選択して(なければ作って) Ctrl+nで新規作成ウィザードを開く

    • wizardsにclassと入力し新規クラス入力ウインドウを開く image.png
  • クラス名を考えてName欄にクラス名を入力しクラスの枠を生成
    image.png

  • メソッドを実装していく

    • 「public int convert(int val) { ...」みたいに全部タイプしていく。 image.png

普通といえば普通の手順だと思いますが、こんな流れで、普段はここでconvertメソッドのロジックをある程度作り込んだあとに、テストコードを実装します。

テストコード(FizzBuzzTestクラス)の実装

EclipseプラグインのQuick JUnitが普段入っているので、以下の手順になります。

  • プロダクトコードを開いている状態で ctrl + 9 でテスティングペアを作成します。
    image.png

  • テストクラス名がプロダクトコードのクラス名にサフィックスでTestが自動でつきます

    • (こういうルール付された自動生成は便利ですよね)

image.png

  • 生成されたクラスは失敗するテストメソッドが一つあるので、適宜編集してテストコードを実装していきます
    • 「public void _1を渡すと文字列1を返す()...」とタイプしていく

image.png

テストコードの中身の実装

  • 事前準備→実行→検証のコードを順に実装する

    • (普段はこういう手順ですが、検証コードから先に逆順で実装することを、動画のこの部分で説明されています)
  • プロダクトコード(FizzBuzzクラス)のインスタンスをnewする

    • FizzBuzzクラスは作成済みなのでctrl + spaceの入力補完で入力していく image.png
  • 検証したいメソッドを呼び出す

    • 「String actual = ..」とタイプしていく
    • convertメソッドの呼び出しはctrl+spaceで入力補完 image.png
  • 検証コードを書く

    • 「assertEqu..」をctrl+spaceで入力補完 image.png

こんな流れで、普段は実装しています。
この手順も別に悪いわけではないし、とても面倒とかそういわけでは無いし、入力補完などは十分便利なのですが、ライブコーディング動画の中ではもっとIDEの機能を活用して手数少なくコーディングしていたので、その手順を紹介したいと思います。

ライブコーディング動画の中での手順

TODOリストを作成する

詳細は動画のこのあたり

本記事ではEclipseの使い方にフォーカスしているので、テスト駆動の詳細にはふれられません(てか自分もキャッチアップ中)が、動画が本当におすすめなので、まだ観てない人はぜひ見てみてください。

テストコード(FizzBuzzTestクラス)の実装

  • 「Package Exproler」にてパッケージを選択して(なければ作って) Ctrl+nで新規作成ウィザードを開く
    • wizardsにjunitと入力し新規jUnitテストケース作成ウィザードを開く

image.png

  • クラス名を考えてName欄にクラス名を入力しクラスの枠を生成
    • (この辺りは普段の自分の手順と大きくは変わらないですね、変わるのはテストケースから作るという点。大きな違いかもですが。。)
    • (プロダクトコードのクラス名もこの時点で考える必要がありますね、テスティングペアの名前に規則があるので)

image.png

TODOリストにある機能仕様を検証するテストメソッドの実装

  • 動画では検証→実行→準備の順に実装をしていきます
  • 「assertEqu..」を入力しctrl+spaceで入力補完

image.png

以下からは動画のここら辺りから

  • actualがエラーになっているのでフォーカスをあててctrl+1でQuickFix
    • (フォーカス当てるのはctrl+.ctrl+,でもできます)
    • 「Create local variable actual」でローカル変数を自動生成

image.png

  • ローカル変数の型をStringに変更
    image.png

  • まだコンパイルエラーになるのでもうっかいctrl+1でQuickFix

    • 「Initialize variable」で変数を初期化 image.png
  • 一番上に来ちゃうのでalt + ↓で行ごと移動
    image.png

「プロダクトコードの実行(呼び出し)」を実装

  • (ここが個人的には印象深く、まだ実装してないコードを使う側から先に書いちゃうんだ?と思いました)

    • 使う側から先に書くことで使いやすさを意識されたコードになるとのことです
  • 当然コンパイルエラーになるのでctrl+1でQuickFix

    • 「Create local variable fizzBuzz」でローカル変数を自動生成 image.png

プロダクトコード(FizzBuzzクラス)の実装

  • ローカル変数の型を「FizzBuzz」に変更
    • FizzBuzzクラスもこの時点では存在しません。
  • 当然コンパイルエラーになるのでctrl+1でQuickFix

    • 「Create class FizzBuzz」でクラスを自動生成 image.png
  • FizzBuzzクラスにはconvertメソッドがまだなくコンパイルエラーになるのでctrl+1でQuickFix

    • 「Create method convert(int) in type FizzBuzz」でメソッドを自動生成 image.png
  • 生成後はこんな感じです
    image.png

  • まだコンパイルエラーが残っているので更にctrl+1でQuickFix

    • 「Initialize variable」を選択し image.png
  • 初期化で「new FizzBuzz()」を入力
    image.png

動画ではざっと、こんな流れでコーディングされていました。

私自身は普段のコーディングの順番やEclipseの操作と結構違う点もあったので、おお!と思いました。

まとめ

  1. QuickFix(ctrl+1)を多様しできるだけEclispeに自動生成させると手数が少なくなる
    1. 先にコンパイルエラーになるコード(使う側で存在しないクラスやメソッド)を書いてQuickFixで自動生成
  2. 使う側から考えるので使いやすいコードを考えることになる
    1. 本記事の趣旨とはズレますが、テスト駆動のメリットとして動画では印象深く紹介されてたので。ここでも上げて起きます。
    2. (使う側からコードを書くので、QuickFixがより活きてくるのかもしれないなと思っています)

本質的には2が大事だと思いますが、個人的にはコーディングしていて楽しい気持ちになるので、1も大事だと思っています。
(サクサクとコードが書かれていくのは、なんか楽しい気持ちになるので、大事)

今回記事を書くにあたり何回か自分で動画の手順でコーディングしてみましたが、QuickFix(ctrl+1)は本当に便利で、これを覚える色々ケースで役に立ちそうだと思いました。
(変数リネームやインライン化など、コンパイルエラーになっていない部分でQuickFix開いても、色々できるみたいです)

おわりに

もう少し書こうと思ってた内容もありましたが、時間切れなのでこれで終わりにしたいと思います。

個人的には初めての投稿で、書いていて色々手が止まるところがあったので、
「量が質に転化する」のを目指して、来年は継続的に投稿できるようにしていきたいです。

あと、t_wadaさんのライブコーディング動画はとても参考になりました。(無料で見れてとてもありがたい)
色々な人のライブコーディング動画を見て、コーディングの順番とかIDEの使い方とか比較しても楽しいかもしれないですね!

参考

TDD Boot Camp 2020 Online #1 基調講演/ライブコーディング
eclipseでよく使うショートカット
Eclipse + Quick JUnit Plugin ショートカット一覧メモ

最近はIntelliJも使うので、EclipseとIntelliJのショートカットの対応を確認するのに以下が役立ちました。
IntelliJ使いの方は以下を参考にすると、同じような手順でコーディングができる(かもしれません)
Eclipse から IntelliJ IDEA に移行する - ショートカット

おまけ

個人的よく使うEclipseショートカット

ctrl + space : 入力補完
ctrl + . : エラーの箇所にジャンプ(下方向)
ctrl + 9 : テスティングペアに移動(なければ作成)
ctrl + 0 : ユニットテスト実行
ctrl + 1 : エラー箇所でのQuickFix
ctrl + t : 型階層の表示
ctrl + o : メソッド/メンバー変数を検索

今後使ってみたいEclipseショートカット

ctrl + , : エラーの箇所にジャンプ(上方向)
Alt + ↑ または ↓ : 行単位の移動
ctrl + 3 : クイックアクセス
ctrl + shift + T : リファクタリングメニュー
ctrl + 1 : エラーではない箇所でのQuickFix、リファクができる.「inline local variable」が選べる。てかrenameとかも選べる。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2