JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

【VSCode+SpringBoot】SpringBootでAPIを作る②

前回↓

https://qiita.com/NaN-jp/items/a24f9b3af8bab36b94a4

# はじめに
今回はデータベースのテーブル作成をする

# PostgreSQL
https://www.postgresql.org/download/windows/

**PostgreSQL**は、拡張性とSQL準拠を強調するフリーでオープンソースの関係データベース管理システム

https://qiita.com/tom-sato/items/037b8f8cb4b326710f71

# pgAdmin4
https://www.pgadmin.org/download/pgadmin-4-windows/

**pgAdmin4**は**PostgreSQL**を直感的に操作するために便利なアプリケーション

https://qiita.com/pyon_kiti_jp/items/01d6150e46bd66be29f0

### テーブル作成
「parson」というテーブルを以下の内容で作る
|Attribute|DataType|Size|Prima

元記事を表示

switch文 java

Javaのswitch文で->(アロー)を使った新しい書き方を学んだのでメモしておきます。

# -> (アロー)を使ったswitch文

– :(コロン)の代わりに-> (アロー)を使うことでbreak;を簡略化できます。
– ->を使った場合で処理が1つの場合、処理を記載する { } も省略できます。※複数の処理の場合は、{ } を用いること。
– 同じ処理のcase式は、カンマで繋げてグループ化できます。(※->の有無とは関係ないですが)

**作成するプログラム**
値が1か2か3なら、[1か2か3です。] を出力
値が4か5か6なら、[4か5か6です。] を出力
それ以外なら[それ以外です。いったい何だろう?]を出力。

