GitHub Actionsのworkflow_callイベントを使用してワークフローファイルを分割する

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 エキサイトホールディングス Advent Calendar 2023の6日目を担当します。 私の担当するエキサイトブログでは、アプリケーションのテスト、ビルド、デプロイにGitHub Actions…

エキサイトブログにおけるPostgreSQLのイベントトリガの活用例

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 エキサイトブログでは、DBコスト削減に取り組んでおり、これまでにいくつかの改善を行ってきました。 取り組んだこととその効果については、下記記事をご参照ください。 tec…

エキサイトブログにおけるマイグレーションの実施例

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 普段の業務では、エキサイトブログの新機能開発や運用に取り組んでいます。 先日、エキサイトブログのブログテーマ機能について内部的に大きな変更を行いました。 具体的に…

Amazon AuroraのDBのインスタンスサイズを下げるために取り組んできたこと

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 2022年3月末にエキサイトブログはAzure/SQL ServerからAWS/PostgreSQLの移行をしました。 詳細は下記記事をご参照ください。 優先度の高いAWSへの移行が終わったことで、次…

GitHub Actionsでブランチ名を取得してコンテナのイメージタグ名にする

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 普段の業務では、GitHub Actionsのworkflow_dispatchを使用してコンテナイメージをビルド、プッシュしています。 このとき、Gitのブランチ名をコンテナのイメージタグ名とす…

AWS Dev Day 2023 Tokyo 1日目の参加レポート

AWS

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 2023年6月22日(木)~6月23日(金)に開催された「AWS Dev Day 2023 Tokyo」1日目のレポートを書きます。 詳細については下記をご参照ください。 aws.amazon.com はじめに 会場…

Amazon AuroraのDBのインスタンスサイズを安全に切り替える

AWS

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 先日投稿した記事のとおり、エキサイトブログではAWSのサーバー構成とコストの最適化を行っています。 その中で、DBのインスタンスサイズが余剰であることがわかり、DBのイ…

Azure/SQL ServerからAWS/PostgreSQLへの2年間の移行作業を振り返る

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 新卒入社から早いもので2年が経過しました。 最近、エキサイトブログの大規模なメンテナンスが完了し、無事にクラウドとデータベースの移行が終わりました。 クラウドはAzur…

SpringBootでCPUがスパイクする問題を解決した

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 エキサイトホールディングス Advent Calendar 2022の25日目を担当します✍️ 本記事では、SpringBootを使用したアプリケーションで、突然CPUがスパイクしてしまう事象に遭遇し…

Azure VMからAzure Container Appsに移行して3ヶ月が経過した

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 エキサイトホールディングス Advent Calendar 2022の14日目を担当します✍️ 3ヶ月前に、私の携わるサービスの一部をAzure VMからAzure Container Appsに移行しました。 詳細…

Azure VMからAzure Container Appsに移行しました

はじめに エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。 先日、私の携わるサービスでAzureのVM環境からAzure Container Appsに移行しました。 本記事では、Container Appsに切り替えた経緯やContainer Appsのことについて紹介しま…

【Azure Container Apps】リビジョンのアクティブ化 / 非アクティブ化を自動化した

はじめに 概要 注意点 定期実行 アクティブ化のワークフロー 非アクティブ化のワークフロー おわりに 採用アナウンス はじめに エキサイト株式会社 バックエンドエンジニアの山縣です。 私たちのチームでは、Azure Container Appsを使用して、バックエンドサ…

【GitHub Actions】JSON / XML / YAMLファイルを動的に書き換える方法

はじめに やること ワークフロー 使用方法 配列の要素にアクセスする 実行結果 おわりに 採用アナウンス はじめに エキサイト株式会社 バックエンドエンジニアの山縣です。 GitHub Actionsを使用して、 ワークフローを実行するときに、YAMLファイルを動的に…

SpringBootの環境でAzure Container Registryにプッシュする方法

はじめに 環境 認証情報の取り扱い ログイン処理 jibでビルド&プッシュ 全体のワークフロー ワークフローを手動実行する ACRにプッシュされていることを確認する おわりに 採用アナウンス はじめに エキサイト株式会社 バックエンドエンジニアの山縣です。 …

【SpringBoot】動的にDBを切り替える方法

はじめに 動作環境 複数のDB DataSourceの設定 DBの接続先を定義したEnumの作成 DataSourceContextHolderの作成 AbstractRoutingDataSourceを実装する SqlSessionFactoryを定義する 実際に実行する おわりに 参考 はじめに エキサイト株式会社 バックエンド…

