きり丸の技術日記

技術検証したり、資格等をここに残していきます。

2020-01-01から1年間の記事一覧

3ヵ月間のブログメンタリングの卒業

2020/10-2020/12の3ヵ月間、カックさんにブログメンタリングを受けていました。 いろいろとお世話になったので、卒業ブログとして残すことにします。 そもそも、ブログメンタリングにつきましては、次の資料をご覧ください。 ブログメンタリング行った理由 …

動いているDBからテーブルやER図をDockerで生成する(Schema Spy)

テーブル定義やER図は自動生成できると楽です。また、本番環境のDBから生成できるともっと便利です。 テーブル定義やER図を自動生成するツールはたくさんありますが、現在のプロジェクトで使用しているSchema Spyを紹介します。GitHubのStar数が1600もあるの…

『ここはウォーターフォール市、アジャイル町』の読書感想

翔泳社が翔泳社ブックアンバサダーを100名募集というサイトにて、翔泳社の本の感想をSNSを通じて発信するアンバサダーを募集していました。応募したところ、私が奇跡的に選ばれました! いくつかの推薦タイトルの中から、もっとも面白そうな『ここはウォータ…

2020年の1人アドベントカレンダーを振り返る

きり丸アドベントカレンダー2020の25記事目です。 全部JavaやSpring系の記事で埋めようかと思いましたが、25記事全部1人で埋めることは今後も少ないと思うので、この振り返り記事で締めます。 完走した感想 2度と1人アドベントカレンダーをやらねぇという気…

SpringBootで同クラス別インスタンスをインジェクションできるようにする(BeanとQualifier)

きり丸アドベントカレンダー2020の24記事目です。 23日目の記事にて、RestOperationsインターフェースを使用して別システムのAPIを実行できるようにしました。23日目の状態では他システムのAPIを実行する直前にてインスタンスを生成していましたが、別の箇所…

SpringBootで別システムのAPIを実行する(RestOperations)

きり丸アドベントカレンダー2020の23記事目です。 自システムのREST APIを作成するときには、@RestControllerを付与すれば簡単に実装できます。 今回はRestOperationsを使用して、別システムのAPIを実行します。 ゴール アプリケーションから別システムに対…

Spring Scheduledで定期実行する

きり丸アドベントカレンダー2020の22記事目です。 バッチ処理等の定期的な実行を行うには、cronがあります。製品としては日立製作所のJP1、ソフトバンクのLoadstar Scheduler等があります。 Spring Bootの機能でも、定期実行できるSpring Scheduledが存在し…

Spring Cacheでキャッシュを使って高速化する

きり丸アドベントカレンダー2020の21記事目です。 弊社の試験環境のシステムには、月跨ぎや年跨ぎのテストを行いやすいように業務日付という概念があります。処理日等の項目を業務日付に合わせて連携しないと、対向システムのバリデーション等にひっかかって…

SpringBootでCSVダウンロードする

きり丸アドベントカレンダー2020の20記事目です。 前回の記事でCSVのアップロード処理を書きました。逆に、CSVのダウンロード処理もできるとうれしいです。 ですので、今回の記事ではCSVダウンロードします。 ゴール CSVファイルをダウンロードする 環境 Jav…

SpringBootでCSVアップロードする(MultipartFile)

きり丸アドベントカレンダー2020の19記事目です。 ToDoアプリケーションでは、CSVファイルをアップロードして一括で登録するような機能があると便利です。ですので、ファイルをアップロードする仕組みを作りましょう。 ゴール HTMLからJavaにファイルをアッ…

SpringAOPで特定のpackage配下のExceptionを共通的に翻訳する

きり丸アドベントカレンダー2020の18記事目です。 RestControllerAdviseで共通的に例外をキャッチする方法をこちらの記事で紹介しました。 しかし、RestControllerAdviseは発生した例外をキャッチするのが役割で、例外を自作例外に翻訳することはこのクラス…

共通的にExceptionをキャッチして、フロントに返却する(RestControllerAdvise)

きり丸アドベントカレンダー2020の17記事目です。 エラーが発生した時に、共通的にExceptionをキャッチできると、フロントに返却するレスポンスのHttpStatusやBodyを共通化できます。その共通化にはRestControllerAdviseを使用します。 それぞれ適切なExcept…

SpringSecurityを使ったRestControllerのテストを行う

きり丸アドベントカレンダー2020の16記事目です。 自システムのデータをREST APIで公開すると、非同期で処理ができるようになるのでフロントのシステムをSPAにできたりします。第三者にデータを提供することもできます。 ぜひ、REST APIでシステムを公開する…

Spring Profilesで環境ごとの設定ファイルを読み込む(SpringBoot2.4の変更も記載)

きり丸アドベントカレンダー2020の15記事目です。 作成したアプリケーションを各環境にデプロイする際、2つの考え方があります。 各環境用に設定ファイルを書き換えてデプロイする 各環境用に複数の設定ファイルを用意し、デプロイ後に読み込む設定ファイル…

【SpringBoot】ヘルスチェック(死活監視)用のAPIをサクっと公開する(spring-boot-actuator)

きり丸アドベントカレンダー2020の14記事目です。 アプリケーションは常に動いている必要があります。ただし、障害で動かなくなることもよくあります。動かなくなった場合には、早く気付けるようなしくみが必要です。その1つとして常に同じ値を返すAPIを用意…

