Amazon Aurora MySQLの証明書を更新した話

こんにちは。 エキサイト株式会社の三浦です。 AWSのAuroraにはサーバー証明書が組み込まれていますが、以前デフォルトとして設定されていた rds-ca-2019 がもうすぐ有効期限を迎えます。 今回は、この証明書を更新した話をしていきます。 準備 アプリケーシ…

Aurora MySQLを2系から3系に上げる際の懸念点

こんにちは。 エキサイト株式会社の三浦です。 AWSのAurora MySQL 2(MySQL 5.7互換)は、2024年10月31日で標準サポートが終了します。 docs.aws.amazon.com 一応料金を支払えばサポートは延長できますが、このタイミングでAurora MySQL 3(MySQL 8互換)へ…

Java17 / Spring Boot2 を Java21 / Spring Boot3 にアップデートした話

こんにちは。 エキサイト株式会社の三浦です。 先日、サービスで使っているJavaやSpring Bootのメジャーバージョンをアップデートしました。 その際に何を行ったかについて説明していきます。 主目的のアップデート内容 Java Spring Boot 付随した変更内容 G…

TerraformをやめてCDKでReStartしたあと、 CDKをやめてCDK for TerraformでReStartした話

こんにちは。 エキサイト株式会社の三浦です。 2024年2月16日、エキサイトで第3回目となるTechConが開催されました! 詳細は以下の記事を御覧ください。 tech.excite.co.jp 今回私は、「TerraformをやめてCDKでReStartしたあと、 CDKをやめてCDK for Terrafo…

Spring BootにおけるRedisのPrimary/Replicaノード判定が自動だったという話

こんにちは。 エキサイト株式会社の三浦です。 以前、Spring Bootにおいて、RedisのPrimary(Master)とReplicaのノードをそれぞれ呼び分けて使うことができる、という記事を書きました。 tech.excite.co.jp 今回はそれに関連して、実はPrimaryノード・Repli…

複数回答チェックボックスで、1つ以上のチェックを必須にする方法

こんにちは。 エキサイト株式会社の三浦です。 こちらは、エキサイトホールディングス Advent Calendar 2023の18日目の記事になります。 qiita.com 良ければ他の記事もどうぞ! さて、HTMLでフォームを作る際、「複数回答が用意されているチェックボックス式…

Spring Bootのアノテーションによるバリデーションを、任意の値に対して行う方法

こんにちは。 エキサイト株式会社の三浦です。 こちらは、エキサイトホールディングス Advent Calendar 2023の11日目の記事になります。 qiita.com 良ければ他の記事もどうぞ! さて、Spring Bootでは、アノテーションを使ってクラス内の特定のフィールドに…

Spring Bootで、独自アノテーションを目印にAOPを行う方法

こんにちは。 エキサイト株式会社の三浦です。 こちらは、エキサイトホールディングス Advent Calendar 2023の6日目の記事になります。 qiita.com 良ければ他の記事もどうぞ! さて、コーディングをしている時、「このメソッドが実行される際はログを取りた…

Javaで、文字列内に文字列変数を挿入する方法

こんにちは。 エキサイト株式会社の三浦です。 本記事は、エキサイトホールディングス Advent Calendar 2023の4日目のものになります。 qiita.com 良ければ他の記事もどうぞ! さて、コーディングをしていると、文字列の中に変数で定義してある文字列を挿入…

Spring Securityで、同一ドメインにて別セッションでログイン管理をする方法

こんにちは。 エキサイト株式会社の三浦です。 Spring Securityでセッションを使ってログイン管理をする場合、基本的にはドメイン単位でセッションが分かれます。 今回は、同一ドメインにて別セッションでログイン管理する方法を説明します。 1. プロジェク…

Spring Securityで、独自ユーザ情報を簡単にHTML上に表示する方法

こんにちは。 エキサイト株式会社の三浦です。 Spring Securityを使えば、Spring Bootで簡単にログイン機構を作ることができます。 今回はSpring Securityの一部機能を拡張し、独自のユーザ情報を簡単にHTML上に表示する方法を紹介します。 Spring Security…

Spring Securityで、Controller以外で現在ログイン中のユーザ情報を取得する方法

こんにちは。 エキサイト株式会社の三浦です。 Spring Securityを使えば、Spring Bootで簡単にログイン機構を作ることができます。 当然ログイン中のユーザ情報も取得することができます。 Controllerのメソッドの引数から取得する方法が一般的な方法の1つか…

htmxで、親タグではないformのデータを送信する方法

こんにちは。 エキサイト株式会社の三浦です。 以前、「htmxでデータを送信する際、送信の設定をしたタグの親にformタグがある場合は、そのformタグに含まれるすべてのデータが送信される」ということを説明しました。 tech.excite.co.jp 今回は、親以外のfo…

htmxでデータ送信時、親form内のすべてのデータが送信される

こんにちは。 エキサイト株式会社の三浦です。 皆さんは、htmxをご存知でしょうか?(HTMLのtypoではありません!) htmx.org htmxはHTML用のライブラリの一つで、HTMLページ上での動的なデータ通信やそれによる表示の置き換えなどを簡単に行えるようにして…

Spring Session3系から、Redis接続時にNO_OP設定がデフォルトで不要になった

こんにちは。 エキサイト株式会社の三浦です。 Java / Spring Bootでセッションを扱う場合、Spring Sessionを使うことが多いのではないでしょうか。 その際、データ保存先にAWSなどのクラウド上のRedisを指定した場合には、以前はNO_OP設定というものが必要…

