きり丸の技術日記

技術・エンジニアのイベント・資格等はこちらにまとめる予定です

技術

GitHubに連携しているソースをIntelliJ IDEAからブラウザで開く(Jump to the GitHub version of a file)

私の中ではよく使うユースケースですので、忘れないようにメモ。 ブログを書いていると、記事に出現したソースをGitHubにPushし、ブログ側にリンクを張ることがよくあります。 その際に、masterではなくコミットハッシュ値付でリンクを張ることで、GitHub側…

エンティティを渡すだけでDBのユニットテストのセットアップしたい(SimpleJdbcInsertとBeanPropertySqlParameterSource)

皆さんはDBのユニットテストを行うとき、どのようにテストのセットアップを行っていますか。 私はSimpleJdbcInsertを使用しています。テーブル名とInsert対象のカラムと値のマップを渡すだけで更新してくれるので、個人的には使いやすいと思っています。 し…

Rust製のコード行数をカウントするtokei(時計)を使う

コメントを除外し、有効なコードの行数(LoC)をカウントするtokei(時計)というツールがあります。 エンジニアの生産性をコードの行数で測れるわけではありませんが、Rust製のツールということで素振りしてみました。 環境 tokei GitHub Codespaces 特徴 …

【Java】WinでもFile.separatorを使わずにスラッシュでディレクトリを表現できる

タイトルの出オチ記事。 Windows環境でディレクトリを表現するときは、次の表現はすべて同じディレクトリを指します。 String path1 = "tmp\\dummy"; String path2 = "tmp" + File.separator + "dummy"; String path3 = "tmp/dummy"; Linux等の環境では、デ…

IntelliJ IDEAでCheckstyleを適用する(自動フォーマットにも適用させる)

コードがコーディング規約に沿っているかを自動で確認してくれるCheckstyleというツールがあります。 ただし、導入してもチェックしかしてくれないので、手動でフォーマットする必要があります。軽微な修正であればIntelliJ IDEAのショートカットでフォーマ…

Oracle19cのイメージをローカルでDockerビルドする

OracleのDatabaseで開発することになりました。サクっと環境構築したかったので、Dockerでローカル環境を構築しようとしましたが、Docker Hubにはイメージが提供されていません。ですので、自分でOracleDatabaseのイメージをビルドする必要があります。 今回…

SpringSecurityが導入されているControllerをWebMvcTestでテストする【SpringBoot】

以前にControllerをテストする記事を書きました。しかし、SpringBootTestの使い方しか分からなかったので、WebMvcTestのやり方を理解していませんでした。 ですが、ToshiakiMaki@makingさんのサポートにより、なんとかWebMvcTestでのテストができるようにな…

FlywayとSpringで検証環境と本番環境で投入するデータを変更する

仕事ではDBマイグレーションとしてFlywayを使用しています。ただ、表やテーブル等のDDLのみで、マスタデータ等のDMLは手動で管理していました。ですので、FlywayでDMLも管理することにしました。 しかし、そのまま適応してしまうと検証環境と本番環境のデー…

gradleでのbootRun時にプロファイルを指定できるようにする

ローカルでプロファイルを指定してbootRunすることはあまりありませんが、地味に便利だったので記事にします。 なお、bootRunタスクに限らず他のタスクでも使用できます。 環境 gradle 6.7 Java 11 Spring Boot 2.3.5 RELEASE ゴール gradleのbootRun時のオ…

JavaでFTPを使ったアップロードを実装してテストも行う(commons-net)

JavaでFTPを使ったアップロード機能を実装したので、未来の自分のため残しておきます。ダウンロード機能も簡単に実装できるようですが、仕事では扱わなかったので、必要なときにまた実装します。要望があったら頑張って書きます。 なお、ソースコードをガン…

【Docker】クライアントからプライベートリポジトリへのアクセス時に発生するX509エラーを回避する

社内に構築しているプライベートリポジトリに対して、Dockerでログインしようとしたが掲題のエラーが発生したので、回避した時のメモ。 ゴール 次のコマンドでログインが成功するようにする。 docker login private-repository 次のエラーが出たら失敗。 Err…

LAPRAS SCOREをPythonで取得し、GitHub ActionsでGitHub Profileを更新する

私は自分の力を客観的に判断するために、LAPRAS様を利用しています。LAPRAS様でLAPRAS SCOREなるエンジニアの能力を数値化したものがあり、そちらを利用してGitHub Profileに貼り付けていましたが、自分でキャプチャして画像化したものなので一定期間更新し…

【シェル】Expectで特定の文字を検出したら、別のコマンドを打って環境構築を自動化する

参考元の記事が優秀ですので、この記事は「やってみた」レベルの記事になります。詳しいことは参考元記事を参照してください。このコマンドを忘れていたので、私のメモ用記事でもあります。 環境構築時、ディスプレイに「password:」が出力されたら、自動的…

Flyway+Springでデフォルトの接続スキーマを設定ファイルで指定する

複数のスキーマがあるDBに対して、Flyway+Springでアクセスしようとしたときに半日くらい設定に苦労したので、メモとして残しておきます。 環境 Flyway 5.2.4 PostgreSQL 13 SpringBoot 2.3.5.RELEASE Java Java 11 YAML 設定方法 spring: datasource: drive…

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

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

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 手順 テストの…