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

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

HottyDB(検索エンジン+レコメンド+RDBMS)のレコメンド機能の使い方

# この記事の概要
HottyDB(検索エンジンとレコメンドエンジンを搭載したRDBMS)という、筆者が個人開発したソフトウェアのレコメンド機能について紹介したいと思います。

前回の記事でHottyDBの概要と検索エンジン機能について解説しているので、そちらも是非参照してみてください!

https://qiita.com/toru1055/items/0fe400989373823e9c78

# レコメンド機能
この機能では、「この商品を購入した人は、この商品も購入しています」や「この記事にイイネしている人は、この記事にもイイネしています」などのアイテムベースのレコメンデーションを実現します。 SQL LIKEなコマンドで、これらを自動的に計算する使い方を紹介します。

## 前提
説明のため、「この記事にいいねしている人は、この記事にもいいねしています」というアイテムベースのレコメンデーションを実現するための例を紹介したいと思います。

事前に、下記のような「いいね管理テーブル(`likes`)」という「どのユーザーがどの記事にいいねしたか?」を管理するテーブルが作成されている

元記事を表示

LINE WORKS Bot メッセージの送信 Java サンプルコード

# Bot – メッセージの送信

Bot からのメッセージ送信方法は、ユーザー指定とトークルーム指定の2つがあります。
– [メッセージの送信 – ユーザー指定](https://developers.worksmobile.com/jp/reference/bot-user-message-send?lang=ja)
POST/bots/{botId}/users/{userId}/messages

– [メッセージの送信 – トークルーム指定](https://developers.worksmobile.com/jp/reference/bot-channel-message-send?lang=ja)
POST/bots/{botId}/channels/{channelId}/messages

グループや組織のトークルームにメッセージを送信するにはトークルーム指定を使用します。

## Java Sample Code

標準ライブラリを使用したサンプルコードです。
`ApiAuthInfo`, `BotMessageSend` クラスに認証情報などの必要事項を記載しま

元記事を表示

Eclipseのコンソールフォント変更

# この記事で分かること
– Eclipseのコンソールのフォントサイズ変更

# 手順
1. ウィンドウ(W)をクリック
2. 設定(P)
3. 一般> 外観 > 色とフォント > デバッグ
4. コンソール・フォント(デフォルト値のオーバーライド:テキスト,フォント)
5. 適用して閉じる

## 感想
– コンソールだから 一般> 外観 > 色とフォント > コンソールかと思ったら、
違ったのでメモ
– エディタのほうは検索でもよく出てくるがコンソールは見つからなかった

元記事を表示

More about Java Serialization

# About Serialization interface

There is a brief introduction on [baeldung](https://www.baeldung.com/java-serialization) to discuss on Serialization interface. Which includes

1. The fact that **all non static fields** of serializable class must be serializable
1. How to save/load object instance
1. Define custom steps on save/load object instance
1. The function of field “serialVersionUID”
1. The function of keyword “transient”

# About writeReplace() and readResolve() function

## Example
Ple

元記事を表示

可変長引数にリストを渡すときの罠

# なにこれ?
Javaではメソッド定義で可変長引数を設定できますが、その引数にリストを渡すときは注意しないといけないよという話です。

# そもそも可変長引数とは?
メソッドの引数として個数が任意のものです。
例えばString.formatでは以下のように第1引数に書式文字列、第2引数に書式指示子(%s, %dとか)によって参照される引数を渡しますが、この第2引数は要素数が可変です。
“`java
public static String format(String format, Object… args)
“`
このため、以下のように第2引数以降は好きな数だけ引数を渡せます。
“`java:sample.java
public class Main {
public static void main(String[] args) {
System.out.println(String.format(“メッセージです”));

System.out.println(String.format(“%s宛のメッセージです

元記事を表示

Java on Azure 実践開発【App Service デプロイ用スクリプトを利用したサーバーサイドビルド】

## はじめに

ポリシー上、GitHubを使えない企業様は多いのではないでしょうか。また、ソースコードを外部に配置することになんとなく嫌な気持ちになるエンジニアの方もいらっしゃるのではないでしょうか。
かといって、ローカルでビルドサーバーをもつのも、管理が大変ですよね。「App Service をホストしておくだけで、デプロイまで完結できればいいのに」なんて思っている方も少なくないのではないでしょうか。

そんな皆様に、本記事では、App Service をホストしておくだけで、デプロイまで完結させる方法をご紹介します。

## App Service

Azure App Service とは、Web アプリケーションやREST API、モバイルバックエンドをホストするための PaaS サービスです。

公式サイト: 『[App Service](https://azure.microsoft.com/ja-jp/services/app-service/)』

## App Service へのデプロイ方法

Azure App Service には、色々なデプロイ方法があります

元記事を表示

Springboot csvファイル出力 (単体テスト有り)

# 概要
SpringBootでcsvファイルを出力します。
csv出力機能はjackson-dataformats-textというライブラリを使います。
テストはJunit5とMockitoを使います。

# 成果物
ボタンを押すとcsvファイルがダウンロードされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/1b04ca0b-fc7d-cb9f-2329-3f44171d280c.png)

csvの中身
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/f6f579d8-2029-1080-14c0-b9d1c4b4227b.png)

# 動作環境
OS:Windows10
IDE:IntelliJ Community or CodeSpace
Javaバージョン:11(pom.xmlでバージョン変えればok、17は確認済み)
Spring bo

元記事を表示

ABC259A~Dの解答[Java]

## はじめに
今回はA~Cがコンテスト中に解けて、コンテスト後にDも解けたのでDまで解説しようと思います。
なお、ライブラリはABC258のものと同じですのでメソッドの中身が気になる場合は258の記事をご参照ください。

では、解説していきます。

## A – Growth Record
問題文は[こちら](https://atcoder.jp/contests/abc259/tasks/abc259_a)

文章、制約を読み込んでみましょう。

「高橋君はN歳になった」と書いてあり、その時の身長はT[cm]だと記述してあります。
また、それ以下の文章を要約すると「0~X歳まで身長がD[cm]ずつ伸び続け、それ以降はずっと変化していない」ということを言っています。

ここで制約に着目すると、MMならX

元記事を表示

DbUnit使い方メモ

# DbUnitとは
– Java でデータベースのテストを行うためのフレームワーク
– JUnit でテストを実行する前にデータベースにテストデータを登録したり、テスト後のデータベースの状態が期待通りか検証したりできたりする
– テストデータや期待値は XML、CSV、Excel 形式で定義できる
– 結構昔からあるけど、2022年現在も Java でデータベースのテストをする場合は DbUnit が現役らしい[^1]

[^1]: [DbUnitを試してみる – CLOVER?](https://kazuhira-r.hatenablog.com/entry/2022/04/13/015738)

# 環境
OS とか Java とかのバージョン。

“`
>gradle –version

————————————————————
Gradle 7.4.2
————————————————————

Build tim

元記事を表示

RxJavaでFlowableを使って流量制限

RxJava の Flowable を使った流量制限(Backpressure)の方法について調べる機会があったので、その時に分かったことをまとめる。
(意外と欲しい日本語情報少なかったので)

## Observable と Flowable

RxJavaでは上流と下流で分けて考え、
Java8に導入された Stream の終端操作とそれ以外の処理のような形で書くことができる。
例えば並列実行で使用する Observable は以下のような感じで記載できる。

“`java
final Observable observable = Observable.create(emitter -> {
try {
for (int i = 0; i < 10; i++) { emitter.onNext(i); } emitter.onComplete(); } catch (Throwable t) { emitter.onError(t); } }); observable.forEach(System.ou

元記事を表示

GraalVMでネイティブイメージを作成 on Windows

# 概要
GraalVMを使うとJavaアプリケーションをネイティブイメージ化できます。(JVM不要で実行できる)
パフォーマンスなどJVMで実行するのとかなり異なる特性を持ちますが、ここでは触れません。
Windowsでビルドを試したので、その手順だけ書きます。

# 環境
* Windows 11
* Java 17
* Gradle 7.4(Kotlin DSL)

# 手順

## Javaアプリケーションを書く
もちろんビルド対象のアプリケーションを書く必要があります。試すだけならHello worldでいいですが、私は(機能限定版ですが)tailコマンドを作ってみました。

https://github.com/dhirabayashi/mytail

## Visual Studioをインストールする
ネイティブイメージ化はGraalVMからC++のコンパイラを呼んで実行されるようです。なのでそのためのコンパイラが必要です。
コンパイラはいくつかあると思いますが、Visual Studioをインストールするのがいいようです。

現時点で最新版のVisual Studio

元記事を表示

JUnit 単体テストの概要

# はじめに
業務で使用しているJUnitについて備忘録も兼ね、まとめていきたいと思います。
内容が多いため、何章かに分けてまとめていく予定です。
今回は、まずJUuitの内容に入る前に単体テストについてまとめていきたいと思います。

# JUnitシリーズ 項目表

| NO     | タイトル |
| —- | ——————- |
| その1 | [JUnit 単体テストの概要](https://qiita.com/ryo0527/items/70550e0a556975a593f5) |
| その2 | JUnit 環境の準備 (現在執筆中)          |

※ 新しい記事が作成できましたら、表は更新します。

# 単体テストとは
テストには、単体テストや結合テスト、総合テストなど様々なフェーズがあります。
各テストにおいて、目的や役割がそれぞれ定められています。
今回は、その中でも単体テストに焦点を当て、まとめていきたいと思います。

単体テストとは、モジュール(部品)単位でプログラムが正常に動作するかを検証する

元記事を表示

SpringBootのお勉強

# 概要

以前、業務でSpring Bootを触る機会があったため、社内wikiに備忘録的にメモを残していました。
オープンな場に残しておこうと思い、ここに書いておきます。

## Spring Bootとは

* Spring Framework一族のひとり
* 簡単な設定で使えるSpring
* Webコンテナを内包する
* Webコンテナをjarに含めるので、jar単体でWebアプリとして成立する(スタンドアロン)

## 環境構築

* Eclipse or IntelliJ IDEA Community EditionにSTS(Spring tool suite)のプラグインを入れる
* Spring Starter Projectを作成する
* ウィザードに従う
* とりあえずweb -> Spring webを入れておけばおk

## 実践

### AutoConfigure

* Bean定義自動設定
* `@SpringBootApplication`
* ↑のアノテーションに`@SpringBootConfiguratio

元記事を表示

static修飾子の使い方(Java)

【目的】
staticについて理解を深めるための投稿。

【この記事でやりたいこと】
staticを利用して、Sample2クラスで定義したnameという変数(“hello”)をSample1クラスで使いたい。

【事前知識(そもそもstaticとは?)】
クラスをインスタンス化せずに、直接的にメソッドや変数にアクセスするために必要なもの。

【利用するクラス】
○Sample1クラス
○Sample2クラス

【検証】
Sample1クラス
“`Java
public class Sample1 {
public static void main(String[] args) {
//①static String name = “hello”を利用した場合(※今回の目的)
System.out.println(Sample2.name);

//②String name = “hello”を利用した場合 
Sample2 sample2 = new Sample2();
System.out.prin

元記事を表示

org.thymeleaf.exceptions.TemplateInputException: Error resolving template, template might not exist or might not be accessible by any of the configured Template Resolvers

Spring bootでプログラムを書いていてハマったメモ。

プログラムを実行し、入り口URLにアクセスしたところ、表題のエラーメッセージが表示された。
コントローラーのソースを見ても、

return “uploadForm”;

おかしな値は返していない。

src/main/resources/templatesフォルダを作成し、その中に、ちゃんとHTMLファイルを置いている。ファイル名はuploadForm.htm 。

uploadForm.htm …

**そこだ!**

uploadForm.html

とリネームすると、期待した動作となった。

今時、拡張子をhtmとするやつなどいない。**加齢臭あふれる間違い**だった。

以上。

元記事を表示

【Java】Spring Data JPAでN+1問題が起きないコーディングをしよう。

# N+1問題とは
**1対多**の関係にある2テーブルの情報を紐づけて取得する際に、必要以上にSQLが実行されてしまうこと。
  
  対象テーブル(School)
  関連テーブル(Student)

具体的には、対象テーブル(School)に紐づく**関連テーブル(Student)を取得するSQL**が必要以上の回数で実行されてしまう。

# SQLでN+1問題を解説

1つのSchoolに対して、複数のStudentが紐づく。
|Schoolテーブル|
|—-|
|id|
|name|

|Studentテーブル|
|—-|
|id|
|name|
|school_id ****|

JOINを使えば、全Schoolとそれに紐づくStudentを1つのSQLで取得できる?
“`sql
SELECT * FROM School sc JOIN Student st ON sc.id = st.school_id;
“`
これで話は終わり…ではなく、N+1問題の場合はどういうSQLになるかというと、次のようなSQLとなる。
“`sql
— 最初に、全

元記事を表示

アノテーションベースの MyBatis で one-to-one / one-to-many のテーブルを1クエリでとってくる方法

積年の疑問が晴れた。が、だいぶゴツい。

## サマリ

– one-to-many のときは、@One アノテーションに columnPrefix / resultMap を使う
– many-to-many のときは、@Many アノテーションでおなじようにすればできるはず(未検証)

## 背景

### 過去、アノテーションベースでは N+1 問題が回避不可だった

https://qiita.com/d-yosh/items/a2bec9718bccfe15a6ae#one-many

> しかし、@Oneや@Manyでは上記と同じことを実現できず、必ず他の select を実行するしかありません。
select を利用する方法は N+1 問題が起きてしまうのが嫌で、個人的にはあまり使っていなかったので、ここはちょっとデメリットかなと思いました。

## mybatis-3.5.5 で解消した模様
mybatis-3.5.5 で `@One` `@Many` に columnPrefix を指定できるようになった。
これにより、N + 1 問題を発生させずに、1クエリで on

元記事を表示

HottyDB(検索エンジン+レコメンドエンジン+RDBMS)を個人開発するために読んだ書籍紹介!

# この記事の概要
筆者は、HottyDBという検索エンジンとレコメンドエンジンの機能を搭載したRDBMS(リレーショナルデータベース)を個人開発しています。
この記事では、HottyDBを開発するにあたって勉強した書籍を紹介したいと思います!

ちなみに、HottyDBについて詳しく解説した記事もアップしていますので、こちらもあわせてご覧ください!

https://qiita.com/toru1055/items/0fe400989373823e9c78

# 読んだ本を紹介

## ざっくり分類すると、
読んだ本をざっくりと分類するとこんな感じになります。

| 分類 | 説明 |
| — | — |
| データベースの基礎 | データベースの実装方法の大枠を掴む |
| データベースの実装 | データベースの実装方法の詳細 |
| コンパイラ系 | データベースはSQLで操作するので、SQLを解釈するためにコンパイラの知識も必要 |
| Java | Javaによるマルチスレッドプログラミングやネットワークプログラミングの方法を勉強|
| アルゴリズムとデータ構造 |

元記事を表示

Eclipseで構築したサーバーが起動しないときの対処法

古い環境で需要のある内容ではないですが、かなりハマったので残しておきます。

# 開発環境
macOS Monterey 12.3.1
Eclipse 2019-12 (4.14.0)
Tomcat v8.0

# 概要
環境構築中、Eclipseでサーバーを構築し、起動させるとすぐにエラーメッセージがコンソール上に表示されました。
“`text:コンソール
重大: Begin event threw exception [火 7 05 15:48:49 JST 2022]
警告: Catalina.start using conf/server.xml: Error at (21, 76) : org.apache.catalina.startup.VersionLoggerListener [火 7 05 15:48:49 JST 2022]
重大: Begin event threw exception [火 7 05 15:48:49 JST 2022]
警告: Catalina.start using conf/server.xml: Error at (21, 76) :

元記事を表示

JUnit5の@BeforeEachと@AfterEachが実行されない

# 問題
JUnit5でテスト実行時に`@BeforeEach`アノテーションと`@AfterEach`アノテーションのついたメソッドが実行されないことがあった。

# 解決策
下記リンクの回答で解決。

https://stackoverflow.com/questions/49441049/junit-5-does-not-execute-method-annotated-with-beforeeach

>Your init() method is not invoked because you have not instructed Maven Surefire to use the JUnit Platform Surefire Provider.
>Thus, surprisingly your test is not even being run with JUnit. Instead, it is being run with Maven Surefire’s support for what they call POJO Tests.
>Adding the foll

元記事を表示

OTHERカテゴリの最新記事