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〜クラスとは〜

開発環境構築~Windows版Eclipseの設定~

Index

Install Eclipse

MergeDocからダウンロードします。

最新版のものを選択します。すると下のようにダウンロードするEclipseを選択できる部分が見つけられるので、迷ったら「Standerd Edition」を選択しましょう。細かいプラグインなどはいつでもインストールできます。※これでも結構なプラグインが入っていました。

そして、ダウンロードが始まらない場合は、リンクの部分をクリックします。

今回は、「20200702.zip」というファイルをダウンロードしました。
ダウンロードしたら、Cドライブ直下(C:)に解凍します。パスが長くなってEclipseが動かなくなる可能性があるためです。

ちなみに、自分の場合ZIPファイルの解凍ができなくてつまずきました。
7ZIPをインストールして実行したらうまくいきました。ちなみに回答したのは。「D:\」です。なので解凍後は「D:\pleiades」となりました。

Eclipseを動かす

試しに、eclipse.exeを起動してみてください。うまく動けばそれでよし。もし動かない場合はエラーメッセージが出るのでそれをちょっと眺めます。

早話が、「JDK(JRE)がないですよ!」というエラーです。JDKをダウンロードしてください。
解凍したフォルダにある「eclipse.ini」を開きバーチャルマシン=JDKを設定します。(追記してください。)

ちなみにエラーログの場所は以下になります。
WORKSPACE_HOME/.metadata/.log
自分の環境だと以下になります。

D:\pleiades\workspace.metadata.log

-vm
JAVA_HOME¥bin¥javaw.exe

ファイルを開く設定


JDKがない場合は

  1. OracleのHPからダウンロードできます。※この場合はOracleのユーザー登録が必要です。

  2. OpenJDKを開いてほしいバージョン番号(widows 64bit jdk8)を選択します。

  3. eclipse.iniの設定を行う。

    • 使用するJVM(JDK)を指定します。

      -vm
      D:/Apps/jdk1.8.0_265/bin/javaw.exe
    • 使用するメモリの指定を行います。

      -vmargs
      -Xms512m # メモリの最小値
      -Xmx1024m # メモリの最大値

      最終的に以下のようになりました。

-vm
D:/Apps/jdk1.8.0_265/bin/javaw.exe
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Xms512m
-Xmx1024m
-Dosgi.requiredJavaVersion=1.8
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.dataAreaRequiresExplicitInit=true
-Xverify:none
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-javaagent:lombok.jar

しかし、これで終わりではありませんでした。JDKが32bit版だったようで下のようなエラーが出ました。

なので、再度64ビット版をダウンロードしました。amazonのページでした。

これで自分のところではEclipseの起動ができました。

Setting Eclipse(ウィンドウ→設定)

Eclipseの設定を行います。
初めにEclipseを起動するとワークスペースの場所を聞かれます。
特に気にしないのであれば、そのままの値でワークスペースを作成して問題ありません。

そして、起動すると下のような画面が見れます。

外観→フォントの設定

JREの設定

JREとは、Java Runtime Environmentのことでようは、Javaを起動するためのファイルです。

  • JREはJavaを動かす。
  • JDKはJava開発をする。※JDKはJREを含んでいます。

不要なプラグインの削除・追加

ヘッダーメニューから。。。
Help(ヘルプ) -> Market Place(マーケットプレイス)を開く
すると下のように、追加するプラグインを検索する画面が見れます。
MarketPlace

そして、インストール済みのタブを選択します。
InstalledPlugin

引き続き、不要なプラグインを選択
noNeedPlugin

変更と表示されているプルダウンからアンインストールを選択し不要なプラグインを削除します。

更新(プラグインのアンインストール)を適用するのにEclipseの再起動を行います。

設定→Java

ウィンドウ→設定で選択すると設定する項目が出てきます。その中の「Java」内にある項目に関して記述します。

プロジェクトの作成From Github

Githubにあるリポジトリからプロジェクトを作成します。
まずは、Githubにて、プロジェクト用リポジトリを作成します。
gitRepo1

そして、Codeとある部分をクリックすると下のようにダイアログが出ます。
dialog1
ここからURLをコピーします。

今度はEclipseに戻り、プロジェクトのインポートを選択します。
pachageExp

すると、下のようなダイアログが開くので、Gitからプロジェクト(スマートインポートでもどちらでもよいが今回はスマートインポートを選択しました。)
gitImport1

次は、クローンを選択します。
gitImport2

