エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

Spring Boot + Flyway で複数の DB に接続したい!!!

【Unit4 ブログリレー5日目】

こんにちは。Unit4 Eng の西川です。JavaScript が好きですが、今回は JavaScript ではなく、最近やった Spring Boot + Flyway を利用しているシステムから別の DB への接続を増やした時の話をしたいと思います。

非常に可愛いうちの猫です

  • 動作環境
  • 背景
  • Spring Boot で複数の DB に接続する
    • 概要
    • application.yaml の記載
    • Configuration ファイルの作成
  • Flyway を複数の DB に適用する
    • baselineOnMigrate を適用する
    • Configuration ファイルの作成
    • テスト用の Configuration ファイルを作成
  • 終わりに
  • We're hiring!
続きを読む

いいねとその通知機能をDynamoDBで設計したら思ったよりムズい

【Unit4 ブログリレー4日目】

こんにちは、エムスリーエンジニアリンググループの福林 (@fukubaya) です。 今回は、SNSではごく一般的ないいねとその通知機能をDynamoDBを利用して実装したら思ったより大変だったので、その詳細をご紹介します。

キャナルシティ劇場は、福岡県福岡市博多区の複合商業施設「キャナルシティ博多」のシアタービル最上階に位置する劇場。本文には特に関係ありません。

  • m3ラウンジ
  • m3ラウンジのいいねとその通知の要件
  • RDBで実装したらどうなるか
    • いいね機能
    • 通知機能
  • DynamoDBで実装する
    • いいね機能
    • 通知機能
    • いいねする
    • いいねを取り消す
    • 通知を表示する
      • 未読の通知の取得
      • 未読の通知数
    • 未読の通知を既読にする
  • テーブル設計むずい
    • PKとSKに何を選ぶか
    • LSIは途中から作れない
    • DynamoDBをローカルで動かして設計する
  • まとめ
  • We are hiring!
続きを読む

PostgreSQL チューニングよもやま話

【Unit4 ブログリレー3日目】

こんにちは,エムスリーエンジニアリンググループの榎田です.数学とテレビゲームが好きです.

今回は,Unit4 で運用している "Docpedia" というサービスで実施した SQL チューニングの実例を2つご紹介します.普段の私が意識していなかった, RDBMS の内部機構に関する話が登場して面白かったので,今回の記事を書きました.

なお,本稿で扱う議論はすべて PostgreSQL 11.x 以上を対象としており,特にその他の RDBMS で同様の動作をするかは確認していません.定性的な挙動に共通するものはあるかもしれませんが,ここで述べた話はそのままは通らないであろうことをお断りさせてください*1

  • プロダクトについて
  • index なしで意外と耐えたが,耐えきれなかった話
    • 実際の SQL とテーブル定義
    • 原因の分析
    • 対応策
  • SELECT DISTINCT が思ったより重かった話
    • 実際の SQL とテーブル定義
    • 原因の分析
      • 古い統計情報
      • DISTINCT 句の挙動
    • 対応策
    • オチ
  • 感想
  • We're hiring!

*1:可能性は高くないと思うのですが,もしかしたら 11.x 以上の PostgreSQL でもバージョンによってはここで述べた状況とまったく異なる挙動を示すケースもあるかもしれません.そのようなケースを構成できた場合はぜひお知らせください.

続きを読む

editorconfig-checkerを導入してコードレビュー時の摩擦を軽減する

【Unit4 ブログリレー 2日目】

永山です。

2023年に至ってもエディタに関する話題がプログラマ間のグルーミングツールとして機能していることからも判る通り、世には多様なエディタが存在し、またそれらを使用するプログラマが存在します。

言うまでもなく各エディタにはそれぞれ特徴や特色があり、更に異なる人物が同一のエディタを利用していたとしても、各人で設定や導入されているエディタプラグインが千差万別である以上もはや2つと同じ編集環境は存在しないと言っても過言ではありません。

好みのエディタを用いることでプログラマは作業効率の最大化を図れますが、一方で様々な編集環境が同一のコードベースを編集することはときにいくらかの不都合を生じます。

例えば以下のようなエディタの設定に起因する差異は編集時に不要な diff を生じさせ、コードレビューや編集作業のストレスの原因になります。

  • 文字コード, BOMの有無
  • 改行コード (LF / CRLF)
  • インデンテーション (ハードタブ / ソフトタブ + タブ幅)
  • ファイル末尾改行の有無
  • 行末空白の自動削除の有無

