KAKEHASHI Tech Blog

カケハシのEngineer Teamによるブログです。

バックエンド

Go の context.Cancel パターンを TypeScript に持ち込んでリソースリークと決別した話

こんにちは、ソフトウェアエンジニアの沖(@takuoki)です。 私たちのチームでは、バックエンドを TypeScript で開発しており、Web フレームワークには Hono、メッセージキューには NATS を使っています。その中で、Server-Sent Events(SSE)を使ったリアル…

ETL 変換処理の設計原則 — PySpark を例に

ETL の変換 (Transformation) 層は、Source のデータを変換して Sink に出力する場所です。SQL で書くこともできますが、テストや再利用性の観点を踏まえると、小さい関数を組み、それらを組み合わせるやり方に行き着きます。 本記事では、変換層を堅牢に組…

サーバーサイドTypeScriptの型システムをどう教えるか — 他言語経験者に向けたオンボーディング事例

こんにちは、kosuiこと岩佐幸翠 (@kosui_me) です。カケハシで認証権限基盤チームのテックリードを務めています。 私たちのチームでは、認証基盤・ID基盤・端末基盤・ライセンス基盤など、様々なプラットフォームシステムをTypeScriptで構築しています。 サ…

多言語横断開発の現場から「Python と static duck typing」

長い前置き おはようございます。カケハシのPE新規サービス開発チームというところでソフトウェアエンジニアをやっているogijunこと荻野です。最近この技術ブログはAIの話題が多めなので、ここから言語オタク語りが始まってしまうのはいいのか?とか思います…

Musubi バックエンドの Python 開発環境を mise + uv へ移行しました(思ったより簡単)

Musubi 開発チームおよびサーバサイド Python 研究会の加藤です。最近は冷えますね。 私のチームで開発している Musubi のバックエンドは Python で実装されていますが、そのパッケージおよびランタイム管理の変遷を追ってみると 2017〜: requirements.txt +…

Lakeflow Connect PostgreSQL connectorの導入検討

こんにちは、カケハシでデータ基盤を担当しているチームの内田です。 カケハシでは、Databricks on AWS上でデータ基盤を構築しています。カケハシのプロダクトはAWS上で動いているものが多く、AuroraやDynamoDBなどのデータベースのテーブルをDatabricksに取…

TypeScriptのテストにはas const satisfiesが便利です

こちらの記事は カケハシ Advent Calendar 2025 の 14日目の記事になります。 はじめに こんにちは、kosuiこと岩佐 幸翠(@kosui_me)(id:kosui_me)です。カケハシで認証基盤・ライセンス基盤・組織階層基盤などのプラットフォームシステムを開発・運用する認…

モノレポ と「育つ仕様書」で実現する、LLM時代のマルチ言語システム構築

こちらの記事は カケハシ Advent Calendar 2025 の 8日目の記事になります。 はじめに ソフトウェアエンジニアのkackyです。 「kintoneの契約データを、Databricks経由でAWS上のプロダクトに同期したい」 このような要件を受けたとき、どのような開発ステッ…

LLM のフォールバックをどうテストする? Node.js で手軽に障害再現&カオスエンジニアリング

こちらの記事は カケハシ Advent Calendar 2025 の 4日目の記事になります。 はじめに 生成AI研究開発(GenAI)チームでソフトウェアエンジニアをしている坂尾です。 私たちのチームでは、生成 AI を利用したサービスを開発しています。このサービスでは、Goog…

SQLAlchemy でスロークエリの呼び出し元を追跡する

こんにちは、AI在庫管理のバックエンドを担当している沖(@takuoki)です。 今回は、スロークエリの呼び出し元の追跡が難しいという問題について、実際に取り組んだ解決策をご紹介します。比較的シンプルなアプローチでしたが、開発体験の大幅な改善につながっ…

ALB mTLS導入事例:独自CRLチェックからマネージドサービスへの移行

こんにちは。Musubiアカウント管理基盤チームの松岡です。今回は、私たちが担当するプロダクトでApplication Load Balancer (ALB)のmTLSを導入した事例をご紹介します。独自実装していたクライアント証明書のCRL(証明書失効リスト)チェックをALBに移行した…

社内管理画面を Slack App から Lambda Web Adapter を利用した Web アプリケーションに移行している話

はじめに 処方箋データ連携チームでエンジニアをしている岩佐(孝浩)です。 カケハシには「岩佐」さんが複数名在籍しており、社内では「わささん」と呼ばれています。 私が所属する処方箋データ連携チームでは、これまで Slack App を用いて社内管理画面を…

DynamoDB シングルテーブル設計入門

はじめに 処方箋データ基盤チームでエンジニアをしている岩佐 (孝浩) です。 カケハシには「岩佐」さんが複数名在籍しており、社内では「わささん」と呼ばれています。 私が所属する処方箋データ基盤チームでは、DynamoDB をメインのデータベースとして利用…

AWS KMS RSA 非対称鍵を利用したハイブリッド暗号化の方法 (OpenSSL/TypeScript)

はじめに 処方箋データ基盤チームでエンジニアをしている岩佐 (孝浩) です。 カケハシには「岩佐」さんが複数名在籍しており、社内では「わささん」と呼ばれています。 私が所属する処方箋データ基盤チームは、日本全国の薬局から送信される処方箋データを S…

2025年版 DynamoDBを本格的に使いたい開発者のためのDynamoDB利用ガイド