そして、先ほどコピーしたGihubのリポジトリURLを貼り付け,
Githubのユーザーとパスワードを入力します。
clone1

「セキュアストアに保管」にチェックを入れると毎回入力しなくてよいです。

そして、間違いがなければ下のように対象になるブランチが表示されますので、次へ進みます。
clone2

クローンする場所(ローカルリポジトリ)は下のような場所に設定しました。サブモジュールのクローンにチェックを入れ忘れないようにしてください。 ※今回は、サブモジュールがないので関係ありませんが。。。
clone3

クローンの完了です。
clone4
workspace2

Javaのソース配置

ここまで来たらJavaコードを書きたいのですが、パッケージなどの配置先をどのようにするか?を決めないといけません。
とりあえず、プロジェクトがJavaプロジェクトになっていないのでMavenプロジェクトに変更し、パッケージ構成を作成します。

  1. プロジェクトを右クリック
    構成 > Mavenプロジェクトへ変換

  2. 「src/main/java」と「src/test/java」というフォルダができるのでそれぞれ、メインの実装、テストクラスの実装用に使用する
    maven1

  3. パッケージを作成し、その配下にJavaソースを作成、とりあえずはHello Worldを実行して問題なくJavaを起動できることを確認
    ResultHelloWorld

パッケージの作り方

  1. パッケージを作成する場所を右クリック(srcフォルダを右クリック)

  2. パッケージ名の入力(jp.zenryoku.sample)

  3. パッケージが作成されたことを確認

ライブラリの追加方法

Mavenを使用して、ライラ理を尽かする方法はまた別ですが、Eclipseで直接ライブラリを参照する方法です。

一般→Glance

Glanceとはインクリメンタルテキスト検索を提供するプラグインです。これの設定を行います。

一般→UIフリーズ・モニター

UI 応答性モニタリングを有効にすることができます。これにより、UI のフリーズが自動的に検出され、スタック トレースがキャプチャされ、収集された情報を含む警告またはエラー メッセージが Eclipse に書き込まれます。

一般→ウェブブラウザ―

下のように、使用するブラウザを設定することができる。

一般→エディタ→テキストエディタ

  • 行番号の表示非表示
  • ファイル拡張子に対応してどのエディタを起動するか?
  • ハイパーリンク
  • クイックDiff(差分出力)

一般→エディタ→AnyEditツール

プラグインで下のように、選択した文字を変更できる。インストールがいる。

Wikiエディタがある。

一般→キー

ショートカットキーの一覧を見ることができて、それをカスタムすこともできる。

<抜粋>

編集 検索と置換 Ctrl+F ウィンドウ org.eclipse.ui.edit.findReplace
テキスト編集 ズームイン Ctrl+= テキストの編集 org.eclipse.ui.edit.text.zoomIn
ソース フォーマット Ctrl+Shift+F JavaScript ソースの編集中 org.eclipse.wst.jsdt.ui.edit.text.java.format

一般→セキュリティ→セキュア・ストレージ


デフォルトでは、セキュア・ストレージはホーム・ディレクトリーに配置されます。 Windows では、通常、これは "C:¥Documents and Settings¥<user_name>¥.eclipse¥org.eclipse.equinox.security" に解決されます。 このロケーションを選択すると、複数の Eclipse ベースのアプリケーション間で同じセキュア・ストレージを共有することができます。

デフォルトのセキュア・ストレージのロケーションを変更する場合は、 "-eclipse.keyring <file_path>" ランタイム・オプションを使用できます。 <file_path> には、セキュア・ストレージ・データの保持に使用するファイルのパスを指定します。

一般→プロジェクトネイチャー


プロジェクト ネイチャーは、ワークスペースでプロジェクトを構成するために Eclipse IDE で使用されます。1 つのプロジェクトに複数のプロジェクトの性質がある場合があります。最も一般的なプロジェクトの性質は です。org.eclipse.jdt.core.javanatureこれは、プロジェクトが Java プロジェクトであることを示すために使用されます。プロジェクトの性質の例をいくつか示します。

プロジェクトネイチャーのID 説明
org.eclipse.jdt.core.javanature Java プロジェクト
org.eclipse.buildship.core.gradleprojectnature Gradle プロジェクト
org.eclipse.m2e.core.maven2Nature Maven プロジェクト
org.eclipse.pde.core.org.eclipse.pde.PluginNature Eclipse プラグイン プロジェクト
org.eclipse.pde.core.org.eclipse.pde.FeatureNature Eclipse 機能プロジェクト
org.eclipse.pde.core.org.eclipse.pde.UpdateSiteNature Eclipse アップデートサイト プロジェクト