以下、本記事では上記のような編集環境に起因する摩擦の解消に有効なツールである EditorConfigeditorconfig-checker について紹介します。

本文とは関係ない無意味画像

  • 1. はじめに
  • 2. EditorConfig
  • 3. editorconfig-checker
    • 使用方法
    • 無視設定
    • GitLab CI への導入
  • 4. まとめ
  • 参考文献
  • We're hiring!
続きを読む

ViteとVitestで開発のリズムを上げる

【Unit4 ブログリレー 1日目】

Viteは"ヴィート"と読みます♫ もう覚えましたね♫*1

こんにちは、エムスリーエンジニアリンググループの山田(@Satoki_1226)です。

本日より、Unit4でもブログリレーを行うこととなりました。Unit4は医療系ポータルサイト m3.com の開発・運営を担当するチームです。Unit4エンジニアがリレー形式でテックブログを執筆し、どんなメンバーがいるのか・どのような開発をしているのかなど、ご紹介できればと思います。

トップバッターである私からは、m3ラウンジというサービスのVite移行時に得られた知見をもとに、

  1. Vite/Vitestへの移行によって感じた「速さ」
  2. 移行時の手順とポイント

をお伝えできればと思います。Viteが気になっている方や、Vite移行の進め方に困っている方にとって少しでも参考になれば幸いです。なお掲載しているサンプルコードは、記事向けに簡略化と改変をしています。

青空の下に草木が伸び伸びと生い茂る様子。本文とは関係ありません。

  • m3ラウンジ
  • Viteは速い
  • Vitestも速い
    • watch mode
    • UI mode
  • CIも速くしたい
  • 移行時のポイント
    • Vite移行の手順とポイント
      • debug mode
      • マルチページビルド
      • 開発サーバーの設定
      • ビルドされるアセット
    • Vitest移行の手順とポイント
  • 終わりに
  • We are hiring!

*1:公式ドキュメントで発音を確認できます

続きを読む

抗がん剤の副作用をAIで予測する

こんにちは、AI・機械学習チームの浮田 (id:uKita) です。

今年のMultinational Association of Supportive Care in Cancer (MASCC)という国際学会にて、私たちのチームがサポートしてきた研究開発がオーラル発表されたので、今回はその内容について紹介します。発表のアブストラクトはこちらです。

www.eventsforce.net

  • 臨床AIの開発
  • 今回の研究の背景
  • データセット
  • 解析
    • データ量があまり多くないことへの対処
    • 画像の前処理
  • 結果
    • データ量と精度の関係
  • まとめ
  • We're hiring!
続きを読む

gokartの分散並列化ライブラリkannonの中身

こんにちは!AI・機械学習チームの小栗です。普段は東京大学電子情報工学科で学生をしており、エムスリーには業務委託で参画しています。

今回はkannonというライブラリについて紹介します。kannonはgokartという機械学習向けパイプラインライブラリを分散並列化して実行できるようにするライブラリです。kannonは2023年3月に私が参加したAI・機械学習チームでのインターンで開発され、OSSとして現在も開発を続けています。

なお、本記事は「gokartで爆速開発!MLOps勉強会」の発表をもとに加筆したものになります。

www.m3tech.blog

発表資料も公開していますので、そちらも是非ご参照ください。

speakerdeck.com

また、インターン参加報告として以前にもkannonについて解説しています。それに比べて本記事は、よりライブラリの仕組みやコンピュータサイエンスとしての面白さに重きを置いて解説しています。

以前の記事はインターンの流れや感想なども掲載しています。そちらにも興味のある方は是非ご覧ください!↓

www.m3tech.blog

  • kannonとは?
  • kannonのアーキテクチャ
  • Task Queueの処理方法
    • 1. 先頭から処理する
    • 2. 分散するべきTask(C0)に出会った
    • 3. Childで実行中のTask(C0)に依存するTask(D0)に出会った
    • 4. 分散するべきTask(C1)に出会った
    • 5. Childで実行中のTask(C0)に出会った
    • 6. 時間が経過し、Queueが空になった
  • Child Jobの作成方法
  • kannonの使い方
  • まとめ
  • We're hiring!
続きを読む