2:Java式と演算子 〜とある本の学習+アルファ〜

2章 式と演算子

ここから先は、次のような形で学習していきます。

  1. コードを書き写す(写経する)※コピペ禁止
  2. プログラムを動かす
  3. 動かしたプログラムの内容を理解する

コードを書き写すのは、実際にコードを書くとコードの意味を理解しやすいからです。

コピーしてしまうと、塊でしか理解できないので、プログラムを読めるようになりません。当然自分でプログラムを書けるようにもなりません。

目的としては、プログラムを自在に組むことができるようになることなので、はじめのうちは写経するようにしましょう(笑)

計算の文

写経するコード

public class Main {
    public static void main(String[] args) {
        int a;
        int b;
        a = 20;
        b = a + 5;
        System.out.println(a);
        System.out.println(b);
    }
}

実行結果は自分で確認してください。

そして、次の単語を覚えます。

  1. リテラル、変数のこと = 「オペランド
  2. 「+」「*」「=」など = 「演算子

リテラルに関して

変数の型に関しては、理解できたと思いますが、変数を宣言したときの右側部分

// 変数の宣言
int number;// 数値
String moji;// 文字列

// 変数の初期化
double shosu = 0.0; // 数値
boolean isTrue = true;// 真偽値
String moji2 = "mojimoji";// 文字列
String moji3 = "1";// 文字列
String moji4 = "0.0";// 文字列

リテラルは文字列、整数型などの変数に値を設定する前。
つまりは、「=」の右側のことです。
「String a = "文字リテラル";」とか「int i = 10」などのような初期化をした時に出てくる右側部分です。つまりは、 「"文字リテラル"」と「10」がそれにあたります。

String moji = "文字リテラル";
int seisu = 10;

上のコードの場合は、文字リテラルが「"文字リテラル"」で整数リテラルが「10」になります。

細かい説明などはこちらの動画にしてありますので、よかったらどうぞ。※コードの実行も行なっております。

エスケープシーケンス

プログラムを書いている時に下のような処理を行いたいとします。

コンソール(標準出力)に「"(ダブルクォーテーション)」を表示する

この場合、「文字列を表すリテラルで『"(ダブルクォーテーション)』を使用しているので、エスケープしないとビルドエラーになります。

System.out.println("文字列の表示は"(ダブルクォーテーション)を使います”);

このような時に「”」をエスケープします、その方法が「バックスラッシュ(¥)」になります。

System.out.println("文字列の表示は¥"(ダブルクォーテーション)を使います”);

細かいことが書いてありますが、バックスラッシュでエスケープします。
バックスラッシュをエスケープする時は次のように書きます。「¥¥」

System.out.println("データの保存はC:¥¥fldに保存してください");

四則演算を行う

Javaプログラムで四則演算を、通常の計算を行います。

写経するコード

public class Main {
    public static void main(String[] args) {
        int a = 0;
        int b = 1;
        int c = 2;
        System.out.println(a + " + " + b + " = " + (a + b));
    }
}

上のコードを写経して実行してみてください。表示結果は省略します。

この時、

a + " + " + b + " = "

の部分は、数値が文字列に変換されます(暗黙的にキャストします)。このため

+ (a + b)

の部分も文字列の追加として扱うか、数値の計算として処理するべきかJVMがわから無くなってしまうので

(a + b)

のように、カッコをつけます。

これは、式の評価をする順番を意図的に変えています。

カッコをつけない場合

System.out.println(a + " + " + b + " = " + a + b);

式の評価は、全部が「+」演算子なので左から順に評価されていきます。

しかし、次のように、プログラムを修正した場合

public class Main {
    public static void main(String[] args) {
        int a = 0;
        int b = 1;
        int c = 2;
        System.out.println(a + " * " + b + " = " + a * b);
    }
}

数学で習ったように、掛け算の処理が先に行われます(評価されます)。なのでカッコがなくてもビルドエラーになりません。

キャスト

プログラムを実行している時に、「文字列を数値に変換したい」、「数値を文字列に変換したい」。というようなことが起きます。

例えば、占いプログラムを作るとします。

占いプログラムでは、ユーザーの生年月日を入力しますが、これは文字列です。

