Backend

ML システム開発を支える Claude Skills

こんにちは。キャディ株式会社の Analysis Platform Group でソフトウェアエンジニアを務めている廣岡です。 業務としては、キャディの様々なサービスの裏側で稼働する機械学習解析のインフラやバックエンドの開発、アプリケーションとの橋渡しなどに取り組…

tsyringe で迷わない:Clean Architecture の DI 実装

はじめに CADDi Tech/Product Advent Calendar 2025 12日目の記事です。 こんにちは、DataFabric部の松本です。 私たちのチームでは、Clean Architectureを採用したTypeScriptプロジェクトで開発を進めています。 取り組んでいるプロジェクトでは、依存関係…

Web Crypto API と @noble/curves でデジタル署名を検証する

この記事は CADDi Tech/Product Advent Calendar 2025 の8日目の記事です。 こんにちは。Control Plane部で認証周りの開発をしている宇都宮と申します。 キャディでは、メール送信基盤として SendGrid を利用しています。少し前に、SendGrid の生成するイベ…

アプリケーションアーキテクチャをいい感じに検証し続けたい話

こんにちは、Drawer Growthグループ ソフトウェアエンジニアの内田(id:usadamasa, @usadamasa)です。弊社ではApache Icebergの活用*1とともに、一部のアプリケーションにJavaを導入しています。今回は、システムアーキテクチャから一段レイヤを下げてアプリ…

Auth0を使って1年かけてSSOをサポートした話

はじめに はじめまして、Drawerグループ所属のもりやです。 キャディは入社して約2年になりますが、ブログ記事を書くのは初めてです。よろしくお願いします。 私は入社時から 製造業データ活用クラウドCADDi Drawer の開発に携わっており、最初のRBACベース…

TypeScriptによるElasticsearchバッチ処理のパフォーマンス改善

こんにちは、 Drawer Growth グループの大木です。 キャディでは、膨大な図面データを効率的に検索・活用できるよう、Elasticsearchを活用した図面検索機能を提供しています。 このシステムにより、キーワード検索から類似図面の検索、図面に紐づく受発注情…

Google Cloud API Client Libraries for Rustにコントリビュートした話

こんにちは、Drawer Growthグループ所属エンジニアの中山です。 今回は、先月から個人的に始めたOSSへのコントリビューション活動についてご紹介します。 ※ 会社としての取り組みではなく、あくまで個人の取り組みになります。 背景 弊社が開発している図面…

Apache IcebergとCDCによるデータレイクハウス拡張

こんにちは、 Drawer Growth グループの高藤です。先日、弊社の江良が活用事例として取り上げた Apache Iceberg の活用事例にあるよう、キャディでは Apache Iceberg を採用したデータレイクハウスの構築を行っています。前回に引き続き今後計画していること…

キャディでの Apache Iceberg 活用事例

こんにちは。Drawer Growth グループの江良です。 キャディが「製造業 AI データプラットフォーム」の構想を打ち出してから半年ほどが経ちました。 caddi.com このコンセプトの実現にあたっては、「AI」の部分だけでなく、「データ」の部分を支える仕組みづ…

proptestを使うとテストが捗る

Drawer Growthグループ所属エンジニアの中野です。先日、採用候補者の方が「Rustを勉強する際にキャディのTech Blogにお世話になった」という話をして下さりとても嬉しかったのですが、最近Rustに関するTech Blogを執筆できていなかったので久しぶりに筆を取…

Lessons From Building a Workflow Platform

Introduction Our names are Kim Björkman and Nicolas Vivot and we are software engineers on the Workflow Engine team at CADDi. We work to provide the internal batch processing platform on which DRAWERs ingestion pipeline runs. This article …

会計システムのアーキテクチャとモデリング ~会計というドメインを Rust で表現している話~

はじめに こんにちは。 バックエンドエンジニアの松本です。今回は、会計システムの開発を通じて、 CADDi におけるプロダクト開発の様子を紹介します。 2024年3月現在、CADDiでは2つのサービスを提供しています。1つは図面データ活用クラウド「CADDi Drawer…

RustでWeb APIを作る際のエラーハンドリング

TL;DR エラーハンドリングを行う目的 エラーハンドリングが適切に行われているとどう嬉しいか 1. エラーの発生原因が分かる 2. レスポンスステータスを型安全に出し分けることが可能になる どうエラーハンドリングを行うのか 実装方法 エラー型の定義で気を…

Pantsモノレポの改善~テスト時間短縮・依存の集約管理・pex~

MLOps Team Tech Lead の西原です。以前のTech Blogで Pants を使った Python モノレポ移行への取り組みについて紹介しました。日々の業務で得た知見を Python コミュニティに共有できるといいなと思い、PyCon APAC 2023に「Pants ではじめる Python モノレ…

Cloudflare for application 入門

CloudFlare for application 入門 はじめまして、キャディでバックエンドエンジニアをやっている矢野です。 CloudFlareについて、2022年5月24日に開催された社内勉強会で発表させていただきました。 CDNで有名なCloudFlareですが、CDN以外のサービスの展開が…

proc_macro_workshopでRustの手続き的マクロに入門する 後編