下のようなXMLでプロジェクトの機能を拡張できるようだが、突っ込んだ調査が必要だ。

<extension
    point="org.eclipse.core.expressions.definitions">
    <definition
        id="com.example.project.hasNature">
        <adapt
            type="org.eclipse.core.resources.IProject">
            <test
                property="org.eclipse.core.resources.projectNature"
                value="com.example.project.examplenature">
            </test>
        </adapt>
    </definition>
</extension>

JavaFX

JavaFXを使用してGUIアプリを作成したいと思ったときにjfxrt.jarがビルドパスに含まれてない場合があるようです。自分の場合は下のように解決しました。
「プロジェクトを右クリック⇒プロパティ⇒Javaのビルドパス」を開きます。
次に、「外部JARの追加をクリックして下のようにjfxrt.jarをビルドパスに追加します。

Jfxrt.jar

これで、動けばよいのですが最近ではJavaFXに関してGluonがメインで配布しているようで。。。

Setting Junit

JUNITの設定を行います、単純にjunit.jarをビルドパスにつなげるだけです。
しかし、ライブラリがあるのでそれを設定するほうが楽です。

  1. プロジェクトを右クリック -> プロパティ、もしくはAlt + Enterでプロジェクトの設定を開きます。
    projectProperty

  2. ライブラリの追加をクリック
    elipseAddLibrary

  3. JUnitを選択(選択後の画像です)
    elipseJunit5

  4. JUnit追加後
    eclipseAfterJunit
    プロジェクトにJUnitが追加されています。
    eclipseAfterJunit2

Getter & Setterの自動生成

JARファイルを生成する

作成したプログラムを配布するなどしたい時に下のようにJARファイルを作成して配布するのも一つの方法です。

デバック方法

カバレッジを使用する

JUnitでテストを実行した後に、テストケースが網羅できているかの確認をしたいときに使えます。
今回のセットアップでは、すでにカバレッジ(プラグイン)が入っていたので、実行手順を示します。

ちなみに、プラグインの追加方法は以下

Junitでカバレッジを取得する
1.まずはeclipseを起動し、「ヘルプ」→「Eclipseマーケットプレース」を選択します。
2.Eclipseマーケットプレースのウィンドウが開くので、検索欄にEclEmmaと入力し、「Go」ボタンを押下してください。
検索結果にEclEmmaが表示されるので、「インストール」ボタンを押下してインストールします。

カバレッジ起動方法
  1. テストクラスを右クリック
    coverage

  2. JUnitテストを(実行)

実行構成は下の「カバレッジの構成」を選択します。
coverageConf


リソースフォルダをビルドパスに追加

関連ページ一覧

Eclipse セットアップ(Mac版)

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

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 GitGitリポジトリからクローン〜

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〜クラスとは〜

Atomを使う~マークダウンエディタとして使用する~

Introduction

Githubでお馴染みの「Atom」について、以下の内容を学習しました。

  1. インストール
  2. MD, PDF出力、HTML出力のセットアップ
  3. マークダウンの書き方

AtomとMarkDownを使用する(for Windows)

  1. Install Atom
  2. Short Cuts
  3. Setup
    3-1. ATOMToJapanese
    3-2. PDF
  4. MarkDown
  5. Charctor encoding

※ページ内リンクは、日本語ではうまくいかなかった(日本語化していない状態です。)そしてワードプレス上でもうまくいかないようです。。。

Install Atom

Atomのダウンロード先にアクセスして、対象のファイルをダウンロードします。
AtomDownload

インストーラーをダウンロードできるので、簡単にインストールできます。ただし、Cドライブにインストールされてしまいます。
Atom1

Short Cuts

  • プレビュー:Controll + Shift + M
  • 設定:Controll + カンマ
  • GitTab(Repository作成):Controll + Shift + 9

Setup

AtomToJapanese

  1. ヘッダメニュー、「Package -> Setting View -> install Packages/Themes」をクリック
    AtomPackageInstall

  2. 検索部分に「japanese-menu」を入力。

  3. 下のような画面が見れるのでインストールする

PDF

  1. パッケージのインストールを行います。日本語化の時と同様に検索部分に「md pdf」と入力すると、下のような画面が見れます。
    MdToPdf
    mdToHtml
  2. インストールされたら、下のように表示されます。htmlに関しても同様です。
    そして、PDFはAdobeReaderなどのインストールを済ませておきましょう。
  3. 使用するときは、ヘッダメニューから下のように選択して使用します。

