- 1. エポックミリ秒ってなんだ。。
- 2. Springで作るWebアプリ作成の流れ(2)バックエンドの概要
- 3. ひとつのCSVファイルを指定したファイルサイズ以下になるように切り分ける
- 4. Spring Boot学習④~パスワードのハッシュ化(SpringSecurity)~
- 5. Java学習 リスト ArrayList
- 6. Java学習 配列
- 7. Qiitaデビュー
- 8. Spring Bootローカル起動時に「Web server failed to start. Port 8080 was already in use.」が発生した時の対処法
- 9. 【2024年】エンジニアにオススメする技術書20選
- 10. javaでfor文を使った九九の表を作成
- 11. Java勉強メモ2_基本概念
- 12. Java勉強メモ1_Javaとは
- 13. Checkstyle と reviewdog を使って Java の PR を自動でレビューする
- 14. JUnitのパラメーター化テストでパラメーターに名前を付ける方法
- 15. Javaでカンマ付き数値文字列をBigDecimalに変換する方法
- 16. 【Java】Resource leak: ‘sc’ is never closed
- 17. 【JUnit】LinkedHashMapのデータ登録順はassertEqualsで比較出来ない
- 18. Docker ✖️ Javaのシンプル開発環境
- 19. Javaのインタフェースについて
- 20. SpringでWebアプリを開発できるようになるまでの勉強内容を振り返ってみた
エポックミリ秒ってなんだ。。
## 背景
現在担当している機能の中で、エポックミリ秒を扱っている処理があった。## エポックミリ秒とは
UNIX時間(エポック秒)とは、1970年1月1日0時0分0秒(UTC)からの経過秒数を表す、コンピュータの時刻表現方法の一つです。 UNIX時間は、コンピュータの各種アプリケーションで時刻を扱う際に広く使われており、タイムスタンプやファイルの更新日時など、様々な場面で利用される。ミリ秒単位で表すものを「エポックミリ秒」
秒単位は「エポック秒」と呼ばれる## 参考サイト
以下のサイトで、指定した日付をエポックミリ秒、エポック秒に変換できる
https://yu-yum.net/epoch/
Springで作るWebアプリ作成の流れ(2)バックエンドの概要
## はじめに
この記事ではWebアプリでのバックエンドはどのような流れで動くのかについて書いていきます。## MVCモデル
(0)の前提知識でもお話しましたが、Webアプリのテンプレート、デザインパターンとしてMVCモデルが存在します。MVCモデルとはユーザからのリクエストをModel, View, Controllerの3つの処理層に分けて処理していくというデザインパターンです。
Web開発においてはこのMVCモデルを基礎にして作成されます。## 今回の概要
今回作るアプリは簡単なTODOアプリで登録したTODOがページに反映されることを目標に作成していきます。今回のアプリの流れをMVCモデルに合わせて具体的に示すと、ユーザがTODOの作成をリクエストとして送り、そのリクエストをコントローラーが受け取り、モデルが処理をして、ビューを返し、ユーザに返すという流れで行います。![無題のプレゼンテーション.png](https://
ひとつのCSVファイルを指定したファイルサイズ以下になるように切り分ける
バッチからとあるAPIを叩く際にデータをCSVファイルで送るように要求された。
ファイルサイズの最大値をオーバーする場合は2つ (またはそれ以上) に分割する必要があるのでその処理を行う。# 要件
– ファイルを指定サイズ以下になるように切り分ける
– (ヘッダがある場合) 切り分けたファイルそれぞれにヘッダを付ける
– 切り分けは行単位とする
– 1行 (+ヘッダ部分) で指定サイズをオーバーするような行がある場合はエラー
– ファイル名は元のファイルに “_1” といった連番を付けたものにする
– 既に同名のファイル名が存在する場合は連番を進めることで既存のファイルを上書きしないようにする## 切り分け例
元のファイル `~/sample.txt`
“`
#col1,col2,col3
a,b,c
hoge,fuga,foo
1,2,3
4,5,6
“`
↓
`~/sample_1.txt`
“`
#col1,col2,col3
a,b,c
hoge,fuga,foo
“``~/sample_2.txt`
“`
#col1,col2,col3
1,
Spring Boot学習④~パスワードのハッシュ化(SpringSecurity)~
前→https://qiita.com/19960417akiho/items/2aa16ce876c4937b0cc3
以下の動画を参考に、ハンズオン形式でSpring BootでWebアプリを制作していきます。
今回はPart10。
パスワードのハッシュ化をSpringSecurityを用いて実装します。
まず、SpringSecurityを使うには、pom.xmlに情報を追加しなければなりません。
# pom.xml
“` pom.xml
org.springframework.security
spring-security-core
Java学習 リスト ArrayList
# リスト
リストは、Rubyの配列と似たデータ管理の仕組みで、以下の特徴がある。* 要素を順序づけて管理する
* 要素を事後的に追加したり削除できるまた、Javaのリストには、以下の2種類がある。
* ArrayList
* LinkedListArrayListの方が使用頻度が高い。
# ArrayList
ArraListは「可変長配列」を使用するための仕組み。
可変長配列とは、文字通り長さ(要素数)を変更できる配列のこと。Rubyの配列は可変長なので、Javaの配列よりもArrayListの方が性質や使い方が近い。
## ArrayListの使い方
“`java
import java.util.ArrayList;class Main {
public static void main(String[] args) {
ArrayListscores = new ArrayList (); scores.add(1);
scores.add(5);
scores.add(
Java学習 配列
# Rubyの配列との違い
Rubyの配列は、格納する要素の数を最初に決める必要がない。
Javaの配列は、格納する要素の数を最初に決める必要がある。また、後で要素数を変更することができない。
要素を増やす場合、サイズの大きな配列を新たに作成して元データをコピーする、ArrayListというリストの一種を使用する2つの方法がある。
ArrayListとは、要素の数を変更できる配列のようなもの。そのため、ウェブアプリケーション開発ではよく使用される。# Javaの配列
## 配列の使い方“`java
class Main {
public static void main(String[] args) {
int[] scores;
scores = new int[3];scores[0] = 1;
scores[1] = 5;
scores[2] = 10;System.out.println(scores[0]);
System.out.println(scores[1]);
System.out
Qiitaデビュー
初めまして。
LaughCatと申します。ずっと興味のあった Qiita ですが、ついにデビューです。
エンジニアとしての記録を残すため、アプリ開発など、稚拙ながら公開していこうかなと思います。まずは、Javaが書けるので、Spring Bootを使って簡単なアプリケーションを作っていこうかなと計画してます。
よかったら、応援お願いします!
Spring Bootローカル起動時に「Web server failed to start. Port 8080 was already in use.」が発生した時の対処法
Java初心者🔰の方向けです!
local環境でSpring Boot起動時にポートがすでに使われている場合のエラー解消方法!
(教育担当をしていた時に何回か聞かれたことがあったので一応tipsとして残す)## 概要
– Spring Bootを作ってローカルで開発をしている際、以下のようなエラーが出てアプリケーションが起動できないことがあります。“`shell
{“timestamp”:”2024-01-15T11:03:04.682+09:00″,”@version”:”1″,”message”:”\n\nError starting ApplicationContext. To display the conditions report re-run your application with ‘debug’ enabled.”,”logger_name”:”org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener”,”thread_name”:”mai
【2024年】エンジニアにオススメする技術書20選
# [リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック](https://amzn.to/3NYrLaT)
[![画像タイトル](https://m.media-amazon.com/images/I/81+3DpjuMdL._SL1500_.jpg)](https://amzn.to/3NYrLaT)
**「美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、
自分のコードもそうあるべきだと思わせてくれる。本書の目的は、君のコードを良くすることだ」(本書「はじめに」より)。**コードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。
名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。
またコードを再構成するための方法。さらにテストの書き方などについて、楽しいイラストと共に説明しています。日本語版ではRubyやgroongaのコミッタとしても著名な
javaでfor文を使った九九の表を作成
1月15日 学んだことのアウトプット
for文の2重ループを使って九九の表を作成していく!!
実行環境はEcllipseを使っています。ソースコード
“`java
package test_java;
public class FORTEST {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) { for (int j = 1; j < 10; j++) { System.out.printf("%3d", i * j); } System.out.println("\n"); } } } ``` 実行結果 ``` 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32
Java勉強メモ2_基本概念
# 基本概念
### オブジェクト指向プログラミング
オブジェクト指向プログラミング(OOP)は、プログラムをオブジェクトの集合としてモデル化するアプローチです。オブジェクトはデータ(属性やフィールド)と、データを操作するための手続き(メソッドや関数)をカプセル化します。OOPの主要な概念には以下のものがあります:**カプセル化:** データ(プロパティ)とメソッド(機能)を一つのユニットにまとめること。
**継承:** 一つのクラスが別のクラスの特性を引き継ぐこと。
**ポリモーフィズム:** 同じインターフェースを共有するが、異なる行動を取るオブジェクトを作成する能力。
**抽象化:** 複雑な現実世界を単純なモデルにするプロセス。### Javaプログラムの構造
Javaプログラムはクラスとオブジェクトに基づいて構築されます。プログラム実行のエントリーポイントは**main**メソッドです。以下はその基本的な構造です:“`MainClass.java
public class MainClass {
// メインメソッド – プログラムの起点
pu
Java勉強メモ1_Javaとは
# Javaとは
### Javaの歴史
・開発の始まり: Javaは1991年にサン・マイクロシステムズ(現在はオラクル社によって買収)で開発されました。当初は家電製品向けの言語として「Oak」という名前で始まりました。
・公式リリース: 1995年に「Java」として公式にリリースされました。この時から、インターネット上でのアプリケーション開発に強みを持つ言語として注目されました。
・バージョンの進化: Java 1.0から始まり、Java 2(1998年)、Java SE 5(2004年)、Java SE 8(2014年)など、多くの重要なアップデートが行われてきました。各バージョンは新機能の追加や性能の改善が行われています。
### Javaの特徴
・オブジェクト指向: Javaはオブジェクト指向プログラミング言語で、カプセル化、継承、ポリモーフィズムなどのオブジェクト指向の原則に基づいています。
・プラットフォーム独立性: 「Write Once, Run Anywhere(WORA)」のスローガンの通り、Javaは異なるプラットフォーム間での互換性が高いです。
Checkstyle と reviewdog を使って Java の PR を自動でレビューする
# 目的
この記事では、 Checkstyle, reviewdog, GitHub Actions を使って Java の PR を自動でレビューすることを目指します。
“`plantuml
@startuml
actor Developer
participant GitHub
participant “GitHub Actions” as Actions
participant Checkstyle
participant reviewdogDeveloper->GitHub: Push or create PR
GitHub->Actions: Trigger workflow
Actions->Checkstyle: Run Checkstyle
Checkstyle–>Actions: Return results
Actions->reviewdog: Pass Checkstyle results
reviewdog->GitHub: Post comments on PR
GitHub–>Developer: Display comments
@endu
JUnitのパラメーター化テストでパラメーターに名前を付ける方法
JUnitにはパラメーター化テストを実施したい場合に便利な機能があります。
以下のように`@ParameterizedTest`と`@ValueSource`を付けてパラメーターを指定することで、一つのメソッドで指定したパラメーターをテストすることができます。### `ValueSource`
“`java
@ParameterizedTest
@ValueSource(strings = {“0311111111”, “08011111111”})
public void phoneNumber_is_10_11_digits(String phoneNumber) {
assertTrue(isPhoneNumber(phoneNumber));
}
“`
テスト結果:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458231/147f43b1-c225-81da-60bb-a9f3c01d8b4d.png)しかし、このや
Javaでカンマ付き数値文字列をBigDecimalに変換する方法
### はじめに
金融アプリケーションや精密な計算を要するJavaプログラムでは、BigDecimalの使用が欠かせません。しかし、”1,000″, “10,000”のようにカンマで区切られた数値を含む文字列を直接BigDecimalに変換しようとすると、問題が発生します。今回は、カンマ付きの数値文字列をBigDecimalに変換する方法について説明します。
### BigDecimalの重要性
BigDecimalは、Javaにおける高精度の数値計算を実現するクラスです。浮動小数点数では発生しやすい丸め誤差を防ぐため、特に金融関連のアプリケーションでよく使用されます。
### カンマ付き数値文字列のBigDecimalへの変換手順
カンマが含まれる数値文字列をBigDecimalに変換するには、次のステップに従います
“`ruby:java
import java.math.BigDecimal;public class Main {
public static void main(String[] args) {
String number
【Java】Resource leak: ‘sc’ is never closed
# 結論
`”try-with-resources” syntax`を使う。# ワーニングが出たコード
“`:scのところでResource leak: ‘sc’ is never closed
package chapter1;import java.util.Scanner;
public class Min3 {
static int min3(int a, int b, int c) {
System.out.println(“a: ” + a + “\nb: ” + b + “\nc: ” + c);
int min = a;
System.out.println(min);
if (min > b) min = b;
if (min > c) min = c;
return min;
}public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // ここでエラーが出る
int a,b,c
【JUnit】LinkedHashMapのデータ登録順はassertEqualsで比較出来ない
### 【概要】
LinkedHashMapのデータ登録順が期待値と実測値で異なっていても、同じキーと値が登録されていればデータ登録順の比較はされず、assertEqualsメソッドのテストが成功してしまうことを確認します。
LinkedHashMapはデータ登録順が保たれるので、assertEqualsメソッドでは登録順も比較されテスト失敗すると予想していましたが予想とは異なりました。### 【環境】
Java 21
JUnit 5.10.1### 【コード】
https://github.com/nobu12/junit-linkedhashmap
下記コードは上記GitHubにアップロードしているコードと同じです。
“`java:HogeTest.java
import org.junit.jupiter.api.Test;import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;import static org.junit.jupiter.api.
Docker ✖️ Javaのシンプル開発環境
# 背景
アルゴリズムを勉強しようかなと思ったら、Javaで書かれているのでJavaの環境がサクッと作りたかった。# 参考
https://qiita.com/A-Kira/items/0dda255e00771f556e2a
基本はこの記事通りにやれば環境できます。# 環境
“`zsh
# MacOSのバージョン
$ sw_vers
ProductName: macOS
ProductVersion: 14.2.1
BuildVersion: 23C71
# Dockerのバージョン
$ docker -v
Docker version 20.10.21, build baeda1f
# docker compose のバージョン
$ docker compose version
Docker Compose version v2.13.0
“`# 追加ファイル
* .gitignore
* Makefileいずれもルートディレクトリに追加してます。
## .gitignore
classファイルはgit管理から除外。バージョン管理しても意味ないので。
Javaのインタフェースについて
## 特徴
・インスタンス化はできず、利用する場合は実現クラスを作成する。
・実現クラスを定義するときは「implements」を利用する。
・実現クラスではインタフェース内の抽象メソッドをオーバーライドして利用する。
・サブインタフェースを作成する場合は「extends」を利用する。## 変数
暗黙的に「public static final」修飾子が付与される。
変数宣言時に初期化しておく必要がある。
“`Java
interface InterfaceA {
int a = 1;
int b; // 初期化していないためコンパイルエラー
private int c = 2; //privateのためコンパイルエラー
}
“`## 抽象メソッド
・暗黙的に「public abstract」修飾子が付与される。
・実現クラスでオーバーライドする必要がある。
・実現クラスでオーバーライドする前提のため「final」修飾子は付与できない。
“`Java
interface InterfaceB {
public int testA();
abstract int testB
SpringでWebアプリを開発できるようになるまでの勉強内容を振り返ってみた
# はじめに
こんにちは。がじぇ(@shogidemo)と申します。
Springフレームワーク(以降、Spring)によるWebアプリ開発を学び始めて約8ヶ月、独力でWebアプリを開発することができるまでになり、学習も一区切りが付きました。
この記事では、私が学んだこと、使った教材、そして学びの過程での気づきを共有します。
同じようにSpringを学ぼうとしている方の参考になったら嬉しいです。:::note
私が学んできたのはReactやVue.jsなどSPA(シングルページアプリケーション)のいわゆるモダンなWeb技術ではなく、JSPやThymeleaf等のMPA(マルチページアプリケーション)と呼ばれる比較的古いWeb技術です。
モダンな技術も魅力的ですが、世の中のシステムはモダンな技術だけで動いているわけではないため、まだまだ学ぶ価値があると考えています。
:::# 学んできた技術スタック
学んできた技術スタックを分類すると下記の3つです。
・Web(HTMLやCSS、HTTP等)
・Java(プログラミング言語)
・Spring(Webアプリのバックエンドを開