エムスリーテックブログ

エムスリーテックブログ

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

gokartに型を入れるためにspotifyやfacebookのOSSにコントリビュートした話

AI・機械学習チームの北川(@kitagry)です。 この記事はAI・機械学習チームブログリレー1日目の記事です。

この記事では、gokartの型チェックをmypy pluginからpyrightやpyrefly, tyなどのモダンな型チェッカーへ移行するために、SpotifyのluigiやFacebookのpyreflyといったOSSにコントリビュートした経緯を紹介します。 Pythonの__new__やDescriptor Protocol(__get__/__set__)など、型システムの深い部分にも触れていきます。

結果的に社内のプロダクトについてはmypyで1分10秒ほどかかっていましたが、pyright移行によって11秒ほどの高速化を実現しました。

寝ている最中に写真を撮られて迷惑そうな猫たち

続きを読む

「御社ドメインのSPFにおいて当社ドメインをincludeしてください」を紐解く

こんにちは。エムスリーでセキュリティチームに所属する山本です。セキュリティチームのブログリレー二日目となります。本日はメールセキュリティの話です。

メール配信サービスの契約をすると、オンボーディングの手順書にこんな一文が入っていることがあります。

m3.com のSPFレコードに include:somemailservice.example.comを追加してください

「よし、追加しておきましょう」と粛々と追加するのですが、そのせいでSPFレコードには数々のドメインが連なります。ケースによっては問題も発生しますので、その辺りのことを考えていきたいと思います。

  • おさらい:SPFってなんだっけ?
    • SPFとenvelope-from
    • バウンスの受け先は配信サービスのサーバ
  • サブドメインを使うとき
  • それでもメインドメインにSPFを追加する理由
    • キャリアメール
    • SPF lookup回数制限
  • SPF設定のまとめ
  • その他の取り組み
  • We are Hiring!
続きを読む

みんなで楽しくハッカーになろう!社内CTFを開催しました

こんにちは! 1月に入社したセキュリティチームの坂梨です。この記事はセキュリティチームブログリレーの1日目の記事です。

みなさん、セキュリティはつらく大変なものだと思っていませんか? セキュリティはどうしても「義務としてやるもの」というイメージがつきまといがちです。

しかし私にとっては、セキュリティはまるで古代遺跡を発掘する冒険です。システムという遺跡の奥深くには、まだ誰にも発見されていない脆弱性というお宝が眠っています。エラーメッセージ、レスポンスヘッダー、ソースコードなどは遺跡の壁に刻まれた碑文の断片であり、それらを読み解いてお宝の場所を特定できたときの達成感は一度味わうとクセになります。

このように捉えると、セキュリティがぐっと面白く見えてきます。 その「面白さ」を通じて攻撃テクニックを学び、逆説的に守りを強化できるのではないか——そんな考えから、今回社内CTFを開催しました。

  • CTFとは
  • 当日の様子
  • 問題をチラ見せ
  • 作問の裏話
  • 最後に
  • We are Hiring!
    • エンジニア採用ページはこちら
    • エンジニア新卒採用サイト!!
    • カジュアル面談!!
続きを読む

PostgreSQL 18からNOT NULL制約をNOT VALIDで追加できるようになりました

こんにちは! デジスマチームの山田です。これはデジスマチームのブログリレー3日目の投稿です。

本番稼動中のデータベースの運用において、NOT NULL制約を持たせたいカラムを既存のテーブルに追加する作業は頭を悩ませるものです。PostgreSQL 11(以下、PG11)以降、DEFAULTを固定の値で指定した場合のカラム追加は高速化されました。しかしDEFAULTとして固定値を用意するのではなく、各行ごとに異なる値の非NULLなカラムを追加したいというケースもあります。このような場合「一度NULLを許可してカラムを追加し、アプリケーションの改修やUPDATEによるバックフィルを完了させた後にNOT NULL制約を追加する」という手順を踏むことがあります。この際テーブルが長時間ロックされることを避けるためにCHECK制約を介した少し複雑な手順が必要でした。
そんな中PostgreSQL 18のリリースノートを読んでいると、次の一文が目に留まりました。

