- 0.1. JavaエンジニアがASP.NET Coreを触ってみた
- 0.2. 結局どっちが速いの? for vs Stream
- 0.3. 【Java】OpenAPI Generator を使用してスキーマ駆動開発を行う
- 0.4. SpringBoot(Maven)でFlywayMigrationとJOOQをPluginで導入する
- 0.5. 【個人開発】駆け出しエンジニアがJavaで予約管理アプリを作ってみた
- 0.6. Javaスタート
- 0.7. 【Java】レビュワーが体験した指摘事項の共通点
- 0.8. JavaのDateTimeFormatterについて
- 0.9. 独自のJavaロガーを使ったログ・メッセージをInstanaで収集する
- 0.10. デザインパターンを7つピックアップ解説:Javaのサンプルコード付き
- 0.11. Amper で Kotlin 始めてみた
- 0.12. 各種言語のBase64文字列の取り扱い
- 0.13. AWS Amazon Rekognition機能と実装
- 0.14. クラスの継承の関係について
- 1. しかし、実際は
JavaエンジニアがASP.NET Coreを触ってみた
# はじめに
### このテーマで投稿しようと思ったきっかけ
単純に仕事で.NETのスキルが必要になったからである。
筆者はエンジニア歴のうち半分以上はJava案件(10年くらい?)に関わってきた。
Javaと.NETはほぼほぼ似ている(≒?)と言われますが、コーディング部分において実際にどのくらいJava(主にSpringBoot)の経験が活かせ、何が違うのかが気になったので、実際に.NETを触ってみようと思った。
もし、同様のことを気になったエンジニアがいたら参考になれば幸いである。### 軽く.NETとは
.NETは説明不要なほど人気な言語なのでざっと要約すると以下のような特徴がある。
– Webアプリケーションの開発が容易
– 複数のプログラミング言語に対応(C#, VB.NETなど)
– 開発コストを抑えられる
– クロスプラットフォームに対応(Windows, Mac, Linux)最後のクロスプラットフォームに対応は筆者にとって驚きだった。
2000年代はWindowsしか使えませんでした。ところが2016年ごろから.NET Coreがリリースされてから急激に進化
結局どっちが速いの? for vs Stream
## はじめに
こんにちは、[@rs_tukki](https://twitter.com/rs_tukki)です。
これは[Java Advent Calender 2023](https://qiita.com/advent-calendar/2023/java)の18日目の記事です。## 繰り返し処理と言えば
Javaで繰り返しと言えばいの一番に習うのはfor構文ですが、
Java8からは新たな繰り返しや集約処理の構文として`Stream`がサポートされています。https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html
これは処理の流れを宣言的に記述できる構文で、
たとえば、“`java
for (int i = 1; i <= 5; i++) { System.out.println(i); } ``` といった繰り返し処理は、 ```java Stream.of(1, 2, 3, 4, 5).forEach(System.out::println);
【Java】OpenAPI Generator を使用してスキーマ駆動開発を行う
# はじめに
### OpenAPI Generator とは
まず、そもそも OpenAPI とは「OpenAPI Spesification」の略で REST API の定義を記述するための規格です。
OpenAPI Generator は、OAS(OpenAPI Spesification)の定義に基づいてコードを生成することができるツールです。スキーマ駆動開発では、定義したAPIスキーマをもとにバックエンド (API) とフロントエンド (画面) の開発を並行して行います。そのため、API の実装としては定義に即したリクエスト/レスポンスになっていることが前提です。
OpenAPI Generator では OAS に基づいてコードが生成されるため、挙動が仕様に準拠していることが保証されるというメリットがあります。### 使用ツール
– [**VSCode**](https://code.visualstudio.com/): エディタ
– [**Stoplight Studio**](https://stoplight.io/solutions): OAS 設計
SpringBoot(Maven)でFlywayMigrationとJOOQをPluginで導入する
# 対象読者
* Springまわりの技術について深掘りしたい
* JOOQに入門したい
* 型安全なクエリビルダーを利用したい
* FlywayをSpringに導入したい# 環境
* SpringBoot 3.2
* Apache Maven 3.9.5
* JOOQ 3.18.7
* Flyway 9.22.3
* Postgres 16[備考] JOOQ & Flyawayは継承元のpomに定義されていたVersionを使用し、
MavenはSpringについているラッパーを使用する# FlaywayとJOOQについて
### Flyway
Flywayはデータベースの移行を管理するオープンソースツールです。このツールの魅力は、そのシンプルさと設定よりも規約を重視するアプローチにあります。Flywayを使用することで、データベースのスキーマのバージョン管理が可能になり、スキーマの変更や移行を容易かつ確実に行うことができます。これはSQLやJavaコードで定義された移行を自動的に管理し、適用することができるため、データベーススキーマの進化をスムーズにコントロールするの
【個人開発】駆け出しエンジニアがJavaで予約管理アプリを作ってみた
# はじめに
SIerにキャリアチェンジして1年目の駆け出しエンジニアがJavaでアプリ製作をしてみました。アウトプットとして、本記事にその記録を残したいと思います。
# 作成者のプロフィール
私のプロフィールとしては以下の通りです。
・社会人4年目
・前職はメーカで生産技術職を3年経験
・元々ITに興味があったので今年SIerに転職して1年目
・ITに関する経験①
大学時代にC言語で初歩的な読み書きの経験はあり。マクロ作成など簡易的なコード作成はできたが、本格的な特定言語の開発経験は大学時代に関しては無し。
・ITに関する経験②
社会人1,2年目にプログラミングのオンラインスクールで学習経験あり。この時、初めてJavaのアプリ開発に着手。内容についてはスクールでの学習期間のみでは理解が不足していたので、その後もスクールで着手したアプリの復習や改良繰り返し、スクールでの学習期間終了後もJavaの学習を継続。
・SIerへ転職後の研修でJavaを用いたアプリ(ECサイト)作成の経験あり。オンラインスクールでの学習経験が活かせる研修であり、この研修においてはほぼすべてのコードを設計書
Javaスタート
Javaをスクールで習い始めた。そこではエクリプスを使っているが、
起動が重い。
一応家のPCにもエクリプスでJavaの環境は作った。
以前、別の講習でインストールしたvscodeがある。その起動はスムーズ。
vscodeでJavaをやりたくなった。今日の結論。
vscodeでJavaれるようになった。経過
ある大学の「Javaの実行環境の作り方」というサイトを見つけて
https://www.fit.ac.jp/~m-ishihara/Lectures/JavaProgramming1/howToSetupOnWin10new/howToSetup.html
vscodeでJavaりたくなって、参考にやってみた。
とても見やすい。パスの設定とかもするが、なにせ、vscodeインストールされていたので、パスをvscodeに聞かせるのはよくわからない。
それにうちのvscode全部英語。
「Japanese Language Pack for Visual Studio Code」入れているのに。エラーメッセージは日本語で出たか。
Cのプログラムに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