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

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

業務でSpring Bootにwebpackを用いてjs周りを環境構築した際の備忘録

### はじめに
業務の新人施策で、
チーム内で合意形成し、SpringBootをベースにする、
その上で社内で使える技術なら自由に選んでいいよと言われたので、真っ先にnpmが浮かびました。

その理由は、ただjsファイルを用意するだけでなく、
パッケージマネージャーやバンドラーなどの周辺技術を組み合わて、Spring Bootで開発できたらなと思ったからです。
というわけで、とりあえずnpmを入れてみます。

ソースコードはこちらになります。
(コミットメッセージが超適当です。ごめんなさい。)

https://github.com/tkknot/spring-npm

### 作成者スペック

  • Jsはそこそこに書けるけど、実務の経験はないので客観的にできるとは言えないかも?
  • モダンJSはReactもVueも一応書ける
  • モジュールバンドラーからは逃げてきました
  • Spring Bootはまだまだ学習中のため、本業務で身につけていきたい
  • Spring Boot周りの開発技術はもっとわからない、、、頑張
元記事を表示

まとめる

言語はとにかくまとめることが大切ですね。

# C言語
c言語では構造体という仕組みがあります。
今で言うところのクラス、やオブジェクトのようなものと考えても良いでしょう。
ただ、C言語の場合は、オブジェクトのようにメソッドを持つことはありません。
ただ、データの構造を表すだけ、だから構造体と言われるのですね。
“`c:struct
struct 構造体名{
メンバ 1;;
メンバ 2
};

“`
## 構造体を使わないと
一昔前の仕組みではありますが、この構造体と言う仕組みはよくできていて、構造体を使わないと、ソースがとても読みづらいものになります。
例えば、自動販売機内にある缶ジュースを表そうとしていみましょう。
必要な項目としては、大体
商品名
単価
種別(暖かい 冷たい)
ぐらいでしょうか。
これを変数で表そうとすると、
“`c:変数
char naem[];
int price;
int type;

“`
のようになるでしょう。
しかし、これはあくまで商品aにおいての変数であり、商品bのデータを保存するには別の変数を定義しなければいけません。
これではもし商品

元記事を表示

Lombok Annotation @Data

### Lombok
Lombokとは、SpringやSpringBootなどに追加してコードを効率的に作成できるようにするJavaライブラリ。クラス名の上にAnnotationを明示することで、GetterやSetterのようなメソッドを別に作成する手間を省いてくれる。

#### @Data
– 定義
@Getter、@Setter、@ToString、@EqualsAndHashCodeと@RequiredArgsConstructorの機能が含まれている便利なAnnotationである。しかし、最初に設定したデフォルト値を変更する場合、問題が生じるかの世があるため、個々のAnnotationの設定値をデフォルト以外の値に設定して使用したい場合、@Dataの代わりに個々のAnnotationを使用する。
– Annoation
1.@Getter、@Setter:データにアクセスする時に使用
2.@ToString:オブジェクトが持っている情報や値を文字列にして返す
3.@EqualsAndHashCode:equals(Object)メソッドとhashCode()メソッドを作

元記事を表示

Jacksonについて

## Jackson
1. 定義
Java ObjectをJSONに変えたり、JSONをJava Objectに変えるために使用するJavaライブラリ

2. 特徴
(1)XML/YAML/CSVなど様々な形式のデータをサポート
(2)Stream方式で高速かつ柔軟で、Annotation方式でメタデータを記述できる
(3)ObjectMapper APIを使用してObjectにデータを設定する

3. Core Modules
(1)Streaming(jackson-core)
   low-level streaming APIを定義する役割とJSON-specific implementationsを含むModule
(2)Annotations(jackson-annotations)
   Jackson annotationが含まれているModule
(3)Databind(jackson-databind)
   Streaming packageのDatabindingをサポート。StreamingとAnnotations packageに依存

:::note  

元記事を表示

JasperReportsでExcelを作成する

# 背景

– JasperReportsでPDFを作成する記事は結構あるけどExcelに関する記事は少なかったので
– JasperReports自体はJavaで動作する帳票出力ライブラリ。昔からあるライブラリで日本語の情報も豊富。

# 環境

– Java 11
– jasperreports 6.19.1
– Gradle 7.4.2

# 実装

## 下準備

– 関連ライブラリを入れておく

