タグ

ブックマーク / www.m3tech.blog (30)

  • 入社4ヶ月目で73時間かかるバッチ処理を7倍以上高速化した話 - エムスリーテックブログ

    こんにちは。エンジニアリンググループの武井です。 私は現在、デジカルチームに所属し、クラウド電子カルテ、エムスリーデジカルの開発に携わっています。 昨年夏にエムスリーに入社し、早くも半年が経過しました。 digikar.co.jp この記事では、私が入社してから4ヶ月目に取り組んだ、バッチ処理の運用改善について振り返ります。 特に、新しくチームに加わったメンバーとして意識した点に焦点を当ててみたいと思います。 これから新しいチームに参加する方の参考になれば幸いです。 改善したバッチ 現状の正確な理解 現状に馴染む技術選定 自分なりの+αを加える 改善の結果 We're hiring 改善したバッチ 今回の改善対象は、特定の医療機関に紐づく全患者の全カルテをPDFファイルとして出力する、というバッチです。 デジカルのデータを医療機関側にエクスポートする用途で使われています。 移行前のアーキテ

    入社4ヶ月目で73時間かかるバッチ処理を7倍以上高速化した話 - エムスリーテックブログ
  • フルスクラッチして理解するOpenID Connect (3) JWT編 - エムスリーテックブログ

    こんにちは。デジカルチームの末永(asmsuechan)です。この記事は「フルスクラッチして理解するOpenID Connect」の全4記事中の3記事目です。前回はこちら。 www.m3tech.blog 9 JWT の実装 9.1 JWT概説 9.2 OpenID Connect の JWT 9.3 ヘッダーとペイロードの実装 9.4 署名の実装 公開鍵と秘密鍵を生成する 署名処理を作る 10 JWKS URI の実装 (GET /openid-connect/jwks) 11 RelyingParty で ID トークンの検証をする 12 OpenID Connect Discovery エンドポイントの実装 (GET /openid-connect/.well-known/openid-configuration) まとめ We're hiring 今回は全4回中の第3回目です。 (

    フルスクラッチして理解するOpenID Connect (3) JWT編 - エムスリーテックブログ
  • メール配信システムを SaaS から新規社内システムへ移行した - エムスリーテックブログ

    この記事はエムスリーAdvent Calendar 2023の20日目の記事です。 エムスリーエンジニアリングG コンシューマチームの松原(@ma2ge)です。 今回はコンシューマチームで利用していたSaaSのメール配信システムを、新規に開発した社内システムに移行した経緯や設計時に意識したことなどについて紹介します。 最近使っているキーボードの様子 背景 今回移行する契機となったのはメールの配信数増加に伴うSaaSの利用料金増です。 特に定期的に送るメルマガ配信については、配信量も多く利用コストを押し上げる要因となっていました。 そのためメルマガ配信で大量に使用する部分についてのシステム移行検討が始まりました。 移行検討 SaaSから移行後のシステムについて試算すると、システムの開発や利用料といったコスト面では社内で構築したシステムの方が大幅にコストが下がることがわかりました。 しかしなが

    メール配信システムを SaaS から新規社内システムへ移行した - エムスリーテックブログ
    mapk0y
    mapk0y 2023/12/21
  • Enumとてもつらい、でも負けない - エムスリーテックブログ

    列挙型、JavaでいうならEnum型、使っていますか。使わないわけにいきませんよね。 でも、Enumを使っていたせいで辛い目にあったことありませんか。ないですか。それならきっともうすぐに辛い目にあうと思います。 Enumはすべてのプログラマに等しく辛みを与えてくれるからです。そんな辛みについて、ちょっと一緒に直視してみましょう。 エムスリーエンジニアリンググループ、Unit1(製薬企業向けプラットフォームチーム)三浦(@yuba@reax.work) [記事一覧 ]がお送りいたします、エムスリー Advent Calendar 2023の6日目です。 アプリケーションプログラミング上の辛み 1. 既存のif文が偶発的に意図しない方に倒れる 2. switch文に至っては「どちらでもない」で処理不発に アプリケーションプログラミング上の対策 1. 分岐条件をEnumに持たせる 2. swi

    Enumとてもつらい、でも負けない - エムスリーテックブログ
  • GKEでMLバッチ運用のコツ - エムスリーテックブログ

    この記事はエムスリーAdvent Calendar 2023とMLOps Advent Calendar 2023の12日目の記事です。 AI機械学習チームの北川です。 最近はのかまってアピールがすごすぎて、よく仕事の邪魔されます。 かまって欲しがる 現在AI機械学習チームではMLのバッチをGoogle Kubernetes Engine(GKE)上で運用しています。 現在数えてみたところ240個以上のバッチがGKE上で動いているようです。 AI機械学習チームでは2019年頃から約4年ほどGKE上でMLバッチを運用しています。 その間にコストの最適化や安定したバッチの運用などに力を入れてきました。 この記事では、主にスケールインとコスト最適化について説明しようと思います。 チームのMLについて全体を把握したい場合は以下の記事が詳しいです。 www.m3tech.blog GKEの

    GKEでMLバッチ運用のコツ - エムスリーテックブログ
    mapk0y
    mapk0y 2023/12/12
  • 年末だしRedashのクエリ棚卸しでもしましょう (調査用サンプルクエリ付き) - エムスリーテックブログ

    これはエムスリー Advent Calendar 2023の9日目の記事です。 前日の記事はSREチーム後藤の「共有会をより効果的にするために考えたあれやこれ」でした。 エムスリーエンジニアリンググループ データ基盤チームの木田です。 師走です。12月といえば年末に向けて大掃除の季節です。 古来日では12月に宮中で「煤払い」という行事を行う風習があったことが、今日年末の時期に大掃除をする由来とされているそうです。 私の自宅はまだ何も手をつけられていませんが、せめてBIツールの中だけでもということでRedashのクエリ棚卸しをした話*1をご紹介します。 エムスリーにおけるRedashの活用状況 長年の運用の結果起きた性能問題 問題の特定と発生原因 Workerの増設 クエリの棚卸しと改善 使われていない定期実行クエリの停止 サンプル1 直近参照なしかつ定期実行クエリ クエリの実行時間改善

    年末だしRedashのクエリ棚卸しでもしましょう (調査用サンプルクエリ付き) - エムスリーテックブログ
  • kannonを実プロダクトに組み込んで3倍高速化を達成した話 - エムスリーテックブログ

    こんにちは!エムスリー Advent Calendar 2023 7日目担当の小栗 (@irungo_ic)です。私は東京大学 電子情報工学科で学生(B4)をしており、エムスリーには業務委託で参画しています。 今回はgokartの分散並列化ライブラリkannonをエムスリーの実プロダクトに組み込んだ取り組みについて紹介します。結果として、社内のとあるプロダクトのIntegration TestのJobを7時間30分から2時間20分に短縮するという、約3.2倍の高速化を達成できました!それまでに生じた苦労、kannonへの追加機能などについてお話しします。 kannonとは? kannonとは、M3が主体となって開発しているOSSのデータパイプラインライブラリgokartをk8s上で分散並列実行するためのライブラリです。私が今年3月に参加したAIチームでのインターンで開発したライブラリで、そ

    kannonを実プロダクトに組み込んで3倍高速化を達成した話 - エムスリーテックブログ
  • 超一流のプロダクトマネージャーへの道 - エムスリーテックブログ

    こんにちは。エンジニアリンググループ プロダクト支援チームでプロダクトマネージャーをしている中村です。 2019年5月にエムスリーに入社してから、早4年が経ちました(うち1年半の出産・育児のための休業期間を挟んでいます)。 ちなみにエムスリー入社前の経歴としては、大手メガベンチャーの事業企画からキャリアをスタートし、企画職、プロジェクトマネージャー等を経てプロダクトマネージャーを3年ほどやっていました。 私がエムスリーに入社してから半年後の2019年11月に、以下の記事を書いていました。 www.m3tech.blog 当時の記事に書いた通り、私がエムスリーへ入社を決めた理由は下記4点でした。 エムスリーは新規事業の立ち上げサイクルが速く、プロダクトマネージャーとして「製品を見つける」フェーズにチャレンジできる環境であること 尊敬できるプロダクトマネージャーだと感じたVPoE山崎の直轄チー

    超一流のプロダクトマネージャーへの道 - エムスリーテックブログ
  • goquを駆使してgoでSQL構築も構造体マッピングもRDBテストもやる - エムスリーテックブログ

    【Unit4 ブログリレー6日目】 こんにちは、エムスリーエンジニアリンググループの福林 (@fukubaya) です。 最近まで開発していたm3ラウンジでは、goからRDBを利用していました。 m3ラウンジでは、SQLの組みやすさやテストのしやすさの観点で検討した結果、goquを採用しましたので、 そこで得られた知見とその実装例を紹介します。 これから試してみる方(と将来m3ラウンジの開発に新たに入ることになったメンバー)の参考になるように、サンプルコードも説明も多くなってしまいかなり長いです。 お時間ある時にお読みいただければ。 名古屋城は、日の城のひとつ。尾張国愛知郡名古屋(現在の愛知県名古屋市中区丸・北区名城)にある。文には特に関係ありません。 m3ラウンジ goqu 実例 modelの構造体 mapper mapperの実装 goquのSQLの結果から構造体へのマッピング

    goquを駆使してgoでSQL構築も構造体マッピングもRDBテストもやる - エムスリーテックブログ
  • DB をクラウド移行したらレコードが見えなくなった話 - エムスリーテックブログ

    【Unit4 ブログリレー7日目】 こんにちは、エムスリーエンジニアリンググループの堺澤です。 エムスリーではクラウド移行(=脱オンプレ)の活動が盛んに行われています。 www.m3tech.blog www.m3tech.blog 今回は私が担当していたサービスで DB をクラウド移行したときに起きた問題について紹介したいと思います。 文に関係のない画像 起きたこと 原因 子テーブルを利用する運用背景 トリガーが移行されなかった理由 対応と今後 まとめ We're hiring! 起きたこと 題名の通り、DB をクラウド移行したらレコードが見えなくなってしまいました。具体的には、INHERITS*1 を利用して作成された子テーブルで親テーブルにあるデータが見えなくなりました。問題発生時は検証環境では見えていて、番環境だけこの現象が発生していました。 原因 そのサービスでは月毎に IN

    DB をクラウド移行したらレコードが見えなくなった話 - エムスリーテックブログ
  • 「小さいアプリケーションの作り直しだし,すぐ終わるだろ〜」 - エムスリーテックブログ

    ……と思っていたら5ヶ月かかりました. 【基盤開発チーム ブログリレー3日目】 「ほんとうにすぐ終わると思ったのかね」 こんにちは,エムスリーエンジニアリングGの榎田です.趣味数学テレビゲームです.最近はタクティクスオウガ リボーンを遊んでいます.システィーナをバーサーカーで運用しているのが弊ユニオンの個人的なイチオシポイントです. 閑話休題,ソフトウェア開発において「技術的負債」はつきものです.我々は無限の開発時間が取れるわけでも,神授の智慧を持っているわけでもないので,作ったものは何かしらの要因で負債を抱え,抱えた負債は(多くの場合,知らず知らずのうちに)増えます.負債だらけになってしまったソフトウェアの保守管理は大変ですし,負債になりにくいソフトウェアを作るのも難しいです.ではどうして負債を抱えてしまうのか.負債を返すことの何が大変なのか.負債リスクを予見するのはなぜ難しいのか.

    「小さいアプリケーションの作り直しだし,すぐ終わるだろ〜」 - エムスリーテックブログ
  • gokartのMLパイプラインをKubernetesで並列分散実行できるライブラリkannonを作った話 - エムスリーテックブログ

    初めまして!2023年3月前半にエムスリーのAIチームで10日間インターンに参加していた小栗 (@irungo_ic )です。 インターンでは、エムスリー発の機械学習パイプラインOSSであるgokart をKubernetes上で高速にかつ簡単に実行できるようになるライブラリであるkannon('cannon'と同じ発音!)をゼロから実装し、OSSとして公開しました。 github.com この記事ではkannonの技術的な解説、インターンに参加した感想をお伝えします! gokartの概要 gokartの抱えていた課題 シングルスレッドでの逐次実行により実行時間が長くなってしまう GKEのリソースを効率的に使えない kannonの概要 kannonの使い方 gokart kannon gokart kannon 補足 kannonのアーキテクチャ kannonの実装 1. Task Que

    gokartのMLパイプラインをKubernetesで並列分散実行できるライブラリkannonを作った話 - エムスリーテックブログ
  • AWS Advanced JDBC WrapperによるAurora Postgresの高速フェイルオーバー - エムスリーテックブログ

    【 デジスマチーム ブログリレー1日目】 こんにちは。 デジスマチームの山です。 クリニック向けDXサービスであるデジスマ診療のWeb フロントエンド・バックエンド・インフラを担当しています。 今回は先日AWSから発表されたaws-advanced-jdbc-wrapperについて紹介します。 はじめに AWS Advanced JDBC Wrapper 提供Plugin フェイルオーバーとは これまでのフェイルオーバー対策 AWS Advanced JDBC Wrapperを利用した場合のフェイルオーバー対策 Failover Connection Plugin Host Monitoring Connection Plugin 導入方法 Gradle(Kotlin)での依存先の追加 Spring Boot + HikariCPでの設定例 実際に動かしてみた 何も設定しない場合 設定後

    AWS Advanced JDBC WrapperによるAurora Postgresの高速フェイルオーバー - エムスリーテックブログ
  • Bulk insertでも20時間以上かかっていたMySQLへのインサート処理を1時間以内にする - エムスリーテックブログ

    この記事はエムスリー Advent Calendar 2022の30日目の記事です。 前日は id:kijuky による チームメンバーのGoogleカレンダーの休暇予定一覧をスプレッドシート+GASで作った でした。 AI機械学習チームの北川(@kitagry)です。 今回はMySQLへのインサートを20倍以上高速化した話について書きます。 仕事をちゃんとしてるか見張る TL; DR はじめに 今回のテーブル バイナリログを無効化する 追試 LOAD DATA INFILE 追試 テーブルの正規化 インデックスを一時的に剥がす まとめ We are hiring!! TL; DR バイナリログをオフにする LOAD DATA INFILEを使う インデックスを一時的に消す はじめに AI機械学習チームではサイトトップからアプリに至るまで多くの推薦システムがあります。 そこでは推薦ロ

    Bulk insertでも20時間以上かかっていたMySQLへのインサート処理を1時間以内にする - エムスリーテックブログ
  • イベント駆動アーキテクチャの勘所 - エムスリーテックブログ

    こちらはエムスリーAdvent Calendar 2022の24日目の記事です。 こんにちは、デジスマチームの田口(id:ken-tunc)です。 私達のチームではQRコードによる受付や自動後払いなど、新しい診療体験を提供するデジスマ診療というサービスを開発しています。 開発メンバー6人と小規模のチームですが、毎週のように新機能をリリースしています。 また、ユーザー数も非線形的な成長を遂げており、システムのトランザクションは日に日に増加しています。 IR資料「2023年3月期第2四半期決算発表資料」より このようなスピード感のある開発を実現できている要因はいくつかありますが、この記事ではそのうちの1つであろうデジスマチームで採用しているアーキテクチャについてまとめていきます。 デジスマ診療のアーキテクチャ デジスマチーム紹介資料 イベント駆動アーキテクチャの設計で気を付けていること イベン

    イベント駆動アーキテクチャの勘所 - エムスリーテックブログ
  • 秘密情報をGitLabに格納することなくGoogle Cloud / AWSに対して認証する - エムスリーテックブログ

    エムスリーエンジニアリンググループ AI機械学習チームの笹川です。 趣味はバスケと筋トレで、このところはNBAはオフシーズンですが、代わりにユーロバスケが盛り上がっていて、NBAに来ていない良いプレーヤーがたくさんいるんだなーと思いながら見ています。 夜ご飯を催促するためデスク横で待機する犬氏(かわいい) 今回は、パブリッククラウドへの認証に必要な秘密情報をGitLab自体に格納することなく、安全に認証する方法について紹介します。 CI/CDの実行時のパブリッククラウドに対する認証 ナイーブな手法とその問題点 OpenID Connectを用いた認証 Terraformでパブリッククラウド側の設定を記述する Google Cloudの場合 AWSの場合 GitLab CI/CDで認証する Google Cloudの場合 AWSの場合 認証ステップの共通化 まとめ We are hirin

    秘密情報をGitLabに格納することなくGoogle Cloud / AWSに対して認証する - エムスリーテックブログ
  • Go1.19に採用されたPattern-defeating Quicksortの紹介 - エムスリーテックブログ

    エムスリーエンジニアリンググループ AI機械学習チームでソフトウェアエンジニアをしている中村(po3rin) です。検索とGoが好きです。 最近、Go1.19でsortパッケージのアルゴリズムが一部変更されました。 Pattern-defeating Quicksortが入った時のdiff 1.19リリースノートではPattern-defeating Quicksortが採用されたと紹介があります。実際にsort/zsortfunc.go、sort/zsortinterface.goにそれぞれpdqsort_func、pdqsortという関数があります。 // pdqsort sorts data[a:b]. // The algorithm based on pattern-defeating quicksort(pdqsort), but without the optimizati

    Go1.19に採用されたPattern-defeating Quicksortの紹介 - エムスリーテックブログ
  • エムスリーのデータ基盤を支える設計パターン - エムスリーテックブログ

    こんにちは、エムスリー エンジニアリンググループ の鳥山 (@to_lz1)です。 ソフトウェアエンジニアとして 製薬企業向けプラットフォームチーム / 電子カルテチーム を兼任しています。 ソフトウェアエンジニアという肩書きではありますが、私は製薬企業向けプラットフォームチームで長らくデータ基盤の整備・改善といったいわゆる "データエンジニア" が行う業務にも取り組んできました。 日はその設計時に考えていること / 考えてきたことをデータ基盤の設計パターンという形でご紹介しようかと思います。多くの企業で必要性が認識されるようになって久しい "データ基盤" ですが、まだまだ確立された知見の少ない領域かと思います。少しでもデータエンジニアリングを行う方の業務の参考になれば幸いです。 データ基盤の全体像 収集部分の構成 RDBデータ ログデータ 活用部分の構成 データマートの実例 「データ基

    エムスリーのデータ基盤を支える設計パターン - エムスリーテックブログ
  • 検索基盤チームのElasticsearch×Sudachi移行戦略と実践 - エムスリーテックブログ

    エムスリーエンジニアリンググループ AI機械学習チームでソフトウェアエンジニアをしている中村(@po3rin) です。最近、AI機械学習チーム配下の検索基盤チームでElasticsearchのAnalyzerをKuromojiからSudachiに移行しました。今回はSudachi移行の背景と、Sudachiの概要、実際に移行するにあたってのプロセスや注意事項をお話しします。 対象読者 なぜSudahchiに移行したのか 検索基盤チームが抱えていた検索の課題 Sudachiとは Sudachiへの移行戦略と実践 今使っているKuromojiユーザー辞書をSudachiユーザー辞書に移行する 今使っているシノニム辞書からSudachi正規化機能でまかなえるものを削除する 平仮名/カタカナの正規化辞書を作る 移行時のSudachi切り替え戦略 移行後の影響の事前確認 Sudachi移行時のハ

    検索基盤チームのElasticsearch×Sudachi移行戦略と実践 - エムスリーテックブログ
  • Luceneのメモリ上でのインデックス構造とその仕組み - エムスリーテックブログ

    エムスリーエンジニアリンググループ AI機械学習チームでソフトウェアエンジニアをしている中村(@po3rin) です。 弊社では毎週水曜日にElasticsearchとLuceneのコードリーディング会が開催されています。最近ではLuceneのFSTやKD-Tree、もうすぐ公開されるNSWの実装周りを読んでいました。 先日、私の発表回でLuceneのメモリ上での転置インデックスのデータ構造について発表したので、その内容を紹介します。Luceneのことが少しでも身近に感じていただければ幸いです。 Luceneとは 転置インデックスに関する事前知識 Luceneの事前知識 Luceneのメモリ上での転置インデックス実装内部 確保したメモリがあふれた場合 まとめ We're hiring !!! Luceneとは github.com Elasticsearchの内部で利用されているオープン

    Luceneのメモリ上でのインデックス構造とその仕組み - エムスリーテックブログ