- 1. しかし、実際は
- 1.1. 【ほぼブログ】これまで手続き型プログラミングしかしたことなかった人間が、初めてオブジェクト指向の温かみに触れた話
- 1.2. HTTP message body(POST、PUT、PATCHなど)のリクエストパラメータ照会
- 1.3. Query Parameter (GET) と HTML Form (POST) のリクエストパラメータ照会
- 1.4. クライアントからサーバーにリクエストデータを転送する際に主に使用する方法
- 1.5. 【VSCode+SpringBoot】SpringBootでAPIを作る⑥
- 1.6. リクエストのヘッダー値、デフォルト値の照会
- 1.7. JavaParserを利用して、javaファイルをパースした際に、メソッド宣言された行の行番号を取得する
- 1.8. JavaのコンテナイメージにAlpineを使ったらどん詰まった話
- 1.9. JSP(Java Server Pages)が令和時代のWebサービス開発に向いていない話
- 1.10. 自社のデータ収集システムが驚くほどコンパクトになった話
- 1.11. Spring Boot 3.1系で単体テストをやってみた
- 1.12. 【VSCode+SpringBoot】SpringBootでAPIを作る⑤
- 1.13. Ajaxというのを業務で経験したので勉強
- 1.14. 【後編】Javaでオブジェクト指向を学びなおす
- 1.15. 【VSCode+SpringBoot】SpringBootでAPIを作る④
- 1.16. Spring bootでHelloWorldするまでの手順
- 1.17. 【VSCode+SpringBoot】SpringBootでAPIを作る③
- 1.18. (初心者用)Junit備忘録
- 1.19. Javaで実現するUUID v7:時刻順序を考慮したユニーク識別子
クラスの継承の関係について
クラスの継承について誤っておぼえてたので間違いの履歴として残す。
スーパークラスを継承したら、スーパークラスの内容をメソッドなどを使かえるようになったBのクラスだと思っていた。しかし、実際は
インスタンスがA型の場合はBのクラスであってもAのメソッドしか使えない。
A型で宣言したものは使用できるのがAクラスで定義されたメソッドのみに限定される。“`java
public class A{
public void hello(){
System.out.println(“hello”);
}
}public class B extends A{
public void sample(){System.out.println(“sample”);
}
}public class Main{
public static void (String[] args){A a = new B();
a.samle(); //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
Ajaxというのを業務で経験したので勉強
# 目次
[1. Ajaxとは](#ajaxとは)
[2. 今回の勉強用アプリについて](#今回の勉強用アプリについて)
[3. Ajax使用箇所解説](#ajax使用箇所解説)
[4. 終わりに](#終わりに)# Ajaxとは
Asynchronous JavaScript and XML の造語?## Asynchronous
「非同期」という意味
- 同期
- ・【リクエスト→処理A開始→処理A終了→処理B開始→処理B終了→レスポンス】のように順番にプログラムを処理する。
- ・「ECサイトで商品を購入確定後、在庫状況を更新する」ような処理
- 非同期
- ・【リクエスト→処理A→処理B→レスポンス】の順番で動くアプリだけど、【処理A→処理C】も別で実行させる
- ・「ECサイトで商品を購入確定後、在庫状況を更新するのと並行して、配送作業を行う」ような処理
## JavaScript
ブラウザ上で動作するスクリプ
【後編】Javaでオブジェクト指向を学びなおす
前回の続きです!
継承、ポリモーフィズム編になります!https://qiita.com/suda_imagitech/items/d9f3fc3327d306a0d8ec
# 1.継承(Inheritance)について
>継承は、既存のクラスから新しいクラスを作成する仕組みです。新しいクラスは既存のクラスの特性(データやメソッド)を継承し、必要に応じて追加や変更ができます。これは覚えてるぞー
だけどしっかりコード化しよう“`java:java
// 親クラス(スーパークラス)
class Person {
String name;public Person(String name) {
this.name = name;
}public void eat() {
System.out.println(name + “は食事している”);
}public void sleep() {
System.out.println(name + “は寝ている”);
【VSCode+SpringBoot】SpringBootでAPIを作る④
前回↓
https://qiita.com/NaN-jp/items/ff35d79be65edc13dc8c
# はじめに
今回は前回に引き続きMVCモデルのViewを作成していく### View作成
ユーザーが触れる画面になるViewを作成していきます
`templates`直下に`index.html`を作成する
“`java:src/main/resources/templates/index.html
View
Spring bootでHelloWorldするまでの手順
:::note warn
Eclipseのインストールが完了してから読むことをオススメします。
↓↓↓ インストール先はこちら
[Eclipse Downloads|The Eclipse Foundation](https://www.eclipse.org/downloads/)
:::## はじめに
* EclipseにSpring bootをインストールする手順とHelloWorldするまでの手順をまとめました。
* 画像多めの構成です。## この記事の目的
* インストールから正常な環境構築ができているかの確認まで終えられるようにする。
* 今後自分で再度インストールする機会が訪れた時の手順再確認用。# そもそも“Spring boot”とは
* アプリケーションを手軽に作成するためのフレームワーク(**枠組み・ひな形**)の集合体である**Spring Framework**に搭載のされているものの一つ。
* 集合体である機能を使いやすくするためのもの。# HelloWorldとスモールスタート
* **環境が正しく構築できてるか**を確認することも重要な作
【VSCode+SpringBoot】SpringBootでAPIを作る③
前回↓
https://qiita.com/NaN-jp/items/61faa709dac6e000eea7
# はじめに
今回からSpringBootの実装に入る
まずはMVCモデルのひとつであるModelの作成#### 📚そもそもMVCモデルとは??
MVCモデルとはコードを管理する上で便利な**Model,View,Controller**の3つの頭文字をとった概念である。### Model作成
まず部品であるModelを作成していきます
demo内にmodelフォルダを作成してその中に`Person.java`を作成します
“`java:src/main/java/com/example/demo/model/Person.java
package com.example.demo.model;import jakarta.persistance.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persis
(初心者用)Junit備忘録
# はじめに
単体試験をがっつりJunitで行う現場に初めて入り、
今まで「Junit」という名前しか聞いたことのなかった私が
日々アワアワしながらテストコードを書いていた時に知ったJunitに関する備忘録+陥ったことの紹介です。
なので初心者向けだと思いますが、Junitって何?とか設定とか基本的な書き方とかそこらへんは調べたら山のように出てくると思うのであまり丁寧に書きません。# 環境と依存関係
Junit : Junit5
IDE : Eclipse
Java : 8ユニットテストでモックするフレームワークとしてMockitoを使用しており
Mavenでプロジェクト作成していたのでpom.xmlに依存関係追記しています。
(ここは環境に合わせてご自由に)“`xml:pom.xml
org.mockito
mockito-all
1.10.19
Javaで実現するUUID v7:時刻順序を考慮したユニーク識別子
この記事は[グロースエクスパートナーズ アドベントカレンダー2023](https://qiita.com/advent-calendar/2023/gxp)の13日目の記事です。
今年は2023年新卒入社の方などの投稿で盛り上がり、シリーズ2もつくられました。シリーズ2にふさわしい、簡単に読めて役立つ記事をお届けしたい所存です。# はじめに
UUID v7を試してみよう
この記事では時間順序を持ち、ランダム性も備えたUUID v7を紹介するとともに、JavaでのUUID v7の生成とUUID v7からタイムスタンプを取得する実装も紹介します。
## 要約
* UUID v4をRDBのプリマリーキーとして用いると、B-Treeインデックスの断片化や挿入処理遅延の懸念がある
* 解決策としてUUID v7が提案されている
* JavaにもUUID v7を生成するライブラリがあり利用可能になっている
* 生成したUUID v7の値からタイムスタンプが取得できる# UUID v4の課題
ユニークな値が欲しいとき、UUIDが真っ先に浮かぶという方は多いと思います。
下記のような文