JAVA関連のことを調べてみた2022年03月31日

JAVA関連のことを調べてみた2022年03月31日
目次

【JUnit】ローカルでテスト成功するのにGitLabCIでは失敗する時の調べ方

# 結論
1. GitLab CIで実行したテストのレポートを表示する
1. レポートを元に原因突き止めて修正する!

## 前提
GitLabのfeatureブランチへpushすると、テストで失敗していてbuildできない。
ローカルでは全てテスト成功しているのに、、
### 環境
– Mac
– GitLab 14.10.0
– Java 11
– JUnit 5.8.1
– ビルドツール `Gradle`

### テスト失敗時の詳細
– ローカル
– `プロジェクト/build/reports/tests/test/index.html` で詳細が見れる
– リモート(GitLabCI)
–  どこで見るの??

# GitLab上でテストレポートを確認したい
## 1 ) `.gitlab-ci.yml` に追記

“`yaml:.gitlab-ci.yml(一部抜粋)

gradle_test:
stage: test
script:
– gradle test
artifacts:
paths:
– build

元記事を表示

Spring Batchを業務で使ってハマったこと

# はじめに
業務で開発しているオンライン申請系のシステムで、[Spring Batch](https://docs.spring.io/spring-batch/docs/current/reference/html/index.html)を利用しています。
Spring Batchを本格的に使ったのは初めてだったのですが、バッチアプリケーションに必要な機能が豊富に提供されており、かなり便利だと感じました。
しかし、仕組みをちゃんと知らずに使ってハマった点があったので、書いてみます。

### 実行環境
– Java11
– Spring Boot 2.4.3
– Spring Batch 4.3.1
– PostgreSQL 42.2.18
– MyBatis 3.5.5

# 使い方
Spring Batchには、バッチ処理(ジョブ)を起動する方法として、2つの方法がサポートされています。
– [コマンドラインからジョブを実行する](https://spring.pleiades.io/spring-batch/docs/current/reference/html/job.ht

元記事を表示

CentOS-7 の OpenJDK-8 を 11 に

既に 8 がインストールされている環境を 11 にする。

バージョンを確認
“`
$ java -version
openjdk version “1.8.0_322”
OpenJDK Runtime Environment (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)
“`

11 をインストール
“`
$ sudo yum install java-11-openjdk
“`

このままでは、まだ 8 を見ている状態なので、11 に切り替え
“`
$ sudo alternatives –config java
“`

バージョンを確認
“`
$ java -version
openjdk version “11.0.14.1” 2022-02-08 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.14.1+1-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1

元記事を表示

予定管理アプリを作ってみた

Wenサイト: https://plan.towelman.server-on.net/sign_in

# 動機
 自分で予定管理をしようと思ったときに一つのプロジェクトごとに、複数人で管理できるような物が欲しくなり探してもこれといってピンとくるものがなかったため自分で作ってみようと思った。

# 大雑把な機能
 基本予定をプロジェクト単位で分ける。そしてプロジェクトは2種類ある。一つ目は複数人で管理・参画でき、「やること」の担当をそれぞれに割り振ることができて、期間を指定する「パブリックプロジェクト」である。基本的になにかの目的をなすための計画を管理するのに使うプロジェクトで使い方次第で1人でも複数人でも使えるようになっている。また、複数人で使い、自分以外にも計画に変更を加えさせたい人がいる場合はその人を管理者にすることによって実現可能である。そして二つ目は自分専用の期間を指定できない「プライベートプロジェクト」である。これはなにかの目的をなすための計画ではなく、日常で自分がやらないといけない「やること」を管理するプロジェクトだ。このプロジェクトで「入浴する」、「掃除する」などの「

元記事を表示

春から大学生(情報・工学)の方へ~プログラミング入門8~(JDK(Java Development Kit)の中身を覗いてみた)

# 第1回
春から大学生(情報・工学)の方へ~プログラミング入門~(C言語ってなあに?)

https://qiita.com/HaaSAtC/items/490d066bdbec8441a2f6

# JDK(Java Development Kit)とは
プログラミング言語Javaを実行するために必要な様々なアプリケーション(コンパイラ、仮想マシンなど)をまとめたもの。プログラムを書き込んで実行する「エディタ」「IDE」と連動させて用いる。