Allow ALTER TABLE to set the NOT VALID attribute of NOT NULL constraints

PostgreSQL: Release Notes

ついにNOT NULL制約を追加する際のNOT VALIDがサポートされたようです。この記述から、これまでのCHECK制約を経由する手順が不要になり、運用がよりスマートになるのではないかと期待をしました。

本稿ではこの改善が既存の運用手順をどう簡素化するのか、実際に検証した内容をお届けします。

  • サマリ
  • 検証した環境
  • 検証:PG17
    • 1. NULLを許可してカラムを追加
    • 2. 追加したカラムのバックフィル
    • 3. 非NULLを検証するCHECK制約をNOT VALIDで追加
    • 4. VALIDATE CONSTRAINT
    • 5. SET NOT NULL
    • 6. CHECK制約の削除
  • 検証:PG18
    • 1. NULLを許可してカラムを追加
    • 2. 追加したカラムのバックフィル
    • 3. NOT NULL制約をNOT VALIDで追加
    • 4. VALIDATE CONSTRAINT
  • 手順の比較
  • この機能が実現するまで
  • 終わりに
  • We are Hiring!
    • エンジニア採用ページはこちら
    • カジュアル面談もお気軽にどうぞ
    • エンジニア新卒採用サイト!
続きを読む

チームで本格的に Docs as Code を運用しているので紹介します

エムスリーのソフトウェアエンジニアの伊藤です。デジスマチームのブログリレー2日目の記事です。 チームではチームリーディングとプロダクトマネジメントを主に担当しています。

  • はじめに
  • コンテキスト・エンジニアリング
  • AI Ready なコードベースにするためのドキュメント管理
  • プロダクト画面仕様書
  • ADR
  • Design Doc
  • API 定義 (Protocol Buffers)
  • まとめ
  • We are Hiring!
    • エンジニア採用ページはこちら
    • エンジニア新卒採用サイト! !
    • カジュアル面談! !
続きを読む

ダイアログ実装にみるトレンドと実装の中身

皆さん、こんにちは! デジスマチームの小島(@jiko_21)です。

このブログはデジスマチームブログリレーの1日目の記事です。

フロントエンド開発において、モーダル(ダイアログ)の実装は非常にポピュラーなタスクの1つです。しかし、近年のUIライブラリを見ていると、その「実装スタイル」が大きく様変わりしていることに気づかされます。

今回は、ダイアログの実装トレンドと、Radix UIなどのモダンなライブラリが裏側でどのように動いているのか、その「中身」について掘り下げてみたいと思います。

  • ダイアログ実装のトレンドの変化
    • 従来のスタイル
    • 最新のスタイル
  • なぜ渡していないonClickが動くのか
    • Dialog.Triggerを読んでみる
    • createSlotを見てみる
  • 最後に
  • We are Hiring!
    • エンジニア採用ページはこちら
    • エンジニア新卒採用サイト! !
    • カジュアル面談! !
続きを読む

VPoE 河合およびCTO 大垣が業務執行役員にW就任 〜AI時代最速の開発組織を目指して〜

はじめに

2026年3月1日、VPoE 河合俊典およびCTO 大垣慶介が新たに業務執行役員に就任し、それぞれ業務執行役員VPoEおよび業務執行役員CTOとなりました。

本記事では、Q&A形式で業務執行役員就任の背景と2人の魅力、これからのエムスリーエンジニアリンググループについてを包み隠さずお伝えします!

左から取締役CPO山崎、業務執行役員CTOの大垣、業務執行役員VPoE河合

  • はじめに
  • Q1. なぜ今2人が業務執行役員に?
  • Q2. “AI時代最速”とは、何の速度を最速化することか?
    • AIの民主化 => それぞれがプロダクト作りの主人公に
    • 意思決定をボトルネックにしないための組織変革
  • Q3. 新しい開発組織になって、現場の何が変わる?
  • Q4. 3年後、どんな状態なら成功?
    • 河合の目標
    • 大垣の目標
  • おわりに
    • We are Hiring!
      • エンジニア採用ページはこちら
      • エンジニア新卒採用サイト
      • カジュアル面談はこちら
続きを読む