“` gradle: build.gradle
plugins {
id ‘java’
}

group = ‘qiita.jasper.sample’
version = ‘0.0.1-SNAPSHOT’
sourceCompatibility = ’11’
targetCompatibility = ’11’

repositories {
mavenCentral()
}

dependencies {

// Test
testImplementation ‘org.junit.jupiter:junit-jupiter:5.5.2’

元記事を表示

TDDとTest Code

## TDD(Test-driven devlopment)

#### Test Code
TDDに入る前、先ずTest Codeについて知っておきたい。
Test Codeとは、サービスの品質を確認したりバグを見つけるため作成するコードで、サービスが期待どおりに動作しているのか確認できる。
Test Codeのない状態のテストより時間の節約ができるメリットもあるし、初めてコードを見た開発者がTest Codeを通じて、コードの動作を少し簡単に理解できるようにする文書にもなる。


#### TDD
1. **定義**
TDDは、開発が完了した後テストを行う方法ではなく、テストをして開発するプログラミング方法。つまり、まずTest Codeを作成し、そこに合格するためのコードを作っていく方法を意味する。
![gg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2662678/9f4e677d-1208-558c-d14f-0bf049b53c58.png)
![21c.png](https://

元記事を表示

JavaからKotlinの拡張関数を呼び出す

## やること               
タイトルの通りです。
JavaからKotlinの拡張関数を呼び出し方を書いていきます。

## どうやるか?
JavaからKotlinの拡張関数を呼び出すときは、`ソースファイル+Kt`という名前のクラスのstatic関数としてコンパイルされる。
Javaから呼び出す場合は、`this`となるオブジェクトが第一引数となります。 
実際には下記のような感じ。

Kotlinの拡張関数
“`Kotlin:Extension
fun fromJava?.toMapping(): Qiita {
return Qiita(
account = this.account,
username = this.username,
twitter = this.twitter
)
}
“`

Java
“`Java
qiita = ExtensionKt.toMapping(fromJava);
“`

以上です。

元記事を表示

[Jython]SikuliXによるRPA開発 ~各種ユーティリティ~

https://qiita.com/Q-Lazy/items/9236db59301e058ce086

前回の記事に引き続き[サンプルプログラム][1]作成の際の、SikuliXを利用したコーディングに関する気付きなどを投稿します。

https://github.com/singularity-effect/TextHelper

[SikuliX][2]には開発を支援してくれる、様々な便利機能が用意されています。個人的によく使用するものを解説します。

[1]: https://github.com/singularity-effect/TextHelper
[2]: http://sikulix.com/

## ポップアップダイアログ

よく使われるタイプの定型的なダイアログを利用できます。[Swing][Swing]による実装で、各用途に適したテーマカラーとアイコンでデザインされています。

関数名 | ダイアログの種別
————————|——————
[`popup`][popup

元記事を表示

JavaでWebアプリを開発するための初歩的知識

■背景
初歩的なWebアプリの作り方を理解したい。
Java(Servlet+JSP)で学習する。

■基礎知識
【webアプリケーションの基礎技術】
・ルーティング:webブラウザからのリクエストに合わせて、呼び出す処理を切り替える
・テンプレートエンジン:アプリケーションが保持するデータなどをHTMLのひな形と組み合わせてwebページを作成

【Javaでwebアプリケーションを開発するには】
以下の技術やツールを組み合わせる

-Servlet:サーバー上でJavaを実行する技術
-JSP:HTMLの中にJavaのコードを埋め込んで、動的にwebページを生成する技術
-Tomcat:ServletやJSPを実行するためのサーバー用アプリケーション

【参考】
https://web-dev.hatenablog.com/entry/java/servlet/dev-restful-app/table-of-contents

元記事を表示

【Java】コンストラクタにおけるthis

# はじめに
コンストラクタにおけるthisの挙動が頭の中でごっちゃになっていたので学習しました。
アウトプットを兼ねて記事投稿したいと思います。

# いきなり結論
thisの役割:「**自クラスの別のコンストラクタを呼び出す**」

# 実行環境
OS:Windows10 バージョン20H2
言語:Java 8
使用ツール:Spring Tool Suite 4

# 1. コンストラクタのthisの使い方・動作
### ⑴ 使い方
自クラスの別のコンストラクタを呼び出したい場合、このように記述します。
“this(引数);“
もちろん引数なしでも可能です。

### ⑵ 動作
“`Main.java
Public class Main {
public static void main(String[] args) {
new Test(“world!!”);
}
}

