#はじめに
- 本記事は Develop fun!を体現する Works Human Intelligence Advent Calendar 2020 の18日目の記事です。
- 筆者の初めてのQiita記事になります。よろしくお願いします!
#背景
- 最近弊社では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
で新規作成ウィザードを開く -
メソッドを実装していく
普通といえば普通の手順だと思いますが、こんな流れで、普段はここでconvert
メソッドのロジックをある程度作り込んだあとに、テストコードを実装します。
テストコード(FizzBuzzTestクラス)の実装
EclipseプラグインのQuick JUnit
が普段入っているので、以下の手順になります。
-
テストクラス名がプロダクトコードのクラス名にサフィックスでTestが自動でつきます
- (こういうルール付された自動生成は便利ですよね)
- 生成されたクラスは失敗するテストメソッドが一つあるので、適宜編集してテストコードを実装していきます
- 「public void _1を渡すと文字列1を返す()...」とタイプしていく
テストコードの中身の実装
-
事前準備→実行→検証のコードを順に実装する
- (普段はこういう手順ですが、検証コードから先に逆順で実装することを、動画のこの部分で説明されています)
-
プロダクトコード(FizzBuzzクラス)のインスタンスをnewする
-
検証したいメソッドを呼び出す
-
検証コードを書く
こんな流れで、普段は実装しています。
この手順も別に悪いわけではないし、とても面倒とかそういわけでは無いし、入力補完などは十分便利なのですが、ライブコーディング動画の中ではもっとIDEの機能を活用して手数少なくコーディングしていたので、その手順を紹介したいと思います。
ライブコーディング動画の中での手順
TODOリストを作成する
詳細は動画のこのあたり。
本記事ではEclipseの使い方にフォーカスしているので、テスト駆動の詳細にはふれられません(てか自分もキャッチアップ中)が、動画が本当におすすめなので、まだ観てない人はぜひ見てみてください。
テストコード(FizzBuzzTestクラス)の実装
- 「Package Exproler」にてパッケージを選択して(なければ作って)
Ctrl+n
で新規作成ウィザードを開く- wizardsに
junit
と入力し新規jUnitテストケース作成ウィザードを開く
- wizardsに
- クラス名を考えてName欄にクラス名を入力しクラスの枠を生成
- (この辺りは普段の自分の手順と大きくは変わらないですね、変わるのはテストケースから作るという点。大きな違いかもですが。。)
- (プロダクトコードのクラス名もこの時点で考える必要がありますね、テスティングペアの名前に規則があるので)
TODOリストにある機能仕様を検証するテストメソッドの実装
- 動画では検証→実行→準備の順に実装をしていきます
- 「assertEqu..」を入力し
ctrl+space
で入力補完
以下からは動画のここら辺りから
-
actual
がエラーになっているのでフォーカスをあててctrl+1
でQuickFix- (フォーカス当てるのは
ctrl+.
やctrl+,
でもできます) - 「Create local variable
actual
」でローカル変数を自動生成
- (フォーカス当てるのは
-
まだコンパイルエラーになるのでもうっかい
ctrl+1
でQuickFix
「プロダクトコードの実行(呼び出し)」を実装
-
(ここが個人的には印象深く、まだ実装してないコードを**使う側から先に書いちゃうんだ?**と思いました)
- 使う側から先に書くことで使いやすさを意識されたコードになるとのことです
-
当然コンパイルエラーになるので
ctrl+1
でQuickFix
プロダクトコード(FizzBuzzクラス)の実装
-
ローカル変数の型を「FizzBuzz」に変更
- FizzBuzzクラスもこの時点では存在しません。
-
当然コンパイルエラーになるので
ctrl+1
でQuickFix -
FizzBuzzクラスには
convert
メソッドがまだなくコンパイルエラーになるのでctrl+1
でQuickFix -
まだコンパイルエラーが残っているので更に
ctrl+1
でQuickFix
動画ではざっと、こんな流れでコーディングされていました。
私自身は普段のコーディングの順番やEclipseの操作と結構違う点もあったので、**おお!**と思いました。
まとめ
- **QuickFix(ctrl+1)**を多様しできるだけEclispeに自動生成させると手数が少なくなる
2. 先にコンパイルエラーになるコード(使う側で存在しないクラスやメソッド)を書いてQuickFixで自動生成 - 使う側から考えるので使いやすいコードを考えることになる
3. 本記事の趣旨とはズレますが、テスト駆動のメリットとして動画では印象深く紹介されてたので。ここでも上げて起きます。
4. (使う側からコードを書くので、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とかも選べる。