エムスリーテックブログ

エムスリーテックブログ

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

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!
      • エンジニア採用ページはこちら
      • エンジニア新卒採用サイト
      • カジュアル面談はこちら
続きを読む

10日間のインターンでk8s Self-hosted Runnerを構築し社内のCI/CD基盤を新たに整備した話

はじめまして! 2026年の2月後半に10日間、エムスリーのAI・機械学習チームでインターンをしていた竜です。

この記事では、セルフホストされた社内のCI/CD基盤を新しく構築し、その上で弊チームにおいてデプロイ時間を約半分短縮した事例について紹介します。

合わせて、1人の学生の視点から見たエムスリーの雰囲気であったり良さを紹介できればと思います!

最終日に食べたランチ

続きを読む

IP-KVM比較レビュー

IP-KVMの比較

はじめに

M3の岩佐(@bloody_snow)です。 最近は M3 Technologies にてM3グループ各社のエンジニアリング支援をメインで担当しています。エムスリーキャリア株式会社株式会社イーウェルで取締役を務めていますので、興味のある方はこれらの会社もよろしくお願いいたします。

最近はあまり物理サーバーを管理する時代ではなくなってきているようです。しかし、自宅サーバーやPCなどを複数台所有して管理している/したい人も一定数いると思っています。私もその部類の人間で、複数のマシンを管理する上でKVMスイッチやIP-KVMを用いています。せっかくなのでIP-KVMをレビューしてみようと思い筆をとりました。

  • はじめに
  • 注意
  • KVMスイッチとは?
  • IP-KVMとは?
  • 今回比較レビューする対象一覧
  • 比較まとめ
  • DIY PiKVM V2
  • NanoKVM Pro Desk Kit
  • JetKVM
  • まとめ
  • We are hiring!
続きを読む

突撃!隣のClaude Code!!

AI・機械学習チームの髙橋です。 みなさま、コーディングライフいかがお過ごしでしょうか。

エムスリーでは、昨年初夏頃からエンジニアに対してClaude Codeの業務における無制限使用が解禁されています。 現在ではほぼすべてのエンジニアが普段からClaude Codeを利用し、AIレビューやチーム内でのプラグインによるSkill共有が進んでいます!

ということで今回は、以前の突撃! 隣のキーボード M3 2024 - エムスリーテックブログのスピンオフとして、エムスリーのエンジニアメンバーが実際に利用している便利なClaude Codeのカスタマイズを募集し、紹介します!

例のしゃもじ

前置き:Claude Codeのカスタマイズとは

Claude Codeではエージェントに対してユーザ・プロジェクト固有の指示や制約を与えることができます。 昨今はSkillsが特に話題となっていますが、この他にRulesやAgentsなどがあり用途に応じて使い分けることができます。

よく言われることではありますが、個別の機能やベストプラクティスについては変化が早いので公式の情報を追うのが良いです! code.claude.com

それではさっそく数々のエントリーを見ていきましょう。

  • 前置き:Claude Codeのカスタマイズとは
  • 部門1: エージェントプロファイル編
    • TDDでコードを書かせる
    • 誠実なAIであれ
    • 質問に対して作業で返さないで
    • 推測で仕様を語らないで
  • 部門2: 自動化・便利ツール編
    • cruft updateを自動でやってくれる君
    • TODO管理をClaudeにお任せ
    • "自分"風メールを生成する
  • 部門3: BigQuery編
    • BQの権限付与を判断するやつ
    • bqコマンドではなくBQ MCP Toolを使わせるようにキレて誘導する
  • まとめ
    • 1. CLAUDE.mdはシンプルに、詳細はSkillsに書く
    • 2. なにをやらせないかコントロールする
  • エムスリーテックブログの過去記事
  • We are Hiring!
    • エンジニア採用ページはこちら
    • カジュアル面談もお気軽にどうぞ
    • エンジニア新卒採用サイトもオープンしました!
続きを読む