DynamoDBも当初はマネージドとしてシンプルでしたが要求が増えるにつえ複雑になってきました。 *ソフトウェアでは良くあることで、そして新しくシンプルなものが生まれ新しいサイクルが始まる モデリングなどはドキュメントを見ていただきつつ、この記事で…

PDF生成をバックエンドに移行する

こちらの記事は カケハシ Advent Calendar 2024 の 20日目の記事になります。 adventar.org こんにちは、カケハシのAI在庫管理チームでフロントエンドエンジニアをしている Nokogiri です。 AI在庫では薬局で利用する伝票のPDFをフロントエンドで出力してい…

CloudWatchコスト削減のリアル:効果的なログ分析と対策方法

こんにちは、AI在庫管理の開発チームでバックエンドエンジニアをしているもっち(@mottyzzz)です。 AI在庫管理では、プロダクトのインフラとしてAWSを使用しています。その中でも特に重要なサービスのひとつがCloudWatchです。システムの監視やログ管理に不…

Gopher のための Python 入門

AI在庫管理の開発チームでバックエンドエンジニアをしている沖(@takuoki)です。AI在庫管理では、サーバーサイドの大部分で Python を使用しているため、私も毎日 Python をごりごり書いています。ただ、私が Python をちゃんと触り始めたのは、カケハシに…

【Node.js】S3からS3へのアップロードをnode:stream/promisesのpipelineやaws-sdk/lib-storageでやる

はじめに こちらの記事は Advent Calendar 2024 の 6日目の記事になります。 カケハシでソフトウェアエンジニアをしている加藤です。 この記事では、S3からS3へのファイルのアップロードをNode.js, TypeScript, Stream APIを利用して行う方法について説明し…

S3 イベント通知とオブジェクトのストレージクラス変更で発生する CopyObject イベントについて

処方箋データ基盤チームでエンジニアをしている岩佐 (孝浩) です。 カケハシには「岩佐」さんが複数名在籍しており、社内では「わささん」と呼ばれています。 私が所属する処方箋データ基盤チームは、日本全国の薬局から送信される処方箋データを S3 に保存…

AWS CDKのStepFunctionsでEcsRunTaskにcpuパラメータを渡す

Musubi AI 在庫管理で DevOps エンジニアをしている kacky です。 この記事では AWS CDK 上でのジョブ開発でのとある困り事を解決した話をしたいと思います。 AWS CDK の StepFunctions には、EcsRunTask という API が存在します。この API を使用すると、S…

イベント駆動処理をメンテナンスモードにするためにやったこと

はじめに こんにちは。AI在庫管理チームソフトウェアエンジニアの坂本です。 今回はこちらの記事で松本さんが紹介していたメンテナンスモードの中で、イベント駆動処理のメンテナンスモードを開発するためにやったことを少し詳しく紹介できればと思います。 …

テーブル駆動方式が与える開発インパクト

コードを書くとき、テーブル駆動方式は過小評価されています。非常に強力なテクニックなので、事例とそのインパクトを説明します。 概略サンプル if age < 10: return price / 2 elif age < 20: return price / 3 elif age < 50: return price / 5 else: ret…

Airflow Zombie Task への対処法

こんにちは。AI 在庫管理チーム ソフトウェアエンジニアの坂本です。 今回は AI 在庫管理のバッチ処理で利用しているワークフローツール Airflow (MWAA) の Zombie Task に苦労したケースとその対処法について紹介しようと思います。 概要 Airflow で動かし…

PythonのLinter & Formatter(Flake8 + isort + Black)をRuffに置き換えたら爆速でした

こんにちは、カケハシで Musubi 開発チームのバックエンドエンジニアをしている関です。 Musubi 開発では、 Python の Linter と Formatter に Flake8、isort、Black を使用しておりました。しかし Rust で書かれた Ruff という高性能なツールが出たというこ…

PyCon APAC 2023を聴講してきました

PyConをエンジニア目線でレポート 弊社はPyConでプラチナスポンサーとしても参加させて頂いていますが、今回の記事はエンジニア目線で参加してきたPyConをレポートしようと思います! PyConに関係する記事として以下のような記事を公開しています。合わせて…

PyConAPACで登壇したスナップショットテストの話の続き

PyConAPAC 2023 で登壇してきました 株式会社カケハシのバックエンドエンジニアの横田です。 二日目(10/28(土))の LT 会で「Python でスナップショットテスト」というタイトルで登壇してきました。 PyCon には二日目の途中から参加し、登壇までは主にスポン…

dbxを使用してDatabricks Workflowをデプロイする

こちらの記事はDatabricks Advent Calendar 2023の8日目の記事です。 こんにちは、カケハシのデータ基盤チームでデータエンジニアをしている伊藤と申します。 カケハシでは全社的なデータ活用基盤のプラットフォームとしてDatabricksを採用し、運用して1年…

PyCon APAC 2023 に参加します!

プラチナスポンサーとして参加します! 我々株式会社カケハシは、2023年10月26日(木)から10月29日(日)にTOC有明コンベンションホールで開催される PyCon APAC 2023 に、プラチナスポンサーとして参加することとなりました! 2023-apac.pycon.jp 当日はカケハ…

クロスアカウントアクセスでAppSync Private APIを使う話

はじめに こんにちは、LINE上で動くおくすり連絡帳 Pocket Musubi というサービスを開発している種岡です . 社内でプライベートAPIを開発する要件があり、タイミング良くAppSyncでプライベートAPIが使えるようになったため試してみました 全体像 以下システ…