【Java】自作アノテーションで特定の文字用の自作バリデーションを行う

きり丸アドベントカレンダー2020の13記事目です。だんだんToDoアプリケーションは関係なくなってきます。 対向システムに情報を渡すときに、データに取り扱い不可能な文字が紛れていることがあります。たとえば髙(はしごだか)であったり、ハイフンだったり…

【SpringBoot】画面項目をサーバでバリデーションする

きり丸アドベントカレンダー2020の12記事目です。 画面の項目が必須項目なのか、数字のみ許容するのか、Email形式のみしか許容しないのかをサーバ側で検証する必要があります。この項目を検証することをバリデーションと言います。 基本的には画面側のJavaSc…

【SpringBoot】Controllerのテストを行う(Not RestController)

きり丸アドベントカレンダー2020の11記事目です。 今回の記事でControllerのテストを行います。GET通信やPOST通信を行って、そのあとの挙動をテストします。 ゴール Controllerのテストを行う できないこと WebMvcTestでのテスト 環境 Java 15 手順 テストの…

ログイン機能を追加する(Spring-boot-starter-security)

きり丸アドベントカレンダー2020の10記事目です。 自分の勉強も兼ねてログイン機能を実装してみましたが、ベストプラクティスは分かりませんね…。難しい。 今回の記事でログイン機能を実装します。アプリケーションらしくなりますが、セキュリティをブラック…

データベースのH2を使用してMyBatisの取得・更新のテストを行う(JavaとSpringBoot)

きり丸アドベントカレンダー2020の9記事目です。 今回の記事でMyBatisのテストを行えるようにします。テスト用のスターターが準備されているので、テストのための準備は簡単です。ただし、テストのセットアップは慣れていないと、時間がかかってしまいます。…

MyBatisを使用してデータの取得・更新をする(JavaとSpringBoot)

きり丸アドベントカレンダー2020の8記事目です。 今回の記事でDBの更新を行います。データの取得(Select)と追加(Insert)をこの記事で紹介します。 更新と削除に関しても同様の処理で問題ありませんので、頑張ってみてください。なお、9日目にDBのテスト…

HTMLからJavaにパラメータを渡す(SpringBoot)

きり丸アドベントカレンダー2020の7記事目です。 6日目の記事でJava -> HTMLにデータを転送することができました。 しかし、それではデータを取得することしかできません。 今回の記事では、データの更新、削除、追加できるようにHTML -> Javaにデータを転送…

Thymeleafを使ってSpringBootからhtmlにパラメータを渡して画面表示させる

きり丸アドベントカレンダー2020の6記事目です。 始めに宣言しておくと、この辺から「やはりIntelliJ IDEAいいなぁ…」みたいに思うことが多くなってきます。しょうがないとはいえ、GitpodやVS Codeはライブラリのimport機能が貧弱です。 コーディング中に引…

GitHubに登録しているJavaアプリをHerokuにアップロードする

きり丸アドベントカレンダー2020の5記事目です。 Herokuを初めて使ってみました。なんだかんだ、デプロイ設定が面倒くさいだろうと使っていませんでしたが、アドベントカレンダーで使用するいい機会だと思って素振りしました。 いろんな設定を自動でやってく…

GitpodでDBのDockerを使用し、SpringBootからアクセスする

きり丸アドベントカレンダー2020の4記事目です。 Gitpod上でDBの環境構築もできると、確認できることが増えます。DBも設定しましょう。 手順 .gitpod.Dockerfileを修正 gp initで作成したDockerのイメージにはPostgreSQLは含まれていません。ですので、.gitp…

【Java】GitpodでSpringが使えるように環境構築する(VS Codeでも流用可)

きり丸アドベントカレンダー2020の3記事目です。ようやくSpringBootの起動ができます! なお、まだコードは触れません。 Springのプロジェクトを作成し、Gitpodにアップロードしました。しかし、現在のままではGitpodでSpringの開発をしようにも、そもそも起…

【Java】Spring Initializrで簡単にプロジェクトを作成する

きり丸アドベントカレンダー2020の2記事目です。 Java歴6年になりますが、いまだにゼロからプロジェクトを作成するのは苦手です。というか、出来ないですね…。 じゃあ、どうやってプロジェクトを作っているかというと、Spring Initializrというサイトでプロ…

GitpodでJavaの開発環境を構築する

きり丸アドベントカレンダー2020の1記事目です。今回のアドベントカレンダーはJavaとSpringBootを使いつつ、TODOアプリを作って公開するところまでやりたいと考えてます。 はじめてのJavaのプログラミングに最適!という形で皆さんに紹介できたら、と考えて…

【Java】不安定なテスト(Flakyなテスト)に失敗したら自動リトライさせるライブラリを使用する(test-retry-gradle-plugin)

過去に所属していたプロジェクトでは、CIが終わるまでに2.5時間ほどかかっていました。その中で極稀に対向システムのモックがうまく立ち上がっていなかったり、DBのセットアップが終わらないままテストを行ったりして、テストに失敗することがありました。 …

yqを使用してYAMLとJSONを相互変換する

cURLで実行結果のレスポンスJSONを整形するためのライブラリのjqは色んな所で使われていると思います。 そのJSONを扱うためのjqのラッパーライブラリとして、YAMLを扱うことができるyqがあります。 実際に困ったことは無いのですが、「ローカルはYAMLでずっ…