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

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

【Java】レビュワーが体験した指摘事項の共通点

## はじめに
こんにちは、私はエンジニアとしての冒険は3年目!
転職も1度し、これまで2社の会社を経験したよ!

## 共通指摘事項
さて、現在の仕事では、新人やインターン生のコードレビューも任されてます。
その中で、よくある指摘点をここにまとめてみました。

##### ① コード規約に関する指摘:
JavaDocのコメント、命名規則など、自社ルールに則ったこと。
##### ② ロジックの流れに関するダメ出し:
Nullチェックやエラーハンドリングなど。
※個人的にprintStackTrace()でエラーログ終了だと、保守性悪い気がしてるのですが・・
##### ③ 共通化:
メソッド化、クラス化、リファクタリングの重要性。
##### ④ 外部ライブラリの使用:
動作が保証されているメソッドの使用。
##### ⑤ 例外処理:
後続処理への影響や例外の投げ方。

## まとめ
これら全てをカバーできる新人は珍しいですし、私も未だに指摘されます。
ですが、指摘する側も正直めんどくさい・・

## 最後に
レビュワーの皆さん、優しくしてくださいね。
そして新人の皆さん、この記事の

元記事を表示

JavaのDateTimeFormatterについて

## はじめに
JavaのDateTimeFormatterについてまとめてみた。
Javaには日付や時刻を扱うためのクラス「DateTimeFormatter」が存在している。
このクラスを使用し、日付や時刻を表現するには3つの方法がある。
・DateTimeFormatterクラス内の定数を使用する
・パターン文字を使用する
・FormatStyleを使用する

## 事前に定義された定数を使用する
DateTimeFormatterクラスにあるstatic定数を使って日付・時刻を表現する。
“`Java
LocalDateTime dateTime = LocalDateTime.of(2023, 12, 17, 12, 10, 50);

DateTimeFormatter basicIsoDate = DateTimeFormatter.BASIC_ISO_DATE;
System.out.println(basicIsoDate.format(dateTime));
// 実行結果
// 20231217
DateTimeFormatter isoLoca

元記事を表示

独自のJavaロガーを使ったログ・メッセージをInstanaで収集する

[Instana Observability Advent Calendar 2023](https://qiita.com/advent-calendar/2023/instana)の17日目です。

## はじめに

InstanaエージェントがJavaアプリケーションのログ情報を収集するには、エージェントがサポートしているロギング・ライブラリーを使用する必要があります。

2023/12/13時点では以下のロギング・ライブラリーをサポートしています。これらのライブラリーを使用していれば、特別な設定をすることなくログ情報を収集することができます。

| Name | Versions |
|——————-|————————-|
| Java Util Logging | All supported JDKs |
| Log4j | [1.2] |
| Log4j 2 | [2.4,

元記事を表示

デザインパターンを7つピックアップ解説:Javaのサンプルコード付き

# はじめに
 ソフトウェア開発の世界では、問題解決に悩むことがよくあります。その際、他のプログラマーがすでに遭遇し、解決した問題の経験を共有できれば、開発プロセスはよりスムーズに進むことでしょう。ここでデザインパターンが重要な役割を果たします。

 デザインパターンは、ソフトウェアの品質向上、保守性の確保、柔軟性の向上など、さまざまな利点を提供します。これはある種のプログラミングの「ベストプラクティス」や「標準的なソリューション」であり、ソフトウェア開発者が問題に効果的に対処するためのガイドラインを提供します。

 デザインパターンは以下に示す様に依然として価値あるトピックです。

– **普遍的な問題解決手法:** デザインパターンは、特定のプログラミング言語やフレームワークに依存せず、普遍的な問題に対する解決手法を提供します。そのため、プログラミングの基礎を学ぶ上で非常に有益です。
– **保守性と拡張性:** デザインパターンは、ソフトウェアの保守性と拡張性を向上させるのに役立ちます。これにより、変更やアップグレードが容易になり、ソフトウェアの寿命を延ばすことができます。

元記事を表示

Amper で Kotlin 始めてみた

# はじめに
これは[RetailAI Adventurers Advent Calendar 2023](https://qiita.com/advent-calendar/2023/rai-adventurers)の 17日目 の記事です。

昨日の記事は [@caique_almeida](https://qiita.com/caique_almeida)さんの「MVVM architecture (Model-View-ViewModel)」です。

業務の中で Kotlin を触れる機会がありましたので、今回は最新の Kotlin の技術について紹介します。

# Kotlin とは

JVM、Android、ブラウザ用の静的型付きプログラミング言語です。
Java仮想マシン上で動作するため、Javaで書かれたプログラムと同程度に速くコンパイルされ同程度に速く動作します。
Javaに比べシンプルなコードなため、圧倒的に書きやすいです。

簡単にいうと、Javaの進化形!です。

# Amper とは

Amper とはプロジェクトを構成するためのツールです。

「Kotlin

元記事を表示

各種言語のBase64文字列の取り扱い

# はじめに
各種システムとのデータ連携にあたってBase64文字列を用いるシーンが偶にあり、各言語でどういった実装をするのかを毎回悩むため整理してみました。(※サンプルコードはdockerにて動作確認済み)

# 各言語の実装

## 1.PHP

“`php:main.php