第6回テクデザBeer Bashを開催しました

こんにちは。 エキサイト株式会社の三浦です。 9月15日に、社内交流イベントである「テクデザBeer Bash」の第6回目を開催しました! 今回はそのレポートを書いていきます。 なお前回の様子は以下のブログにまとめてありますので、よければ御覧ください。 tec…

2023年最新版・Spring BootでAWSパラメータストアからDBのパスワードを取得する方法

こんにちは。 エキサイト株式会社の三浦です。 以前以下の記事で、「Spring BootでAWSパラメータストアからDBのパスワードを取得する方法」を紹介しました。 tech.excite.co.jp ところがつい先日新しいプロジェクトで同じことをしようとした時、設定方法が変…

階層化されたGradleのサブプロジェクトは、フルパスではなく一番最後に付く名前で区別される

こんにちは。 エキサイト株式会社の三浦です。 JavaでGradleを使っている場合、人によってはサブプロジェクトを使う場合もあるでしょう。 サブプロジェクトを使えばプロジェクトを整理しやすくなるためとても便利ですが、詰まりやすい点も存在します。 今回…

build.gradleの位置とサブプロジェクトの関係

こんにちは。 エキサイト株式会社の三浦です。 今回は、Javaで用いられる依存・タスク管理ファイルである build.gradle の位置が、サブプロジェクトと関連しているということについて説明していきます。 build.gradleは分けて使える 最後に build.gradleは分…

Spring Bootのmainファイルは適切な位置に配置しよう

こんにちは。 エキサイト株式会社の三浦です。 Spring Bootで起動に必須となるmainファイルですが、適切な配置にしないと気づきにくい問題が起きる場合があります。 今回は、実際に起きてしまった問題をもとに説明していきます。 問題の構成 早速ですが、以…

AWS CDK / CDK for Terraform についての所見

こんにちは。 エキサイト株式会社の三浦です。 インフラ周りをコードとして管理する、つまり IaC (Infrastructure as Code) を実現するためのツールはいくつも存在します。 その中でも、特にAWSに対してIaCで開発していく場合に着目されるであろう以下のツー…

Spring Bootで自動生成するOpenAPIで、同名のクラスをcomponents.schemasとして登録する方法

こんにちは。 エキサイト株式会社の三浦です。 以前、Spring BootからOpenAPIのドキュメントを自動生成する方法について説明しました。 tech.excite.co.jp 今回はその中で少し詰まった、「同名のクラスを components.schemas として登録する方法」について説…

OpenAPIを使って、Spring Boot製のAPIからアプリ用のDartコードを自動生成する

こんにちは。 エキサイト株式会社の三浦です。 皆さんは、 OpenAPI をご存知でしょうか? OpenAPIとはAPIのドキュメントを書くときの仕様のことで、使われているプログラミング言語やフレームワークに依存しないため、ドキュメントの標準的な仕様として使わ…

使えなくなりつつあるFCMの「以前の HTTP プロトコル」から、小さな変更だけでとりあえずWebPushを送る方法

こんにちは。 エキサイト株式会社の三浦です。 以前この記事で、非推奨なFCMの使い方である「以前の HTTP プロトコル」ではWebPushが送信できなくなっている、というお話をしました。 tech.excite.co.jp 今回は、調査していく中で判明した、とりあえず取るこ…

FCMの「以前の HTTP プロトコル」ではWebPushが送信できなくなったかもしれない

こんにちは。 エキサイト株式会社の三浦です。 Webブラウザ用Push通知であるWebPushを使う上でFCMを使っている方は多いと思いますが、最近(2023年6月)特定の条件下でWebPushが送れなくなる問題が発生したので、今回はその共有をさせていただきます。 WebPu…

Terraform実行時に「TLS handshake timeout」が出たときの対処法

こんにちは。 エキサイト株式会社の三浦です。 Terraformは非常に有名なIaCであり、クラウドに触っているなら使っている方も多いのではないでしょうか。 非常に便利なのですが、稀に以下のようなエラーが出ることがあります。 Error: error reading ***: Req…

Laravelでタスクスケジュールを使用するときは、cronの指定が必要

こんにちは。 エキサイト株式会社の三浦です。 PHPの有名なフレームワークであるLaravelには、「タスクスケジュールの実行」、いわゆる「バッチの実行」処理が組み込まれています。 アプリケーションコード内でタスク実行のスケジュールを書けるなど非常に便…

Javaから、FirebaseのMessagingでpush通知を送る方法

こんにちは。 エキサイト株式会社の三浦です。 アプリにpush通知を送る方法はいくつかありますが、FirebaseのMessaingはその中でも比較的簡単な方法の1つです。 今回は、Java・Spring Bootを使用して、Firebase Messaging経由でアプリにpush通知を送信する方…

コンテナでSpring BootのScheduledを使う際は、initialDelayを設定するのが良い

こんにちは。 エキサイト株式会社の三浦です。 Spring Bootには Scheduled というアノテーションがあり、これを使うと定期実行をしてくれるようになります。 今回は、コンテナでこの Scheduled を使うのであれば initialDelay を設定するのが適切だと思った…

Amazon Route 53のDNSクエリの「追加料金不要」は、すべての料金が無料になるわけではない

こんにちは。 エキサイト株式会社の三浦です。 Amazon Route 53は、AWS上でドメインを簡単に扱うことが出来るサービスです。 使用にはもちろん料金が掛かります。 掛かる対象にはいくつか種類があるのですが、その中の一つであるDNSクエリには、このように記…