“`ruby:case式に : を使用
Integer type = 1;

switch(type){
case 1:
case 2:
case 3:
System.out.print(“1か2か3です。”);
break;
case 4:
case 5:
case 6:

元記事を表示

LinkedHashMap 基本メソッド

LinkedHashMap
キーと値のペアを要素とした集まり。

※インポートが必要です。
import java.util.LinkedHashMap;

# 宣言
ジェネリックス(<>)に入れるデータ型がカンマ区切りで2種類あります。
1つ目がキーのデータ型、
2つ目がキーに紐づく値のデータ型を設定します。

“`ruby:宣言
LinkedHashMap lunchMap = new LinkedHashMap<>();
“`

# ペア(キーと値)の追加
`put(キー,値)`
キーは重複は許可されません。
同じキーを登録しようとすると、後から足した方に上書きされます。
“`ruby:put(キー,値)
lunchMap.put(“牛丼”, 800);
lunchMap.put(“カレー”, 700);
lunchMap.put(“ハンバーガー”, 500);
lunchMap.put(“牛丼”, 850); /* 牛丼=800 が上書きされます*/
System.out.println(lunchMap);
/* {牛丼=850, カレ

元記事を表示

JavaのCharsetを作る

# JavaのCharset
Javaは内部的にはUTF-16で文字を扱っており、UTF-16とその他の文字コードを変換するための機能を持っています。この記事では「Charsetを作る」、つまり独自の名前の文字コード・コンバーターの作り方をまとめます。

# Charsetの作り方の概要
基本的には、以下の4つのクラスおよび1つの設定ファイル(プロバイダー構成ファイル)を用意して、クラスパスに通します。
* java.nio.charset.Charset を拡張したクラス
* java.nio.charset.CharsetDecoder を拡張したクラス
* java.nio.charset.CharsetEncoder を拡張したクラス
* java.nio.charset.spi.CharsetProvider を拡張したクラス
* META-INF/services/java.nio.charset.spi.CharsetProvider

# レベル0:まずは肩ならし
まずは最小限の用意で新しい名前のCharsetを作ってみましょう。
* XMS932Xという名前のChar

元記事を表示

子コンテナーを開始できません

# JavaでWeb開発を進めようとすると・・

こういうの出るときありませんか?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287651/06ac4694-b682-2ed3-5a2e-3910a9450d4d.png)

コンソール見ると「子コンテナーを開始できません」との記載も。うーむ。

# 色々試したが・・
サーバーのスクラップ&ビルドもしたし、クリーンもした。
少なくともサーバー作り直せば治ると思っていたがエラー変わらず。

# 解決方法
URLの向き先を設定する際、@WebServletとweb.xml両方使おうとしていたので、
web.xmlを削除後、@WebServletだけを使用するように変更して解決。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287651/180b1a9b-36f2-45ad-842d-39f975016164.png)

元記事を表示

Thymeleafの振り返り

# はじめに
初めまして、今回は以前現場で使っていた技術を備忘録的に記事にまとめようと思います。

# Thymeleaf(タイムリーフ)とは
ThymeleafとはJavaのテンプレートエンジンの一種で、SpringBootアプリケーションを開発する際によく利用されます。
HTMLファイルに独自のタグを使用せずに利用できるため、そのままブラウザで表示することが可能です。

### テンプレートエンジンとは
テンプレート部分と動的データ部分を合成し、成果ドキュメントを出力する機能です。
デザイン部分とロジック部分を切り離して作業できるといった利点があることから重宝されています。

# 環境
Windows 10 Home
SpringToolSuite4
JavaSE-17

# 実装
#### プロジェクト構成ファイルに依存関係を追加
“`ruby:gradle.build
dependencies {
implementation ‘org.springframework.boot:spring-boot-starter-thymeleaf’
}
“`

#### HTMLフ

元記事を表示

Cloudflare R2を使って公開のmavenリポジトリを作る(Gradle)

YUMEMI New Grad Advent Calendar 2023

Gradleには標準でS3やCloud Storageをmavenリポジトリとして扱う機能がついているのですが、Google Cloudのライブラリが古すぎて認証に一部問題があるようです。
GitHubからOIDCを使って接続しようと思ったら古いライブラリを使っているせいで認証できませんでした。
Google CloudならArtifact Registry使えばいいのですが、無料枠が0.5GBまでで転送料もかかることからもっと安く済む手段を探します。
マネージドなサービスであることの良さはもちろんありますが、今回はよりコストを抑えることを目的としています。

ということでCloudflare R2をmavenリポジトリとして運用していきます。

今回検証に利用

元記事を表示

Javaシステム開発初心者向けtips

# 0. はじめに
この資料はJavaシステム開発初心者向けにtipsをジャンル毎に分けて書いています
使用環境は

Windows
Vue.js
Java(Eclipse)
Git
Linux

かなりざっくりローカル開発~Linux環境に反映までのよく使いどころを抜粋しているので開発時の役にたてば幸いです

# 1. Vue.js
### Vue.js devtools
dataで保持している内容を確認したり編集できたりするchromeの拡張機能
Vue開発時に使用するととても便利

https://qiita.com/hashimoto-1202/items/c81f5d4c271eef16d957

# 2. Eclipseショートカットコマンド等
### ファイル名検索
開いているプロジェクト内に存在する全てのファイルのファイル名を検索をできる
“ctrl + shift + r“
### ファイル内文字列検索
“ctrl + h “
開いているプロジェクト内に存在する全てのファイル内の文字列を検索できる
バグ発生時にログから対象ファイルを検索したり処理を追うのによく

元記事を表示

Springの@Transactionalはthis.XXXでは機能しない

## 記事の概要
この記事はJavaを触り始めて半年の私が、実務の中でデグレを起こしてしまった失敗経験から学んだSpringでのトランザクション処理における注意すべきことをまとめました。
JavaやSpringでのWebアプリケーション開発を始めたばかりの私のような開発者の一助になれば幸いです。
※Springのversionによる違いやProxyの違い(JDK、CGLIBなど)による詳細などの詳細は記載しておりません。
※この記事にはサンプルコードが含まれていますが、今回のテーマとは直接関連しない部分については、文法や細部に関しては大まかに記述しています。

## 自己紹介
2023年6月よりAlphaDriveで開発を行っているエンジニアです。
元々Web制作よりの技術スタックを扱っていたこともあり、サーバーサイドでの開発歴は短いため暖かい目で見てくださればと思います。

## デグレを起こした経緯
あるWebサービスにてAPIエンドポイントに新たなプロパティを追加する実装を行いました。
実装した内容は想定通りの挙動を示し無事に本番環境へリリース、そのAPIエンドポイントを使用した

元記事を表示

Java の文字列リテラルの最大長は?

Java の文字列リテラルは、最長で何文字まで許容されるのでしょうか。
具体的には、**以下のように AAA… と文字を並べて何文字までならコンパイルができるのか**、調べてみました。

“`
String str = “AAAAAAAA…(略)…AAAA”;
“`

:::note info
今回は「**文字列リテラル**(ソースコード上の ” ” で囲われた文字列)」の話です。
:::

# Java 言語仕様

まず、Java 言語仕様を確認しました。しかし、字列リテラルの最大長については触れられていませんでした。
[Java Language Specification – Chapter 3. Lexical Structure – 3.10.5. String Literals](https://docs.oracle.com/javase/specs/jls/se21/html/jls-3.html#jls-3.10.5)

つまり、仕様未定義のようです。
そのため、文字列リテラルの長さをどこまで許容するのかは、 **コンパイラの実装依存**になるようです。

# J

元記事を表示

AWS Amazon Lex機能と実装

# Amazon Lexの概要

Amazon Lexは、自然言語で対話するためのサービスです。AWSのクラウド環境で機械学習を用いて開発されており、ユーザーが音声やテキストで質問や注文をしたり、問題を解決したりするために使用されます。人工知能(AI)を応用した対話型のアプリケーションを簡単に構築することができます。

# Amazon Lexの機能

1. **音声認識(ASR)**: 音声入力をテキストに変換するための高度な音声認識技術を提供します。ユーザーは音声で質問や指示を行うことができます。

2. **自然言語理解(NLU)**: ユーザーの入力を理解するための自然言語処理技術を利用します。意図(intent)やスロット(slot)といった要素を抽出し、意図に基づいた応答を行います。

3. **対話マネジメント**: ユーザーとの対話を管理し、適切な応答を生成するための機能を提供します。状態マシンを使用して対話の流れを制御し、コンテキストを保持することができます。

4. **コンソールとAPI**: Amazon Lexはコンソールから直感的に設定することができます。ま

元記事を表示

AWS Amazon Transcribe機能と実装

# Amazon Transcribeの概要と機能

Amazon Transcribeは、音声ファイルやリアルタイムの音声入力をテキストに変換するためのサービスです。自然言語処理技術を用いて、高い精度で音声をテキストに変換することができます。以下に、Amazon Transcribeの主な機能と使い方を説明します。

## 主な機能

### 音声ファイルの変換
Amazon Transcribeは、事前に録音された音声ファイルを変換する機能を提供しています。対応する音声形式は、WAV、MP3、FLAC、OGGなど豊富です。変換後のテキストは、時間情報や音声内の発話者の区別を含む形式で提供されます。

### リアルタイムの音声変換
Amazon Transcribeは、リアルタイムの音声入力に対する変換機能も提供しており、ストリーミングデータを即座にテキストに変換できます。例えば、コールセンターの音声通話や音声入力デバイスからの入力に対して、リアルタイムにテキスト化することが可能です。

### マルチスピーカーアノテーション
この機能を利用すると、Amazon Transcrib

元記事を表示

JVMとは

# はじめに
毎週1本様々な技術に関する記事を投稿しています。
もし興味のある方は下のリンクから他の記事も見ていただければ幸いです。
[@7_inai_](https://qiita.com/7_inai_)

# JVMとは
`JVM(Java Virtual Machine)とは、Javaプログラムを実行するための仮想環境`です。コンパイラが生成したバイトコードを実行し、プラットフォーム間でのポータビリティを実現します。

# なぜJVMを使用するのか?
### ■高いポータビリティ(移植性)
Javaプログラムが一度バイトコードにコンパイルされると、そのバイトコードはどんな環境でもJVM上で実行可能です。つまり、__同じバイトコードはWindows、Mac、Linuxなどの異なるオペレーティングシステム上で動作__ し、それぞれの環境で同じような結果を返すことができます。このような特性により、__プログラムの再コンパイルなしに異なるプラットフォームで動作させることができる__ ため、ポータビリティが高いと言えます。

### ■メモリ管理とセキュリティ
JVMはメモリ管理とガベ

元記事を表示

エンジニア1年目 2023年の振り返り

# はじめに
去年エンジニアとしてSES企業に入社して、初めて現場参画し、最後には転職することになった1年を振り返っていきます。
文章は稚拙なところがあるかもしれませんが、温かい気持ちで読んでいただけると嬉しいです。

この記事は[Progaku Advent Calendar](https://qiita.com/advent-calendar/2023/progaku) 13日目の記事です。

下記のような方に参考にしていただけると嬉しいです。

:::note
IT業界に興味があって転職を考えている人
IT業界で働くことが決まったけど実務はまだって人
IT業界で働き始めて1年目で転職を考えている人
:::

逆に下記のような方は読まない方がいいかもしれないです。

:::note warn
卓越した文章を読みたい人
1年目で転職する人に抵抗がある人
経験1年のエンジニアの意見なんて聞きたくない人
:::

# 今年のトピック
まずは今年のトピックから簡単に挙げておきます。

:::note
1. 初案件に参画
1. 通信制大学に入学
1. 入社1年で転職
:::

# 自己紹介

元記事を表示

日本語プログラミング言語 プロデル Java C# でHello World実行時間を仲良く競う(プロデル コンパイル済で再計測)

# はじめに
日本語プログラミング言語 プロデル とJava C# とで「Hello World」コンソール出力の反復実行時間を仲良く競い合わせてみます。プロデルはコンパイル済中間コードでの実行を再計測してみます。

https://qiita.com/advent-calendar/2023/produire

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
Produire Version 2.0.1197 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。

# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プ

元記事を表示

for / forEach / 拡張for

# for / forEach / 拡張for 書き方の違い

ArrayListの要素を一つずつ出力するプログラムを
for / forEach / 拡張for文でそれぞれ記載します。

“`ruby:ArrayList中身

ArrayList fruitList = new ArrayList<>();
fruitList.add(“Apple”);
fruitList.add(“Orange”);
fruitList.add(“Banana”);

“`

# for文
“`ruby:for文
for(Integer i = 0; i < fruitList.size(); i++){ System.out.println(fruitList.get(i)); } /*[Apple, Orange, Banana]*/ ``` # forEach文 java8以降で使用可能 ちなみに -> は アロー と呼ぶらしい。
“`ruby:forEach(省略版)
fruitList.forEach((String fruitName) -> {

元記事を表示

AWS Amazon Polly機能と実装

# Amazon Pollyの概要と機能

## 概要
Amazon Pollyは、AWSが提供するテキストから音声合成(Text-to-Speech)サービスです。テキストデータを入力すると、高品質で自然な音声を生成することができます。Amazon Pollyは、アプリケーションやデバイスに音声合成機能を追加するために利用されます。

## 機能
以下に、Amazon Pollyが提供する主な機能を示します。

### 1. 多言語対応
Amazon Pollyは、多数の言語に対応しています。異なる言語やアクセントの音声を生成することができます。

### 2. 音声のカスタマイズ
Amazon Pollyでは、音声のトーンや速度、音量などを調整することが可能です。さまざまな声質や演説スタイルに合わせて、音声合成をカスタマイズすることができます。

### 3. SSML(Speech Synthesis Markup Language)のサポート
Amazon Pollyは、SSMLをサポートしています。SSMLを使用することで、音声の強調や音楽の挿入など、詳細な音声制御を行うこと

元記事を表示

ArrayList LinkedHashSet 基本メソッドまとめ

よく使いそうなArrayListクラスのメソッドまとめ
インデックス番号は0から始まります。
LinkedHashSetクラスでも使えるみたいです。

## 宣言
※右側の<>(※ジェネリックス)の中身は省略できます。
“`ruby:宣言
ArrayList fruits = new ArrayList<>();
“`

## 要素の追加
ArrayListクラスは、値の重複が許可されます。
LinkedHashSetクラスは、値の重複が許可されません。
LinkedHashSetクラスで同じ要素を追加するコードを記述しても、エラーは出ませんが、実際には同じ要素が追加されません。

ArrayListクラスの場合
“`ruby:add(要素)
ArrayList fruits = new ArrayList<>();
fruits.add(“Apple”);
fruits.add(“Orange”);
fruits.add(“Banana”);
fruits.add(“Apple”);
System.out.println(fruits);

/*

元記事を表示

Spring Framework 6.1 から追加された RestClient を試してみる

この記事は[NTTコムウェア Advent Calendar 2023](https://qiita.com/advent-calendar/2023/nttcomware) 13日目の記事です。

# はじめに
こんにちは、NTTコムウェアの田村です。
普段は[Macchinetta Framework](https://macchinetta.github.io/)、Springプロジェクトに関する社内からの問合せ対応や技術検証を行っています。
今回は Spring Framework 6.1 から新しく登場したRESTクライアントである RestClient について[公式ドキュメント](https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-restclient)を参照しつつ試してみました。
Spring Boot では 3.2 からRestClientをサポートしています。

:::note info
本記事では Spring Framework 6.1.1 をも

元記事を表示

java 8のLocalDateTimeクラスのisAfterとisBeforeが分かりにくかったため表にしてみた

# LocalDateTimeクラス
LocalDateTimeクラスの日時を比較するのにisAfterとisBeforeを使用するが、毎回どっちがどっちなのかが分からなくなるため表にしてみました。

https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDateTime.html

| | **a** | **b** | **a****b**より**前**
**a**.is**After** **b** | **a**