JAVA関連のことを調べてみた2021年11月16日

JAVA関連のことを調べてみた2021年11月16日
目次

SpringBootで一意性制約のアノテーションを自作(コピペで完成)

#はじめに
SpringBootでアプリケーションを開発中に、Emailやその他ユニークな値の制約の設定の仕方がわからず、ググったところ、Springのバリデーションでは一意性のエラーチェックがないようなので、自作することになった。

ところが、自分が参考にしている記事を超える記事がなく、小1時間ほど悩んでようやく実装できたので、備忘録として残すことにした。
※Railsならdeviceが自動で実装してくれていた…

#環境
・Java11
・SpringBoot2.5.6
・Spring Data JPA
・MySQL
・gradle

#アノテーションを自作する
まず、下記の画像のように`com.example.demo`上で右クリックをし、新規→注釈の順でアノテーションインターフェースの雛形を作成する。
![スクリーンショット 2021-11-16 6.38.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/879778/46c9b959-f78c-a5a1-dd2b-b4fa80a0bae

元記事を表示

【Spring boot】Spring boot プロジェクトの作り方 (Java)

今度、業務でJavaのWeb-APIを使用するという話があったので、その予習のために調べた内容を記載しておきます。
今回、実際に作成したソースコードはgithubに上げておきました。
https://github.com/NagaJun1/sample_project_name

#開発環境
Javaでweb開発をするならEclipseを使用するかと思いますが、今回はVisual Studio Code を使用します。
(新しくEclipseを入れるのが手間だったので…)
最終的にはEclipseを使用することになるかと思いますが、今回はSpring bootの基本的な部分だけ分かればよいので、Eclipseは使用しません。
Spring Tool のプロジェクトを作成する場合には、Spring Tool Suite(STS)を使用する必要があります。
Visual Studio Code にSpring Tool Suite(STS)を追加したい場合は、「拡張機能」で、「Spring Boot Extension Pack」をインストールすれば、使用することができます。
(Visua

元記事を表示

シンプルな JSON 読み込み Java サンプル (jackson-databind 利用)

JSON をちょっと Java で読み込みたい時のサンプルをメモしておきます。

JSON読み書きには [RFC 4180](https://www.rfc-editor.org/info/rfc8259) を実装する必要がありますが、一般的にはライブラリ利用により実現します。
この例では、 `jackson-databind` を利用した JSON読み込みサンプル記述を残しておきます。

# Maven (pom.xml)

まず最初に、JSON読み込みを実現するためのライブラリである `jackson-databind` をビルドに組み込みます。 pom.xml ファイルの に以下の Maven Repository 記述を追加します。 (ビルドでの自動ダウンロードの実現のためには、インターネットに接続されている必要があります)

“`xml

com.fasterxml.jackson.core
jackson-databind

元記事を表示

シンプルな CSV ファイル読み込み Javaサンプル (Apache commons-csv を利用)

ちょっと CSV ファイルを読み込む Java プログラミングを実装したい場合に役立ちそうなサンプルをメモしておきます。
CSVファイル読み書きには [RFC 4180](https://datatracker.ietf.org/doc/html/rfc4180) を実装する必要がありますが、一般的にはライブラリ利用により実現します。
この例では Apache commons-csv を利用した CSVファイル読み込みサンプル記述を残しておきます。

# Maven (pom.xml)

まず最初に、CSV ファイル読み込みを実現するためのライブラリである `Apache` `commons-csv` をビルドに組み込みます。 `pom.xml` ファイルの `` に以下の `Maven Repository` 記述を追加します。 (ビルドでの自動ダウンロードの実現のためには、インターネットに接続されている必要があります)

“`xml

org.apache.commons
<

元記事を表示

シンプルな HTTP クライアント Javaサンプル (Apache HttpComponents 4.5系を利用)

`curl` の基本機能相当の HTTP クライアントを Java プログラミングて実装したい場合に役立ちそうなサンプルをメモしておきます。
ここでは、Apache HttpComponents (4.5系) を利用して 特定の URL から HTTP GET するサンプル記述を残しておきます。

# Maven (pom.xml)

まず最初に、HTTP クライアントを実現するためのライブラリである `Apache` `HttpComponents` (4.5系) をビルドに組み込みます。 `pom.xml` ファイルの `` に以下の `Maven Repository` 記述を追加します。 (ビルドでの自動ダウンロードの実現のためには、インターネットに接続されている必要があります)

“`xml

org.apache.httpcomponents
httpclient
4.5.13

元記事を表示

JavaソースコードのPropertyを獲得する

“`java
package org.tei.mvcbinding;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

@SpringBootApplication
public class MvcBindingApplication {

public static void

元記事を表示

動画で学ぶJHipster (8) (UIの強化)

# 参考動画

## 参考テキスト
https://github.com/mraible/jhipster7-demo#make-ui-enhancements

# Hot Module Replacementの有効化
(以下テキスト(の日本語訳))
JHipsterで生成されたアプリケーションでUI開発を行う場合、ファイルを保存するとすぐに変更を確認できると便利です。JHipsterは、Browsersyncとwebpackを使用してこの機能を強化します。この機能を有効にするには、blogディレクトリで次のコマンドを実行します。

“`
npm start
“`

<<
`npm start`で、`ng serve –hmr`を起動していました。`ng serve` はAngularのコマンドで、https://angular.io/cli/serve によると、`–hmr`オプションは、Hot Module Replacement (HMR) を有効化するオプションらしいです。

:::

元記事を表示

Couchbase Lite機能解説:ピアツーピア同期〜プログラミング構成と設定項目

## ピアツーピア同期プログラミング構成

Couchbase Liteのピアツーピア同期機能を利用するためには、`URLEndpointListener`クラスを利用します。

`URLEndpointListener`を初期化する際に、`URLEndpointListenerConfiguration`を使用して構成を実行します。

ここでは、Couchbase Liteのピアツーピア同期で行えることの理解を助けるため、`URLEndpointListenerConfiguration`で設定できる項目を紹介します。

## ピアツーピア同期設定項目

`URLEndpointListenerConfiguration`を使用して、リスナーを初期化するために使用できる構成オブジェクトを作成します。

#### `port`
リスナーがリッスンするポート。

ポートがnullまたはゼロの場合、リスナーは使用可能なポートを自動割り当てします。

#### `networkInterface`
IPアドレスまたはネットワークインターフェイス名の形式で指定する、リスナーが利用する使用するネ

元記事を表示

【Android】新規画面の追加、別画面として扱い(Java)

最近、Android Studioを使って、JavaのAndroidアプリを独学で作成しているので、その過程で勉強した内容です。
作成したコードはGithubで公開しているので、気になる方は下記をご覧ください。
https://github.com/NagaJun1/OriginalCalendar

#新規画面作成においての前提
まず、Androidで新規画面(アプリ起動後の初期画面とは別の画面)を表示するには、Javaの場合は`setContentView();`を実行することで表示できます。
ですが、この場合、Androidのライフサイクル(`onStart()`や`onStop()`などのイベント)を使用することが難しくなります。
その問題を解消するために、`Intent`を使用した処理を実装する必要があります。

#新規画面の作成
新規画面の’.xml’作成は、プロジェクト作成時に作成される`\res\layout\activity_main.xml`と同様の作りにすればOKです。
(例として、`activity_sample.xml`としておきます。)
ついでに書いておくと

元記事を表示

【初心者向け2021年最新版】M1 Mac + Java + IDEA + Apache Tomcat環境構築

ターミナルの作業は殆どなくて、基本はアプリインストールすれば環境構築できるはずです。
初心者にやさしい導入手順です。お役に立てたら嬉しいです。

## 1. JDK

[アクセス→Download Zulu Builds of OpenJDK](https://www.azul.com/downloads/zulu-community/?os=macos&architecture=arm-64-bit&package=jdk)

必要なバージョンを選び、アーキテクチャー必ず**ARM 64-bit**にしてください

あとはdmgダンロードのみ

![img](https://raw.githubusercontent.com/chihokyo/image_host/master/20210621024644.png)

ローカルに落としたらいつものようにインストールだけ

“`bash
#下記のコマンドで確認できる
$ java -version
“`

## 2. IDEA

[すぐダウンロードできるIDEAのURL ](https://www.jetbrains.com

元記事を表示

Java 文字列を1文字ずつ表示

#文字列を1文字ずつ表示

charAtを使うことで一文字ずつ表示することができます。

“`
変数名.charAt(index)
“`

“`java:Test.java
public class Test{

public static void main(String[] args) {
String s = “ありがとう”;
for(int i=0; i

元記事を表示

Javaファイルを解析してホワイトボックステストのテストケースを生成するツールを作成(※C1のみ 2021/11/13 現在)

表題の内容に関するツールを作成しました。
残課題がありますが一旦の区切りとしてコミットしました。

– ソースリポジトリ(Git)
https://github.com/miwa-m/decision_generator/tree/develop

– 実行可能jar
https://github.com/miwa-m/decision_generator/releases/download/0.0.2/DecisionMatrixGenerator.jar

– 動作環境
Java 16(Open JDK 16)

– 概要/使用方法(Git上のREADMEから)
# decision_generator
(Desicion Matrix Generator)

## Overview

Desicion Matrix Generatorは指定のJavaファイルからホワイトボックステストにおけるカバレッジを担保するテストケース表をxlsxに出力するツールです

## Specification

### Usage

#### Parameters

| name |

元記事を表示

Twitchのチャンネルが配信を開始したらDiscordへ通知する

# この記事のゴール
– 任意のTwitchチャンネルが配信を開始したことをDiscordのテキストチャンネルへ通知するアプリをつくる :mega:
– 初期構築・維持含め、タダで実現する :moneybag:

![goal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556115/17398ddb-5ca9-e74f-e751-404febba4357.png)

# 採用したアーキテクチャ
– ハードウェア、サーバ
– Google Cloud Platform Cloud Functions

– 言語
– Java (OpenJDK 11)

## なぜ?
– 配信が開始されたときのみ動作すればいいアプリなので、ミニマルなサービスでいいから
– インターネットと通信を行なうアプリをタダで構築したいから(AWS LambdaはElastic IPのぶんコストが発生する)

言語は好みです。Javaを選択してGCPで構築する場合は、ランタイムの制約があるためJava11を使用

元記事を表示

コンピュータとオセロ対戦26 ~JavaでBitBoard~

https://qiita.com/tt_and_tk/items/068f2afde6db637e189f

[前回](https://qiita.com/tt_and_tk/items/9279ee9b1cab8efe529e)

# 今回の目標
前回、データ集めも機械学習もPythonで行うと書きましたが、Javaにも機械学習ライブラリがあると知りやっぱりJavaで行うことにしました。
今までc++でデータ集め、Pythonで学習と分けて行っていた理由は、

* c++は最高クラスの実行速度があるものの機械学習ライブラリがない -> データ集めには向くが学習はできない
* Pythonは実行速度こそ遅いものの機械学習ライブラリとそれに関する情報が豊富 -> データ集めには向かないが学習は得意

という両極端な性能があるからでした。
しかしJavaなら、最高クラスとまではいかないものの高速な実行が可能で、かつPythonほど情報が豊富ではないものの機械学習ライブラリが存在するという中間的な性能を持っています。そのため今回目指しているような、「データをいったんcsvなどで保存すること

元記事を表示

JavaでExcelファイルに書き込み・出力する。

現在、参画している案件でJavaを扱っています。
その際Java上でExcelファイルに書き込み・出力するコードを書きましたので、自身の勉強のために記録として残しておきます。(2021年11月時点での情報ですので、間違っていたら申し訳ないです。)

Mavenやpomの設定なんかは調べて出てくるものを真似して使いました。
こちらがExcelに書き込み・出力する簡単なコードになります。
![スクリーンショット (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2280983/9f4a20c1-ea67-6367-1a90-75f1ea08624f.png)
①まずWorkbookクラスで書き込みたいExcelファイルを指定します。
②次にExcelのシートを指定します。
③そしてRowの位置を指定した後に、Cellの位置を指定します。
※Row = Excelでいうと縦の列, Cell = Excelでいうと横の列
④書き込む文字を指定した後は、出力ファイルを作成します。(元々のファイルに出力しても構

元記事を表示

【図解で理解】インタフェースとDIについて

はじめに

インタフェースとDIってなくても実装できるのに何で必要なの?と思ったのでこの記事にまとめました。

言語の学習の際につまずく要因として「何その考え?」ということが多いと思いますが、これを理解しておくのとしないのでは現場での活躍度が遥かに変わってくると思います。

図を用いて解説します。

インタフェースとは?

メソッドの具体的な処理は記載せずに「変数」「メソッドの型」を明記したもの。

要約すると、
他のクラスで使用する変数とメソッドが明記されたファイル。

インタフェースのメリットと使い方はこちらで詳しく記載しています。

DIとは?

DIとは、外部の環境などに依存する部分(データへのアクセスなど)を切り離し、 ソフトウェアの外部から提供できるようにするという考え方です。
(引用:Webアプリケーション開発教材 実行時にアノテーション@Overrideが見つからなかった話

## これはなんですか
Java屋さん向けのjava.lang.Classやjava.lang.Methodやアノテーションを使ったあれやこれやする浅瀬くらいの深みな話。
ソース中でstream構文等を使用しているためjava9未満のバージョンをお使いの方はよくわからないかもしれませんが、心の目で見ればわかる、かも。

## やりたいこと

1. インターフェースに書いてあるメソッドをimplementsしたメソッドに @Override を書いてない輩を見つけたらあんじょうよろしゅうしたい
2. そうだ、単体テストで見つけよう!
3. 結論:だめでした

### 検証その1 指定したクラスのメソッド一覧を取得する

単体テストのコード

“` Java
import java.util.Arrays;
import org.junit.jupiter.api.Test;

public class FindOverrideTest {

@Test
public void test() {
Arrays.stream(Class1.class.getMethods

元記事を表示

【Android】BottomNavigationView(画面下部のナビゲーションビュー)の実装(Java)

最近、独自でAndroid のアプリを書いているので、それのメモ書きぐらいのつもりで書いています。
独自で書いているコードは下記に収めてあるので、気になる方は下記をご覧ください。
(「カレンダー_設計書.xlsx」に完成図がざっくりと書いてあります。)
https://github.com/NagaJun1/OriginalCalendar

#「BottomNavigationView」とは?
下記画像の、赤枠の部分がそれです。
今回の記事の題名には「Java」と書いてありますが、実装方法自体は「xml」で実装します。
![ナビゲーションバー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/b5204b73-9f70-d32e-a279-d3b00bde96dd.png)

#実装
ソースコードは下記の通りです。
(各ソースの配置位置は、Andoid Studioでプロジェクトを生成した基本的な構造を想定しています。)

“`xml:\res\layout\activity_main.x

元記事を表示

【図解で理解】Javaのinterfaceのメリットと使い方について

目的

・Javaのinterfaceのメリットと使い方を理解する

interfaceとは

メソッドの具体的な処理は記載せずに「変数」「メソッドの型」を明記したもの。

要約すると、
他のクラスで使用する変数とメソッドが明記されたファイル。

interfaceのメリット

・予め規格(ルール)を決めておけばその通りに作成することができ、保守性が上がり複数人での開発の際に実装が複雑化せずに済む。

・改修が発生した場合でも追加で改修を実装するだけで、大元の呼び出しクラスへの影響を抑えられる効果もありテストの工数を短縮することも可能。

・クラス間で疎結合の関係になる。

・インタフェース内で定義したメソッドを継承先で実装しないとエラーになるので実装漏れを防ぐことができる。
 →そのため最初に必要なメソッドと引数を検討してインタフェース内に記述しておくといい。

▼インタフェースがない世界
![インタフェースがない世界.jpg](https://qiita-image-store.s3.ap-northeast

元記事を表示

Couchbase Lite機能解説:ローカルデータ同期

## 概要

Couchbase Liteは、ローカルにあるふたつのデータベース間のレプリケーションをサポートしています。これにより、Couchbase Liteデータベースのデータをセカンダリストレージに保存することできます。

以下は、ローカルデータ同期のコーディング例です。

“`JAVA
DatabaseEndpoint targetDatabase = new DatabaseEndpoint(database2);
ReplicatorConfiguration replicatorConfig = new ReplicatorConfiguration(database1, targetDatabase);
replicatorConfig.setReplicatorType(ReplicatorConfiguration.ReplicatorType.PUSH);

// レプリケーターを作成します(レプリケーターがGCされるのを防ぐために、参照が保持されている必要があります)
replicator = new Replicator(replicatorConfig)

元記事を表示

OTHERカテゴリの最新記事