コンテナで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は…

Spring Bootでは、リクエストのAcceptで指定するメディアタイプによってはカスタムExceptionControllerが当たらない

こんにちは。 エキサイト株式会社の三浦です。 Spring BootにはExceptionControllerというものがあり、それを使うことでControllerが投げる例外の種類によってリクエスト元に返すステータスコードやレスポンスを制御することが出来ます。 このExceptionContr…

Spring Bootでは、URLエンコードされたスラッシュをURLパスとして使えない

こんにちは。 エキサイト株式会社の三浦です。 Web開発をしていると、URL周りを触ることが多々あります。 URLには特殊文字と呼ばれる「URL内で使う場合に特別な意味を持つ文字」がいくつか存在し、それらをあくまで普通の文字として使いたい場合はURLエンコ…

急激なDB書き込みが行われるサービスをリビルドした話

こんにちは。 エキサイト株式会社の三浦です。 2/17(金)、エキサイトで第二回TechConが開催されました! tech.excite.co.jp 今回は、「急激なDB書き込みが行われるサービスをリビルドした話」というタイトルで発表させていただきました。 DB書き込みが急激…

Checkstyleのツールバージョンアップで詰まった話

こんにちは。 エキサイト株式会社の三浦です。 皆さんは、Checkstyleを使っていますか? checkstyle.org Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard. It automates the process of checking …

JavaからSlackに、Blockを使ったメッセージを送る方法

こんにちは。 エキサイト株式会社の三浦です。 Slackではテキストだけのメッセージを送信することもできますが、Blockというものを使うことでよりリッチなメッセージを送ることもできます。 今回は、Javaを使ってSlackにBlockを使ったメッセージを送る方法を…

JavaからSlackに任意のメッセージを送る方法

こんにちは。 エキサイト株式会社の三浦です。 仕事やプライベートでSlackを使っている方も多いと思いますが、使っていく中で、「一定の条件下で自動的にメッセージを送信してほしい」と考えることもあるのではないでしょうか。 幸いSlackには、それを実現す…

Spring Bootで詳細な例外情報をエラーログにて出す方法

こんにちは。 エキサイト株式会社の三浦です。 コードを書く上で、例外が起きたときに任意のエラーログを出力したい場面は多々出てきます。 今回は、Spring Bootで詳細な例外情報をエラーログにて出す方法を紹介します。 文字列だけのエラーログを出す方法 …

REST APIで使うHTTPメソッド論

こんにちは。 エキサイト株式会社の三浦です。 REST APIにおけるHTTPメソッドには、GETやPOST、PUTやDELETEなどが存在し、APIの各エンドポイントの役割に応じて使うようになっています。 ですが、実際に開発を行っていく上では、必ずしもHTTPメソッドを使い…

WebPush通知のドメイン名は、一定文字数以上で省略される

こんにちは。 エキサイト株式会社の三浦です。 最近WebPush周りを触っていたのですが、その中で「バグが起きた!?」と思ったら仕様だった、ということがありましたので、せっかくなので紹介したいと思います。 WebPushとは WebPushが謎のドメインから配信さ…

MySQLのdatetime型では、小数点以下の秒数を四捨五入する

こんにちは。 エキサイト株式会社の三浦です。 MySQLで日時データを扱う際、datetime型を使うことが多いでしょう。 便利な型ですが、小数点以下の秒数を入れる際に少し注意点があることを発見したので、今回はそれについて説明します。 MySQLとdatetime型 My…

Service WorkerのOnInstallイベントでは、event.waitUntilの処理が終わるまでInstallを待ってくれる

こんにちは。 エキサイト株式会社の三浦です。 ブラウザに特別な方法でJavaScriptのコードを読み込ませると、そのコードを使ってバックグラウンドなどで様々な処理を行わせることが出来ます。 その機能は「Service Worker」と呼ばれるのですが、今回はそのSe…

Spring BootのScheduledは、デフォルトで1つしかスレッドを立ち上げてくれない

こんにちは。 エキサイト株式会社の三浦です。 Spring Bootには「Scheduled」というアノテーションがあり、これを使うことでアプリケーションコード内でバッチ等の定期実行をさせることが出来ます。 今回は、このScheduledを使う際の、スレッド数に関する注…

本当にあった、存在するはずのAPIにブラウザからアクセスできなかった話(Preflight requestとカスタムヘッダ編)

こんにちは。 エキサイト株式会社の三浦です。 今回は、私が実際に体験した、「存在するはずのAPIなのに、ブラウザからアクセスできなかった話」をしていきます。 作ったはずのAPIにアクセスできない…!? アクセス失敗の原因 Preflight requestとは Preflig…

JavaでのAmazon Timestreamの使い方

こんにちは。 エキサイト株式会社の三浦です。 AWSには、「Amazon Timestream」というサービスがあります。 時系列データを扱うのに非常に役立つサービスであり、Javaからも簡単に使えるようSDKが用意されています。 今回は、この「Amazon Timestream」をJav…

Spring BootのScheduledでは、TimeUnitを設定できる

こんにちは。 エキサイト株式会社の三浦です。 以前、Spring BootではScheduledを使うことで定期実行ができることを説明しましたが、今回は更に便利に使う方法について紹介します。 Spring BootのScheduled ScheduledとTimeUnit 最後に Spring BootのSchedul…

Spring Bootでは、Scheduledを使うことでバッチの定期実行ができる

こんにちは。 エキサイト株式会社の三浦です。 突然ですが、バッチを定期実行させたい時、皆さんはどうしますか? 有名なところではサーバの cron 機能だと思いますが、実はSpring Bootでは、アプリケーションコード単体で定期実行させることが出来ます。 今…

JavaのParallelStreamでは、Transactionが別々になる

こんにちは。 エキサイト株式会社の三浦です。 今まで何回か、ParallelStreamを使ったJavaの並列処理に関する記事を上げてきました。 今回は、ParallelStreamとDBのTransactionを一緒に使う際の注意点を説明します。 JavaのParallelStream DBのTransaction P…

JavaのParallelStreamで最大並列処理数を変更する方法

こんにちは。 エキサイト株式会社の三浦です。 以前、Javaで並列処理を行う方法として ParallelStream を紹介しました。 tech.excite.co.jp 今回は、 ParallelStream で並列処理をする際に、最大並列数を変更する方法を紹介します。 ParallelStreamと並列数 …

Javaで、ローカル日時文字列からタイムゾーンを変更してローカル日時型データを取得する方法

こんにちは。 エキサイト株式会社の三浦です。 アプリケーションを書くとき、日時データを扱うことはよくあります。 その際、「常に日本時間しか扱わない」などの状況であればいいですが、場合によっては「世界標準時と日本時間を相互に変換する」など、複数…

Javaで、ParallelStreamを使って並列処理を行う方法

こんにちは。 エキサイト株式会社の三浦です。 Javaでコードを書く場合、基本的に処理は逐次的に行われます。 ただ、逐次処理でやっていると時間がかかりすぎてしまうため、並列で処理を行いたい場合もあります。 今回は、ParallelStreamを使った並列処理の…

Javaからウェブプッシュを簡単に送信する方法

こんにちは。 エキサイト株式会社の三浦です。 アプリにプッシュ通知があるように、ブラウザに対してもプッシュ通知を送ることができます。 これは「ウェブプッシュ」と呼ばれる仕組みで、ユーザにリーチするための手段の1つとなり得るものです。 今回は、Ja…