- 1. JavaでWebアプリを開発するための初歩的知識
- 2. 【Java】コンストラクタにおけるthis
- 3. call graphなるintellijのpluginについて
- 4. ABC264A~Dの解答
- 5. ドメインプリミティブについて
- 6. 【Spring】Entityから別のmodelに値をセットする
- 7. 【Java】ifを使わずListの値からEnumで定義した値のみを表示する
- 8. 【Java】複数の配列(List)をStreamを利用して一つのListにまとめる
- 9. 【Angularアプリケーション開発 #8】フロントエンドとバックエンドを繋げてみよう
- 10. Spring入門-URL叩いてファイル作成
- 11. 静的コード分析ツールSonarQubeってこんなに簡単に使えるようになってたのか、の話
- 12. Spring boot_APIにてパラメータ名と変数名が異なる場合の実装方針
- 13. [Spring]ObjectProviderをコンストラクタインジェクションする
- 14. Java→Kotlin化メモ
- 15. 役立つlombok入門(java)
- 16. eclipseで作ったSpringBootアプリをAWSを使って公開する#1
- 17. Javaの学習 ~varによる型推論~
- 18. [Jython]SikuliXによるRPA開発 ~はじめの一歩~
- 19. Javaの学習 ~識別子~
- 20. マージしたチャートデータからテクニカル指標を計算する(DMI編)
JavaでWebアプリを開発するための初歩的知識
■背景
初歩的なWebアプリの作り方を理解したい。
Java(Servlet+JSP)で学習する。■基礎知識
【webアプリケーションの基礎技術】
・ルーティング:webブラウザからのリクエストに合わせて、呼び出す処理を切り替える
・テンプレートエンジン:アプリケーションが保持するデータなどをHTMLのひな形と組み合わせてwebページを作成【Javaでwebアプリケーションを開発するには】
以下の技術やツールを組み合わせる-Servlet:サーバー上でJavaを実行する技術
-JSP:HTMLの中にJavaのコードを埋め込んで、動的にwebページを生成する技術
-Tomcat:ServletやJSPを実行するためのサーバー用アプリケーション【参考】
https://web-dev.hatenablog.com/entry/java/servlet/dev-restful-app/table-of-contents
【Java】コンストラクタにおけるthis
# はじめに
コンストラクタにおけるthisの挙動が頭の中でごっちゃになっていたので学習しました。
アウトプットを兼ねて記事投稿したいと思います。# いきなり結論
thisの役割:「**自クラスの別のコンストラクタを呼び出す**」# 実行環境
OS:Windows10 バージョン20H2
言語:Java 8
使用ツール:Spring Tool Suite 4# 1. コンストラクタのthisの使い方・動作
### ⑴ 使い方
自クラスの別のコンストラクタを呼び出したい場合、このように記述します。
“this(引数);“
もちろん引数なしでも可能です。### ⑵ 動作
“`Main.java
Public class Main {
public static void main(String[] args) {
new Test(“world!!”);
}
}class Test{
public Test() {
System.out.println(“Hello”);
}
public Test(String val) {
this()
call graphなるintellijのpluginについて
# 概要
[コールグラフ](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%82%B0%E3%83%A9%E3%83%95)を簡易に出すために[call graph](https://github.com/Chentai-Kao/call-graph-plugin)というintellijのpluginを利用して感じたことのメモ。
結論としては、有用そうだったが、Spring等DIを用いているソースコードの解析には今ひとつ足りないように感じた。# モチベーション
なぜcall graphを利用しようと思ったのか?
ソースコードの改修を行うとき、このコードは一体にどこに影響があるのだろう、と悩むことは多い。
そんな時に私は修正箇所のメソッドを呼び出している箇所を洗いだして、影響箇所を確認している。このような作業をする替わりに、スパッと一瞬で下記のようなコールグラフが図示できたら素敵だな、というのがモチベーションである。
![method.drawio.png](https://qiita-image-
ABC264A~Dの解答
## はじめに
今回はDまでコンテスト中に提出したものです(久々の4完。嬉しい)。では見ていきましょう。
## A – “atcoder”.substr()
問題文は[こちら](https://atcoder.jp/contests/abc264/tasks/abc264_a)そのままです。
Javaではsubstringに相当しますね(第一引数は開始位置、第二引数は終了位置の一個後ろ)。
なお、文字列の一番最初の文字の添え字は1ではなく0なので第一引数はLではなくL-1であることに注意してください(Lは1文字目を1としているので1ズレている)。
“`A.java
class Main{static Library System = new Library(java.lang.System.in,java.lang.System.out);
public static void main(String[] args)throws IOException{
//文字列を準備
String str = “atcoder”;//L、Rの受け取り
ドメインプリミティブについて
# はじめに
最近[セキュア・バイ・デザイン 安全なソフトウェア設計](https://onl.sc/8UiGd49)(以下、セキュア・バイ・デザイン)を読んだので、学んだことをアウトプットしようと思います。
今回は特に印象に残ったドメインプリミティブについてです。# ドメインプリミティブとは
セキュア・バイ・デザインで紹介されている実装パターンのことです。
バリューオブジェクトとよく似ていますが、似て非なるものになります。
ドメインプリミティブはバリューオブジェクトの特性を持ちつつ、さらに以下の特性があります。
– プログラミング言語における基本データ型やStringなどのような汎用的な型を使用しない
– Nullを許容しない
– 不変条件をオブジェクトの生成時に確認する# 不変条件とは
ドメインが持つ何が起きても変わることのない特性のことを不変条件といいます。
– 年齢の場合
– Nullでないこと
– 整数であること
– 0から150の間であること(150は人類最高齢が122なのでそこから余裕持った値)
– 携帯電話番号の場合
–
【Spring】Entityから別のmodelに値をセットする
# はじめに
業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。
# 背景
Entityでセットされた値を、modelに格納したいと考えた。しかし、modelのsetterを呼び出し、setterの引数にEntityのgetterを呼び出すのは、フィールドの数が多い場合、可読性に欠けると考え、わざわざ上記のようなことをしなくてもmodelに格納することが出来ないかと思った経由から始まった。
# 実装
ちなみに、lombokを使用しているため、setterとgetterは記載していない。
### DBから取得・格納済みのEntityクラス
“`java:Entity.java
@Getter
@Setter
@Entity
public class Entity {
private String entityStringA;
private String entityStringB;
private String entityDateTime;
}
“`### Entityクラスからセットするmodelクラス
“`
【Java】ifを使わずListの値からEnumで定義した値のみを表示する
# はじめに
業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。
# 環境
Java:11(8でも問題ない)# 実装
仕様は以下の通り
* aaa、iii、uuu以外は表示させない
* 表示優先順位は aaa > iii > uuu
* 重複して表示させない“`java:呼び出し元
Listtests1 = new ArrayList<>();
tests1.add(“aaa”); // 1番目に表示したい
tests1.add(“aaa”); // 重複するので除外したい
tests1.add(“uuu”); // 3番目に表示したい
tests1.add(“ooo”); // 除外したい
tests1.add(“eee”); // 除外したい
tests1.add(“iii”); // 2番目に表示したい
tests1.add(null); // 除外したい
tests1.add(“”); // 除外したいList
tests2 = TestType.getXXX(tests1);
tes
【Java】複数の配列(List)をStreamを利用して一つのListにまとめる
# はじめに
業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。
# 環境
Java:11
# 準備
実際の業務では、DBから取得した半角スペース区切りの文字列(2カラム分)を配列化し、一つのListに格納する処理が必要であったため、配列の部分から記述する。
“`java
String column1 = “あああ いいい ううう”;
String column2 = “えええ おおお”;// NULLか空の場合は長さ0の配列を代入
String[] column1Array = column1.isEmpty()
? new String[0]
: column1.split(” “);// NULLか空以外の場合は半角スペース区切りの文字列を
String[] column2Array = column2.isEmpty()
? new String[0]
: column2.split(” “);
“`# 複数の配列を一つのListにまとめる
“`java
// 上記で準備した配列をLi
【Angularアプリケーション開発 #8】フロントエンドとバックエンドを繋げてみよう
## 目的
フロントエンドとバックエンドを疎通させること。
実際の開発現場に近い環境を再現し、経験と知識を増やすこと。## 今回やること
なんちゃって従業員管理を作ります。
従業員一覧をDBから取得して、webページで表示するといった内容になります。
↓今回作ったwebページです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/2415bd29-5552-41ae-8691-e2fa26ada783.png)## 開発言語とフレームワーク
フロントエンド:javascript、typescript
フロントエンドフレームワーク:angular
バックエンド:java
バックエンドフレームワーク:spring boot
DB:mysql
※DBはdockerのコンテナに構築しています。ローカルに直でインストールしていても問題はありません。## フロントエンド
MenbersComponentを作成します。
ngOnInitでバックエンドにリクエストを送る処理を
Spring入門-URL叩いてファイル作成
Java界隈で良く使われているSpringBootでファイル作成処理を作っていきます。
![処理概要図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951197/5c49c42a-d484-c644-33d1-ccfa7ea8a5fc.png)UserがリクエストURL「localhost:8080/api」を叩いたら、任意の場所にファイル作成を行う。
Springプロジェクトだと「src/main/resources」に置くことが多い。
※参照ファイルは大抵の場合、resourcesに入っている“`java:HelloController.java
package com.sample.app.controller;import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotatio
静的コード分析ツールSonarQubeってこんなに簡単に使えるようになってたのか、の話
# はじめに
数年ぶりにSonarQubeを触ってみたくなり、試したところかなり簡単だったので、その感覚を残したく記事化してみました。
# SonarQubeとは
SonarSourceのプロダクトの一つであり、コード品質、コードセキュリティのチェックを実施するツールです。
https://www.sonarqube.org/
さまざまな使い方ができるのだと思いますが、簡単に使うためにはJenkinsなどのツールと同じようにSonarQube用のサーバーとして1プロセス立ち上げ、その中でチェックと、チェック結果を確認・参照することができます。
# 今回やりたいこと
MavenでビルドしているJavaプロジェクトに対して、ソースコードの品質が不安なので第三者チェックしてほしいと思うことがあると思います。その際に頼めるレビューアーがいないので最低限確認するためにツールにレビューをお任せしたい、ということがやりたいことです。
JenkinsのようなCI環境も手元にはありませんので、無しでいきます。# 環境構成
ざっくりですが、以下の環境でやりました。
![image.p
Spring boot_APIにてパラメータ名と変数名が異なる場合の実装方針
## 環境
– フレームワーク:Spring Boot 2.7.1
– Java 17## 実装APIの種類
– HTTPメソッド=GET
– HTTPメソッド=POST(※ただし、Content-Typeが「application/x-www-form-urlencoded」であるもの## やりたかったこと
実装上の変数名とAPIのIF上定義されているパラメータ名(リクエスト、レスポンス)を異なる名前にしたい。本実装では、以下のように命名規則を違うものにしたい。
実装上の変数名:**キャメルケース**
APIのIF上定義されているパラメータ名:**スネークケース**|種類|実装上の変数名 |APIのIFで定義されているパラメータ名 |
|———–|————|————|
| リクエストパラメータ | testId | test_id|
| レスポンスパラメータ | testName | test_name|## 実装方法
### リクエストパラメータ
以下記事より、
[Spring]ObjectProviderをコンストラクタインジェクションする
## ObjectProvider
`ObjectFactory`の拡張バリアントで、`ObjectProvider `を宣言することで、
`getIfAvailable`や`getIfUnique`を含むいくつかの追加のアクセスバリアントを提供できる。cf. :
[ObjectProvider (Spring Framework API) – Javadoc](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/ObjectProvider.html)
[Using Spring’s ObjectProvider](http://rahulsh1.github.io/tech/2018/12/20/Using-Spring-ObjectProvider)## ObjectFactory
`ObjectFactory`として宣言することで、`getObject()`呼び出しが必要になるたびに、
イン
Java→Kotlin化メモ
# 起動時エラー
> kotlin_module is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.4/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.
## 対応
“`build.gradle.kts
jar {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
“`# gradle build error
> xecution failed for task ‘:compileJava’.
> java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0xa5488cf) cannot access c
役立つlombok入門(java)
駆け出しITエンジニアあ~さんです。
lombokの機能に関して疑問持つ方が多いという認識から、サンプルを以下に掲載いたします。論より証拠!!
<題材のソースコード掲載>
“`java:AccountBean.java
package com.lombok.sample.model;import lombok.AllArgsConstructor;
import lombok.Data;/** アカウントモデル */
@Data
@AllArgsConstructor
public class AccountBean {/** ID */
private String id;/** 名前 */
private String name;
}
“`@Data → getter&setterを自動生成
@AllArgsConstructor → インスタンスに関するコンストラクター生成
※詳しくはググってね☆<以上のソースコードがコンパイル時に自動生成される内容>
“`java:AccountBean.class
package com.lombok
eclipseで作ったSpringBootアプリをAWSを使って公開する#1
# eclipseからGithubにpushする
かなり手間取ったのでメモしておく。
Githubでトークン取得、リポジトリ作成ののち、EclipseでプロジェクトをGitにより連携する。## 1. Githubで個人アクセストークンによる認証準備
### 1.1 アクセストークン作成
「Setting」→「Developer settings」→「Personal access tokens」と進んで「Generate new token」をクリックします。(https://github.com/settings/tokens)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2781422/957e2141-fb25-e89d-9c3c-f7b6e47f8218.png)
ここで出てくるトークンをコピーして保存しておく。ページ遷移すると消えてしまうので注意。
### 1.2 リポジトリの作成
「Repositories」→「New」→名前を入力して「Create reposi
Javaの学習 ~varによる型推論~
### varとは
変数宣言時のデータ型を推論する(ローカル変数の型推論)場合に、データ型の代わりにvarを使って変数を宣言します。
※型推論はコンパイル時に行われる。
※ローカル変数の宣言にしか使えない。#### 推論できるパターン
例えば、下記の変数aには整数リテラルの10を代入しているので、データ型はint型になります。
“`java
var a = 10;
“`また、以下のようにメソッドの戻り値を受け取るのにも使うことができる。(メソッドの定義から型が判別できる為)
“`java
var b = sample();
“`
###### ダイヤモンド演算子
ダイヤモンド演算子とは、下記コードに使用されている「<>」のこと。
“`java
ArrayListc = new ArrayList ();
//右辺の<>の中身(String)を省略することができる。
ArrayListc = new ArrayList<>();
“`
型推論において、下記のようなコードを記述したとすると、
“`java
var d
[Jython]SikuliXによるRPA開発 ~はじめの一歩~
[
![600×200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513692/17ca4477-a1cf-537b-871f-907fb01cb19e.png)](http://sikulix.com/)GitHubで公開しているSikuliXのサンプルプログラムに関する解説です。
https://github.com/singularity-effect/TextHelper
これはRPAの基本とも言える、ユーザーの代わりに画面を識別し、マウスやキーボードを操作する機能を使っているデモプログラムです。この開発中にSikuliXの仕様について気付いた点を投稿していきたいと思います。
## Finderクラスの基本
SikuliXを使う最大のメリットはこの[`Finder`][Finder]ではないでしょうか? かなり手軽に画像のマッチング操作を利用できます。
[Finder]: https://sikulix-2014.readthedocs.io/en/latest/finder
Javaの学習 ~識別子~
### 識別子とは
変数やメソッド、クラスなどの名前のことを識別子と呼びます。
識別子の命名規則は、以下の3つです。①予約語を識別子として使うことはできない
②使える記号はアンダースコア「_」と通貨記号(主に「$」)のみ
③数字から始めてはいけない##### 予約語
予約語(キーワードとも呼ばれる)とは、プログラムの文を表現するためにあらかじめ用途が決められている単語のことを言います。
例えば、データ型を表現する「int」や「char」、繰返し等の構文に使用する「for」や「if」は予約後にあたり、識別子として命名することができません。
ただし、予約語単体ではなく、「intA」のように別の文字と組み合わせたりすることで使用可能にはなりますが、推奨はされません。
マージしたチャートデータからテクニカル指標を計算する(DMI編)
# はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック