エムスリーテックブログ

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

アンケート作成システムのサーバサイドをKotlin + Quarkus + Doma, CQRSで構築している話

エムスリー エンジニアの岩本です。

現在私の所属しているチームでは、以前作成したアンケートを作るためのシステムのサーバサイドリプレースを検討しています。 ちなみにクライアントサイドは下記のものです。

qiita.com

  • 採用した技術
  • なぜQuarkus?
  • SQLアクセスはDoma
    • Domaの記述方法
    • Quarkus + Domaで見つかった問題
  • 設計方針はCQRS
  • まとめ
  • We're hiring!

採用した技術

以前のサーバサイドはJavaで作られており、再利用可能な既存の資産もあるため、JVM系の言語を検討しています。 他のシステムではKotlin + SpringBootを使っているため同様の構成も考えられるのですが、 SpringBootが開発しているうちに重くなり、起動に数十秒かかるようになり開発スピードが遅くなってしまったことや 新しいものに挑戦したいという技術者の考えを重要視しているため、Kotlin + Quarkus + Domaを採用することにしました。

続きを読む

Goのreflectパッケージと型の内部表現について

エムスリーエンジニアリンググループの木村です。 普段はBIRという医療従事者の会員向けアンケートをベースに、製薬会社へのマーケティング支援を提供するチームでソフトウェアエンジニア兼チームSREをやっています。

入社とほぼ同時にGoを書き始め、そろそろ1年が経とうとしています。 主にWebアプリケーションのバックエンドの実装にGoを利用していますが、その他にも小さいCLIツール等もGoで書くことが多くなってきています。

今回は業務でWebアプリケーションを開発していくにあたって疑問が生じた点とその時行ったreflectパッケージの調査について書いていきます。

f:id:itto_ki:20171021190042j:plain
水面などに写った被写体を撮った写真をリフレクション写真と呼ぶことがあります。

続きを読む

代数的データ型とその双対性

こんにちは,エムスリーエンジニアリンググループの榎田(Twitter: @niflh)です.今年度の4月に新卒で入社しました.入社してからは AI・機械学習チームというところで機械学習プロダクトのインフラのお仕事をしていましたが,11月末からチームを異動し,Unit4 というチームにいます.このチームでは医療系ポータルサイト m3.com のメディア系サービスや,全ページに共通で表示するヘッダーメニューの開発などをしています.

これらの開発では Scala が使われていることを異動後に知りました.私は直近で Scala を使う案件は持たない予定ですが,少なくともレビューで Scala のコードは読むので,いい機会だと思って年末年始から勉強を続けています.その際に読んだ "Essential Scala"*1 という本にて,「代数的データ型」(Algebraic Data Type, ADT)という概念が紹介されていました.この概念について,主に理論的な観点から色々調べてみたら面白かったので,その話をします.

*1:公式で pdf が配布されているので無料で読めます.こちらからどうぞ: https://underscore.io/books/essential-scala

続きを読む

Goのinterfaceの使いかた 基礎編

エムスリーエンジニアリンググループ/BIRの滝安(@juntaki)です。 BIRはビジネスインテリジェンス&リサーチの略で、そこでは医療従事者の会員向けアンケートをベースに、製薬会社へのマーケティング支援を提供する事業を行っています。BIRではエムスリーではじめてGoを導入し、今ではほとんどの新規システムをGoで立ち上げています。(一部でKotlinもつかっています)

Goでは、interfaceの使い方を知ることで、依存関係、コンポーネントの責務を整理した設計を考えることができます。 この記事ではGo導入当初にメンバに説明した、interfaceの基本的な使い方やTipsを整理していきます(すでに、Goをよく知っている人には当たり前すぎるかもしれません)。

また、この記事の後にBIRのメンバーがGo関連記事をいろいろ書く予定となっています!

続きを読む

Nishika competitions 2nd solution

はじめに

はじめまして、エムスリー AI・機械学習チームの河合(@vaaaaanquish)です。 最近、以下機械学習コンペティションにて 182人中 2位 になりました。

Nishikaサービスローンチコンペ AIは芥川龍之介を見分けられるのか?

