javatry (じゃゔぁとらい)

概要

Javaの "わりと初心者" の方からできるエクササイズです。(DBFluteは登場しませんが、プログラミングの基礎スキルがあってこそフレームワークが使いこなせるものです)

ブログでも詳しく紹介しています。

こんな方にオススメ

  • Javaの本は少し読んでみた程度のプログラミング初心者
  • 他のプログラミング言語は少しやってるけど、Javaは知らない
  • Java何年も書いてるけど、クラス設計や例外ハンドリングなど不安

と、一応は書いてみましたが...

Javaの経験に関係なくプログラミングの基礎的なエッセンスを学びたい方にオススメです。

ハンズオンで学ぶ

実際に、Javaを書いて動かせる環境を作って学んでいくハンズオンです。

図 : javatryの環境 javatryの環境

クイズ形式のエクササイズ

まずは、クイズ形式のエクササイズで準備運動しましょう。

e.g. クイズ形式のエクササイズ @Java
/**
 * What string is sea variable at the method end? <br>
 * (メソッド終了時の変数 sea の中身は?)
 */
public void test_variable_reassigned_basic() {
    String sea = "mystic";
    String land = "oneman";
    sea = land;
    land = land + "'s dreams";
    log(sea); // your answer? => 
}

コーディング形式のエクササイズ

そして、コーディング形式のエクササイズでコードも書いていきましょう。

e.g. コーディング形式のエクササイズ @Java
/**
 * What is color name length of first color-box? <br>
 * (最初のカラーボックスの色の名前の文字数は?)
 */
public void test_length_basic() {
}

 ↓↓↓

public void test_length_basic() {
    List<ColorBox> colorBoxList = new YourPrivateRoom().getColorBoxList();
    String answer = colorBoxList.stream()
            .findFirst()
            .map(colorBox -> colorBox.getColor().getColorName())
            .map(colorName -> colorName.length() + " (" + colorName + ")")
            .orElse("*not found");
    log(answer);
}

javatryの環境構築

エクササイズの実施さえできれば、必ずしもこの手順でなくてもよいです。

ここでは、自身のエクササイズ結果をgitで管理するために、Github上でのフォークを使った手順を書いています。

(0. IDE, Eclipse/IntelliJの用意)

Eclipseの場合、以下のエディションとプラグインがオススメです。

  • Eclipse IDE for Java Developers をダウンロード (Enterpriseじゃなくて十分)
  • Helpメニューの Eclipse Marketplace... で Quick JUnitプラグインをインストール
Download Page
https://www.eclipse.org/downloads/packages/

IntelliJの場合、特にオススメのエディションとプラグインはありません。

1. 本家javatryリポジトリをフォーク

本家javatryリポジトリを、自身のGithubアカウントにフォークします。

Github Repository
https://github.com/dbflute-session/javatry

※もし、社内限定のgitリポジトリなどにjavatryが用意されている場合は、そちらを利用しましょう。

2. フォークしたjavatryリポジトリをgit clone

自身のGithubアカウントにフォークしたjavatryリポジトリをgit cloneします。

場所は任意ではありますが、「どこにcloneしたか忘れてしまった」にならないようにしましょう。

e.g. javatry用のworkspaceディレクトリ @Directory
~/works
    |-dbflute
       |-eclipse-dbflute
       |-workspace  // 例えばここ

もしGit操作がよくわからない方で、Eclipseを使っている方は、参考になるドキュメントがあります。

3. Eclipse/IntelliJなどでimport

Eclipse や IntelliJ などの IDE にて、git cloneされた javatry を import しましょう。

(Eclipseの方は) メニューの File - Import... から Existing Projects into Workspace で clone したディレクトリを指定すればOKです。 (.projectがすでにgitにコミットされている状態なので)

