- 1. Spring Boot Web アプリケーションを作る
- 2. 【Java】今更知ったAtomicIntegerでラムダ式内処理結果をカウント
- 3. 個人的Minecraft Java Editionの初期設定
- 4. Spring Tool Suite 4 インストール、Spring Initializr 、gradlew の利用
- 5. 現場で役立つシステム設計の原則 備忘①
- 6. Javaのモジュールを作ってみる
- 7. jacksonを使ってjson生成時に先頭文字を大文字にしたい
- 8. GitHub ActionsからGitLabのMavenパッケージレジストリにDeployする方法
- 9. AndroidでのJava→Kotlin移行時に起動すると異常終了するようになった場合の対処法
- 10. Classが理解できない、難しい人のために
- 11. JavaでSlack botをリリースするまで その2
- 12. Visual Studio CodeのInlay Hintsについて Java編
- 13. ~今さらながらJavaで関数型プログラミングを学習してみた~(第3部)
- 14. ElasticsearchをソースからビルドしてIntelliJを使ってデバッグ実行する
- 15. 【個人開発】HottyDBのLock-freeなメトリクステーブルを紹介します!
- 16. 簡潔なGoと簡単なJavaのどちらを選択するか
- 17. Windowsのファイル名の禁止文字をアンダースコアに置き換える関数
- 18. JUnit5
- 19. Java PDFドキュメントの印刷方法
- 20. HottyDB(検索エンジン+レコメンド+RDBMS)のレコメンド機能の使い方
Spring Boot Web アプリケーションを作る
# はじめに
記載情報は CI/CD に関連します。
実務上関わった環境・機能を身近な情報としてお届けしたく、投稿をはじめました。
各学習上、お金のかからない方法を選択していきます。以下の手順を実施することで、Spring Boot Web アプリケーションを作る工程を模倣します。
## 対象者と関連環境・機能
この記事は下記のような人を対象にしています。
– CI/CD 初学者
– プログラミング初学者
– 駆け出しエンジニア記載している環境・機能は以下です。
– Java
– Spring Boot
– Spring Web
– thymeleaf
– Spring Tool Suite 4## 準備
| No | 参照 URL |
| –: | ———————————————————————–
【Java】今更知ったAtomicIntegerでラムダ式内処理結果をカウント
以下のように実装できます。
“`Java
AtomicInteger successCount = new AtomicInteger(0);
// 何かしらのデータ取得処理
ListdataList = getDataList();
dataList.stream().forEach(data -> {
try {
// 何かしらの処理
process(data);
successCount.incrementAndGet();
} catch (Exception e) {
throw e;
}
});
“`ラムダ式を使うとローカル変数のインクリメントによるカウントができないため、
非常にダサいですが元々は以下のように成功するたびにListにtrueを追加して、その数をカウントしていました。“`Java
ListsuccessList = new ArrayList<>();
// 何かしらのデータ取得処理
Listdata
個人的Minecraft Java Editionの初期設定
身の回りで「Minecraft買った~」という人を割と見かけるので自分のいつもやってる初期設定というか導入方法を書いておく
## Minecraftの購入
[https://www.minecraft.net/ja-jp](https://www.minecraft.net/ja-jp) で購入しましょう。確か今は購入するとJava版もBE版も遊べたはず。
(この前までは別々に購入する必要があった)## Minecraftランチャーのインストール
[https://www.minecraft.net/ja-jp/download](https://www.minecraft.net/ja-jp/download) から自分の環境に合ったものをダウンロードします。
新規購入した方は購入画面からそのまま進んで大丈夫です。ダウンロードが終わったらインストールを行いましょう。Chromeであれば左下に表示されるダウンロードされたファイルをクリックしてもらえれば、インストールが始まります。ダウンロードフォルダーをエクスプローラーで開いて、ダブルクリックすることでもできます。
Spring Tool Suite 4 インストール、Spring Initializr 、gradlew の利用
# はじめに
記載情報は CI/CD に関連します。
実務上関わった環境・機能を身近な情報としてお届けしたく、投稿をはじめました。
各学習上、お金のかからない方法を選択していきます。以下の手順を実施することで、Spring Tool Suite 4 をインストールを行い、Spring Initializr でプロジェクトのテンプレートを入手の上、gradlew 利用の準備を行います。
## 対象者と関連環境・機能
この記事は下記のような人を対象にしています。
– CI/CD 初学者
– プログラミング初学者
– 駆け出しエンジニア記載している環境・機能は以下です。
– Java
– Spring Boot
– Spring Web
– Spring Tool Suite 4
– Spring Initializr
– gradlew## Spring Tool Suite 4(STS)のインストール
後に続く関連記事で Spring Boot Web アプリを作り、CI/CD 環境に乗せていくため、アプリ作成に便利な IDE のインストールを事前作業とし
現場で役立つシステム設計の原則 備忘①
## 第1章 小さくまとめてわかりやすくする
### 変更が大変なプログラムの特徴
1. メソッドが長い
2. クラスが大きい
3. 引数が多い### 変更に強いプログラムの書き方
– メソッドは短く、クラスは小さく
– 略語は使わない
– 意味のまとまりで空行をうまく使う
– 説明用のローカル変数の導入(変更の影響範囲を局所化)
– 1つの変数に代入を繰り返す破壊的代入を避ける
– 意味のあるコードのまとまり(段落)を「メソッド」として独立させる
– 業務の関心事に対応したクラス(ドメインオブジェクト)を作る
– **値オブジェクトを利用する**
– **値オブジェクトは完全コンストラクタで作る**
– **コレクションオブジェクトを利用する**### 値を扱うための専用クラスを作る(値オブジェクト)
– 基本データ型をそのまま使うと無法地帯
– 基本データ型では意味の違う値でも型が同じなのでコンパイル時に検出できない
– 値の範囲を制限することで、わかりやすく安全に
– 値オブジェクトは業務の用語そのものNG例
“`java
int quantity;
B
Javaのモジュールを作ってみる
資格試験の勉強をしていて、モジュールを実際に実装したことがないと思ったのでやってみました。
“`php:HelloOya
package oya;public class HelloOya {
public void hello() {
System.out.println(“Hello Oya!”);
}
}
“`“`php:KoMain
package ko;import oya.HelloOya;
public class KoMain {
public static void main(String[] args) {
HelloOya ho = new HelloOya();
ho.hello();
}}
“`
“`php:moduleoya
module moduleoya {
exports oya;
}
“`
“`php:moduleko
module moduleko {
//requires moduleoya;exports ko;
requires transitive moduleoya
jacksonを使ってjson生成時に先頭文字を大文字にしたい
## やりたいこと
以下のようなクラスがあった場合に、
“`Java
@Getter
public class SampleClass{
private String propertyA;
private String propertyB;
}
“`オブジェクトを変換すると、
`{“propertyA”:”hoge”,”propertyB”:”fuga”}`
のようになると思うのですが、
諸事情あって、以下のように送信したかったことがありました。
`{“PropertyA”:”hoge”,”PropertyB”:”fuga”}`いちいち`@JsonProperty()`を書くのは面倒・・・
## 解決法
`ObjectMapper`のオプションで解決できました。
“`Java
ObjectMapper mapper = new ObjectMapper();
// 以下のオプションを有効化!!
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.UPPER_C
GitHub ActionsからGitLabのMavenパッケージレジストリにDeployする方法
# この記事の概要
筆者は、HottyDBという検索エンジンとレコメンドエンジンの機能を搭載したRDBMSを個人開発しています!
そのHottyDBのα版を公開するにあたり、GitLabのパッケージレジストリを使いました。
この記事では、GitHub ActionsからGitLabのパッケージレジストリにMavenパッケージをDeployする手順を解説します。ちなみに、過去の記事でHottyDBに関する解説もしていますので、よければそちらも参照してみてください!!
https://qiita.com/toru1055/items/0fe400989373823e9c78
# 背景
Mavenパッケージを公開したい場合、一般にはMaven Central Repositoryを使うと思います。
ただMaven Central RepositoryはJIRAチケットによる申請が必要なので、HottyDBがまだα版であることを考えると少々面倒です。GitLabのパッケージレジストリであれば簡単にMavenパッケージの公開や削除することができるので、今回使うことにしました!
#
AndroidでのJava→Kotlin移行時に起動すると異常終了するようになった場合の対処法
## Javaファイル右クリック → Convert Java File to Kotlin File
このままだと変換は無事終了するが、起動時に以下のエラーが出て異常終了してしまう。
“`
Caused by: java.lang.ClassNotFoundException: Didn’t find class “com.xxxxx.xxxxxxx.XxxXxxxxx” on path: DexPathList[[zip file
“`## javaディレクトリ右クリック → Convert Java File to Kotlin File
こちらだと、以下の確認ダイアログが表示される。
“`
Kotlin is not configured in the project
You will have to configure Kotlin in project before performing a conversion.
“`“`OK, configure Kotlin in the project“`を選ぶと、“`build.gradle“`や“
Classが理解できない、難しい人のために
## この記事を書いた理由
私はエンジニアの学習を始め、一通り文法を勉強しましたが
Classの意味が本当にわからなかったです。
わからない原因をずーっと考えていましたが、自分なりの答えにやっと辿り着きました。
それは『Classの概念がなぜ必要かわからない』というところでした。
## 覚えておいた方が良い前提条件
Classの説明に関してはあらゆるところで見ると思います。
よく見るのが
Classとはモノの設計書です。
Classとは概念です。
Classはインスタンスを生成してから使います、、
そしてこんな設計図をみます、、
![スクリーンショット 2022-07-15 11.25.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/714631/a74d3795-ce77-41f6-5134-865cafda26bb.png)こんなこと書かれてあーなるほどね。そう理解する人はごく少数だと思います
そこで、知っておくべきこととして大事なことですが
*アプリケーションは何百ものソースコードの集合
JavaでSlack botをリリースするまで その2
[前回](https://qiita.com/blue_islands/items/bd16d23bb75e818cd133)、アプリの作成までを進めていきましたので、今回はアプリのリリースについてをまとめていきます。
# アプリの提出
作業を開始するには、[アプリ設定のページ](https://api.slack.com/apps) の 「Manage Distribution (配信を管理する)」 セクションをクリックします。## アプリを他のワークスペースと共有する
この配布オプションをアクティブにすると、すべてのワークスペースでアプリをインストールできるようになり、アプリを Slack App Directory に送信する手順が表示されます。配布を有効にする前に、以下の手順を実行してください。
### 機能を有効にする
以下の画像のように使用する機能に対して機能が有効化されている必要があります。
前回の設定が完了していれば、こちらの以下のように設定されています。
![image.png](https://qiita-image-store.s3.ap-northe
Visual Studio CodeのInlay Hintsについて Java編
# 今回の事象について
Visual Studio CodeでJavaのコーディングをしてたら、println関数内に勝手に「x:」が勝手に表示されてなんだこれは?
と思ったので調べてみました。
![スクリーンショット 2022-07-14 22.34.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737484/4f85d989-dbc3-898b-b0c8-194d81b2a5b7.png)# 調べてわかったこと
どうやらこれは、javaの拡張機能が提供してる「Inlay Hints」という機能がオンになっていて
メソッドに対して指定する引数のパラメータ名を親切に表示してくれてるみたい。
![スクリーンショット 2022-07-14 22.40.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737484/42c922e7-bd11-3606-7016-35cea7a65839.png)
上記の場合だ
~今さらながらJavaで関数型プログラミングを学習してみた~(第3部)
「関数型プログラミングとJava8での取り組みと追加API説明」を中心テーマとした第1部はすでに投稿されています。
[第1部へのリンク](https://qiita.com/greencycle/items/d864a56da30b3861fb4b)「実際Javaシステム開発においてどの程度関数型プログラミングを取り込むべきなのか?」を中心テーマとした第2部はすでに投稿されています。
[第2部へのリンク](https://qiita.com/greencycle/items/b476c8d2de013759e1e2)## はじめに
第1部では関数型インターフェイス、Map、List、Streamにおける関数プログラミングのサンプルを紹介しましたが、第3部ではこの中でも把握しずらいStreamにおけるmap、flatMapとcollectメソッドを中心にしたサンプルを紹介いたします。
合わせて関数プログラミングに関連したStringメソッドや知っておくと便利なArraysとCollections、それにmapやflatMapでよく使用するCollectorsについてもサンプ
ElasticsearchをソースからビルドしてIntelliJを使ってデバッグ実行する
どうも、Elasticのコンサルタントの杉森といいます。Qiitaでははじめての記事です。お手柔らかにお願いします。
この記事ではエンジニアならば誰しもがやってみようかと思っているけど面倒で後回しになっているであろう作業、つまりElasticsearchをソースからビルドしてIntelliJでデバッグする、というところを紹介したいと思います。難しいことは何もないですが、初回ビルドにはそこそこ時間かかりますので、そこはご承知ください。
特にIntelliJについてはあんまり使い慣れていない私のような人を想定した記事です。ベテランの人は暖かく見守って下さい。
## 前提
この記事の前提は以下とします。
– Macのローカルでビルド(IntelMac, macOS Montereyで確認しています)
– JavaはSDKManでインストールしたJDK17をつかう
– IntelliJ IDEA 2022.1.2 (Community Edition)
– mainブランチのHEADからビルド(執筆時点ではElasticsearchバージョン8.4)## JDKインストール
【個人開発】HottyDBのLock-freeなメトリクステーブルを紹介します!
※HottyDBは、検索エンジンとレコメンドエンジンの機能を搭載したRDBMSです!
# この記事の概要
筆者が個人開発しているHottyDBの機能の1つ 「**Lock-free** なメトリクステーブル」 について紹介したいと思います。以前の記事でHottyDBの概要を解説しているので、そちらも是非参照してみてください!
https://qiita.com/toru1055/items/0fe400989373823e9c78
# メトリクステーブル
## メトリクステーブルとは
メトリクステーブルとは、例えば商品別のアクセス数などをカウントする際に役立つ機能です。
通常のテーブルでアクセス数などをカウントする場合、書き込み処理になるため排他ロックを取得する必要があります。排他ロックはその名の通り、その他のトランザクションの書き込みや読み込みを全て禁止します。そのためアクセス数のように、頻繁に更新が発生する処理があると全体の処理性能を大きく悪化してしまいます。メトリクステーブルは、READ用テーブルとWRITE用テーブルを2つずつ用意し、多少の値の反映遅延を許容する
簡潔なGoと簡単なJavaのどちらを選択するか
最近 Go言語を個人的に勉強しているのですが、そのときに思ったことを Java と比較しながら書いてみようと思います。
# Go言語とは
皆さん、そもそも [Go言語](https://go.dev/)って知っていますか?
Go言語はGoogleが開発したオープンソースのプログラミング言語です。「Go」や「Golang」と呼ばれます。特徴としては、「簡潔な記述ができる」、「軽量な並列処理が可能」などがあげられます。
Go言語は色々なところで利用されており、Web だと API サーバの実装に利用されることが多くなっています。
また、クロスコンパイル(Windows/Mac/Linux 用のコンパイル)が可能であるため、CLI ツールの作成などに利用されることも多々あります。有名どころだと「[docker](https://github.com/docker/cli)」の CLI なんかが go 言語で作成されています。(先程のリンク先を見てみると、「.go」ファイルがちらほらありますね。)# 簡潔な記述ができるとは?
先
Windowsのファイル名の禁止文字をアンダースコアに置き換える関数
https://docs.microsoft.com/ja-jp/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#naming-conventions
「整数表現が 0 ~ 31 の範囲にある文字」に当てはまる正規表現を脳直で`\u0000-\u0031`としてしまって、半角スペースも置き換えるようになってしまった。
javaユニコードエスケープは16進数表現であることに気づき修正。“`scala
import java.util.regex.Pattern
final val ForbiddenWindowsFilenameCharsRegexPattern = Pattern.compile(“””[<>:”/|?*\\\u0000-\u001F]”””)
def replaceForbiddenCharWithUnderscore(str: String): String =
ForbiddenWindowsFilenameCharsRegexPattern.matcher(str).replace
JUnit5
テスティングフレームワーク「Junit」を統合開発環境(IDE)Eclipse※1で実行する手順を備忘録として記載させていただきます。
特徴であるラムダ式などのJava 8以降の機能を活用して実施したサンプルを記載しました。※1 Eclipse Oxygen.1a (4.7.1a)から JUnit Platformサポートを提供
**junit5**
**https://junit.org/junit5/****ECLIPSE**
**https://www.eclipse.org/community/eclipse_newsletter/2017/october/article5.php**:::note info
検証環境
**java Version: “13.0.1” 2019-10-15**
**Eclipse Version: 2021-09 (4.21.0)**
:::## 1.Javaプロジェクトの新規作成
ファイル → 新規 → プロジェクト
![2022-07-13_00h43_10.png](https://qiita-image-store.
Java PDFドキュメントの印刷方法
PDFドキュメントを印刷することは、私たちの日常生活の中で最もよく見られることの一つです。 Java言語を使用して、さまざまなシーンに簡単にプログラムでPDFファイルを印刷できます。 Spire.PDFには、プリンタ名の指定、印刷範囲の設定、両面印刷、カスタム用紙サイズ印刷など、PDFドキュメントを強力に印刷する機能があります。 この記事では、これら4つの側面からPDFドキュメントの印刷方法について説明します。
– 印刷ダイアログを使わずにデフォルト印刷機でPDFを印刷する
– 印刷ダイアログを使用してPDFドキュメントを印刷します
– 指定した用紙サイズでPDFドキュメントを印刷します
– PDFドキュメントを両面印刷する
– 指定した印刷機でPDFドキュメントのページ範囲を印刷する
## 【プログラム環境】
このテストでは、[Free Spire.PDF for Java](https://jp.e-iceblue.com/download/free-spire-pdf-for-java.html)がプログラムに導入されます。`Spire.Pdf.jar`ファイルは次のユーザーから
HottyDB(検索エンジン+レコメンド+RDBMS)のレコメンド機能の使い方
# この記事の概要
HottyDB(検索エンジンとレコメンドエンジンを搭載したRDBMS)という、筆者が個人開発したソフトウェアのレコメンド機能について紹介したいと思います。前回の記事でHottyDBの概要と検索エンジン機能について解説しているので、そちらも是非参照してみてください!
https://qiita.com/toru1055/items/0fe400989373823e9c78
# レコメンド機能
この機能では、「この商品を購入した人は、この商品も購入しています」や「この記事にイイネしている人は、この記事にもイイネしています」などのアイテムベースのレコメンデーションを実現します。 SQL LIKEなコマンドで、これらを自動的に計算する使い方を紹介します。## 前提
説明のため、「この記事にいいねしている人は、この記事にもいいねしています」というアイテムベースのレコメンデーションを実現するための例を紹介したいと思います。事前に、下記のような「いいね管理テーブル(`likes`)」という「どのユーザーがどの記事にいいねしたか?」を管理するテーブルが作成されている