【外部勉強会】オンラインで開催するためにやったこと

はじめに エキサイト株式会社 バックエンドエンジニアの山縣です。 先日、技術者が主催の外部勉強会を開催しました。 excite.connpass.com 勉強会のテーマは「リビルドへの道」。Zoomのウェビナー機能を利用してオンラインで開催をしており、 登壇者にはリビ…

【失敗談】MyBatisでNOLOCKと同じことをやりたかった

はじめに エキサイト株式会社 バックエンドエンジニアの山縣です。 現在は、既存サービスのリビルド(PHP / BEAR.Saturday → Java / SpringBoot)を担当しています。 SpringBootでDBアクセスをするにあたってMyBatisを利用していますが、MyBatisのMapperでは…

GoのcobraでCLIツールを作った

はじめに エキサイト株式会社 バックエンドエンジニアの山縣です。 既存サービスのリビルドを進めていく上で、Redisのキャッシュ操作を行うためのツールが欲しいという要望がでました。 そこで、Goのcobraを使ってキャッシュ操作を行うCLIツールを作成しまし…

LT会【年忘れ!しくじり先生!】を開催しました 🎉

エキサイト株式会社 バックエンドエンジニアの山縣です。 本記事はアドベントカレンダー24日目の記事です。 qiita.com 12月17日に社内でLT会を開催しました!今回は40名近くの方に参加してしただき、多くの方に聞いていただくことができました。 LT会では、…

Spring BootでCacheableが効かなかった

はじめに エキサイト株式会社 バックエンドエンジニアの山縣です。 エキサイトホールディングス Advent Calendar 2021の9日目の記事です。 qiita.com タイトルのとおりですが、Spring BootでCacheableが効かなかったことがありました。 これについて調査した…

リモートワークを快適に行うためにデスクまわりを整備した

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 普段は既存サービスのリビルド(PHP / BEAR.Sunday → Java / SpringBoot)を担当しています。 エキサイトホールディングス Advent Calendar 2021の3日目の記事です! qiita.com 現在エ…

JacksonでXMLをJavaオブジェクトに変換する

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 既存サービスのリビルドするにあたり、外部APIを呼び出してXMLを取得してJavaオブジェトに変換する処理を書きました。 Jacksonを使用したXML→Javaオブジェクト変換についての記事は少…

Javaで1日の始まりと終わりの時刻を簡単に取得する

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 既存サービスのリビルドをするにあたり、日付まわりの処理を記述することが多くなってきました。 日付まわりの処理を誤ると、未公開のデータを取得できてしまうこともあるため慎重にコ…

JavaとPythonとGoのHTTPステータスコードの実装を調査した

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 Spring Boot / Javaで既存システムのリビルドを進めてHTTPステータスコードの実装を調べている途中に、ふと他の言語の実装が気になり、普段趣味で使用しているPythonとGoのソースコー…

Spring Bootでクエリパラメータの順序が異なるURIを比較する

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 UriComponentsのreplaceQueryParam()を使用してクエリパラメータの値を書き換えたときに、書き換える前と書き換えた後とでクエリパラメータの順序が異なってしまい、 単体テストで落ち…

Spring Bootでコンポーネント名が重複してエラーになったときの解決策

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 Spring Bootでコンポーネント名が重複したときに、ConflictingBeanDefinitionExceptionが発生してエラーとなってしまいました。 その原因と解決策についてまとめました。 別のパッケー…

GitHub上でVisual Studio Codeを起動してコードレビューをする

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 少し前にGitHub上でVisual Studio Codeを起動してコードレビューをすることができるようになりました。 実際に試してみたので共有します! Visual Studio Codeを起動する プルリクエス…

GrafanaとPostgreSQLをDocker Composeで動かしたときに接続先の設定でハマった

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 連休中にGrafana + PostgreSQLをDocker Composeで動かしたときになかなか連携できずにハマってしまいました。 そのときに起きた問題点と解決策を共有します! 導入 今回使用したdocker…

Java9から導入されたMatcherのreplaceAllを使って文字列を置換する

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 PHPで書かれたAPIからSpringBoot / Javaでリビルドを進めていく上で、 独自のイメージタグからHTMLのimgタグに置換する処理をJavaで実装することになりました。 シンプルでスッキリと…

MyBatis + FreeMarkerを使用した環境でレコード追加時にAuto IncrementされたIDを取得する

エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 MyBatisとFreeMarkerを使用した環境において、INSERT文を実行したときにAuto IncrementされたIDが取得できない問題とその解決策についてまとめました。 MyBatisとFreeMarkerを使用した環境 現在…