占いの判定をするのに、西暦部分と誕生月部分を足し算して、これを合計する必要があります。

このような時には、下のようにキャストしてやります。

String born = "1999/02/22";
int seireki = (int) "1999"; // ビルドエラー

// doubleとintは同じ数値なのでキャストできる
double d = (double) 12;

// 文字列は下のように変換する
int nen = Integer.parseInt("1999");

写経するコード2

public class Main {
    int r = new java.util.Random().nextInt(90);
    System.out.println("乱数の生成結果: " + r);
}

写経するコード3

public class Main {
    System.out.println("あなたの名前を入力してください。");
    String name = new java.util.Scanner(System.in).nextLine();
    System.out.println("あなたの年齢を入力してください。");
     int age = new java.util.Scanner(System.in).nextInt();
    System.out.println("ようこそ" + age + "歳の" + name + "さん");
}

このコードは、遊べるコードなので、たくさん遊んでみてください。

(例)

入力した値を判定して、数字かどうか区別する
IN: ABC
OUT: 数字ではありません
IN: 123
OUT: 数字です

上のような出力を行うプログラムを作成する。

他にもできることはたくさんあります。

三角形の辺の長さを入力してください。
1: ※入力値
2: ※入力値
3: ※入力値
三角形の面積=

今回はこんなところで失礼します。

でわでわ。。。

関連記事一覧

Java java.nio.Files 使い方~古いけどニューIO(アイオー)でCSV読み書き~

Java Filesを使う

java.nio

が使用できるようになって久しいですが、改めてファイル読み込みの処理を行おうと思います。

## CSVファイルの読み込み
CSVファイルはカンマ区切りのデータを保存するのに使用されます。よくMySQLやPoestgreなどのDBでも「CSV出力」とか「CSV読み込み」などを行います。

