エムスリーテックブログ

エムスリーテックブログ

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

CLIツール開発言語として OCaml を使ってみている

基盤開発チームブログリレー2日目の記事です。

1日目は田尻さんがOCamlについて書いてくれました。そのOCaml熱にあおられ私も仕事で使い始めたので、私も便乗してOCamlについて書いてみます。

www.m3tech.blog

覚醒したラクダ

はじめに

OCaml、書いてますか。私も書いています。仕事の補助ツールとして。

こんにちは、基盤開発チームの林です。

以前まで、ちょっとしたCLIツールを作る言語としては、簡潔に書ける Ruby を使うことが多かったのですが、最近はAIエージェントをよく使うようになったこともあり、自分用のCLIツール開発には OCaml を使うようになりました。

もともと私はローカル環境や設定の作り込みをするタイプではなく、むしろクリーンな環境・ゼロ設定で仕事をするのが好みだったのですが、近頃はCLIツール開発も含めてローカル環境の作り込みをするようになってきたので、そのあたりで考えたことなどを記事にしてみます。

なお、最初にお断りをしておくと、関数型言語を仕事で使った経験はほとんどなく*1、OCaml 自体にも詳しくはないので、OCaml 初心者による初心者向けの記事です。

*1:後述のHaxeは関数型言語のパラダイムも持っていて、仕事でFlash / HTML5 アプリケーション開発に使ったことはあります。あとは趣味で Lean を触ったことがある程度。

続きを読む

OCaml Web App Development 2026

【基盤開発チーム ブログリレー1日目】の記事です。

記事とはなんの関係もない自作の苔テラリウム

OCaml、書いてますか。私は書いています。仕事として。

そんな話の詳細は今年の関数型まつり 2026 で話すとして、今回は「実際、OCaml で Web やれんの?」という疑問にお答えしようと思います。

実際に利用しているものから、なんとなく良さそうなものまで、Web アプリ開発の文脈で必要になりそうなものをさらっていきます。

この記事を見て、ぜひ、OCaml で Web アプリ開発にチャレンジしてみてください!

続きを読む

AIコーディングはQAチームに何をもたらすか——理解負債・技術負債・認知負債との向き合い方

【QAチーム ブログリレー7日目】の記事です。

  • はじめに
  • 前提:なぜPlaywrightへ移行したか
  • 「まずコードを書けるようになろう」は諦めた
  • 5つのステップで開発フローへ
    • Step 1: Claude Codeに慣れる
    • Step 2: シナリオを「読む」
    • Step 3: VS Code Codegenを使う
    • Step 4: mablシナリオの移行ができる
    • Step 5: 積み重ねで改良・省力化へ
  • 現在地
  • AIだけでは足りなかった:地道な活動
    • レビューでテストの意図を確認する
    • リファクタリングで品質の均一化を図る
  • AI導入と同時に向き合っている3つの負債
    • 1. 理解負債:AIが書いたコードを誰も理解しない問題
    • 2. 技術的負債(新しい形):AIツール自体の不安定性
    • 3. 認知負債:AIへの過依存でチームの判断力が落ちる
  • おわりに
  • We're hiring!

はじめに

こんにちは、QAエンジニアの末吉です。最近東京を離れ、楽器不可のマンションに引っ越したため、ピアノが弾けなくなりました。悲しいばかり。

これは浜松ICにあるローランド製の電子グランドピアノ

突然ですが、私が担当するUnit4(m3.com開発チーム)のQAエンジニアには、開発経験がほとんどないメンバーもいます。

そういったメンバーが今では、ブランチを切り、Playwrightのテストコードを修正し、CIの失敗を自分で直してマージリクエスト(MR)を出せるようになっています。この半年で、チームが関わるリポジトリの8割以上にPlaywrightを導入した取り組みの話です。

この記事では、そこに至るまでのプロセスと、AI導入に伴って見えてきた「理解負債・技術負債・認知負債」という3つの課題への向き合い方を書こうと思います。

続きを読む

iOSビルドの凡ミスから学ぶ、FlutterのビルドキャッシュとAOTコンパイルの仕組み

ソフトウェアエンジニアの末永です。私は個人開発でFlutter製のモバイルアプリを開発しています。このアプリを開発している中でアプリのビルド周りでハマってしまったことがあり、その際ビルドシステムに関してしっかりと調査しました。この記事はその調査の際に書いたものです。*1

なお、本記事は次のバージョンを対象とした内容となっています。

  • Flutter: 3.38.0
  • Dart: 3.10.0

また、ビルド対象はiOSとAndroidのモバイルアプリのみとします。

*1:私は業務ではFlutterアプリの開発をしておらず、あくまで個人開発での経験に基づく内容です。

