エムスリーテックブログ

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

僕がAIチームで知っている技術スタックまとめ

こんにちは、エムスリーエンジニアリンググループ AI・機械学習チーム(以下「AIチーム」)で機械学習エンジニアをしている農見です。

今日から1週間「AIチーム ブログリレー」と題し、AIチームメンバーでリレー形式でテックブログを執筆し、AIチームがどのような開発をしているのか・どんなチームなのか・どんなメンバーがいるのかなど、ご紹介できればと思います。

記念すべき初回は僕がAIチームで知っている技術スタック( AIチーム内で使ってる技術スタックではない)についてです。それではどうぞ

続きを読む

デジスマチームでのOpenAPI活用方法の紹介

【デジスマチーム ブログリレー6日目】

こんにちは、デジスマチームに所属している大和です。
タイトルに含まれるOpenAPIという文字から、ChatGPTやGPT-4で話題のOpenAIと見間違えた方もいらっしゃるかもしれませんが、今回はREST APIのスキーマ定義に使用されるOpenAPIの話をします。

私が所属するデジスマチームではデジスマ診療というサービスを開発しており、マイクロサービスアーキテクチャでOpenAPIを利用して開発しています。
なお、システムのアーキテクチャについては以下の記事が詳しいです。

www.m3tech.blog

今回はどのような構成でOpenAPIを利用し、スキーマ駆動開発を行っているかについて例を用いて紹介します。

  • ねらい
  • スキーマ定義ファイルの構成
    • APIサーバの定義
    • 共通化されたファイルの定義
    • イベント駆動用の定義
  • クライアントコード生成
  • Swagger UIの活用
    • まとめ
    • 参考
  • We are hiring!
続きを読む

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 Queueの構築
    • 2. Task Queueの処理
    • なぜQueueが必要なのか?
  • 動作の流れ
    • 自然な例
    • もっとユーザが楽をするには?
  • Future Work
    • 社内の実プロダクトへの適用
    • Document, Quick Startの整備
    • child jobが自律的に依存Taskを実行する分散アーキテクチャ
    • より使いやすいインタフェース
  • 余談: kannonという名前の由来
  • 補足: ArgoWorkflowとの比較
  • 最後に

gokartの概要

gokartは機械学習パイプラインを扱う他のライブラリに比べ、以下のような特徴があります。

  • オブジェクト指向プログラミングにおけるSOLID原則を尊重できること

  • 機械学習プロジェクトにおいて必須な再現性を確実のものにすること

これらの詳細な説明や開発の経緯などは過去の記事で語られていますので是非ご覧ください!

www.m3tech.blog

続きを読む

エムスリーが誇る最強のスタートアップチーム

【 デジスマチーム ブログリレー5日目】

こんにちは、デジスマチームエンジニアの田口です。 2022年5月にエムスリーに入社し、もう少しで1年が経過しようとしています。

私は新卒でヤフーに入社し、主にToB向け飲食サービスのバックエンドの開発に携わっていました。 その後エムスリーに転職を決めたのですが、転職の動機の1つとしてスタートアップ感を経験したい*1、というのがありました。 このブログでは、自分が所属するチーム(ひいてはエムスリーエンジニアリンググループ)がどのようなチームか、どのような成果を発揮したかを振り返りたいと思います。

  • デジスマの成長
  • プロダクトの急成長を支える文化
    • エンジニアとプロダクトマネージャーとの距離感
    • スケーラビリティ・スピードを意識した開発体制
    • MVP的にリリースする文化
  • おわりに
  • We are hiring!!

*1:詳しくはWantedlyのインタビュー記事で取り上げています。

続きを読む

TypeScript never型の判定

こんにちは。デジスマチームでエンジニアをやっている堀田です。

一年くらい前に TypeScriptの型で麻雀の点数計算をするブログ を書きました。この中で、type-challenges というプロジェクトを紹介しました。これは「TypeScriptで、こういう型を定義しなさい」という問題が集まったプロジェクトなのですが、その中に 1042 IsNever の問題があります。

このブログでは、それに関して色々調査して結果をまとめました。

前提知識

続きを読む

アプリのレビューをGASでSlack通知するようにした

【 デジスマチーム ブログリレー3日目】

エンジニアリンググループ デジスマチーム所属の荒谷(@_a_akira)です。 最近はデジカルスマート診療(以降デジスマ)という医療機関向けに予約やキャッシュレス決済、オンライン診療を導入・利用できるアプリ(Flutter)をメインで作成しつつ、バックエンドのAPIやWebフロントも機能ごとに実装しています。

digikar-smart.jp

突然ですが、アプリのレビューは普段どのように確認していますか?

レビューを定期的に確認することによって、ユーザーの喜びを実感したり、予期していないバグの発見に繋げられます。 サービスを開発・運営する側にとっては、これを効率的に行うことは重要と言えるでしょう。
例えば、Google Playはメールでのレビュー通知はありますが、App Storeではサポートしておらず他サービスへの通知はできません。 App StoreのレビューにはRSSがあるので、RSSフィードで通知できますが、そのままだと任意の形式に整形されない問題があります。 外部ツールを利用する場合でも利用数に制限があり、会社で出している複数アプリのAndroid, iOS両OSのレビューをコストをなるべくかけずにSlackへ通知したいため選択肢からは外しました。

そこで、今回はGoogle Play側はAPI経由, App Store側はRSSを利用してGoogle App Script(以下GAS)を使ってアプリのレビューをSlackに通知する方法を紹介します。

続きを読む

Neovimで手動のスピードで入力しよう!

AI・機械学習チームの北川(@kitagry)です。 最近Neovimの設定ファイルをinit.vimからinit.luaに移動させました。 Lua化したからには何かそれっぽいことをしたいなと思い、機械学習しつつ何かアプリケーションっぽいものを作成することにしました。

タイトルは以下の本のオマージュです。 神本なので、おすすめです。

www.kadokawa.co.jp

続きを読む