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

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

[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

[Java] 競プロ最序盤で個人的によく使うリファレンスまとめ (更新中)

初投稿です。
競プロを初めて2週間程度ですが、序盤の問題でよく使うリファレンスが増えてきたので 覚書として以下にまとめました。今後も役に立った知識は随時追加していく予定です。
浅学のため、「ここがおかしい」という箇所がありましたらお気軽に指摘して下さると非常に助かります。

:::note info
本項での「競プロ最序盤」は
・[AtCoder Beginner Contest](https://kenkoooo.com/atcoder/#/table/)での **A, B問題**
・[Paiza スキルチェック](https://paiza.jp/challenges)での **B~E問題**
を指します。

**「そもそも競プロって何?」** という方は、@e869120 さんの[レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編:競プロを始めよう】](https://qiita.com/e869120/items/f1c6f98364d1443148b3) という記事が参考になると思います。
:::

【文字列編】
——

Keycloakによる認証基盤の立ち上げ(1) Wildfly版

# この記事の概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/0724f129-0e33-42a5-f89b-d9dbe410a10e.png)

– 既存の認証基盤を持たない組織の前提
– 認証基盤としてKeycloak導入、組織で保持するアプリのSSO用に活用する
– アプリごとにどんなRealmを切るかは試行錯誤

# Keycloakの紹介

– 基本的な機能は、NRIさんの紹介記事があるので参考に ⇒ [Keycloakとは]
– 基盤は Javaサーブレット ⇒ 稼働先OSやアプリケーションサーバやについて選択の幅が広く持てる
– ライセンスは [Apache-2.0](https://github.com/keycloak/keycloak/blob/main/LICENSE.txt)

# 本記事執筆時の諸事情

試使用を開始し、現在も試使用中なのは `v16.1.1` 。
折り悪く、ちょうどKeycloakは `v16` から `v17` への移

Spring bootのアノテーションについて(@RequestParam)

現在学習しているSpring bootにて基礎的なアノテーションの@RequestParamについて再度学習したので、アウトプットも兼ねてまとめます。

## ①RequestParam

ブラウザからのリクエストの値(パラメータ)を取得することができるアノテーション。
### Controllerクラス
“`java

public String example(@RequestParam(“message”)String message Model model ) {

Model.attribute(“message”, message);

return “example”;

}

“`
### View(HTML)
“`html

“`
http://localhost:8080/~?message=example
上記のようにリクエストの際に

>message=example

とすることで、
①RequestParamの”message”にexampleという文字列が代入される。

②String m

【Java】modelMapperでList⇔List, String⇔LocalDate, String⇔LocalDateTimeを変換する。

# 参考

https://www.baeldung.com/java-modelmapper-lists

# List\ → List\ のマッピング
“`java
List entities = // DBからHogeEntityリスト取得
List dtos = modelMapper.map(entities , new TypeToken>() {}.getType());
“`

# String ⇔ LocalDate のマッピング
“`java
// String to LocalDate
mapper.addConverter(
new AbstractConverter() {
@Override
protected LocalDate convert(String source) {
if (source == null) {

Scalaの勉強はじめました 4 〜オブジェクトとクラス②〜

## はじめに
N予備校の「Scala基礎」「Scala応用」コースを受講しています。
「オブジェクトとクラス」でざっくりまとめたことを少し後悔してます。

## トレイトとミックスイン
トレイト(振る舞い)を継承することをミックスインという

:::note
複数のトレイトを1つのクラスやトレイトにミックスインできる。
直接インスタンス化はできない。
クラスパラメータ(コンストラクタ引数)を取ることができない。
:::

`trait`で定義されるメソッドは、必ずしも実装する必要がない

“`scala
class PaperCup extends Paper with Fillable with Disposable
“`

クラスを同じやり方で複数継承はできないので注意。

### super

“`scala
class Class2 extends TraitB with TraitC {
override def greet(): Unit = super[TraitB].greet()
}
“`

継承やミックスインで利用している型を指定して自身のインスタンス

Kotlinでrest-assuredを使う

REST APIのテストコードを効率良く記述するためのライブラリである[rest-assured](https://rest-assured.io/)をKotlinから利用してみた。

### ライブラリを依存関係に設定する

[Kotlin用のExtensionライブラリ](https://kotlinlang.org/docs/extensions.html#extension-functions)が提供されているため、これを依存関係に設定するだけでrest-assured本体は推移的に解決される。

build.gradle.kts

“`kotlin
dependencies {
testImplementation(“io.rest-assured:kotlin-extensions:4.5.1”)
}
“`

### テストコードを実装する

先述のExtensionライブラリは、trainling lambdaやinfix notation、scope functionを活用してすっきりとした記述を可能にしている。条件・アサーション等をブロックで区切ることがで