class Test{
public Test() {
System.out.println(“Hello”);
}
public Test(String val) {
this()

元記事を表示

call graphなるintellijのpluginについて

# 概要

[コールグラフ](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%82%B0%E3%83%A9%E3%83%95)を簡易に出すために[call graph](https://github.com/Chentai-Kao/call-graph-plugin)というintellijのpluginを利用して感じたことのメモ。
結論としては、有用そうだったが、Spring等DIを用いているソースコードの解析には今ひとつ足りないように感じた。

# モチベーション

なぜcall graphを利用しようと思ったのか?

ソースコードの改修を行うとき、このコードは一体にどこに影響があるのだろう、と悩むことは多い。
そんな時に私は修正箇所のメソッドを呼び出している箇所を洗いだして、影響箇所を確認している。

このような作業をする替わりに、スパッと一瞬で下記のようなコールグラフが図示できたら素敵だな、というのがモチベーションである。

![method.drawio.png](https://qiita-image-

元記事を表示

ABC264A~Dの解答

## はじめに
今回はDまでコンテスト中に提出したものです(久々の4完。嬉しい)。

では見ていきましょう。

## A – “atcoder”.substr()
問題文は[こちら](https://atcoder.jp/contests/abc264/tasks/abc264_a)

そのままです。
Javaではsubstringに相当しますね(第一引数は開始位置、第二引数は終了位置の一個後ろ)。
なお、文字列の一番最初の文字の添え字は1ではなく0なので第一引数はLではなくL-1であることに注意してください(Lは1文字目を1としているので1ズレている)。
“`A.java
class Main{

static Library System = new Library(java.lang.System.in,java.lang.System.out);

public static void main(String[] args)throws IOException{

//文字列を準備
String str = “atcoder”;

//L、Rの受け取り

元記事を表示

ドメインプリミティブについて

# はじめに
最近[セキュア・バイ・デザイン 安全なソフトウェア設計](https://onl.sc/8UiGd49)(以下、セキュア・バイ・デザイン)を読んだので、学んだことをアウトプットしようと思います。
今回は特に印象に残ったドメインプリミティブについてです。

# ドメインプリミティブとは
セキュア・バイ・デザインで紹介されている実装パターンのことです。
バリューオブジェクトとよく似ていますが、似て非なるものになります。
ドメインプリミティブはバリューオブジェクトの特性を持ちつつ、さらに以下の特性があります。
– プログラミング言語における基本データ型やStringなどのような汎用的な型を使用しない
– Nullを許容しない
– 不変条件をオブジェクトの生成時に確認する

# 不変条件とは
ドメインが持つ何が起きても変わることのない特性のことを不変条件といいます。
– 年齢の場合
– Nullでないこと
– 整数であること
– 0から150の間であること(150は人類最高齢が122なのでそこから余裕持った値)
– 携帯電話番号の場合

元記事を表示

【Spring】Entityから別のmodelに値をセットする

# はじめに

業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。

# 背景

Entityでセットされた値を、modelに格納したいと考えた。しかし、modelのsetterを呼び出し、setterの引数にEntityのgetterを呼び出すのは、フィールドの数が多い場合、可読性に欠けると考え、わざわざ上記のようなことをしなくてもmodelに格納することが出来ないかと思った経由から始まった。

# 実装

ちなみに、lombokを使用しているため、setterとgetterは記載していない。

### DBから取得・格納済みのEntityクラス

“`java:Entity.java
@Getter
@Setter
@Entity
public class Entity {
private String entityStringA;
private String entityStringB;
private String entityDateTime;
}
“`

### Entityクラスからセットするmodelクラス

“`

元記事を表示

【Java】ifを使わずListの値からEnumで定義した値のみを表示する

# はじめに

業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。

# 環境
Java:11(8でも問題ない)

# 実装

仕様は以下の通り

* aaa、iii、uuu以外は表示させない
* 表示優先順位は aaa > iii > uuu
* 重複して表示させない

“`java:呼び出し元
List tests1 = new ArrayList<>();
tests1.add(“aaa”); // 1番目に表示したい
tests1.add(“aaa”); // 重複するので除外したい
tests1.add(“uuu”); // 3番目に表示したい
tests1.add(“ooo”); // 除外したい
tests1.add(“eee”); // 除外したい
tests1.add(“iii”); // 2番目に表示したい
tests1.add(null); // 除外したい
tests1.add(“”); // 除外したい

List tests2 = TestType.getXXX(tests1);
tes

元記事を表示

【Java】複数の配列(List)をStreamを利用して一つのListにまとめる

# はじめに

業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。

# 環境

Java:11

# 準備

実際の業務では、DBから取得した半角スペース区切りの文字列(2カラム分)を配列化し、一つのListに格納する処理が必要であったため、配列の部分から記述する。

“`java
String column1 = “あああ いいい ううう”;
String column2 = “えええ おおお”;

// NULLか空の場合は長さ0の配列を代入
String[] column1Array = column1.isEmpty()
? new String[0]
: column1.split(” “);

// NULLか空以外の場合は半角スペース区切りの文字列を
String[] column2Array = column2.isEmpty()
? new String[0]
: column2.split(” “);
“`

# 複数の配列を一つのListにまとめる

“`java
// 上記で準備した配列をLi

元記事を表示

【Angularアプリケーション開発 #8】フロントエンドとバックエンドを繋げてみよう

## 目的
フロントエンドとバックエンドを疎通させること。
実際の開発現場に近い環境を再現し、経験と知識を増やすこと。

## 今回やること
なんちゃって従業員管理を作ります。
従業員一覧をDBから取得して、webページで表示するといった内容になります。
↓今回作ったwebページです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/2415bd29-5552-41ae-8691-e2fa26ada783.png)

## 開発言語とフレームワーク
フロントエンド:javascript、typescript
フロントエンドフレームワーク:angular
バックエンド:java
バックエンドフレームワーク:spring boot
DB:mysql
※DBはdockerのコンテナに構築しています。ローカルに直でインストールしていても問題はありません。

## フロントエンド
MenbersComponentを作成します。
ngOnInitでバックエンドにリクエストを送る処理を

元記事を表示

Spring入門-URL叩いてファイル作成

Java界隈で良く使われているSpringBootでファイル作成処理を作っていきます。
![処理概要図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951197/5c49c42a-d484-c644-33d1-ccfa7ea8a5fc.png)

UserがリクエストURL「localhost:8080/api」を叩いたら、任意の場所にファイル作成を行う。
Springプロジェクトだと「src/main/resources」に置くことが多い。
※参照ファイルは大抵の場合、resourcesに入っている

“`java:HelloController.java
package com.sample.app.controller;

import java.io.IOException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotatio

元記事を表示

静的コード分析ツールSonarQubeってこんなに簡単に使えるようになってたのか、の話

# はじめに

数年ぶりにSonarQubeを触ってみたくなり、試したところかなり簡単だったので、その感覚を残したく記事化してみました。

# SonarQubeとは

SonarSourceのプロダクトの一つであり、コード品質、コードセキュリティのチェックを実施するツールです。

https://www.sonarqube.org/

さまざまな使い方ができるのだと思いますが、簡単に使うためにはJenkinsなどのツールと同じようにSonarQube用のサーバーとして1プロセス立ち上げ、その中でチェックと、チェック結果を確認・参照することができます。

# 今回やりたいこと

MavenでビルドしているJavaプロジェクトに対して、ソースコードの品質が不安なので第三者チェックしてほしいと思うことがあると思います。その際に頼めるレビューアーがいないので最低限確認するためにツールにレビューをお任せしたい、ということがやりたいことです。
JenkinsのようなCI環境も手元にはありませんので、無しでいきます。

# 環境構成

ざっくりですが、以下の環境でやりました。

![image.p

元記事を表示

Spring boot_APIにてパラメータ名と変数名が異なる場合の実装方針

## 環境
– フレームワーク:Spring Boot 2.7.1
– Java 17

## 実装APIの種類
– HTTPメソッド=GET
– HTTPメソッド=POST(※ただし、Content-Typeが「application/x-www-form-urlencoded」であるもの

## やりたかったこと
実装上の変数名とAPIのIF上定義されているパラメータ名(リクエスト、レスポンス)を異なる名前にしたい。

本実装では、以下のように命名規則を違うものにしたい。
実装上の変数名:**キャメルケース**
APIのIF上定義されているパラメータ名:**スネークケース**

|種類|実装上の変数名 |APIのIFで定義されているパラメータ名 |
|———–|————|————|
| リクエストパラメータ | testId | test_id|
| レスポンスパラメータ | testName | test_name|

## 実装方法
### リクエストパラメータ
以下記事より、

元記事を表示

OTHERカテゴリの最新記事