# インストール場所(Windows)
単体でインストールした場合、基本的にはPC//ローカルディスクC//Program Filesなど?
Eclipse Pleiadesでまとめてインストールした場合、PC//ローカルディスク//pleiades~~//java内に各バージョン(6,7,8,11,17)がフォルダごとに分けられてインストールされる

今回はJDK17(Eclipse Pleiades)の中身について書きます
他のバージョンだと多少違う部分はあります。

# binフ

元記事を表示

【Spring】その1:クイックスタート

## Quickstart Guide
https://spring.io/quickstart

## Step 1: Start a new Spring Boot project
https://start.spring.io/

Add Dependenciesを選択、webと打ちSpring Webを選択。
zipファイルがダウンロードされるので好きなディレクトリで解凍。
(デフォルトは`demo.zip`)

## Step 2: Add your code

VScodeなどのIDEで`demo`を開き、`src/main/java/com/example/demo`の`DemoApplication.java`を編集。

“`java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframew

元記事を表示

[Java:forループを使った配列]forループが終わった時に、変数に配列の値が適用される。

forループによるスコア集計のコードサンプル

“`java
public class Main {
public static void main(String[] args) {
int[] scores = {40, 50, 70, 80, 30};
int sum = 0;
for (int i = 0; i < scores.length; i++) { sum += scores[i]; } int avg = sum / scores.length; System.out.println("合計" + sum); System.out.println("平均" + avg); } } ``` 表示結果は 合計270 平均54 になります。

変数sumに配列の値が入るタイミング

forを使用した場合、変数sumに配列scoresの値が適応されるタイミングはforループが終了したときです。

なので、平均点の計算は、forループが終了した後に記述しなけれ

【Java】SpringBootでPaging&Sortしてみた。

# 参考

https://reflectoring.io/spring-boot-paging/

# pom.xml
“`xml

org.springframework.boot
spring-boot-starter-data-jpa