絵文字の設定

現在調査中

  1. JSなどでインポートして使用
  2. 絵文字定義ファイルをダウンロードして使用する

MarkDown

書き方一覧

No MDの記述 意味
1 # 見出し
2 - / * リスト
3 1. 番号付きリスト
4 > 引用
5 ** / __ 強調
6 * / _ イタリック
7 *** / --- 水平線
8 \(バックスラッシュ) エスケープ文字
9 * [x] チェックリスト
10 ``` コードブロック
11 ~~ 打消し
12 [リンク名](URL) URLリンク
13 \<http:\//xxxx.com> URLリンク
14 ![代替え文書](画像URI) 画像参照
15 :emoji名: 絵文字~調査中~
16 (末尾にスペース二つ) 改行する

記述サンプル

  1. 見出し

    Hader1(#)

    Header2(##)

    Header3(###)

    Header4(####)

    Header5(#####)
  2. リスト

    • アイテム1

    • アイテム2

    • アイテム3

    • アイテム4

    • アイテム5
      ※スペースを入れることでインデントできる

    • アイテム1

    • アイテム2
      = 補助情報

    • アイテム3
      :詳細などを記載する

    • ウルトラマン
      M78星雲からやってきた正義のヒーロー

  3. 番号付きリスト

    1. リスト1
    2. リスト2
    3. リスト3
    4. リスト4
      ※スペースを入れることでインデントできる
  4. 引用

    引用文章です

  5. 強調
    強調文言

  6. イタリック
    Itaric font

  7. 水平線

***


---


  1. エスケープ文字

  2. チェックリスト

    • [x] test1
    • [x] test2
    • [ ] test2.1
    • [ ] test2.2
    • [ ] test2.3
    • [ ] test3
  3. コードブロック

    public static void main(String[] args) {
    System.out.println("Hello World!");
    }
  4. 打消し戦
    ~打消し戦のサンプル~

  5. URLリンク
    PGボックスのURL

  6. https://zenryokuservice.com

  7. 画像参照
    ![Test](img/Test.png)

  8. 絵文字 調査中
    ~:smile:~

Charctor encoding

<文字コードの指定方法>
ctrl + shift + Uを押下して使用する文字コードを選択する

File Grep

<プロジェクト内の文字検索>
Ctrl + Shift + F

日本語の入力がおかしいとき

バージョンの問題なようなので、バージョンをアップグレードするか、ダウングレードするか対応する。
ダウングレードするには、そのバージョンを本家のサイトからダウンロードして再度インストールするという方法があります。
本家のサイト

関連ページ一覧

Eclipse セットアップ

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

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 GitGitリポジトリからクローン〜

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〜クラスとは〜

Eclipse Codename one〜クロス開発環境の構築(Eclipseでは動かなかった)〜

IoTの開発をJavaでやりたいと思い色々と調べています。元々はMicrobit〜ラズパイ〜MIDI音源と音を鳴らすための仕組みを作ることにあるのですが、J2ME(Bluetooth)のテストを行うのに色々と不都合があり、Code name oneを使うことにしました。エミュレータでテストを行えばいちいち実機を動かしたりしなくて良いので便利です。
そういう意味であれば、VirtualBoxとか便利なんでしょうね。。。

初めに、Code name oneでJavaMEの開発環境を作ろうとしましたが、自分の想定通りにいかないので(スマホ用のプラグインのようなので、)やめることにしました。

今回の記載内容

インストールおよびセットアップは下のようになります。
しかし、NetBeansでないと動かないという記事も見つけたので、今回はインストール方法のみを記載しました。
他の方法を模索しようと思います。

Codename one plugin イントール

早速、Eclipseへのインストールと設定などを行い開発の準備を進めたいと思います。参照するURLはこちらです
そのままEclipseMarket Placeでインストールできます。

そして、細かい設定、手順などはこちらにありました。

なのでここのページを参照して行きます。

eclipse.ini

初めに設定ファイル(eclipse.ini)に関して以下のような記述がありました。ちなみに自分の環境ではCode name oneをインストールしただけでは動きませんでした。

JAVA_HOME環境変数がJDK 8を指していること、およびJDK 8 binディレクトリへのパスがPATHステートメントの最初にあることを確認してください。他のすべてが失敗した場合は、eclipse.iniファイルを編集してEclipseにJDK 8インストールを強制的に使用させます。

なるほど、そこらへんの設定が必要なのね。。。

まずは、eclipse.iniの確認を行います。これに関しても説明ページがありました
Macなので以下のように対象ファイルを開きます。

  1. 起動しているEclipseのアイコンを右クリックします。
  2. finderでパッケージを開き
  3. eclipse.iniを参照します。

    下のような内容が記載されています。

    -startup
    ../Eclipse/plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar
    --launcher.library
    ../../../../../.p2/pool/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.551.v20171108-1834
    -product
    org.eclipse.epp.package.java.product
    -showsplash
    org.eclipse.epp.package.common
    --launcher.defaultAction
    openFile
    --launcher.appendVmargs
    -vm
    /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin
    -install
    /Users/takk/eclipse/java-oxygen/Eclipse.app/Contents/Eclipse/../MacOS
    -configuration
    ../Eclipse/configuration
    -vmargs
    -Dosgi.requiredJavaVersion=1.8
    -Dosgi.instance.area.default=@user.home/eclipse-workspace
    -XX:+UseG1GC
    -XX:+UseStringDeduplication
    --add-modules=ALL-SYSTEM
    -XstartOnFirstThread
    -Dorg.eclipse.swt.internal.carbon.smallFonts
    -Dosgi.requiredJavaVersion=1.8
    -Xms256m
    -Xmx1024m
    --add-modules=ALL-SYSTEM
    -Xdock:icon=../Resources/Eclipse.icns
    -XstartOnFirstThread
    -Dorg.eclipse.swt.internal.carbon.smallFonts
    -Declipse.p2.max.threads=10
    -Doomph.update.url=http://download.eclipse.org/oomph/updates/milestone/latest
    -Doomph.redirection.index.redirection=index:/->http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/
    

    ポイント

  4. JVMの指定がない
  5. JAVA_HOMEの指定がない

なので、ここの部分をeclipse.iniに追記します。

JVMの確認と記述

ターミナルを立ち上げて確認します。ちなみにCodename oneではJava8(JDK1.8)を使用するようです。

java -version

と入力してエンターキーを押すとJavaのバージョンを確認できます。

そして、Mac OSXの場合は/usr/binにコマンドがインストールされているのでeclipse.iniには以下のように追記します。

-vm
/usr/bin

もし、java -verisonで1.8でない場合は下のように直接VM(JDKのjavaコマンド)を指定すると良いです。

-vm
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin
-vm
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java

JAVA_HOME

Javaの環境構築で初めにやったきりになりがちなのが「環境変数」です、毎度毎度やっていると覚えるので、慌てて覚える必要はありません。
<Mac, Linux>
$JAVA_HOME: jdk/binが参照されてればよし上のように/usr/binはMacの場合です。
<Windows>
コントロールパネル→システム設定→環境変数の一覧の中にJAVA_HOMEがあり、PATHの中にJAVA_HOMEがあること
確認するときは、コマンドプロンプトでpathと入力する、pathコマンドは環境変数を設定するコマンドなのでpath以外に入力しないようにしてください。path /?でヘルプが見れます。
ちなみにJAVA_HOMEの確認は下のようにecho $JAVA_HOMEで見れます。

Windowsの場合はecho %JAVA_HOME%でけます。

JUnit 開発方法〜テスト駆動型開発のススメ〜

イントロダクション

U16プログラミングコンテストのサーバーに接続するクライアントアプリをJavaで実装しようという試みを行っております。

その最中にちょうど、テスト駆動型開発をやることにしたのでメモがてらに記載します。

このプロコンは、こちらにある。旭川発信の大会です。
プログラムの挙動としては、下のようなものです。これを実装するのに行列を使用して、自分、相手プレーヤーの位置を把握するためのプログラムを組もうというところでした。

このプロコンサーバーは、chaiserという名前がついていてQtというフレームワーク(C++)を使用しています。
サーバーにアクセスするためのクライアントプログラムをJavaで作成したのが今回の記事になります。

行列を使用するのに、Pythonで使用しているNumPyを実装しているのがND4jというフレームワークです。
これを使用して、今回の座標から相手と自分の位置を把握する仕組みを作成しようとしました。

テスト駆動型開発?

早い話が「テストを初めに作る」ということなのですが、世間ではどのような認識をしているのか、よくわかっていません。かと言って自分の認識が正しいと思っているわけではないのですが、自分の解釈はこーというものを記載します。

テストを初めに作る

テストを初めに作るということは「仕様を明確にしてやる」ということになります。つまり以下のように仕様を明確にします。

  1. サーバーから受信するデータは1回の操作で3回ある
    ・GetReady: 現在位置を受信
    ・操作コマンド: 操作によるレスポンスを受信
    ・動作終了"#": 現在位置を受信
  2. GetReadyで受信した情報から周囲の確認を行う
    ・ブロック(その場所に移動するとゲームオーバー)の位置
    ・相手(プレーヤ)がいるかどうか
    ・アイテムがあるかどうか
  3. 操作コマンドの受信結果による次の動作の決定
    ・仕様未決定
  4. 動作終了時の処理
    ・これも周囲の確認処理を行う
  5. 操作を行いながら自分の位置を確認するためのMapを作成する
    ・マップのサイズは15 x 17のサイズ
    ・プレーヤーの初期位置はランダムに決定する
    ・使用できるコマンドはSearch, Put, Walk, Lookなど詳細はこちら(U16旭川プログラミングコンテスト)

以上のような仕様で実装します、未決定の部分に関してはこれから考えます。

テスト作成の前に

まずはクラス構成を考えます(詳細設計)。これは規模としては小さいものなので単純にデータを送受信するU16ProconClientクラスとクライアントの細かい操作(マップを作ったり、次の動作を確認したり。。。)を担当するClientManagerクラスの2つを作成します。

U16ProconClientクラスは、実際にサーバーとのやりとりを行いながらやったので割愛します。

ClientManagerの実装

このクラスは、作成する時に上記で決めた仕様を先に実装します。具体的に以下のように実装します。作成したクラスはTestNd4jです。そして、JUnitの作成方法に関してはこちらのページを参照下さい。

まずは仕様を満たすための実装手順をテストケースに書きます。これは仕様の5番目にある部分を実装するために必要な処理なので、上の仕様を満たすための処理のテストケースです。コメントにある「2.移動した時にMapを。。。」とあるぶぶに関しては今後のことを考えて同じようにテスト(実装方法の確認)を行なった次第です。

/**
 * ClientManagerのコンストラクタで、マッピング用行列を初期化する。
 * 1.初期化時に中身を4で埋める
 * 2.移動した時にMapを拡張するので配列の拡張方法も確認
 */
@Test
public void testCreateINDArray() {
    // INT型データの行列を作成する
    INDArray data = Nd4j.create(new int[] {3, 3});
    System.out.println("*** init zeros***");
    System.out.println(data);
    System.out.println("*** putScalar ***");
    System.out.println(data.putScalar(new int[] {2, 1}, 1.0));
    System.out.println("*** init ones ***");
    // 1の値で初期化された配列に全て3を足す
    INDArray reData = Nd4j.ones(new int[] {3, 3}).addi(3);
    System.out.println(reData);
    System.out.println(Nd4j.pad(reData, new int[] {6,  6}, Nd4j.PadMode.CONSTANT));
}

このような形で、仕様→テストケース→実装とやって行くのが自分の認識している「テスト駆動型開発」です。

実装の例(作成中)

/** 自分の周りをチェックするメソッドのテストケース */
@Test
public void testCheckAround() {
    //// 本当はメソッド1つにつき1ケースのテストを行うが、小さなテストなので勘弁してください。。。 ////
    try {
        Method test = this.getPrivateMethod("checkAround", String.class);
        // テストケース1:周囲にアイテムがある場合
        target.setBufMap(new String[] {"0", "0", "0","0", "0", "0", "0", "0", "0"});
        test.invoke(target, "1010010010");
        //(これから実装)テストケース2:周囲に相手プレーヤがいる場合
        //(これから実装)テストケース3:行動できるスペースにブロックがあるかどうか
    } catch (SecurityException e) {
        e.printStackTrace();
        fail("セキュリティ違反です。");
    } catch (InvocationTargetException e) {
        e.printStackTrace();
        fail("メソッド実行時エラーです。");
    } catch (IllegalAccessException e) {
        e.printStackTrace();
        fail("アクセス違反です。");
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
        fail("メソッドの引数違反です。");
    }
}

仕様を先に持ってくるから仕様を詰めて考えたい人(ほとんどの人がそうだと思う)にはうってつけの開発手法だと思います。

Maven利用の場合

ちなみにMavenを使用してJUnitを入れるときは以下のようなコードを追加します。<project>タグの中に入れてください。

  <properties>
   <junit.version>4.12</junit.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>

でわでわ。。。