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上でのフォークを使った手順を書いています。

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

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

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

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

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

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

git cloneができれば、gitクライアントは何でもよいです。もし、EclipseやIntelliJなどで直接git cloneとimportを同時にやってもよいです。

3. Eclipse/IntelliJなどでimport

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

javatryは、Mavenと呼ばれるビルドツールで管理されています。利用しているIDEで、ビルド環境を有効にしましょう。 IDEのバージョンやエディションにも依りますが、自動的に解決されることも多いです。

最初は、依存ライブラリを自動ダウンロードするので、少し時間がかかる可能性があります。

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

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

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

option: 好みもあるけどオススメの設定

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

Package Presentation の調整 (Eclipseの場合)
Eclipseのデフォルトは、Package Presentation が Flat で、パッケージがたくさんあるプロジェクトだと、ずらーっと並んで見づらいと感じることがあります。 特にjavatryはパッケージ階層が多いので Hierarchical の方が扱いやすいかもしません。
Hierarchical に変更する場合は、(Javaパースペクティブの) パッケージエクスプローラの右上の下矢印っぽいマークの部分 (View Menu) から、Package Presentation の Hierarchical を選択します。
エディターテンプレートを設定
入れておくと何かと便利なコード補完のテンプレートを設定しましょう。
Eclipseの場合、Preferences の Java - Editor - Templates を選択。 まず、既存のテンプレートをすべて選択して、Remove してください(これをやらないと二重に登録される可能性あり)。 そして、"Import..." にて [javatryプロジェクト]/etc/tools/eclipse/java-editor-templates.xml を取り込んでください。 コード書くときに色々と良いことがあります。
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 の部分を自分の名前に修正しましょう。

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()によって出力される文字列) を確認しましょう。

クイズ形式の学び方

ただ、学び方は自由です。プログラミングの本を読みながらでもいいですし、インターネットで調べながらでもいいですし、答えを見てから考えてもいいです。

大事なのは、解答することではなく、理解をしてスキルアップすることです。

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

エクササイズの流れ

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上での実行

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