“`

“`shell
$ docker run –rm -v “$PW

元記事を表示

AWS Amazon Rekognition機能と実装

# Amazon Rekognitionの概要と機能

Amazon Rekognitionは、画像やビデオの分析、顔認識、オブジェクト検出、シーン分析などのコンピュータビジョン機能を提供する、Amazon Web Services(AWS)のツールです。Rekognitionを使用することで、様々なアプリケーションの開発やサービスの拡張に活用できます。

## 機能

### 1. 顔認識
顔認識機能は、画像やビデオ内の顔を検出し、分析するための強力なツールです。以下の操作が可能です。

– 顔検出: 画像やビデオから顔を検出します。
– 顔比較: 2つの画像の顔を比較し、一致度を判定します。
– 顔検索: 既知の顔データベースに対して、顔を検索します。

### 2. ラベル検出
ラベル検出機能は、画像やビデオ内のオブジェクトやシーンを識別するための機能です。主な機能は以下の通りです。

– 一般的なオブジェクトおよびシーンの検出: 100以上の一般的なオブジェクトとシーンを識別します。
– カスタムラベルの検出: ユーザーが指定したカスタムラベルを検出します。

### 3. テ

元記事を表示

クラスの継承の関係について

クラスの継承について誤っておぼえてたので間違いの履歴として残す。
スーパークラスを継承したら、スーパークラスの内容をメソッドなどを使かえるようになったBのクラスだと思っていた。

しかし、実際は

インスタンスがA型の場合はBのクラスであってもAのメソッドしか使えない。
A型で宣言したものは使用できるのがAクラスで定義されたメソッドのみに限定される。