はじめに builder マクロを作る(続き) 06-optional-field 目標 実装方針 実装 ガード節で Optional でない型のみエラーを出すようにする Optionでラップされた型はアンラップしてCommandBuilder構造体のフィールドで保持する Optional な型の setter メソ…

ふんいきでやる はじめてのバイナリ解析【社内勉強会開催レポート】

はじめまして、キャディでバックエンドエンジニアをやっている秋山です。 趣味で粛々とやっていたバイナリ解析について2022年5月17日に開催された社内勉強会で発表させていただきました :tada: [toc] バイナリ解析とは? バイナリ解析とは、製品や実行ファイ…

proc_macro_workshopでRustの手続き的マクロに入門する 前編

はじめに Rust のマクロ 宣言的マクロ 手続き的マクロ proc_macro_workshop proc_macro_workshop について proc_macro_workshop の進め方 derive(Builder) マクロを作る マクロの処理の流れ マクロを開発する上での Tips dbg!マクロの使用 cargo-expand 01-p…

PythonプロジェクトにOpenTelemetryを導入する

こんにちは。Quipu という原価計算システムの開発をしている山田です。 最近まで原価計算システムのバックエンドのアーキテクチャを変更するプロジェクトをチームで進めていて、その中で Python プロジェクトに導入してよかった OpenTelemetry について共有…

キャディでの Streamlit 活用事例

こんにちは。ソフトウェアエンジニアの江良です。 普段は Web アプリケーションのコードをせっせと書いて暮らしているのですが、AI Lab の誕生に伴い、機械学習を専門とするエンジニアと協業する機会も増えてきました。 今回は、機械学習の研究開発プロジェ…

Rust Cookbook for Beginners

こんにちは @ryokotmngです。 今日は社内ドキュメントの、Rust初心者向けのクックブックを公開しようと思います。 私自身コードを書くのに四苦八苦していた頃にとても助けられたので、Rustをはじめたばかりの方の参考になれば嬉しいです。 目次 [toc] はじめ…

Rust についてカジュアル面談で頻繁に訊かれる質問と、それに対する個人的な回答

エンジニアリングマネージャーの村上 (@mura_mi) です。採用関連で面談に出ることが多いのですが、大体7割くらいの確率で 「なんで Rust 使ってるのですか?」「Rust 使っててどうですか」と聞かれるので先回りして書いておこうと思った記事です。 なんで Ru…

React + Neo4j によるコストモデル可視化の取り組み紹介

はじめに こんにちは。キャディで原価計算システムの開発を担当しております、高橋です。 この記事は キャディ Advent Calendar 2020 の23日目です。前日は朱さんの 「【開発カルチャー発信 vol.1】原価計算システム開発チームの開発理念を大公開!」でした…

tracing crateを利用したRustのlogging方法について

こんにちは。CADDi でバックエンドエンジニアをしている 高藤 です。 この記事は CADDi Advent Calendar 21日目の記事です。昨日は、寺田さんによる RustでRAMの動作原理をシミュレートする でした! 今回はRustのtracintg crateについて紹介したいと思いま…

RustでRAMの動作原理をシミュレートする

頭おかしいタイトルですね。何を言っているんだお前は。 本記事は CADDi とは何の関係もありませんし、実用的価値も一切ありません。その点はご了承を。 あ、Rust が分からないからといって帰る必要はありません。この記事はほとんどRustと無関係です。なん…

Apollo Client 3.0 ではじめる快適キャッシュ生活

こんにちは。テクノロジー本部バックエンド開発グループの江良です。 この記事は CADDi Advent Calendar 19 日目の記事です。昨日は、狭間さんによる「GraphQL PaginationのNestJSでの実装」でした! 「バックエンド開発グループの〜」と自己紹介したばかり…

Valgrindでコード解析してみる

はじめに テオ。弾薬が尽きた。このまま突入する、さらばだ。ヴァルハラで会おう。Wir sehen uns in Walhalla! これは第二次世界大戦時のドイツ空軍のエースパイロット、ハインリヒ・エールラーの最後の言葉です。 北欧神話で戦死した人がラグナロク(終末の…

whasm!("Rust Christmas: WebAssemblyをKubernetes上で動かす")

1. Rust Christmas, I gave you my heart はじめに 折角クリスマスなので、楽しい近未来感のある技術を検証してみようと思います。お仕事で使っているRust、Kubernetes、そして個人的に興味のあるWebAssemblyをガッチャンコ出来ないか考えてみた。技術者とし…

Rustでパラメーター化テスト

こんにちは!@ryokotmngです‍♀️ 本記事は、キャディ Advent Calendar 2020 – Qiita の13日目の記事です。昨日の記事は@kuwana-kbさんの、DDD のパターンを Rust で表現する ~ Entity 編 ~ でした。 今日は主に、rstestというcrateを使い、Rustでパラメーター…

DDD のパターンを Rust で表現する ~ Entity 編 ~

こんにちは。CADDi でバックエンドエンジニアをしている @kuwana-kb です。 この記事は CADDi Advent Calendar 12日目の記事です。昨日は、山下さんによる GitOpsの概要と実践例 〜Kustomize + CircleCI編〜 でした! 本日は「DDD のパターンを Rust で表現…