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クエリには、このように記…

Alpine Linuxで、URLに対するヘルスチェックを行う方法

こんにちは。 エキサイト株式会社の三浦です。 コンテナでの開発をする際、できるだけサイズを減らすため、Alpine Linux(以降Alpine)を使っている方も多いと思います。 ですがAlpineは、サイズを減らすためにデフォルトでは curl コマンドが入っていません…

Nginx経由でNext.jsの開発環境にアクセスした際のブラウザコンソールエラーを回避する

こんにちは。 エキサイト株式会社の三浦です。 フロントエンドを構築するとき、皆さんはどんな構成にするでしょうか。 手段の一つとして、「Nginx + Next.js」のように、アプリケーション本体である「Next.js」と、そのアプリケーションとクライアント(例:…

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

こんにちは。 エキサイト株式会社の三浦です。 去る4月21日、第4回目となる「テクデザBeer Bash」を開催しましたので、そのレポートを書いていきます! なお第3回のレポートは以下になりますので、ぜひ合わせてお読みください。 tech.excite.co.jp テクデザB…

WebJarsを使ってJavaScriptライブラリをSpring Bootプロジェクトにインストールする方法

こんにちは。 エキサイト株式会社の三浦です。 Spring BootでWebページ等を作るとき、ちょっとしたJavaScriptのライブラリを入れたいときがあると思います。 ですが、「ちょっとしたライブラリのためだけに npm install 等をできるようにするのは面倒…」と思…

IntelliJでTypeScriptの型補完などが効かなかったときは、とりあえずキャッシュを消して再起動してみよう

こんにちは。 エキサイト株式会社の三浦です。 今回は、表題のとおりですが、とりあえずIntelliJで不具合があったときはキャッシュを消して再起動してみると直るかもしれない、という話になります。 順を追って話していきます。 何が起きたか 結論 何が起き…

ローカルにダウンロードしたnpmでnpmコマンドを実行する方法

こんにちは。 エキサイト株式会社の三浦です。 JavaScriptやTypeScriptでプロジェクトを作る上で、 npm は必須なツールの一つと言えるでしょう。 PCにグローバルにダウンロードして使うことも出来ますが、場合によっては特定のローカルなディレクトリにダウ…

Flyway 8.2.0から、クラスパスにMySQLドライバーを含まないといけなくなった

こんにちは。 エキサイト株式会社の三浦です。 みなさんはFlywayを知っているでしょうか? FlywayはJavaでデータベースのマイグレーションを行ってくれるアプリケーションで、データベースを扱うのであればぜひ入れておきたいものの一つです。 このFlywayは…