mybatis-logプラグインでSQLコメントアウトを使う方法

こんにちは。 エキサイト株式会社の三浦です。 Spring BootでMySQLなどのDBを使う場合、MyBatisを使用すると便利です。 そしてMyBatisを使用する際は、IntelliJで開発しているのであれば、mybatis-logというプラグインを使用すると、MyBatisのログから実行SQ…

M1 MacでSpring Boot実行時に発生するNettyエラーを抑える方法

こんにちは。 エキサイト株式会社の三浦です。 M1 MacでSpring Bootを実行すると、Netty周りでエラーが起きる場合があります。 今回は、そのエラーを解消する方法を説明します。 M1 MacとSpring BootのNettyエラー エラーの解消方法 最後に M1 MacとSpring B…

Spring Bootでapplication.ymlをDIするシンプルな方法

こんにちは。 エキサイト株式会社の三浦です。 Spring Bootで test や production などのデプロイ環境ごとに異なるデータを定義したいときは、 application.yml ファイルに定義することが多いでしょう。 今回は、 application.yml から値を取得するシンプル…

Thymeleafを使ってみた

こんにちは。 エキサイト株式会社の三浦です。 今回は、Spring Bootでほぼ初めてThymeleafを使ってみたので、使ってみた所感について書いていきます。 Thymeleafとは Thymeleafの使い方 使ってみた所感 Thymeleafとは Thymeleafは、Javaで使用するHTMLのテン…

Java17で発生するSpotlessのエラーを解消する方法

こんにちは。 エキサイト株式会社の三浦です。 Javaで開発をする際、Spotlessを使用している方もいるのではないでしょうか。 このSpotlessですが、実は特定の状況下だとJava17で実行できない場合があります。 今回は、その状況と解決法について説明します。 …

Intel MacからM1 Macに移行する際に注意したこと

こんにちは。 エキサイト株式会社の三浦です。 最近社用のPCをIntel MacからM1 Macに変えたのですが、その際にいくつか注意したこと・詰まったことがありました。 今回は、それらについて説明していきます。 M1 Macとは M1 Mac用のアプリケーションを使用す…

IntelliJで開発しているJavaアプリケーションで、Javaバージョンを上げる際に気をつけること

こんにちは。 エキサイト株式会社の三浦です。 Javaは現在も積極的にアップデートされている言語であるため、様々な理由からJavaで開発しているアプリケーションのJavaバージョンを上げる必要が出てくることがたまにあります。 今回は、IntelliJで開発してい…

build.gradleのbuildscript、plugins、dependenciesの違いについて

こんにちは。 エキサイト株式会社の三浦です。 Javaの依存管理にGradleを使用する場合、build.gradleファイルを使うことになります。 ですがbuild.graldeでライブラリを管理する場合、 buildscript 、 plugins 、 dependencies といった複数の書き方がありま…

ECS Fargate Spotの中断時に、安全にALBから登録解除する方法

こんにちは。 エキサイト株式会社の三浦です。 Amazon ECS でFargateを使用する際、通常のFargateとは別にFargate Spotを選択することが出来ます。 Fargate Spotは通常のFargateに比べて非常に安く、ぜひとも使っていきたい一方で、AWS側の都合でコンテナが…

jibでコンテナ化するJavaアプリケーションでSIGTERMを無視する方法

こんにちは。 エキサイト株式会社の三浦です。 Javaアプリケーションをコンテナとして動かしたいとき、jibを使うのは大きな選択肢の1つです。 jibを使えば非常に簡単にJavaアプリケーションをコンテナ化することが出来ますが、一方でカスタマイズしたい場合…

ECSのデプロイを待つとき、aws ecs wait services-stableだけでは不十分な場合がある

こんにちは。 エキサイト株式会社の三浦です。 ECSにAWS CLIを使ってデプロイするとき、皆さんはデプロイの完了をどうやって検知しますか? 今回は、デプロイ完了検知に aws ecs wait services-stable を使用したときの問題点について説明します。 AWS CLIと…

CLI経由なら、ECSのALBは更新できる

こんにちは。 エキサイト株式会社の三浦です。 AWSにはECSという、コンテナをデプロイ・運用できるサービスがあります。 このECSにはALBを接続することもでき、それによってURLからのアクセスをECSのコンテナに流すことができます。 今回は、一度ECSにALBを…

AWSのOpenSearchでソフトウェアアップデートをしたら、JVMメモリプレッシャーが荒ぶった件について

こんにちは。 エキサイト株式会社の三浦です。 AWS OpenSearch Serviceではたまにソフトウェアアップデートが来ることがありますが、「バージョン自体をアップデートするわけではないからそこまで大きな変化はない」と考えていると、驚くような事態が起きる…

「外部勉強会 リビルドへの道」で「実際にリビルドを完遂してみて」を発表しました!

こんにちは。 エキサイト株式会社の三浦です。 2022年6月27日、エキサイト主催で行った「外部勉強会 リビルドへの道」にて発表させていただきました! 今回は、簡単に振り返りたいと思います。 「外部勉強会 リビルドへの道」とは 「外部勉強会 リビルドへの…

プライベートサブネットにあるサーバ上の開発環境Webページにアクセスする方法

こんにちは。 エキサイト株式会社の三浦です。 AWSで開発を行う場合、多くのアプリケーション用サーバはプライベートサブネットに設置することになるでしょう。 つまり、もしWebアプリケーションの開発環境がサーバ上に存在する場合、本来インターネットから…