身近な例として、政府の[統計調査結果](https://www.e-stat.go.jp/help/dbview-4-20)などをCSVでダウンロードできたりします。

## CSV読み込み実装
CSVファイルを開いて、その中身を1行ずつ読み込みます。単純に読み込んで、コンソール(標準出力)に出力するだけの処理です。

なので、下のようなテストケースを実装しました。

1. 実装するメソッドは``readCsv()``です。
2. ``readCsv()``はstatic目祖度です。
3. 「D:\csv\c01.csv」というファイルを読み込見ます。
4. ファイルは文字コードが「SJIS」だったので文字コードを「SJIS」に指定します。

<テストコード>
```java
@Test
public void testReadCsv() {

List<String[]> res = CsvUtils.readCsv("D:\\csv\\c01.csv", "SJIS");
res.forEach(arr -> {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ", ");
}
System.out.println();
});
}
```

Assertは入れていない状態です。これから仕様を決めようというところです。

次は、実装するメソッドです。
1. 引数はファイルパスと文字コードの文字列です。
2. データを格納するListインターフェースに実体クラスの``ArrayList``を代入します。
3. ファイルパスから、文字コードを指定して読み取ります。
4. 取得した1行のデータにあるかもしれない「ダブルクォーテーション(\")」を空文字に置き換えます。(削除します)
5. 取得したデータ1行分をカンマ(,)で分解し文字列の配列に変換します。
6. 1行分のデータ(配列)をListに設定して返却します。
<実装コード>
```java
/**
* CSVファイルを読み込みListで返却する。
*
* @param filePath 読み込むファイルのパス(完全パス)
* @param encordName UTF-0, SJISなどのエンコード名
* @return String配列のList
*/
public static List<String[]> readCsv(String filePath, String encordName) {
List<String[]> dataList = new ArrayList<>();
try {
BufferedReader buf = Files.newBufferedReader(Paths.get(filePath), Charset.forName(encordName));
String line = null;

while((line = buf.readLine()) != null) {
dataList.add(line.replaceAll("\" ", "").split(","));
}
} catch (IOException e) {
e.printStackTrace();
}
return dataList;
}
```

とりあえずは、読み込みの処理ができました。
しかし、開いたファイルを閉じる処理が実装されていないので、あとで``buf.close()``を追加実装しました。

## 書き込み処理
上の読み込み処理の後に、返却される``List<String[]>`を引数にして`exportPath``にファイルを出力する処理です。

1. まずは、リソース読み込み用の``try~catch``を使用してファイルを書き込みで開きます。
2. リストから文字列の配列を取り出し、書き込みます。
3. 書き込みじは文字コードを「SJIS」に設定します。
4. 1行書き込んだら、次の行なので``newLine()``で次の行に進みます。

<書き込みの処理>
```java
/**
* List<String[]>のデータをCSV出力する
* @param dataList String[]配列のリスト
* @param exportPath 出力するCSVファイルのパス
*/
public static void exportCsv(List<String[]> dataList, String exportPath) {
try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(exportPath), Charset.forName("SJIS"));) {

StringBuilder build = new StringBuilder();
for (String[] data : dataList) {
build.setLength(0);
for (int i = 0; i < data.length; i++) {
if (i == data.length - 1) {
build.append(data[i]);
} else {
build.append(data[i] + ", ");
}
}
writer.write(build.toString());
writer.newLine();
}
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
```

以上で、読み込みと書き込みの処理ができました。

でわでわ。。。

DBの学習 ~JavaDBのセットアップ~

イントロダクション

基本情報技術者試験の学習をしていたら、データベースの学習に入りました。せっかくなので、JavaでDBの学習を使用と思った次第です。

JavaDB

JabaDBに関してはこちらを参照しました。です。

結論的には、Apache Derbyのサイトからダウンロードするということでした。

Settingup Derby

参照したページはこちらApacheDerbyのページです。

  1. ダウンロードしたファイル(db-derby-XX.XX.X.X-bin.zip)を展開します。自分はJDKのディレクトリに解凍しました。

  2. DERBYTUTOR というディレクトリをJDKの直下に作成しました。

    mkdir DERBYTUTOR

  3. 作成したディレクトリに移動する

    cd DERBYTUTOR

  4. SQLファイルをコピーする

    copy %DERBY_HOME%\demo\programs\toursdb*.sql .

    5.コピーしたファイルを確認する

    dir

  5. ij`コマンドを実行する。ただし、環境変数を設定しない場合は、`db-derby-10.14.2.0-bin\bin`に移動してから実行する。⇒`DERBY_HOME/bin

  6. 起動したら、CONNECT 'jdbc:derby:firstdb;create=true';のコマンドでDBコネクションを取得する。

  7. ダウンロードしたファイルを解凍、展開したディレクトリ(db-derby-10.14.2.0-bin)から、次の場所に「」があるのでそれをロードします。コマンドプロンプトで、ijコマンドを実行するディレクトリを上の場所にしてやれば次のコマンドでテーブルを自動で作成してくれます。

    run 'ToursDB_schema.sql'

    ちなみに、対象のディレクトリは下のようなファイルがあります。

とりあえずは以上です。今後SQLの実行など追記していきます。

でわでわ。。。

1:Javaプログラムの書き方 〜とある本の学習+アルファ〜

1章:ようこそJavaの世界へ

1.1 Javaによる開発の基礎知識

1.1.1 開発の流れ

①ソースコードの作成。

public class FirstCls {
  public static void main(String[] args) {
    System.out.println("Hello World");
  }
}

②コンパイル
javaファイルをclassファイルに変換することです。下のコマンドを使用します。

javac FirstCls.java

③実行
作成したクラスファイルを実行します。下のコマンドを使用します。

java FirstCls

1.1.2 開発環境の整備

※Eclipseはインストール済みの想定。
インストール方法

外観を変更する

  1. ウィンドウ→設定→一般→外観→色とテーマの順にクリック
  2. ここで好きなテーマを選択する
    ※大半の人がデフォルトで使用している

文字コードの変更(確認)

  1. ウィンドウ→設定→一般→ワークスペースの順にクリック
  2. 「テキスト・ファイル・エンコード」がUTF-8になっていることを確認

JDKの確認

  1. ウィンドウ→設定→一般→Java→インストール済みのJREの順にクリック
  2. JDKを指定して、使用するJREを決定する

1.2 Javaプログラムの基本構造

1.2.1 プログラムの骨格

Javaは「クラス」を基準にしてプログラムを起動します。
Javaを起動する時に、必要になるJDKには、JVM(=java.exe)があるので、JVMが下のように動きます。

  1. プログラムを起動するのに必要なライブラリなどの読み込み
  2. メインメソッドを持っているクラス探す
  3. メインメソッドを持っているクラスのメインメソッドを実行する

ルール:クラス名とファイル名は同じ名前にする
「クラスの中にメソッドがある」

/** クラスの説明 */
public class クラス名 {
  /** メソッドの説明 */
  public static void main(String[] args) {
    // 何かしらの処理
  }
}
  • 中かっこ(「{」「}」)のことを「スコープ」と呼びます。スコープで囲っている部分を「ブロック」などと呼んだりします。

  • このスコープ(=「ブロック」)を開いたら(開始したら)、必ず閉じる(終了する)ことを意識する

  • 中かっこ(「{」「}」)で囲っている部分がそれぞれクラスの範囲、メソッドの範囲を決めている

上のサンプルコードでは「クラス名」クラスの中に「メインメソッド」がある

ちなみに、インデント(スペースやタブで位置をずらすこと)を入れないと、とても見にくい

何が見にくいというと、クラスの範囲と、メソッドの範囲を区別しずらいのです。

<インデントなし>

/** クラスの説明 */
public class クラス名 {
/** メソッドの説明 */
public static void main(String[] args) {
// 何かしらの処理
}
}

1.2.2 プログラムの書き方

Java言語(C言語も)の場合は、メインメソッドが起動しますので、クラスの中にメインメソッドを作成する

Javaはメインメソッドが動く

  1. どのようなプログラムを作りたいかを考えます。

  2. プログラムの名前を決めます。

  3. 「クラス名.java」という名前でファイルを作ります。

  4. 下のような、ソースコードの外側を記述します。

    /** クラスのJavaDocコメント */
    public class クラス名 {
    /** メインメソッドのJavaDocコメント */
    public static void main(String[] args) {
    // 処理の中身:通常のコメント
    /*
     * これも通常のコメント、あまり使われない。
     */
    }
    }
  5. ソースコードの中身を描きます。

    System.out.println("Hello World!");

     1.2.5 mainメソッドの中身

  • 上の骨格の「何かしらの処理」の部分に処理を描く。
  • 処理は上から下へ進み、1行の中では左から右へ進む
  • セミコロン「;」で1行が終わる
  • ドット「.」は参照呼出し
public static void main(String[] args) {
  System.out.println("Hello World");
}

上のコードは、Systemクラスから変数「out」を呼び出し、メソッド「println()」を呼び出している

練習:SecondProgram

写してください。以下のコードを書いて動かしてください。

public class SecondCls {
  public static void main(String[] args) {
    System.out.println("*** Second Program ***");
    System.out.println("日記ソフト");
    System.out.println("終了します。");
  }
}

実行方法は以下の通り

  1. SecondCls.javaファイルを作成する

  2. 「ウィンドウズボタン+R」を押下してコマンドプロンプトを開く

  3. javacコマンドでクラスファイルを作成する

    javac SecondCls.java
  4. javaコマンドで作成したクラスファイルを事項する

    java SecondCls

1.3 変数宣言の文

1.3.1 変数宣言の文とは?

ズバリ下のように書きます。

  1. 変数の宣言
    // 「宣言」:データ型 変数名;
    int hensuMei;
  2. 変数の初期化
    // 「初期化」データ型 変数名 = 代入するデータ
    int dataGata = 0;

1と2の違いは、宣言と同時に値を代入するかしないかです。

==変数の宣言と初期化==

public static void main(String[] args) {
  // 変数の宣言
  int num;
  // 変数の代入
  num = 0;
  // 変数の初期化
  int age = 12;
  // 命令実行の文=メソッドの呼び出し
  System.out.println("対象年齢は" + num + "~" + age + "です。");
}
  • 「変数に値を代入するとき」は「=」を使用する。
  • 「命令の文」は「メソッド呼び出し」を行う

1.3.2 変数の名前(識別子)

==英語では==

変数=Valiable

名前つけのルール

予約語は使用しない(予約後の一覧)

abstract assert boolean break byte
case catch char class const
continue default do double else
enum extends final finally float
for goto if implements import
instanceof int interface long native
new package private protected public
return short static strictfp super
switch synchrnized this throw throws
transient try void volatile while

宣言(初期化)済みの変数名は使用できない

大文字・小文字は区別される

変数名・メソッド名はキャメルケースを使用する

// 変数名のキャメルケース(頭を小文字にする)
int myAge;
// メソッド名のキャメルケース(頭を小文字にする)
public void methodName();

クラス名はアッパーキャメルケース

/** クラス名は頭を大文字にする */
public class ClassName {
}

演算子で使用している文字、予約語は変数名(クラス名)として使用できない

==計算処理==

public static void main(String[] args) {
  // 足し算
  int tashizan = 1 + 1;
  // 引き算
  int hikizan = 1-1;
  // 掛け算
  int kakezan = 1 * 1;
  // 割り算
  int warizan = 1 / 1;
}

1.3.3 データ型

※あくまでも使用例として紹介しています。
==プリミティブ型データの変数型==

  • byte ファイル・ネットワーク通信時に使用
  • int 整数データを格納するのに使用
  • long 大きな整数値を格納するのに使用
  • float 画像処理、3Dモデル描画時に使用
  • double 少数データを格納するのに使用
  • char 1文字分のデータ、シングルクォーテーション「`」で囲む

==参照型データの変数型==

  • String 文字列
  • そのほかJavaAPIや自作のクラス名
    List list; // List型の変数「list」

1.3.5 定数の利用

変数には値を何度でも代入できるので、定数を使用して値を変更できないようにする。

final データ型 変数名 = 代入するデータ

ルール:定数は大文字の変数名にする

final int OVER_TEN = 0; // 値が10以上を示すフラグ
final int UNDER_TEN = 1; // 値が10以下を示すフラグ

定数の使用例:フラグに使う

public static void main(String[] args) {
    final int OVER_TEN = 0; // 値が10以上を示すフラグ
    final int UNDER_TEN = 1; // 値が10以下を示すフラグ
}

1.5 練習問題+α

コマンドプロンプト上に下のような図を表示するプログラムを作成してください。
※ 「=」の数が、上下ともに20あります。
<出力する図>

      *
    *   *
  *   *   *
      *
      *
  *   *   *
    *   *
      *

====================

Ajile開発手法

イントロダクション

Ajile開発のワークショップに行ってきました。
とても、有意義かつ、勉強になったワークショップでした。
そんなわけで、学んだことをまとめます。

早い話が、こーゆーやり方すると効率的に開発が進められるというものでした。

Ajile開発とは

早い話が、動くものを作りましょう

と言うことですが、はじめからみんなそう考えてるのでは?と疑問に思うと思います。それは歴史的な経緯があります。

歴史的な経緯

昔は、パソコンがなかったので、コードを一度にコードを書ける人(コンピュータにプログラムを実装する人)が限られていました。1人一台のパソコンは無かったので大きなコンピュータしかなく、現代の様にみんなでワイワイとコードをかけませんでした。

しかし時代は変わり1人一台のパソコンを使用して巨大なシステムの実装が可能になり、それが普通になってきました。

昔のやり方

1人しかコードの実装ができないので設計レベルでしっかり作り後はコードを書くだけで良い形をとっていました。が、システムが巨大になり、昔のやり方では追いつかなくなってきました。なので下のように実装してました。

  1. どのように動くのか、仕様を決める
  2. 設計をする
  3. 実装する
  4. テストする
  5. リリース

今のやり方

  1. どのように動くのか、仕様を決める
  2. テスト仕様を作る
  3. 設計をする
  4. 実装とテストを並行して行う
  5. リリース

テストがはじめの方に来ます。

これで何が変わるのか?ズバリ実装が終わってからの仕様偏向が減ります。

仕様変更は、色んな原因で発生しますが、少なくとも設計ミスでの仕様変更はテスト中に発見できるので、作業の手間が減ります。その他色んなメリットがありますが、「やった事がない」という理由で日本には浸透していません。。。(2021年現在)

Wikiを参照すると下のようなものでした。

アジャイルソフトウェア開発手法の多くは、反復 (イテレーション) と呼ばれる短い期間単位を採用することで、リスクを最小化しようとしている。 1つの反復の期間は、プロジェクトごとに異なるが、1週間から4週間くらいであることが多い。
アジャイル開発手法においては、開発対象を多数の小さな機能に分割し、1つの反復 (イテレーション) で1つの機能を開発する(⇒反復型開発)。そして、この反復のサイクルを継続して行うことで、1つずつ機能を追加的に開発してゆくのである。また、各々の反復は、小規模なソフトウェア開発プロジェクトに似ている。なぜなら、計画、要求分析、設計、実装(コーディング)、テスト、文書化といった、ソフトウェアプロジェクトに要する全ての工程を、1つの反復内で行うからである。

そして、まとめると開発の作業範囲を限定して、細かく作業を分けて、その単位で開発を行うということです。

具体的に

例えば、コンソール出力版テキストRPGを作成するプロジェクトがあったとします。その時に作成するべき内容は以下の通りです。※自分で作成するのにこのような仕様にしました。

作成する項目(仕様)(TextRPG)

  1. 戦闘シーンを作成する(単体のモンスターと)
  2. 複数モンスターとの戦闘
  3. 仲間を加え戦闘することができるようにする
  4. プレーヤーがレベルアップできるようにする
  5. ストーリー展開のシーンを表示できるようにする
  6. タイトルを表示をできるようにする
  7. ストーリー展開と戦闘シーンの切り替えをできるようにする
  8. タイトルとストーリー展開シーンの切り替えをできるようにする
  9. タイトル~戦闘シーンまでの切り替えをできるようにする
  10. ストーリー展開シーンの中でストーリーを進行させることができるようにする
  11. 装備などでステータスを、変更できるようにする
  12. 町などで、買い物ができるようにする
  13. アイテムの使用ができるようにする(戦闘シーンも含む)
  14. エンディングを表示できるようにする

上記のように、各仕様に対してその実装を行うのですが、その仕様でちゃんとアプリケーションが動くように作成していきます。つまりは、以下の様なバージョン分けを行い「このレベルで動くアプリケーション」と言う区切りを設けて作り込んで行きます。

そして、ポイントになるのがテスト駆動開発です、それは、各仕様を実装していくのに、先に仕様を決めて、その通りに動くか確認しながら実装していくためです。そして、実装した部分を修正し続けていく必要があるため他に影響が出ないか確認するです。

ここで、テスト仕様から作成し、動きを確かめながら実装してくのもそうですが、修正するときに「テストが通ればどんな修正でもOK」という形にしておけば修正も楽だしレビューだって楽にできる状態になります。
つまり、レビューワーはテスト仕様がちゃんと組まれているか?を確認、テストの実行結果もOKということを確認するだけでよいのです。

「楽」というのは、作業時間が少なくて済むということです。空いた時間はほかの作業を行えばよいので仕事にも余裕ができます。

テスト駆動開発に関してはこちらの記事に詳細を記載しています。

Java ミニゲーム ソース付き 〜テスト駆動開発:文言出力部品を作る〜

JUnitの使い方~テストクラスの作成と実行~

スクラムフレームワーク

アジャイル開発の現場では「スクラム」というフレームワークを使用することが多いようです。リンク先はWikiです。
このフレームワークは、下のようなフローで作業を行うと作業効率がよく、作業員が成長できるというスグれものです。Springなどのフレームワークと違いプログラミング用のフレームワークではありません。

スクラムに登場する役割

  • 開発チーム: プログラマーチーム
  • プロダクトオーナー: 製品の総責任者。 顧客の意思の代表としての役割を担う。
  • スクラムマスター: チーム内外の組織間調停( ファシリテーション )と外部妨害を対処することとされる。顧客側で担当することが多い。

作業その1:バックログの作成

製品に対する「要求」を作成すること、上の仕様がこの部分に当たる。
上の仕様は、大まかなものなので、これらの仕様を実現するための仕様(タスク)を実現するために「スプリント」という期間を作り、対応する。

作業その2:スプリントの作成

スプリントは上記の「要求」を実現するための「タスク」を切り出して、特定の期間内で完了するための作業です。バックログを作成(タスク切り出し)→スプリント(実行項目切り出し)というような流れになります。

スプリントプランニング

  1. チームはスプリントで実現するバックログの項目を選択
  2. 選択したバックログ項目を実現するためのタスク化を行う
  3. チームが共同でタスク化する過程で、チーム内メンバーの認識差異がないことを最終確認する。

デイリースクラム

  1. 毎日スクラム会議を開く。
  2. 平日の決まった時間に決まった場所で行う。また、15分以内で完了させなければならない。
  3. スクラムマスターは、必ず出席、チーム全員に対して、以下の質問を行う
      1. 「前回のスクラム会議以降、何をしたか」
      1. 「問題はあるか」
      1. 「次回のスクラム会議までに何をするか」
  4. 問題があると報告された場合、スクラムマスターは、即座に意思決定する責任を負う。問題が外的要因によるものである場合、スクラムマスターが、その解決の責任を負う。

プロダクトバックログ・リファインメント
実際に行う作業の見積もりを行う、作業量がどのくらいか?期間内で完了できるか?を見積もるのにポイントを振り分ける。
初めて、行う作業に関しては、実際にポイントを振って行いその結果「XXポイント」でどのくらいの時間が必要だったか?の平均をとり、おおよその見積もりを取る。
(例)

  1. タスクA,B,Cとあったときに基準にするタスクを決めポイントを割りふる。この時は直感で判断して良い。そして。チーム内でそのポイントを割り振った理由を言う
  2. 基準にしたタスクから「これぐらい」という見積もりをチームのメンバー内で話し合いで決める。この時に時間をかけないように注意する。
  3. 実行してみて、その結果、ポイントの消化がどれくらいでできたか?の平均値を取り基準にする

スプリントレビュー
スプリントレビューでは、スプリントで開発されたソフトウェアのレビューが行われ、必要に応じて、新たなバックログ項目が追加される。つまり、参加者の中に顧客がいるのでレビュー時に追加の要望などが出てきたりする。
このレビューには、顧客、マネージャ、開発者が参加する。
なお、場合によっては、営業やマーケティング関係者も参加する場合もある。

スプリント・レトロスペクティブ(振り返り)
振り返りを行う。その振り返りのフレームワークとして以下のものがある。
各項目に対して意見をメンバーで出して、それを話し合い次のスプリントへつなげる

  • KPT: Keep, Problem, Try
  • YWT: やったこと、わかったこと、次にやること
  • FDL: Fun(面白かったこと), Done(やったこと), Learn(学んだこと)

モブプログラミング

実装者一人、他は全部レビューワー。の形で実装を進めるプログラミング方法。

実装者の技術レベルが近く、互いに切磋琢磨できる関係ができていればとても有意義なプログラミング手法。

実際にやってみて面白かった。

また、技術レベルが離れている状態で行った場合には実践的な指導ができる。

ペアプログラミング

これも、上記同様実装者一人、レビューワー一人で実装を行う。

まとめ

スクラムフレームワークを使用してチーム開発を行うときに下のようなツールを使用するとやり易い。

  1. Gitなどのバージョン管理ソフト
  2. 意見交換するためのツール、ウェブホワイトボード、スケッチブックなど
  3. 時間の管理を行うタイムキーパー
  4. チームの活動を見守る人

自分の参加したワークショップは仕事ではなく、「学習」だったのでとても楽しかったが「仕事だと楽しくないよな。。。」という意見もありました。

最も作業効率が良く、生産性の高い現場というのは、「楽しく仕事ができる」というところだと思いました。

また、テスト駆動開発がちゃんと出来ていれば、仕様変更に対してもすぐに対応可能だという事に気がつきました。

具体的には、仕様変更があったときに、どの部分を修正するか確認したら、既にあるテストクラスに修正点を確認するコードを書き、それが通れば仕様変更完了になる。という事です。

もちろん。自動テストで、周りに影響がない事を確認します。

でわでわ。。。

関連ページ一覧

EclipseセットアップWindows版

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseにCDTをインストール〜
  3. Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 〜GitからソースをPullしよう〜
  3. IntelliJ IDEA Git〜Gitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