続きを読む

ICLR2026が開催中なので、エムスリー AI・機械学習チームの推し論文を勝手に紹介するぜ!

こんにちは。エンジニアリンググループのAI・機械学習チームに所属している鴨田 です。弊チームでは毎週1時間の技術共有会を実施しており、各自が担当するプロダクトの技術や、最近読んだ論文を紹介しています。今週はICLR2026が開催されていることもあり、同学会の論文読み会となりました。1セッションにつき1名が担当し、各自が選定した論文の詳細について解説しました。本ブログではその一部として、セッションごとの「推し論文」を紹介します。

まだ読んでいない方は前回のAAAI2026の輪読会ブログも是非ご覧になってください

www.m3tech.blog

ICLR 2026からトップページバナーを引用

続きを読む

PlaywrightとClaude Codeでやってみよう、手軽に始めるテスト自動実行

【QAチーム ブログリレー6日目】の記事です。

はじめに

こんにちは。エンジニアリンググループ QA (QualityAssurance) チームの中塚です。 2週間ほど前からバジルの水耕栽培にチャレンジしていて、少しずつ大きくなる双葉を見守るのが毎朝の楽しみです。肥料を溶かした水だけで本当にあんなに大きく育つのか?自由研究の気分で楽しく観察しています。

画像はAI(Gemini)により生成されたイメージです。このブログ記事の内容から生成してもらいました。バジルの鉢植えもあってかわいい!

さて、私は普段コンシューマ向けサービス全般のQAの設計、実施、計画、その他諸々の活動をしています。
その中で、時々このような手動でやるには辛いテストが必要になることがあります。

  • サービスの各ページにアクセスし、契約期間内ならアクセスできるが契約期間外ならアクセスできないことを確認したい。ページのリストは無く事前調査が必要で、おそらく数十ページを繰り返しアクセスして比較する
  • 特定のキーワードを検出し、警告するようなチェックシステムをテストしたい。外部LLMによるチェックなのでキーワードリストはないが、精度を見ておきたいのでさまざまなキーワードを試して動作確認したい。

このように、同じような操作を何回も繰り返したり、ページの調査やキーワードリストの準備といった事前調査などを含む地道な作業が必要になるテストを自動生成・自動実行できないか試したところ、PlaywrightとClaude Codeを使い手軽にテストコード生成〜実施〜レポート出力までが実現できたので、その実践例をご紹介します。

  • はじめに
  • Claude CodeとPlaywrightについて
  • 前準備
  • テスト計画を書く
    • 例:アクセス制御テスト
  • 実装 → 実行 → レポート
  • 良かった点
    • 時間が大幅に短縮され、手を離せた
    • 気軽に使えた
    • 使いやすい
    • わかりやすいレポートが出せる
  • 今後の展開
  • おわりに
  • We're Hiring!
続きを読む

Playwright移行を自律化。Claude Codeで実現するマルチエージェント設計

【QAチーム ブログリレー5日目】の記事です。

こんにちは。エンジニアリンググループ QAチームの須賀です。 最近エムスリーに復帰しました。 私は2月1日に入社してからQAエンジニアも使い放題のClaude Codeを用いてmabl(ノーコードのE2Eテストツール)の自動テストをPlaywrightにリプレースしています。 AIエージェントを用いた開発は未経験だったため、最初は期待するコードをなかなか生成できず試行錯誤の連続でした。しかし、最近では人の介入なしで期待するコードが生成できることも増えてきました。 試行錯誤の結果、AIエージェントの活用において重要だったのは、実は『人間同士が円滑に仕事をするためのマネジメント方法』を適用することだと気づきました。

本記事では、次の参考書籍の知見をベースにしつつ、実際のリプレース業務において試行錯誤して私が構築した、6つのサブエージェントを活用したワークフロー設計の実例を紹介します。

参考書籍

gihyo.jp

  • 設計の全体像 — .claudeディレクトリとCLAUDE.md
  • commands:自律的なワークフローの定義
    • ワークフローの流れ
    • ワークフローに沿ったタスクリストの作成・更新
    • テスト仕様書の作成と人によるレビュー
    • AIによる実装、テスト実行、コードレビューのループ
    • 作業中に発生した課題の振り返り
  • agents:役割の分離と責任の明確化
    • 各工程でエージェントを分ける
    • エージェントの作業の流れを具体的に書く
    • やらないことを定義しておく
  • skills:再利用可能な知見の集約
    • エラー分析フローについて
  • おまけ:Claude Codeに私のリポジトリを採点してもらった
    • 総合スコア: 92点 / 100点
  • おわりに
  • We are Hiring!
続きを読む