“`java
class A{
public void hello(){
System.out.println(“hello”);
}
}

class B extends A{
public void sample(){
System.out.println(“sample”);
}
}

public class Main{
public static void main(String[] args){
A a = new B();
a.sample(); //Aクラスには存在しないメソッドなのでコンパイルエラー

元記事を表示

【ほぼブログ】これまで手続き型プログラミングしかしたことなかった人間が、初めてオブジェクト指向の温かみに触れた話

この記事は、「C3 Advent Calendar 2023」18日目の記事です。

# 目次
1. プロローグ
2. はじめてのオブジェクト指向言語
3. オブジェクト指向を触って、改めてc言語と向き合って
4. エピローグ

# 1. プロローグ
 どうも、わんたんです。
 大学に編入してから、はや8ヶ月となりました。大学生活にも慣れてきて、あとは就職(卒業)まで余生を謳歌する終活人間になりつつあります。あと、最近忙しかったり、入学時より人間関係がディープになってきてるのもあって、今年度初めほどいろんな場所や人に顔を出せていない状態が続いてます。あの人元気かな…とDiscordを眺める日々…。

 さて、そんなことはまた別の機会に話すとして、今回は技術的な話をひとつ…

# 2. はじめてのオブジェクト指向言語
 立てばカラオケ、座ればゲーム。歩く姿はGeoGuessr。カラオケやゲームは芍薬や牡丹ほど美しい趣味ではありませんが、ギャンブルとかタバコとかよりはマシな気がします。ところで、芍薬や百合にはちょっと不吉な花言葉があります。美しいものの代名詞にネガティブな花言

元記事を表示

HTTP message body(POST、PUT、PATCHなど)のリクエストパラメータ照会

## HTTP message body
– HTTP API で主に使用する。
– データ形式は**JSON(主に使用)**、XML、TEXT などがある。
– **@RequestParam, @ModelAttributeを使用することができない。**
– ただし、HTML Form形式で配信される場合は、Request パラメータとして認められる。
– **@RequestBody(最も推薦)** を使ってできる。
– HTTP message body 情報を便利に照会することができる。
– 自分で作ったオブジェクトを指定することもできる。
– HTTP message converterがHTTP message bodyの内容を私たちが望む文字やオブジェクトなどに変換してくれる。
– **@RequestParam、@ModelAttributeと違って省略してはならない。**
(省略すると@ModelAttributeが適用される。)

## データ形式がJSONの場合
![Untitled (4).png](https://qiita-image-store.

元記事を表示

Query Parameter (GET) と HTML Form (POST) のリクエストパラメータ照会

– @ModelAttribute(最も推薦)、@RequestParam、request.getParameter()を使用してRequestパラメータを照会することができる。

## @ModelAttribute
– オブジェクトを生成し、リクエストパラメータをオブジェクトに自動的に設定してくれる。
– Typeが合わないとBindExceptionが発生する。

“`java
@RequestMapping(“/model-attribute”)
// @ModelAttributeは省略できる。
// public String modelAttributeV1(@ModelAttribute HelloData helloData) {
public String modelAttributeV1(HelloData helloData) {
log.info(“username={}, age={}”, helloData.getUsername(), helloData.getAge());
log.info(“helloData={}”, h

元記事を表示

クライアントからサーバーにリクエストデータを転送する際に主に使用する方法

1. Query Parameter (GET)
> localhost:8080/hello?**username=ABC&age=10**
– **MessageBodyなしで**、URLのクエリパラメータにデータを含めて伝達する。
– 検索、フィルター、ページングなどで多く使用する。

2. HTML Form (POST)
“`html



전송

“`
– 会員登録、商品注文のようにHTML Formを書く場合に使用する。
– HTTPメッセージボディにGETのようなクエリパラメータ形式で伝達する。
– POST HTML Form形式でデータを伝送する形式をapplication/

元記事を表示

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

前回↓

https://qiita.com/NaN-jp/items/59c2a1e37114b4ec44de

# はじめに
今回は`Repository`を作っていきます
### Repository作成
`Repository`はデータアクセスを抽象化し、オブジェクトの集合へ格納・取得・検索するかのような振る舞いを提供します
demo直下に`repository`フォルダを作成してその中に`PersonRepository.java`を作成します
“`java:src/main/java/com/example/demo/repository/PersonRepository.java
package com.example.springbootpostgresql.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.example.springbootpo

元記事を表示

リクエストのヘッダー値、デフォルト値の照会

– AnnotationベースのSpring ControllerはSpringがサポートする様々なパラメータを使用することができる。
– @Controllerの使用可能なパラメータリストは、以下のマニュアルで確認できる。
https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/arguments.html
“`java
@RestController
public class RequestHeaderController {

@RequestMapping(“/headers”)
public String headers(HttpServletRequest request,
HttpServletResponse response,
HttpMethod httpM

元記事を表示

JavaParserを利用して、javaファイルをパースした際に、メソッド宣言された行の行番号を取得する

# 結論

JavaParserを利用して、javaファイルをパースした際に、メソッド宣言された行の行番号を取得するには、MethodDeclarationクラスのgetBeginメソッドを利用します。

ここで注意すべきは、getBeginで取得できる行番号はメソッドアノテーションを含むということです。たとえば、以下のようなメソッド宣言がある場合、getBeginで取得できる行番号はmethodXが記載されている行ではなく、`@Override`が記載されている行になります。

“`java
@Override
public void methodX(){…}
“`

# 例

以下のようなファイルがあるとします。

“`java:XXX.java
package path.to.example;

public class XXX {
public void methodA() {
// …
}

@Override
public boolean equals(Object obj) {
ret

元記事を表示

JavaのコンテナイメージにAlpineを使ったらどん詰まった話

# Javaを動かすコンテナイメージ

色々ありますよね。
まずOpenJDKがいくつかあって、それぞれが各ディストリビューションのJDKだったりJREだったりを出してます。

* [OpenJDK](https://hub.docker.com/_/openjdk) (今見たらDeprecatedなんですね…)
* [Amazon Corretto](https://hub.docker.com/_/amazoncorretto)
* [Eclipse Temurin](https://hub.docker.com/_/eclipse-temurin)

など

あとはGoogleが出してるDistrolessもJava用のイメージがありますね。
* [Distroless/Java](https://github.com/GoogleContainerTools/distroless/tree/main/java)

個人的にはEclipse Temurinがなんとなく好きで、Alpine Linuxが軽量なのは知っていたので、AlpineベースのJREイメージを安易に利用していま

元記事を表示

JSP(Java Server Pages)が令和時代のWebサービス開発に向いていない話

# はじめに
Happy Holidays!
今年はとあるプラットフォームチームで大規模サービス[^1]をパブリッククラウドに移行するため、気の遠くなる一連の改修、設計、テストをしていました。クラウドネイティブに進むためクラウドネイティブの真逆な地獄の日々を送っていましたが、ある程度本番リリースがある程度できて一安心な冬を過ごしています。[^2]
[^1]: 20年以上使われていますが詳しくは秘密です
[^2]: まだ本番リリース物は残っていて2024年最初の3ヶ月くらい詰まっています。1年かけても終わらない

その一環でJSPはこれ以上使わなくていいかなあと思ったので、年末のまとめにアドベントカレンダーに参加することにしました。

# お断り

この記事はJSPが最早Webサービスの現場にフィット[^3]しない部分が多いという、実務の話です。JSP自体のアーキテクチャを否定する意向がないことを踏まえてお読みください。
この記事ではJenkins自体も否定はしていません。個人的には安定性や互換性もしっかりしており評価はできますが、Webサービス開発ではGitHub ActionなどのC

元記事を表示

自社のデータ収集システムが驚くほどコンパクトになった話

# はじめに
こんにちは。オークファンのエンジニアで、今年の10月からマネージャー(仮)になった@tmotです。マネージメントという新しいフィールドにも挑戦し始めているこの頃です。

マネージメントとは関係ないですが、自社のデータ収集システムの改修に結構苦労したので、今回はその話をしたいと思います。

# バッチに問題発生
今年の初めあたりから、弊社で長らく使われていたデータ収集システムが、ときどきOutOfMemoryErrorで失敗するようになってしまいました。
弊社サービスで提供しているデータの根幹となるバッチであり、このエラーを放置していると弊社サービスの大部分に影響を及ぼすため、早急な対応が求められました。

## バッチの詳細
データを収集し、Elasticsearchに保存するバッチです。データをなるべく漏れなく取得するため、1日2回実行しています。
AWS EC2インスタンス(`i3.4xlarge`)上で稼働しており、実行環境はJava11です。

# 暫定対応
まずはバッチを継続して動かしておくことが最優先なので、以下の暫定対応を施しました。
– 割り当てるJVMメ

元記事を表示

Spring Boot 3.1系で単体テストをやってみた

# はじめに
今回はSpringBoot3.1におけるモック化を含めた単体テストを実装してみたいと思います。プロジェクトの作成から始めるので、
* これからSpring Bootで開発するよ
* 単体テストを初めて実装するよ

という方のご参考になれば幸いです。

## 環境
### 実行環境
Windows+WSL2
IntelliJ IDEA 2023.2.5

### バージョン情報
| ソフトウェア | バージョン |
| — | — |
| Java | 21|
| Spring Boot | 3.1.5 |
| Gradle | 8.4 |
| JUnit | 5 |
| mokito | 5.6.0 |

# 事前準備
## プロジェクト作成・ロード
[Spring Initializr](https://start.spring.io/)を使います。
今回はJava21とSpring Boot 3、Gradleを用いて開発します。
以下の通りに入力してGENERATEをクリックし、DLしたファイルを解凍します。
![spring_initializr.

元記事を表示

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

前回↓

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

# はじめに
今回はControllerを作成していく

### Controller作成
`Model`と`View`を操作する`Controller`を作成していきます
demo直下にcontrollerフォルダを作成してその中に`PersonController.java`を作成します
“`java:src/main/java/com/example/demo/controller/PersonController.java
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind

元記事を表示

OTHERカテゴリの最新記事