Flywayで、S3にあるSQLファイルを使ってマイグレーションする方法

こんにちは。 エキサイト株式会社の三浦です。 JavaのアプリケーションでDBを扱っている場合、DBのマイグレーションのためにFlywayを使っている方も多いのではないでしょうか。 今回は、マイグレーションに使用するSQLファイルについて、ローカルではなくS3…

AWSのプライベートサブネットとパブリックサブネットの違い

こんにちは。 エキサイト株式会社の三浦です。 Amazonが提供しているAWSでは、サーバやDBなどを配置する箱として「サブネット」と呼ばれるものがあります。 そしてサブネットは、「プライベートサブネット」と「パブリックサブネット」の2種類が存在します。…

Docker ComposeでGraceful Shutdownのための時間をかせぐ方法

こんにちは。 エキサイト株式会社の三浦です。 前回、ECS FargateとGraceful Shutdownに関する記事を書きました。 tech.excite.co.jp 今回はこの調査をしている時に直面した、Docker Composeで実行したコンテナの終了時、Graceful Shutdownが完了する前に強…

ECS Fargate Spotでは、STOPSIGNALを変更できない

こんにちは。 エキサイト株式会社の三浦です。 今回は、ECS Fargate SpotでGraceful Shutdownをしたい時に引っかかる可能性のある、STOPSIGNALに関する注意点を説明します。 ECS Fargate Spotとは ECS Fargateは、AWSの提供するマネージドなコンテナ実行サー…

「第二回テクデザ総会」を開催しました!

こんにちは。 エキサイト株式会社の三浦です。 2022年5月13日に、第二回目となる「テクデザ総会」を開催しました! 第二回テクデザ総会 ちなみに、第一回目の様子はこちらになります。 tech.excite.co.jp テクデザ総会 テクデザ総会は、事業部間など、普段は…

DateTimeFormatでは、JSONで受け取った日付をうまく取得できない場合があるという話

こんにちは。 エキサイト株式会社の三浦です。 Javaで日付形式の文字列を受け取る場合、 DateTimeFormat を使うことが多いと思います。 ですが実は、JSONで日付を受け取ろうとするとうまく行かない場合があります。 今回は、JSONで日付を受け取るにはどうす…

Spring Bootにおける、おすすめRedis設定方法

こんにちは。 エキサイト株式会社の三浦です。 以前こちらの記事で、Spring BootのRedisキャッシュで List.of などを使う方法について説明しました。 tech.excite.co.jp 今回はそれも含んだ、Redisキャッシュのおすすめ設定方法を紹介します。 なお実は、弊…

Spring BootのRedisキャッシュで、List.ofを使えるようにする方法

こんにちは。 エキサイト株式会社の三浦です。 Spring Boot には様々な機能が用意されており、その一つに Redis へのキャッシュ機能があります。 非常に便利なのですが、少なくとも Spring Boot の ver.2.6.6 では、 List.of (正確には、 List.of などによ…

Spring Bootで、JDBC設定にTLSプロトコルの指定が不要になった話

こんにちは。 エキサイト株式会社の三浦です。 今回は、Spring Bootのアップデートによって、DB設定がちょっと簡単になった話をします。 Spring BootとDB設定 Spring BootでDBと接続したい場合、 application.yml ファイルに以下のように設定します。 spring…

2回目以降のCheckstyle実行結果を見る方法

こんにちは。 エキサイト株式会社の三浦です。 皆さんは、Checkstyleを使っていますか? Javaのコードが指定したコード規約に即しているかをチェックしてくれるツールで、これによってコードの品質を保つことができます。 Gradleからタスクを実行したりして…

ConstructorPropertiesを使ったAPIリクエストモデルでは、ParameterObjectは使えないという話

こんにちは。 エキサイト株式会社の三浦です。 JavaのSpring Bootでは、OpenAPIのライブラリを使用することでAPIのリクエストモデルを簡単にドキュメント化することができます。 ただ、リクエスト用のモデルで ConstructorProperties を使っていると、うまい…

GitHubのIssueでは、Milestoneが役に立つという話

こんにちは。 エキサイト株式会社の三浦です。 皆さんは、GitHubでIssueを使っているでしょうか? 今回は、Issueを使う場合、併せてMilestoneを使うのがオススメ、という話をします。 GitHubのIssue GitHubには、Issueという機能があります。 コードを書いて…

Spring Bootで、環境ごとに異なる値を持つモデルクラスを作るオススメ方法

こんにちは。 エキサイト株式会社の三浦です。 コードを書いていると、たまに環境ごとに異なる値を使いたくなるときがあります。 例えば、開発環境と本番環境で使用するDBが異なる場合は、DBのURLは環境ごとに異なるはずです。 今回は、Spring Bootでそのよ…

AWS Lambdaのhandler内外でのexitの挙動について

こんにちは。 エキサイト株式会社の三浦です。 AWSには、サーバーレスで処理を実行できる「AWS Lambda」というサービス(以降Lambda)があります。 Lambdaでは、実行の起点となるメソッド(handler)を指定することで、Lambdaの実行イベントが走ったときにそ…

Excite × iXIT TechConで「Spring Bootという強すぎるフレームワークについて」を発表しました!

こんにちは。 エキサイト株式会社の三浦です。 先日、弊社内で Excite × iXIT TechCon というカンファレンスが行われました! tech.excite.co.jp 私は「Spring Bootという強すぎるフレームワークについて」というタイトルで発表させていただきました。 Sprin…