JAVA関連のことを調べてみた2022年05月18日

JAVA関連のことを調べてみた2022年05月18日

SheetAPI v4とDriveAPIを使ってJavaでスプレッドシートを操作する

Javaのwebアプリからスプレッドシートを操作したいという要望があったのだが、SheetAPIのv3については記事がいっぱいあるのだけどv4については少なくて使い方を試すのに苦労したので備忘録として書いておく。

## 1. 事前準備

### 1.1. サービスアカウントの作成

サービスアカウントの認証情報を持ったjsonファイルを作成。
作成の手順はあちらこちらのネット上にあるが、例えば以下を参照
※SheetAPIだけでなくDriveAPIも有効にする必要あり
[サービスアカウントで認証してGoogleSpreadsheetからデータを取得](https://dream-yt.github.io/post/spreadsheet-via-service-account/)

### 1.2. ユーザ側の作業

ユーザは、アプリからのアクセスを許可するスプレッドシートやドライブのフォルダに対し、サービスアカウント作成時に生成されたメールアドレスを共有設定に追加する。

## 2. 環境構築

今回はJavaのSpringBootプロジェクトでWEBアプリを作る想定で構築

元記事を表示

Aamazon EC2にDockerコンテナを立ち上げてJavaプログラムをテストしたい

# はじめに
本内容は、成り立てエンジニアな私の個人メモとしての記録であり、超基礎的な内容となっております。初学者向けとして本記事を閲覧していただければと思います。また、自身の成長につながるため、何かアドバイス・ご指摘があればコメントしていただけると幸いです。

# やろうと思ったきっかけ
新卒エンジニアとしてこの春より働くことになり、研修を行いつつ配属先での業務に少しずつ触れさせてもらっています。
そんな日々の中、ある日の会議でこんな話がありました。

>「それじゃあ、まずはEC2立てて、Kubernetes使って簡単な検証から始めていこうか。」
>(初心者過ぎて正確な内容は理解が追いつかず、上記の内容はめちゃめちゃニュアンスです)

議事録を取りながら聞いていたのですが、専門用語の応酬でとてもビビり散らかしていたことは覚えています。
その時の自分の心境としては、

> (EC2?たしかAWSの仮想サーバーサービスだったかな?ローカルとかではやらないんだ。)
> (クーバネティス?聞いたことあるけど全然イメージつかねぇ。Dockerとかコンテナに関連したやつってことだけは、なんとなく

元記事を表示

【Java】System.out.printlnを複数回呼び出した場合、AtCoderでTLEになってしまうので実際に実行時間を計測してみた

 AtCoderにて、System.out.printlnを複数回呼び出すと、[AtCoder228_C](https://atcoder.jp/contests/abc228/tasks/abc228_c)や[AtCoder231_C](https://atcoder.jp/contests/abc231/tasks/abc231_c)のように最悪$10^5$行くらいの文字列を出力する場合、TLEになる場合がありました。
 標準出力の複数回呼び出しによるオーバーヘッドの時間がかかりTLEになったものだと思います。本記事では同じ長さの文字列について、System.out.printlnを複数回呼び出して標準出力した場合の時間と、一度に標準出力した場合の時間を実際に比較しようと思います。
 計測するコードの実装内容は$0~10^5$をインクリメントした文字列を改行して出力する処理です。この処理を100回繰り返して各実行毎の実行時間を取得します。$10^5$にした理由はAtCoderで出力する行数として、よく見かけるからです。
 計測する手法は以下の三パターンです。
– 手法-1 Syst

元記事を表示

M1 MacでJavaの環境構築をする 2022年5月

## 環境

– macOS Monterey 12.3.1
– VSCode
– openjdk 18.0.1 2022-04-19
– javac 18.0.1

## 本記事で達成すること

1. 「M1 Mac」に
1. 「OpenJDK 18」を入れて
1. 「VSCode」で開発できるようにする

## 本記事の構成

1. Javaの環境構築を行う
1. VSCodeの設定を整える

## 1. M1 MacにJavaの環境を構築する

### 1-1 JDKインストール

– [azulのサイト](https://www.azul.com/downloads/?os=macos&architecture=arm-64-bit&package=jdk)からダウンロード
– 画面を下にスクロールしていくと、参照画像のボタンからインストールすることができる
![JDKインストール画面](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%

元記事を表示

ABC003の一部が解けたので書いた記事

## はじめに
前回に引き続き、ABC003を解いて見ました。ただ、D問題はちょっと解法が思いつかなかったので後日解いてみようと思います。

では、ACが取れたコードを解説していきます。

## A – AtCoder社の給料
問題文は[こちら](https://atcoder.jp/contests/abc003/tasks/abc003_1)

平均値を求める式を考えると、
“`math
\dfrac{1}{N}\times\sum_{i=1}^N(10000\times i)=\dfrac{10000}{N}\times\dfrac{1}{2}N(N+1)=10000\times\dfrac{N+1}{2}
“`
となりますから、最後の式をコードに落とし込みましょう。念のためキャスト演算子でlong型にしてはいますが、最大値はN=100なので、$10000\times101=1.01\times10^6$であることを考えるとint型のままでも良いです。
“`A.java
import java.util.*;
class Main{
public static void

元記事を表示

Java8初期で知識が止まってる化石プログラマーがJava17を触って得た知見

# はじめに
Java8初期で知識が止まっている化石プログラマーが書籍『[プロになるJava](https://www.amazon.co.jp/dp/B09VK3FTDM/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)』を読んで、得た知見をメモ書き感覚であげていきます。

初歩的な内容も含まれてますが、温かい目で見守ってください。。

# JShell
CUI上でJavaコードを実行できる。Java9より導入された。
参考:https://qiita.com/nowokay/items/e0b9c676567134e4a622

tabで補完、ドキュメント表示なども可能。

/vで型を確認できる
“`shell
jshell> /v textBlock
| String textBlock = “改行あり\nの\n文字列です\n”
“`

# テキストブロック
Java15から。
`”””`で囲った文字列は複数行の文字列として宣言できる。

“`shell
jshell> var textBlock = “””

元記事を表示

Spring MVC

Web アプリケーションを MVC アーキテクチャーで開発する際に使用するフレームワークです。
フロントコントローラーパターンを採用しています。

Spring MVC の特徴
Controller や Model などのクラスは POJO として実装する
Servlet API 、フレームワーク独自のインターフェースを排除でき、ユニットテストがしやすい
Spring の DI や AOP の仕組みを活用でき、効率的に Web アプリケーションを開発できる
View の実装技術を抽象化できる。Controller では View 名だけ意識すればよく、View の実装 (JSP 、Tymeleaf など) を意識する必要がない
💡 POJO (Plain Old Java Object)
ごく普通の Java オブジェクトを指します。
継承や依存関係がないクラスとして作成します。
この名称が提唱される以前よりある Java Beans では Bean に次の条件があったため、それよりシンプルな設計となります。

public で引数なしのコンストラクタを作成する
メソッドはアクセサメソ

元記事を表示

AOP

AOP (アスペクト指向プログラミング Aspect Oriented Programming)
プログラミングをしていると、ログ出力や例外ハンドリングなどといった 複数の箇所にまたがって存在する処理 が出てきますが、これらの処理のことを 横断的関心事 (Cross-Cutting Concern) と呼んでいます。

また、プログラムからこの 横断的関心事 を分離することを 横断的関心事の分離 (Separation Of Cross-Cutting Concerns) と呼び、これを実現する手法は アスペクト指向プログラミング AOP と呼ばれています。

AOP を利用すれば、Java のソースコードから共通的な機能を分離することができます。

Spring Framework では AOP を実現するためのサブプロジェクトとして Spring AOP が用意されています。

Spring AOP では、広く使われている AOP フレームワークである AspectJ を利用しています

元記事を表示

Bean

Java のソースコード内で定義する
Bean 定義を行う コンフィグレーションクラス を用意します。
メソッドに @Bean アノテーションを付与し、Bean 定義を行います。
メソッド名が Bean 名、戻り値がその Bean のインスタンスとなります。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {
@Bean
UserService userService() {
return new UserServiceImpl();
}
}

元記事を表示

コンポーネントスキャン

Bean 定義用のアノテーションが付与されたクラスをスキャンし、DI コンテナーに登録します。
この DI コンテナーによるスキャンを コンポーネントスキャン といいます。

@Autowired アノテーションを付けることで、オートワイヤリング (autowiring) という、DI コンテナーから型の一致する Bean を探し、見つかった場合に自動注入を行います。

🖊️ 構文

@Autowired

元記事を表示

Bean 定義

当初は Java ソースコードから分離した XML に定義する方法しかありませんでした。
複雑な設定を行う場合、XML の記述が大きく複雑になることが問題視されるようになりました。
後続で登場した Bean 定義は Java ソースコードのコンパイルが必要ですが、採用されるケースが増えてきました。
利用するコードに設定が近い方が管理しやすいと認識されたのが理由です。
Bean 定義の記述方法は次のようになります。

XML ファイルを使って定義する
🖊️ 構文



元記事を表示

前置・後置のインクリメント演算子を、式に含めた時の挙動について

### 最初に

`for(;;)`の中でよくお世話になる`i++`,すなわちインクリメント・デクリメント演算子について。
これを単独使いではなく、`8 + i++`のように式に含めてみるとどうなるのか。
自分で手を動かして勉強した結果をまとめてみました。

## まず、インクリメント・デクリメント演算子とは

コメントアウトがある行の、`//`の左がインクリメント・デクリメント演算子を利用した式。
右側が、類似内容を一般的(?)な記法で表した式。
“`java
int a = 1;
a++; //a = a + 1;
System.out.println(a);

int b = 1;
++b; //b = b + 1;
System.out.println(b);

int c = 1;
c–; //c = c – 1;
System.out.println(c);

int d = 1;
–d; //d = d – 1;
System.out.println(d);
“`
もちろん出力結果は、
“`
2
2
0
0
“`

## これを式に含めると挙動が変わ

元記事を表示

オブジェクト指向を超ザックリ説明してみた( ᐛ )

はじめに

備忘以外で投稿するのは初めてなので、お手柔らかに(´・ω・`)
プログラミングを勉強してまず最初に躓くのがオブジェクト指向だと思います。
そこまでは単純にコードを書いてコンソールで動かしてって感じだと思うんですが、
オブジェクト指向から急に
「えっ?はっ?どういう事??」ってなる人が多いと思います。
かくいう私も「オブジェクト指向の全容を完璧に理解しているのか?」って聞かれると、自身を持って「任せとき!」とは言い難いので、今回は自分の認識のズレを見つける目的もあって記事を書いています。
※筆者はJavaをメインにしているので、Java視点での記載をします。

オブジェクト指向ってなぁに?

まぁぶっちゃけて言ってしまうと、
オブジェクト指向なんてなくてもプログラムは書けますし動かせます( ゚Д゚)
「じゃあいらんやんw」って言われてしまうかもしれませ

元記事を表示

JavaによるK-Nearest Neighborアルゴリズム

# はじめに
K-nearest neighbors (KNN) は分類や回帰のタスクを実行するために用いられる教師あり機械学習アルゴリズムです。

KNNは、テストデータと学習点の距離を求めることで、テストデータに対して正しいクラスを予測します。このアルゴリズムでは、テストデータに最も近い点をK個選択します。そして、テストデータがK個のクラスに分類される確率を計算します。そして、最も高い確率を持つクラスが選択されます。

KNN アルゴリズムは、学習データから識別関数を学習するのではなく、学習データセットを記憶するため、遅延学習アルゴリズム と呼ばれます。

# データセット
未知のデータに対して予測を行うために、顧客データセットを使用します。使用するデータセットは、以下のように、顧客の年齢、収入、購入した商品などを示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1739999/4bac5e85-f423-929b-3995-637982c55c0d.png)
年齢58歳

元記事を表示

【React.js】SpringBootで作成したAPIを呼び出す方法

# はじめに
今回は、SpringBootで作成したRestAPIをReactで呼び出す方法について解説します。

SpringBootにReactを導入する方法を調べても、思ったようなものを見つけられなかったので備忘録として残しておきます。

# 前提
– SpringBootでアプリケーションが作成されていること

# バックエンド(API)側の実装
まずは、バックエンドの実装をします。
ここでは、Springスターター・プロジェクトを作成して、レスポンスを返すところまでを実装します。

## SpringBootプロジェクトの作成
プロジェクトの作成ですが、ビルドツールとしては`Gradle`を選択し、依存関係として以下を選択します。
– Spring Web
– Lombok
– SpringBoot Devtools

最低限アプリケーションが動作すればいいので、上記3つのみ選択します。(もちろん、がっつりアプリケーションを開発する場合は、これ以外にも選択する必要があります)

## Controllerの実装
先ほど、記述したように、今回は必要性低減の実装のためContro

元記事を表示

素因数分解を Java でやってみる

素因数分解を Java でやってみる
“`
int num = 360; // 素因数分解する数字(素因数で割った結果を入れながら処理)
int i = 2; // 素因数(2から始めてインクリメントしながら処理)

System.out.println(“素因数分解する数字:” + num);

while (i <= num) { // 素因数分解する数字 num が素因数 i より小さい間、繰り返す int j = 0; // 素因数で割れる回数(毎回、初期化して割れる間はインクリメントしながら処理) while (num % i == 0) { // 素因数分解する数字 num が 素因数 i で割り切れる間、繰り返す num /= i; // 素因数分解する数字 num に 素因数 i で割った値を代入 j++; // 素因数で割れる回数 j をインクリメント

元記事を表示

もしAndroidオープンソースがクソコードだったら

## まえおき

– 下品なタイトルで申し訳ありません。
– あえてクソコード化させてクラス設計を考察する。という内容です。
– というのは、直近でCodeCompleteを読んでいてクラスをどう設計するべきかについて学びました。
– 抽象的な表現も多く記憶から消える前に実際のソースコードを通してクラス設計のアンチパターンをまとめてみようと思います。
– しかし設計を1からするのは難しいため、逆の発想でAndroidのオープンソースコードであればJavaで美しく設計されていると信頼して、そのうちのSimpleAdapterクラスを部分的に変更してどんなリスクが生じるのかを考察します。Fragmentクラスなどはメンバが多すぎたため少しマイナーかもしれませんがアダプタを説明の都合上採用します。
– CodeCompleteを読んだ人やクラス設計を学習している人、JavaでAndroid開発をしている人に楽しんでもらえたらうれしいです。

## クラス定義のねらい

– CodeCompleteを読んでいるといろんなことが書いてあるわけですが、そもそものクラス設計の本質は『複雑さの緩和

元記事を表示

ABC002が一通り解けたので書いた記事

## はじめに
前回同様、難易度の割には易しめです(個人の感想)。
絶対もっと良い解答がある気がしますが、私は思いつかないので自分の解答を元に解説していきます。

## A – 正直者
問題文は[こちら](https://atcoder.jp/contests/abc002/tasks/abc002_1)

単純にXとYを比較してif~elseに落とし込みましょう。
“`A.java
import java.util.*;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//値の受け取り
int X = sc.nextInt();
int Y = sc.nextInt();
//Xの方が大きい?
if(X>Y) System.out.println(X);
else System.out.println(Y);
}
}
“`
ちなみに、if~elseの部分はこう書き換えても良いでしょう。
`

元記事を表示

Spring循環参照

# Springの依存性の注入(Dependency Injection:DI)
まずは、SpringのDIの方式を一回振り返って見ます。
SpringのDIは@Autowiredアノテーションで実現していますので、@AutowiredのJavaDocに「Marks a constructor, field, setter method」記述があって、3方式があります。

“`
/**
* Marks a constructor, field, setter method, or config method as to be autowired by
* Spring’s dependency injection facilities. This is an alternative to the JSR-330
* {@link javax.inject.Inject} annotation, adding required-vs-optional semantics.
*
* 略
*/
@Target({ElementType.CONSTRUCTOR, ElementT

元記事を表示

【オラクル西川です。】GraalVMハンズオン演習(機能編)。主要3機能を手元マシンで触ってみる!

2022年5月

GraalVM オンハンド演習 <基礎編> 

主に、下記のサイトの手順によっておりますが、初心者にも、より分かりやすい様に編集しております。
https://medium.com/graalvm/graalvm-ten-things-12d9111f307d
https://github.com/junsuzu/graalvm-jp-handson-basic/

GraalVMの主要機能下記3つを検証します。
① 最適化されたJITコンパイラ機能
② Microserviceに最適なAOT(事前コンパイル)によるNative Image作成機能
③ 多言語対応機能

尚、私の手元の環境はMacですので、それに沿って、実施します。

<環境設定/GraalVMの設定>
OTN – Oracle Technology Network からGraalVM Enterprise Editionをダウンロードします。下図のように”GraalVM Enterprise Edition 22 Current Release” タブを選択し、“Release Version 2

元記事を表示

OTHERカテゴリの最新記事