(IntelliJの方は) ImportよりもOpenの方が良いかと思います。IntelliJのバージョンにも寄るかもですが、Importだとハンズオンで用意している.ideaディレクトリが上書きされてしまうかもしれません。 (でも、Importでやってしまった場合は、.ideaディレクトリの上書きされたファイルをgitから復元すれば大丈夫です)

4. テストメソッドの実行で動作確認

動作確認のために、Step01VariableTest.java をIDE上のエディターで開き、最初のテストメソッドである "test_variable_basic()メソッド" をテスト実行してみましょう。 テストメソッドの実行方法は、後述しています。

実行してコンソールに "mystic" と出力されたら環境構築成功です。

5. IDEの設定

IDE上の設定は任意ですが、オススメの設定を少し書いておきます。

Eclipseなら

Eclipseのおすすめワークスペース設定をやっておきましょう。
(特に補完テンプレートとパッケージの見た目表現はぜひ)

IntelliJなら

IntelliJ用の補完テンプレートも用意しています。
(Eclipseに比べて少ないですが...)

javatryの進め方

Step01から進めていく

src/test/java 配下の org.docksidestage.javatry パッケージに、エクササイズのクラスが用意されています。 まずは、Step01VariableTest.javaをエディターで開きましょう。

e.g. classes for javatry exercise @Directory
src/test/java      // テストコードのディレクトリ、エクササイズはこちら
 |-org.docksidestage
 |  |-javatry      // エクササイズのパッケージ
 |  |  |-basic     // 基本エクササイズのパッケージ
 |  |  |  |-Step01VariableTest.java     // 最初のエクササイズ、変数について
 |  |  |  |-Step02IfForTest.java     // 次のエクササイズ、if文/for文について
 |  |  |  |-...
 |  |  |
 |  |  |-colorbox  // カラーボックスチャレンジのパッケージ
 |  |  |-debug     // デバッグチャレンジのパッケージ
 |  |  |-framework // フレームワークチャレンジのパッケージ
 |  |-unit     // xxx
 |
 |-...

クラスのJavaDocを読んで、ぜひauthorを

クラス宣言 (public class クラス名) の直上のコメントを、クラスのJavaDocと呼びます。 エクササイズに関する説明などが書いてあるので、まず最初に読みましょう。

e.g. javadoc of Step01VariableTest.java @Directory
/**
 * The test of variable. <br>
 * Operate exercise as javadoc. If it's question style, write your answer before test execution. <br>
 * (javadocの通りにエクササイズを実施。質問形式の場合はテストを実行する前に考えて答えを書いてみましょう)
 * @author jflute
 * @author your_name_here
 */
public class Step01VariableTest extends PlainTestCase {

javatryでは、クラスのJavaDocコメントに author を付けてもらうようにしています。 "@author your_name_here" の your_name_here の部分を自分の名前に修正しましょう。

ハンズオンのjfluteレビュー - 最低限のJavaDoc
e.g. changing your author @Directory
...
 * @author your_name_here
 ↓
 * @author sea

メソッドのJavaDocを読んで、エクササイズ!

"test_" で始まるpublicメソッド 一つ一つがエクササイズです。 メソッドのJavaDocに要件が書いてあるので、それを読んで実施していきましょう。

e.g. read javadoc of method, do your exercise @Directory
/**
 * What string is sea variable at the method end? <br>
 * (メソッド終了時の変数 sea の中身は?)
 */
public void test_variable_basic() { // first exercise
    String sea = "mystic";
    log(sea); // your answer? => mystic
}

/** Same as the previous method question. (前のメソッドの質問と同じ) */
public void test_variable_initial() { // second exercise
    String sea = "mystic";
    Integer land = 8;
    String piari = null;
    String dstore = "mai";
    sea = sea + land + piari + ":" + dstore;
    log(sea); // your answer? => 
}

エクササイズは、主に二つの形式で構成されています。

クイズ形式
コードを読んで質問に答える
コーディング形式
コードを書いて要件を満たす

クイズ形式のエクササイズ

エクササイズの流れ

JavaDocに 質問 が書かれていた場合は、クイズ形式です。

  1. コードを読んで、your answer に答えを書く e.g. your answer? => [答え]
  2. メソッドを実行してコンソールに表示される答えを見る
  3. 学ぶ
e.g. read javadoc of method, do your exercise @Directory
/**
 * What string is sea variable at the method end? <br>
 * (メソッド終了時の変数 sea の中身は?)
 */
public void test_variable_basic() { // first exercise
    String sea = "mystic";
    log(sea); // your answer? => 
}

コードを読んでanswer

コードを読んで、answerを書きましょう。

e.g. write your asnwer there @Directory
...
log(sea); // your answer? => 
 ↓
log(sea); // your answer? => mystic

実行してログを確認

そして、テストメソッドを実行して、コンソールに出力されるログ (log()によって出力される文字列) を確認しましょう。

クイズ形式の学び方

ただ、学び方は自由です。プログラミングの本を読みながらでもいいですし、インターネットで調べながらでもいいですし、答えを見てから考えてもいいです。 大事なのは、解答することではなく、理解をしてスキルアップすることです。

合ってても間違ってても、学んだことがあればコード上にメモっておくと良いでしょう。 レビューワーがいる場合は、それで補足をもらえたりするかもしれません。

e.g. write your study there @Directory
...
log(sea); // your answer? => rhythm(x) => mystic(o)
// これこれこうだと思ったけど、実はこういうことらしくてこうだった、なるほど

...
log(sea); // your answer? => mystic(o)
// 予想は合ってたんだけど、調べてみるとさらにこういうことのようだ、へー

コーディング形式のエクササイズ

エクササイズの流れ

JavaDocに コーディング要件 が書かれていた場合は、コーディング形式です。

要件の通りに、コードを追加/修正していきましょう。

e.g. read javadoc of method, do your coding exercise @Directory
/**
 * Change foreach statement to List's forEach() (keep result after fix) <br>
 * (foreach文をforEach()メソッドへの置き換えてみましょう (修正前と修正後で実行結果が同じになるように))
 */
public void test_iffor_refactor_foreach_to_forEach() {
    List<String> stageList = prepareStageList();
    String sea = null;
    for (String stage : stageList) {
        if (stage.startsWith("br")) {
            continue;
        }
        sea = stage;
        if (stage.contains("ga")) {
            break;
        }
    }
    log(sea); // should be same as before-fix
}

コーディング形式の学び方

明らかに理解してコーディングできた場合は良いですが、レビューワーがいるのですれば、コードを見てもらってアドバイスをもらうと良いでしょう。

javatryのリポジトリをフォークしている、他の方のコードを読むのも勉強になります。

テストメソッドの実行方法

Eclipse上での実行

Quick JUnitプラグインが入っていれば...

メソッド内にカーソルを置いて control + 0 (ゼロ) を押すと、そのメソッドだけ実行できます。

Quick JUnit は、Eclipse上のメニューの Help - Eclipse Marketplace... において、"Quick JUnit" で検索すれば簡単にインストールできるはずです。javatryでは強くオススメします。

Quick JUnitが入ってないと?

Quick JUnit を使わなくても、右クリックメニューの Run As から実行できますが、対象のメソッドだけでなく、クラス内のすべてのメソッドが実行されてしまう可能性があるので、ログが見づらいです。 javatryでは、Quick JUnit の利用を強くオススメします。(Eclipseのバージョンに依るかもしれません)

IntelliJ IDEA上での実行

対象メソッドの宣言部分から、何かしらクリックして簡単に実行できるはずです。オフィシャルドキュメントを参考にしましょう。

コーディングポリシー

コーディングポリシーを用意していますので、意識しながら実装しましょう。

jfluteレビュー

もし、jfluteのレビューを受ける方は、以下のページを必ずご覧ください。