f:id:vaaaaaanquish:20200310164012p:plain:w500
competitions summary(https://www.nishika.com/competitions/1/summary)より
 

本記事は、コンペティションの解法の紹介をしつつ、3月7より開催されている技術書典 応援祭にて販売される、私も執筆に参加したエムスリーテックブック2を宣伝するものです。

  • はじめに
  • コンペティション概要
  • 利用したfeatureとmodel
  • コンペティション開催中の行動
  • 機械学習パイプラインの選定としてgokartはどうだったか
  • おわりに
  • We are hiring !!

 

コンペティション概要

青空文庫に登録されている10作家の作品、計4732作品の中から芥川龍之介の作品を機械学習で見つけるものです。 答えとなるデータは青空文庫で公開されている訳ですが、こちらを利用するのはもちろんルール上で禁止されています。

 

データ内には以下のような文章データと著者が芥川龍之介であるか否かの情報が含まれている、シンプルな2値分類の問題です。

writing_id,body,author
3,"[#3字下げ]一[#「一」は中見出し]島々《しま/\》と云ふ町の宿屋へ着いたのは...",1

上記のデータサンプルは芥川龍之介 槍ヶ嶽紀行のデータの省略形です。 このような青空文庫内のほぼ生のデータが、trainとtestに分けられて提供されており、testデータ内のF値が高いモデルを作成する事を目的としています。

 

利用したfeatureとmodel

以下は機械学習コンペティションでよく見られる、少し分かった気になる図です。

f:id:vaaaaaanquish:20200307182552p:plain
モデルパイプライン図

図の通り、ルールベースの特徴に加えて、NLPにおいて一般的なBERTやTF-IDFといった特徴を使っていました。 分類もまたLightGBMやNeural Networkといった一般的なモデルをOptunaで最適化する形です。

 

続きを読む

SpringBoot + Kotlin + GraphQL のアプリ向けスキーマ設計・実装のプラクティス

こんにちは、エムスリー エンジニアリンググループ マルチデバイスチームの藤原です。

昨年末に医師向けのスマホアプリを新たにリリースしました。 スマホアプリ向けの BFF(Backends For Frontends) も新規に開発したのですが、そこには SpringBoot + Kotlin + GraphQL なアプリケーションを採用しています。

GraphQL はチームでの採用は初めてで、私もこのプロジェクトで初めて触りました。 そのような状況だったので GraphQL 周りについては試行錯誤を重ねることとなったのですが、今回はその開発の中で見えてきた プラクティス をいくつか紹介したいと思います。
これから SpringBoot + Kotlin + GraphQL な開発をされる方の参考になれば幸いです。

f:id:m-fujiwara-m3:20200229054126j:plain

ボネリークマタカ(某GraphQLの入門書*1の表紙にもこの鳥が描かれている)

(Godbolemandar [CC BY-SA 4.0], ウィキメディア・コモンズより

*1:初めてのGraphQL, Eve Porcello Alex Banks 著, 尾崎 沙耶 あんどうやすし 訳

続きを読む

技術書典 応援祭参加のお知らせ

エンジニアリンググループの西名(@mikesorae)です。

新型コロナウイルスの影響により技術書典8自体は残念ながら中止となってしまいましたが、運営の方々の努力により3/7(土)〜4/6(月)の間、オンラインイベント「技術書典 応援祭」が開催されることとなりました。

時間もなくイベント中止のショックもある中でこのような機会を設けてくださった運営の方々に、この場を借りて改めて感謝の意を表します。

blog.techbookfest.org

さて、エムスリーエンジニアリンググループも本イベントにて、新刊「エムスリーテックブック#2」を頒布いたします。

エムスリーテックブック#2について

f:id:mikesorae:20200305121739p:plain
エムスリーテックブック#2

  • タイトル: エムスリーテックブック#2
  • ページ数: 約100ページ
  • 価格(税込): 1,000円
  • 頒布形態: PDFのみ
  • 執筆者: 河合、堀田、西名、平間、矢崎
  • 監修: 山崎
  • イラスト: 迫田
第一章 機械学習ワークフローライブラリ選定と運用
第二章 BoltとBlock Kitで作るSlack Bot
第三章 Hyperleadger Indyで実現する自己主権型アイデンティティ
第四章 M5StickC を使って社内hack(電子工作)
第五章 大規模 AWS ⇔ オンプレ相互接続ネットワーク設計・構築ガイド

今回も幅広く読み応えのある内容となっていますので、ぜひお買い求めください。 techbookfest.org

過去頒布物について

また、PDFのみですが「エムスリーテックブック#1」も再販いたします。 こちらもよろしくお願いいたします。 www.m3tech.blog

おわりに

全国的に自粛ムードが高まり大変なタイミングではありますが、このようなときこそ新しい文化が生まれるチャンスでもあると思います。 ぜひみんなで技術書典 応援祭を盛り上げていきましょう。

We are hiring!

エムスリーでは日々新たな課題の発見があり、それらを様々な技術や視点で解決できるエンジニアを募集しています。 活躍できるポジションも様々ですので、ご自身の強みを活かしてみたい方はぜひお気軽にお問い合わせください。

エンジニアリンググループ 募集一覧

jobs.m3.com

関連記事

www.m3tech.blog