“`

# Repository
“`java
@Repository
public interface SampleUserRepository
extends CrudRepository, JpaSpecificationExecutor {
}
“`

# Service
“`java
public SampleUserSearchResponse search(SampleUserSearchRequest request) {
Specif

フランスに修行に行けなくなった料理人が、未経験でIT業界にジョブチェンジした話。

# 自己紹介
はじめまして。
未経験からエンジニアに転職した『ゆうき』です!!
私は現在都内のSESで勤務をしており、Javaをメインに業務を行っております。
私が、IT業界に入るまでの経験を記事にしていきたいと思います。

## フランス修行に行くことを決意した料理人が飲食業界を離れた理由

私は小学生の頃から『コックさんになる!!』と発言していたほど、調理師になるのが夢でした。
その夢はずっと変わらず専門学校も地元の調理の専門学校に行き、
新卒で入社したレストランは、
西麻布にあるミシュラン1つ星のレストランでした。

4年ほど飲食経験を積んだ時に、フランスに修行に行きたいという気持ちが強くなり、
フランス修業に行くことを2019年の年末に決意しました。

しかし、決意を固めた2020年にコロナウイルスが大流行し、
私はフランス行きをストップするしかありませんでした。

1年間以上足止めを食らってる中で、飲食業界のどんどん変わっていく姿にものすごい不安を感じました。
また私は2021年に結婚をし、将来のことを考え悩み抜いた末、飲食業界から離れることを決意しました。

## なぜ飲

ClojureのソースをNetBeansでコンパイルしてみた

Clojureはじめたばかりの初心者です。
ソースを読むのが好きなので、自分でコンパイルしてNetBeans内で動かしてみたいなぁと思いやってみました。

JavaはJava8がインストールされている必要があります。
(ClojureのコンパイルにはJava8以上が必要との事です)
NetBeansは 12.0を使っています。

ちなみにClojureのソースをダウンロードしてきて、mavenを使ったら、簡単にコンパイルできました。しかし、それではNetBeansで、ブレークポイントをかけたり、ステップ実行をしたりできなかった(やり方がわからなかった)ので、別の方法でコンパイルしてみようと思いました。

まず、NetBeansで、File > NewProjectから、Java with Ant > Java Applicationを選択し、作成します。

Clojureの最新ソースを落としてきて、clojure-master/src/jvmの下のJavaソース一式を先ほど作成したプロジェクトのsrcディレクトリにコピーしました。
NetBeansでコンパイルしてみたら、あっさり成功。

【 Java_while文とdo-while文 】

現在独学でJavaを学習中です。
この投稿はその備忘録になります。

## while文とdo-while文
Javaにおけるwhile文とは、繰り返し構文を書く際のバリエーションのひとつです。
条件式の内容に従って必要数処理を繰り返します。
また、do-while文とは「まず評価してから条件式を実行する」もので、
while文とは書く順番が異なります。

#### ■ while文
以下のwhile文では、ブロックを実行する前に`条件式(temp > 25)`を評価します。
これを、`前置判定`といいます。
“`java
public class App{
public static void main(String[] args){
int temp = 30;
while (temp > 25) {
temp–;
System.out.println(“温度を一度下げました”);
}
}
}
“`
#### ■do-while文
以下のdo-while文では、ブロックを実行した後に`条件式(temp > 25)`を評価します。
これを、`後置判定

【Java】自作アプリを改良して業務効率化を図り、いつもより3分早く帰る。

こんばんは。

タイトルの通り、夜中に一人でパチパチとアプリを改造しました。

Atcoderに取り組むことで、Javaのライブラリやクラスの呼び出し方に少し慣れてきました。
便利なライブラリがいっぱいでほんとすごいですね。
自分のペースではありますが、研究していきます。

今回は、前からやってみたかったコピー機能を導入しました。

### 1.対象アプリ

消費税計算アプリ「消費税さん」です。

金額を入力すると税込み金額、または税抜き金額を計算してくれるシンプルかつ実用的な優良アプリです。
もし使いたい方がいらっしゃったら、自分のパソコンを持参してインストールさせていただきますのでご連絡ください。

Screenshot_20220328-230056.png

最初はアプリ開発の練習のつもりで開発したこの消費

Spring bootでバリデーションチェックによるエラーメッセージを表示させる手順

Spring bootの学習で前回エラーメッセージの表示方法を学んだので、アウトプットも兼ねて投稿します。

手順は以下の通りです。

:::note info
①プロジェクト作成時、validationライブラリを使用する。
:::

:::note info
②modelクラスを作成し、バリデーションチェック用のアノテーションを使用する。
:::

:::note info
③ControllerクラスのPostメソッドで、@Validated、BindingResultを使用する。
:::

:::note info
④エラーメッセージ用のファイルを作成。
:::

:::note info
⑤作成したファイルに表示させたいメッセージを記載。
:::

:::note info
⑥application.propertiesに最後にファイルのルートを記載。
:::

## ①プロジェクト作成時、validationライブラリを使用する。

まず初めに、プロジェクト作成時にライブラリ依存関係の選択で「Validation」を追加する。
![スクリーンショット 2022-03-28

Selenium WebDriver Java Simple Program – Login

# Outline
Selenium WebDriverで実際にE2E テストを作る。
初心者にとって、E2Eテスト自動化がどのようなものかを知るため、簡単なログイン機能のテストを実際にコードにしてみた。
尚、開発環境構築は https://qiita.com/emurin/items/b4c04e5030835b98159a を参考のこと。

# Test Scenario

1. Browserを開き、my.rakutenに遷移する
2. ログインをクリックする
3. Rakuten IDとpasswordを入力する
4. ログインをクリックする
5. ログインの可否を、名前が正しいかで判断する
6. Browserを閉じる

# Repositories

プログラミングする前に、操作対象となるHTML要素(repositories)を抽出する。
たとえば、my.rakuten.co.jpの「ログイン」のボタンを特製するとき、chrome developer toolで下図のように、html要素を確認し、ろのログインボタンを一意に特定する要素を取り出す。

今回のプログラムでは、

Static factory methodの使い所

## 結論
副作用があるコンストラクタが必要な場合は、代わりにStatic factory methodを用いる。

## だめな例

“`java
public class World {

private final AnimalController animalController;
private final TerrainController terrainController;

public World() {
this.animalController = new AnimalController();
this.terrainController = new TerrainController();
ExecutorService executorService = Executors.newWorkStealingPool();
executorService.submit(animalController::spawnRandom);
executorServ

TreeMapのKeyに独自クラスのオブジェクトを格納する場合の注意点

## やりたかったこと

独自に作成したクラスHeroのインスタンスと倒した敵の数をペアでコレクションに格納し、画面表示をする。(表示順は不問)

## やったこと
ペアで格納するためMapを採用。
(特に理由はなく)TreeMapを選択した。
“`
Map map = new TreeMap<>();
“`

## つまづいたこと
TreeMapは自然順序順に取り出す。
今回keyに独自クラスであるHero型を用いているがこの自然順序順を定義していないためエラーとなる。

## 解決策
今回は、表示順不問のため、HashMapを使用し回避。
“`
Map map = new HashMap<>();
“`

表示順が指定されている場合はHeroクラスで自然順序順を定義する
下記は、Heroの名前順の例
“`
public class Hero implements Comparable {
(省略)
public int compareTo(Hero obj) {
return this.n

【Java】SwaggerでAPI仕様を見れるところまでやってみた(swagger-core × springdoc-openapi-ui)

# まえがき
新しい現場でSwaggerを使うことになったので、備忘録として残す。

# やりたいこと
既存のソースコードにSwaggerで提供されているアノテーションをつけて、Swagger UI PageにてAPI仕様を見たい。

# 仕様(OpenAPI)に対する実装(Swagger)
ぐぐると最初にOpenAPI(Swagger)と出てきた。仕様(OpenAPI)に対する実装(Swagger)という解釈で問題なさそう。JPAとHibernateの関係と同じか。

>OpenAPI = Specification(仕様)
>Swagger = Tools for implementing the specification(実装)

https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/

# SpringFox と springdoc-openapi
Swagger UI Pageを見るために必要なもの。

 古:SpringFox
 新:springdoc-openapi

ht

Fn / OCI Functions 向けに アノテーションを使って HTTP リクエスト処理をすっきり書くフレームワークを作った話

Fn / OCI Functions で API を開発するとします。API は API Gateway を通じて公開する想定です。例えば一連の複数オブジェクトに対する CRUD 処理としましょう。API Gateway 経由の Rest API の実装は、一つのオブジェクトについて同じURLに対する POST/GET/PUT/DELETE のメソッドでアクセスさせることになるでしょう。ではこの時 Function の粒度はどう考えればいいでしょうか? POST/GET/PUT/DELETE 毎に Function を分けますか?、さすがにそれはしないか… では同じ URL はひとまとめにして(=対象オブジェクト毎に)、URLのパス単位で Function を分けるのではどうでしょうか?う~ん、それでも Function の数が多くなっちゃうかな…?
つまり、適当な粒度で API 群をまとめて1つの Function で処理する必要が出てくる訳です。ですが、そうすると Function にまとめられた全ての API の入り口は(現状の FDK の仕様では)指定したクラスの単一

コンストラクタの代わりに staticファクトリメソッドを検討する

# これは何?
Effective Java 第3版を読んで自分なりにかみ砕いた内容を記事に落としていきます。
良いコードを書くための選択肢の一つになれば最高なので、頑張ります。
※読み進める中で知識のアップデート等あれば都度更新いたします。

# 概要
クラスのインスタンスを得るために public のコンストラクタを作成するのではなく、
**public の static ファクトリメソッドを作成するというもの**
・例 (Booleanクラス)
boolean基本データ値をBooleanオブジェクト参照に変換している

~~~java
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
~~~

# メリット
## ①コンストラクタと異なり名前を持つこと
クラスは特定のシグニチャ(※1)を持つコンストラクタを1つしか持てません。
→型の順序を変えて対応は可能ですが、コンストラクタを利用する際に間違ったコンストラクタを呼

Fortniteのビクロイ数を教えてくれるLINE BOT作ってみた

# はじめに
趣味でなんでも良いから動くものを作って技術に触れようということで、最近一番プレイしている Fortnite というゲームに関する LINE BOT を作成しましたので紹介します。
# Fortnite とは

Fortnite とは Epic Games が運営しているオンラインゲームです。クロスプラットホーム(PC・PlayStation・Switch どのゲーム機からでも遊べる)であることが特徴で、主に 100 人が同時に参加し残りの 1 チームになるまで戦うバトルロイヤルがメインのゲームとなります。

世界的コンテンツとよくコラボしており、直近だとスパイダーマンとのコラボが記憶に新しいです。
![fortnite.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258405/01d22c25-1aaf-4783-83c4-cae1e708b242.jpeg)

このゲームの魅力を語り出すと止まらなくなるのでこの辺にして公式 HP のリンクを共有して次に進みます。

https://w