- 1. 【完全版】3ヶ月でAndroidエンジニアを目指すためのロードマップ
- 2. SpringBootでシンプルなCRUDアプリを作ったときの備忘録
- 3. Java の同期制御(Semaphore、CountDownLatch)
- 4. Spring FrameWorkのJava Config
- 5. \\だとバグるが、\\\\だとバグらないプログラム(正規表現)
- 6. SpringBoot で TiDB Cloud Serverless に接続する
- 7. Clean Code – Chapter 5: フォーマットを整える (Formatting)
- 8. ユニットテストの価値を高めるリファクタリング
- 9. ChronoUnitをimportで読み込めない時の対処法【IntelliJ・SDK】
- 10. スッキリわかるJava入門
- 11. JPA Thymeleaf でstatus=500エラーが出た時にエラー解消した備忘録
- 12. javaでログをマージする
- 13. PowerMockito を Eclipse に設定するための手順
- 14. PowerMockitoでJavaのJarFileのテストコード書く
- 15. Invalid bound statement (not found) 【Mybatisのエラー・ディレクトリ構成の見直しで解決】
- 16. JavaでPaiza攻略 : 平方分割
- 17. SpringBoot初学者の備忘録
- 18. PodmanでJava + Spring Boot + MariaDBの環境構築
- 19. サーブレットのクライアントからレスポンスを返すまでの流れ
- 20. 複数の自動テスト作成で流用できるコード
【完全版】3ヶ月でAndroidエンジニアを目指すためのロードマップ
# はじめに
ご覧いただきありがとうございます。[Gon](https://x.com/engineer_gon)です!
Androidアプリ開発の世界へようこそ!今回は、友人がAndroidエンジニアを目指すと聞いて実践的なロードマップを作ってみることにしました。
僕自身、Javaのレガシーなシステム開発からキャリアをスタートしましたが、働き方の自由度や仕事の楽しさを求めて、独学でKotlinを学び、Androidアプリ開発へとスキルチェンジしました。
フリーランスのAndroidエンジニアとしては3年以上働いていますが、基本的にフルリモートで働けるためすごく自由度が高いですし、単価も上がりやすく、何より楽しんで仕事できてます。
「**どこから始めればいいのか分からない**」という方も多いと思うので、今回のロードマップが皆さんの参考になれば嬉しいです。
# ロードマップ
![](https://storage.googleapis.com/zenn-user-upload/034d54a65890-20240908.png)
## 2024年にAndroid開発者に
SpringBootでシンプルなCRUDアプリを作ったときの備忘録
# はじめに
SpringBootによるシンプルなCRUDアプリケーション作成を学んだ際に、特に記憶しておきたいと思ったことを備忘録として残します。# アプリの概要
– シンプルなユーザ管理アプリ
– ユーザ登録、一覧、検索、更新、削除、管理者専用ページ遷移、認証、認可機能を持つ# 開発環境
– Eclipse(Pleiades) Version: 2023-12 (4.30.0)
– Java SE 21
– MacBook air# 依存ライブラリ
“`xml:pom.xmlの内容抜粋
org.springframework.boot
spring-boot-starter-data-jdbc
org.springframework.boot
spring-boot-starter-jdbc
Java の同期制御(Semaphore、CountDownLatch)
CountDownLatch と Semaphore はどちらも Java の同期制御 を行うためのツールですが、用途や動作は異なります。ここでは、それぞれの違いと使い方について説明します。
## 1. Semaphore とは
Semaphore は、指定した数の「許可(permits)」を管理し、スレッドが許可の数を超えて同時にリソースにアクセスできないようにするために使います。例えば、Semaphore(3) であれば、同時に3つのスレッドまでしかリソースにアクセスできません。ある意味で「スレッドの同時アクセス制限」に適したクラスです。特徴
許可を取得する (acquire) と、許可の数が減少します。
許可を解放する (release) と、許可の数が増加します。
同時にアクセスできるスレッド数を制御するために使われます。
使用例
“`java
import java.util.concurrent.Semaphore;public class SemaphoreExample {
private static final Semaphore semapho
Spring FrameWorkのJava Config
DIコンテナに、Java Configクラスを使用してコンポーネントを登録する方法を書いてみました!
## Java Configクラス
DIコンテナに対してコンポーネントを登録するための、設定クラス。ここで設定したコンポーネントが、DIコンテナに登録される。“`java
@Configuration
public class AppConfig {@Bean
UserRepository userRepository() {
return new UserRepositoryImpl();
}
}
“`
## ルックアップ
ルックアップとはDIコンテナからBeanを取得すること。**取得方法**
1つ目はBeanの型(UserRepository)を指定する方法。指定した型を持つBeanが1つだけ存在する場合に使用する。今回は、Java Configクラスで設定したUserRepository型は1つだけなので、これで取得できる。“`java
UserRepository userRepository = context.getBean(U
\\だとバグるが、\\\\だとバグらないプログラム(正規表現)
# 話のはじまり
こんにちは、来年度までに就職をしたい甘いレモン市場と言います。
皆さんはよき正規表現ライフを送っているでしょうか?正規表現を使いこなしたいですよね。
正規表現で文字列パターンを指定する際に、「\」(バックスラッシュ記号もしくは半角¥記号。区別のため、この1文字を「」付きで記述します)という文字列が含まれているか調べたくなることがあると思います。
たとえば[『スッキリわかるJava入門 第4版』](https://sukkiri.jp/books/sukkiri_java4) の次の練習問題のシチュエーションを考えてみましょう。
> 練習15-2
> フォルダ名が入っている変数folderと、ファイル名が入っている変数fileがあります。fileは必ず「readme.txt」のような形式をしていますが、folderは末尾に\記号が付いている場合と付いていない場合の両方がありえます。たとえば、「c:\javadev」や「c:\user\」のどちらもfolderの値としては正しい形式です。
> folderとfileを連結して、「c:\javadev\readme.txt」
SpringBoot で TiDB Cloud Serverless に接続する
## TL;DR
ローカルの SpringBoot アプリケーションで TiDB を使ってみた。
## はじめに
TiDB は、MySQL 互換の NewSQL データベースで、昨今いろんな企業が導入しているらしい。
– https://pingcap.co.jp/case-study/
– https://www.publickey1.jp/blog/24/newsqltidbpr.html
– https://speakerdeck.com/leveragestech/tidb-user-day-tidbhayin-nodan-wan-ninarunoka-rehatetukunoke-ti-toxin-tanatiao-zhan-tidb-user-day-2024私が TiDB を知ったのは ServerlessDays Tokyo 2023 のセッションなので 1 年前になるが、今回重い腰を上げて使ってみた。
ユニットテストの価値を高めるリファクタリング
## 対象読者
* テストコードを書いた経験のある方
* テスト対象コードが複雑で、テストに苦労した経験のある方## 本記事のゴール
* リファクタリングするべきコードの種類を把握する
* テストする価値が高いコードを把握する
* どのようにしてリファクタリングするべきかを把握する## リファクタリングが必要なコードを識別する
テストコードを楽に書くためには、テスト対象コードのリファクタリングが必要不可欠です。
本記事では、リファクタリングが必要なコードの識別方法と、そのリファクタリング方法について解説します。:::note info
本記事では、テスト対象コードとテストコードを区別するために、
テスト対象コード = 「プロダクションコード」と表現します。
また、本記事で言う「テスト」はテストコードを用いたユニットテストを想定しています
:::## 4種類のプロダクションコード
ほとんどの場合、プロダクションコードは以下2つの視点で分類します。
* **コードの複雑さ、ドメインにおける重要性**
* **協力者オブジェクトの数****コードの複雑さ** とは、プロ
ChronoUnitをimportで読み込めない時の対処法【IntelliJ・SDK】
今回はJavaのSDKバージョンとIntelliJの関係で少しハマったので記事にしたい。
“`
使用環境
IntelliJ使用 ver 2022/2/3 ver
SDK 21を選択時
“`OSS参画時に、レビューを依頼されて中身を確認していたら、
ChronoUnitが読み込まない事象が発生。![スクリーンショット 2024-09-20 215505.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233529/22c3cb9f-d033-baec-4f9f-e55183d07435.png)
![スクリーンショット 2024-09-20 215514.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233529/af809dec-17c1-259c-5fa5-8670566be491.png)`import java.time.temporal.ChronoUnit;`
が読み込まずに、下記`im
スッキリわかるJava入門
# はじめに
他言語の開発経験を数年経て次にJavaについて習うレベルの人向け(筆者がそうであるため)
かなり端折ったりはするけれどなるべく大切な部分は要約してまとめる# 第一部 ようこそJavaの世界へ
Javaは以下の点がある
– プログラミングの学びやすく標準的な基本文法
– 大規模開発を支援するオブジェクト指向に対応
– 豊富に準備された便利な命令群
– 多様なコンピュータで同じように動作する汎用性“`java:文章の表示
System.out.println(“Hello world”);
“`“`java:計算
System.out.println(31 + 31);
“`“`java:変数
int x;
x = 6;
“`## 第1章 プログラムの書き方
ソースコードの波括弧{…}で囲まれた部分をブロック(block)と呼ぶ
外側のブロックは、クラスブロック(class block)
内側のブロックは、メソッドブロック(method block)
2つのブロックの二重構造を持っているコンピュータに対する指示・命令はメソッドブロック
JPA Thymeleaf でstatus=500エラーが出た時にエラー解消した備忘録
**書籍**
Spring解体新書第2版
6章実施中**環境**
・Windows10
・STS
・Spring boot
・Tymeleafテンプレートエンジン発生したエラー
“`
There was an unexpected error (type=Internal Server Error, status=500).
An error happened during template parsing (template: “class path resource [templates/user/signup.html]”)
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: “class path resource [templates/user/signup.html]”)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.par
javaでログをマージする
コード
“`Java
public class Main {public static final String BACKUPDIR = “C:\\hoge\\backup”;
public static final String MERGEDDIR = “C:\\hoge\\merged”;
public static ListbkDirs;
public static ListbkFileNames; public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ}
public void filenameListOut() {
// backupフォルダのパスを取得
Path backupDir = Paths.get(BACKUPDIR);//
bkFileNames = new ArrayList();
// backupフォルダ配下のフォルダ名を
PowerMockito を Eclipse に設定するための手順
## 手順 1: Eclipse のセットアップ
Eclipse IDE をインストール
Java 17 に対応している Eclipse IDE をインストールします。Java SDK の設定
Window > Preferences > Java > Installed JREs から、対象のJavaの SDK を Eclipse に追加して選択します。## 手順 2: プロジェクトの作成
Java プロジェクトを作成
File > New > Java Project を選択し、新しいプロジェクトを作成します。JUnit と Mockito の依存関係を追加
PowerMockito は JUnit および Mockito を前提としています。JUnit5 または JUnit4 を使用できますが、互換性の観点から、JUnit4 の方がより多くの機能がサポートされているため推奨されます。## 手順 3: Maven もしくは手動でライブラリの追加
1. Maven を使用する場合:
pom.xml に以下の依存関係を追加します。
“`xml
PowerMockitoでJavaのJarFileのテストコード書く
PowerMockitoを使用すれば、JarFileのテストをMockitoよりも書きやすくできる場面があります。特に、静的メソッドのモック化やコンストラクタのモック化が必要な場合にPowerMockitoは便利です。JarFileのコンストラクタを直接モックすることができるため、JARファイルのインスタンス作成の部分もモック化して制御しやすくなります。
## PowerMockitoを使うとテストが楽になるケース
#### 1. JarFileのコンストラクタをモックしたい場合
通常のMockitoではクラスのコンストラクタをモックすることができませんが、PowerMockitoならコンストラクタのモックが可能です。#### 2.JarFileの静的メソッドをモックしたい場合
PowerMockitoでは静的メソッドもモック可能なので、これにより、ファイルシステムに依存しないテストが書きやすくなります。## PowerMockitoを使ったテスト例
次に、PowerMockitoを使ってJarFileのコンストラクタをモックし、openConnectionメソッドをテストす
Invalid bound statement (not found) 【Mybatisのエラー・ディレクトリ構成の見直しで解決】
## MyBatisのBindingExceptionエラーに悩んでいる方へ
### マッパーファイルのパス設定に要注意MyBatisを使用していると、次のようなエラーに遭遇することがある。
“`
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
“`このエラーにしばらく悩まされていたが、原因は非常にシンプルだった。
単純だからこそ気づくのに時間がかかってしまっている人も多いかもしれない。また、手動でディレクトリを一つずつ作成しているパターンなどはこの手のエラーで躓きやすいのではないかと感じたため、画像を添付しながら解説記事として残しておく。
## エラーの原因
プロジェクトのディレクトリ構成において、**Javaのパッケージ名に合わせて `resources` フォルダ下にも、同じようにディレクトリを配置する必要**があり、構成が異なるとマッパーが、マッパーファイルの場所が正しく指定されていなかったことが原因であった。例えば、次のような構造の場
JavaでPaiza攻略 : 平方分割
## 平方分割
https://paiza.jp/works/mondai/query_primer/query_primer__square_division
Java初学者ですが、こちらの問題を頑張って解きました。
PythonやCでの解説記事はよく見かけるものの、Javaで攻略している記事をあまり見かけない為、記念に残しておこうと思います。当初、テスト1と4は通るのに、テスト2と3がランタイムエラーになるため、その原因探しに苦しみました。
ブロックごとの計算におけるforループの記述に問題があったわけですが、
気づくまで大変時間がかかった。### 感想
平方分割というアルゴリズムを初めて知ったので、物凄く勉強になりました。
当初、分割しただけじゃ計算量そこまで変わらないのでは〜?と思っておりましたが、
予め計算済みの配列を用意しておくことで、範囲内の計算をスキップ出来るわけですね。#### 以下、問題なくパスしたコード。
“` Java:Main.java
import java.util.*;public class Main{
int[] array
SpringBoot初学者の備忘録
# はじめに
こんにちは、Gakken LEAP のエンジニアの okamotoです。
普段の業務で使用しているSpring Bootについて、使ってはいるものの仕様や仕組みについて理解ができていない部分が多いと感じたため、基本から学んでみました。
今回はその一歩目として学んだものを備忘録として本記事にのこします。# Spring Bootの登場
Springフレームワークの中の一つにSpring MVCというMVCモデルに基づいたフレームワークがあり、
それだけでは他のフレームワークを色々組み合わせなければならず、使いづらい部分があった。
(Spring Rooという各種コードの自動生成機能ライブラリで補完することである程度は楽になっていた)そこで登場したSpring BootはSpring MVCの完成系とされており、上記の二つ+αの組み合わせを完全に上回った利便性がある。
# Spring Bootの利便性とは
とにかく楽である。
どう楽なのかというと、
> 他のフレームワークを色々組み合わせなければならず↑の部分を設定ファイルにスターターライブラリをちょっと
PodmanでJava + Spring Boot + MariaDBの環境構築
# はじめに
有料化に伴い、仕事ではDocker以外を使っている方も多いのではないでしょうか?今回の記事では、Dockerと互換性があるPodmanを使って、Java、Spring Boot、MariaDBをセットアップする方法を紹介します。# 前提条件
– Podmanがインストールされていること
– Pythonとpipがインストールされていること# 環境構築の流れ
## podman-composeのインストール
最初にpodman-composeをインストールします。podman-composeはPythonで書かれているため、pipを使用します。
“`terminal
pip3 install podman-compose
“`
インストール後に、podman-composeのPathが通っていることを確認します。
“`terminal
which podman-compose
“`
通っていなければ追加します。
“`terminal
echo ‘export PATH=$PATH:/Users/yourusername/Library/Python/3.9
サーブレットのクライアントからレスポンスを返すまでの流れ
サーブレット(Servlet)は、Javaを用いたサーバーサイドの技術であり、クライアントからのリクエストを受け取り、適切なレスポンスを返す役割を担います。以下に、クライアントからサーブレットにリクエストが送られ、レスポンスが返されるまでの詳細な流れをステップバイステップで説明します。
## 1. クライアントからのリクエスト送信
– **ユーザー操作**: ユーザーがウェブブラウザでURLを入力する、フォームを送信する、リンクをクリックするなどの操作を行います。
– **HTTPリクエストの生成**: これらの操作により、ブラウザはHTTPリクエスト(GET、POSTなど)を生成します。リクエストには、ヘッダー情報や必要に応じてボディ(データ)が含まれます。## 2. DNS解決とサーバーへの接続
– **DNSルックアップ**: ブラウザは入力されたドメイン名をDNSサーバーに問い合わせ、対応するIPアドレスを取得します。
– **TCP接続の確立**: ブラウザとサーバー間でTCP接続が確立されます。通常、HTTPの場合はポート80、HTTPSの場合はポート443が使用
複数の自動テスト作成で流用できるコード
# はじめに
今まで自動テストを作成したことは無かったのですが、半年程前から業務で自動テストを作成するようになりました。その際に複数の自動テストで流用している汎用性の高いコードがありましたので、それらをまとめてみようと思いました。
# 1. リストから変数の名前を検索し、見つかった際にアクションする
“`
steps.listTest()
.statusIs(200)
.getResponse()
.as(new TypeRef>() {
})
.stream()
.filter(test -> test.getName().equals(NAME))
.findFirst()
.ifPresent(test -> {
testId = test.getId();
steps.install(testId);
});
“`
###### 解説
Testのリスト