FORCIA Tech Blogのフィード
https://zenn.dev/p/forcia_tech
――「つなげれば、見える。」――膨大・複雑なデータから必要な情報を的確に探し出す検索テクノロジーを基にしたシステム開発・サービス提供並びに、コンサルティングで企業のDXを推進するフォルシア株式会社テックブログです。 エンジニア積極募集中!!
フィード

バッチ監視のプラクティス
FORCIA Tech Blogのフィード
はじめに定期実行するバッチ処理というのは大小様々ありつつ至るところで見られるものだと思います。実際にフォルシアでも、主にデータの取り込み・加工・出力の処理を中心にいろいろなプロダクトの"重要な機能"として存在しています。そんな大事なバッチ処理ですが「毎日ちゃんと回って当たり前」と思っていると、いざ止まった時に大きな障害につながりかねません。しかも、単に「エラーが出てないか」「終わったかどうか」だけ見ていても安心できないのがバッチ監視の難しいところです。本記事では、フォルシアのバッチ処理の監視の観点を整理しつつ、どのように実践しているかをご紹介します。以下では、定期実行する...
11時間前

Pythonのマルチプロセスで巨大なデータを処理する場合のエラーハンドリング
FORCIA Tech Blogのフィード
こんにちは、エンジニアの澤田です。普段の業務で、Pythonのプログラムで外部のAPIへリクエストを送り、そのレスポンスを加工してデータベースへ保存する処理を行っています。その際、リクエスト数が多いため、リクエストを送って結果を受け取る処理を並列(マルチプロセス)で行っています。ここで 1つのリクエストを「サブプロセス」と呼ばれる子プロセスが担当していますが、以下のような問題が起こることがあります。サブプロセスが処理の途中でハングするAPIのレスポンスが巨大でメモリを大量に使用する場合に、OSの「OOM Killer(Out of Memory Killer)」によってサブプ...
1ヶ月前

Mastra × MCPでドキュメント作成を自動化してみる
FORCIA Tech Blogのフィード
はじめにこんにちは、新卒2年目エンジニアの紺谷です。私はここ1年ほどSaaSプロダクトの運用保守チームで働いています。普段は顧客や非エンジニアの社員からの問い合わせ対応(プロダクトの仕様の確認やバグ発生時の調査など)や、プロダクトや業務フローを改善していくための開発などをしています。こういった仕事をやっていくにはプロダクトに使われている技術スタックについての理解はもちろん、プロダクトそのものの使い方や日々刻々と変わっていく仕様を把握したり、その業界特有の複雑なビジネスロジックを理解していくことが欠かせません。そういったノウハウはドキュメントにまとめ、他のメンバーやこれからチ...
1ヶ月前

PostgreSQL 注目機能改善 #3: 実行計画編
FORCIA Tech Blogのフィード
まえがきPostgreSQLでは頻繁にクエリプランが改善されており、メジャーバージョンが上がる度に何かしらの変更が加わっています。ひとくちにクエリプランの改善と言ってもその内容はさまざまで、新しいプランの追加、同じプランの処理の改善、他のプランへの暗黙的な置換などがあります。本稿ではその中でも、プランナ制御用に新しく追加されたパラメータ[1]に関連する機能に絞って紹介をしたのち、簡単な検証を実施します。連載について本連載はPostgreSQLの比較的新しいバージョンで導入、改善された機能に注目し、その紹介と簡単な検証をする連載です。RDBは枯れた技術と評されることが多いで...
1ヶ月前

社内ナレッジを蓄積するマン
FORCIA Tech Blogのフィード
はじめにこんにちは。フォルシア株式会社エンジニアの宮本です。社員全員が見られるWikiにナレッジを蓄積していくことは業務の効率化のために重要です。しかし、その運用を継続し全体に浸透させるのは簡単ではありません。私の所属するフォルシアでは情報共有サービスのesaを利用しており、知見共有が比較的うまくいっている方だとは思いますが、一方で私は「記事を書くのが億劫だな。みんな書いていてすごいな。」と思うことが多々あります。このブログでは、そんな記事を書きたくない私が頑張って記事を書くために工夫していることを紹介します。!以下の内容は客観的なベストプラクティスは示しておらず、個人的レ...
2ヶ月前

Webアプリのパフォーマンスを(お金をかけずに)定点観測する方法
FORCIA Tech Blogのフィード
はじめにWebアプリケーションの開発者の方であれば、自身の開発したアプリのパフォーマンスを気にしたことがあるのではないかと思います。実際にChromeに同梱されている「Lighthouse」やオンラインサービスの「PageSpeedInsights」、「webpagetest」といったツールを使って計測したことがある方も多いのではないでしょうか。ただ、単発で計測するのが簡単ですが、長期的な動向を見たいという場合これらのツールだけで測るのは難しいかと思います。そこで、Webアプリのパフォーマンスを長期的に「定点観測」する取り組みを行ったのでご紹介したいと思います。!「RUM...
2ヶ月前

Zenn記事投稿コンテスト「TypeScriptでやってみた挑戦・学び・工夫」へ協賛しました
FORCIA Tech Blogのフィード
こんにちは、エンジニアの山下です。フォルシアは第3回Zenn記事投稿コンテスト「TypeScriptでやってみた挑戦・学び・工夫」に協賛しました。この記事では企業賞決定の経緯や授賞式の様子をレポートします。 zenn記事投稿コンテストとはZenn記事投稿コンテストは、技術情報共有プラットフォーム「Zenn」を運営するクラスメソッド株式会社様主催の、エンジニア向けの技術記事投稿コンテストです。第3回となる今回のテーマは「TypeScriptでやってみた挑戦・学び・工夫」となっており、TypeScriptにまつわる技術的な試行錯誤や発見、実装の工夫などを広く共有する場となりました。h...
2ヶ月前

PrismaからPGliteに繋げてリポジトリ層のテストをお手軽にやってみた
FORCIA Tech Blogのフィード
こんにちは、エンジニアの籏野です。今回はPGliteとPrismaを用いて、実際にデータベースに接続して行うリポジトリ層のテストについて紹介します。作成したサンプルプロジェクトは以下のリポジトリに置いていますので、合わせてご確認ください。https://github.com/taku-hatano/pglite-prisma-test リポジトリ層におけるテストの課題クリーンアーキテクチャのようなデザインパターンを利用する場合、リポジトリ層を利用してビジネスロジックとデータアクセス層を分離することはよくあるかと思います。これにより、ビジネスロジック層においてはリポジトリ層を...
2ヶ月前

SaaSプロダクトのKubernetesマニフェスト管理をcdk8s化して運用性・保守性を大幅改善しました
FORCIA Tech Blogのフィード
こんにちは、エンジニアの齊藤です。私が携わっているプロダクトでは、複数の旅行会社向けにSaaSサービスを提供しており、Kubernetes(k8s)でWebアプリケーションやバッチジョブを運用しています。嬉しいことに導入してくださるお客様が増えてきたのですが、各顧客に要求されるリソース量や細かな設定値が異なっているため、顧客数の増加に伴い運用負荷が高まってきていたという側面がありました。具体的には、k8sマニフェストの管理が問題となっていました。k8sを用いてアプリをデプロイするためにはk8sマニフェストを用意する必要がありますが、我々のプロダクトでは細かな設定値の異なる複数の顧客に...
2ヶ月前

TypeScriptのgeneratorで再帰的探索をシンプルに実装する
FORCIA Tech Blogのフィード
こんにちは、エンジニアの籏野です。最近、ESLintカスタムルールの開発において、AST(抽象構文木)から特定のノードをすべて抽出してルールを作成したいという要望がありました。その際に、generatorを活用することで、非常に効率的かつ可読性の高い実装を行うことができたので、その方法を紹介したいと思います。generatorの基本については既に多くの記事が存在するため、本記事では実際のコード例を通じて、generatorを用いてどのように探索を行うのかを中心に解説します。 最終形以下のようなコードで、ASTを再帰的に探索し特定のノードを抽出することができます。const ...
3ヶ月前

AIエージェントワーキンググループはじめました
FORCIA Tech Blogのフィード
こんにちは。フォルシア株式会社エンジニアの宮本です。ChatGPTやコーディングエージェントなどの生成AIがエンジニアリング現場に浸透し、業務効率化に活用する動きが広がっています。しかし「全社的に浸透しているか?」と問われると、まだまだ個人やチームのノウハウに依存しているのが一般的な現状かと思います。フォルシアでも「AIの活用を前提とした業務変革の仕組みが必要」という問題意識から、今年4月に社内有志で『AIエージェントワーキンググループ』を立ち上げました。まだ始まったばかりの組織ですが、背景と取り組み内容についてご紹介します。 AI活用に向けての課題と、ワーキンググループでの取...
3ヶ月前

Next.js App Routerでのi18n対応全部調べてみた
FORCIA Tech Blogのフィード
こんにちは、エンジニアの籏野です。この度、Next.jsのApp Routerを利用したアプリケーションへのi18nの導入方法を調査することになりました。Pages Routerを利用した場合の導入方法はイメージがつくのですがApp Routerを利用した場合は初めてとなりますので、その方法を調査・比較しました。なお今回の調査は主に、Localizationの方法に焦点を当てています。言語毎の出し分けのためのルーティング方法についてはそこまで解説しないのでご了承ください。Next.jsの公式ドキュメントのinternationalizationページでは、いくつかLocaliz...
4ヶ月前

ベクトル検索のダークホース: PostgreSQL + VectorChord
FORCIA Tech Blogのフィード
概要ベクトル検索データベースを利用するにあたり、 PostgreSQL + pgvector は有力な選択肢の1つに挙げられると思います。pgvectorがサポートするインデックスアルゴリズムは一般的で信頼性の高いものですが、近似最近傍探索アルゴリズムは近年でも新しい手法の提案が頻繁に行われている分野であり、そういった新手法をPostgreSQL向けに実装した野心的な拡張機能も存在します。本稿は、新しいベクトル検索用拡張のひとつである VectorChord の紹介と、簡単な性能検証を試みるものです。 PostgreSQLのベクトル検索拡張!本項の内容は筆者の見聞による...
4ヶ月前

ビット演算できる型を使って、○×ゲームで遊べるようにしてみた
FORCIA Tech Blogのフィード
こんにちは、エンジニアの籏野です。先日、とある開発中の思い付きでTypeScriptの型でビット演算ができるようにしてみました。残念ながらその型はアプリで採用されることはなかったのですが、何かしらに活かしてみたいなと思い、TypeScriptの型レベルプログラミングだけで○×ゲームを作ってみました。!今回の型を作ろうとしたきっかけは、ある選択肢の中からいくつか選び出す際に、選び取った組み合わせと選んだもの以外の組み合わせが同じ状態を示すというルールがあったためです。例: 1~5の選択肢がある場合に、「1, 3」と「2, 4, 5」は同じ状態を示すことを型で表現するビット演算で...
4ヶ月前

PostgreSQL 注目機能改善 #2: COPY編
FORCIA Tech Blogのフィード
まえがきCOPYコマンドはPostgreSQL特有の機能で、ファイルとテーブル間でデータを移動する際に使用します。COPY FROMはファイルからテーブルにデータを入力するコマンドで、COPY TOはDBからファイルにデータを出力するコマンドです。特にCOPY FROMコマンドは大量の行をロードすることに長けているため、INSERTコマンドを使用したファイルのロードより高速にデータの取り込みが可能です。COPYコマンドはPostgreSQL 15, 16, 17 で機能追加や性能改善がありました。本稿ではそれらの改善内容の紹介と、簡単な検証を実施します。連載について本連載は...
5ヶ月前

シンプルで使いやすい新たなRPCライブラリ~oRPCとは何者か?~
FORCIA Tech Blogのフィード
はじめにこんにちは、エンジニアの籏野です。先日、oRPCというライブラリのV1がリリースされました。https://x.com/unnoqcom/status/1912153521060987057oRPCはTypeScriptを利用するシステムにおいてRPC(Remote Procedure Call)を実現するためのライブラリです。RPCの特徴は、クライアント側からはメソッドを呼び出すような感覚でAPIを利用することができ、REST APIのようにエンドポイントを意識する必要がなくなることが挙げられます。RPCを実現する有名なライブラリとしてtRPCがありますが、どの...
5ヶ月前

「レンズ」でフォーカス!@hookform/lensesを使ったフォーム実装
FORCIA Tech Blogのフィード
こんにちは、フォルシア株式会社エンジニアの籏野です。先日、React Hook Formの公式アカウントが以下のようなポストをしているのを見つけました。https://x.com/HookForm/status/1894698099677028618新たにリリースされた@hookform/lensesがどのようなライブラリなのか気になり調べてみました。 @hookform/lensesとはGitHubに記載の内容を訳すると以下のようになります。(日本語訳 by DeepL)React Hook Form Lensesは、React Hook Formに関数型レンズのエレガ...
6ヶ月前

超直感的なバリデーション?ArkType入門
FORCIA Tech Blogのフィード
こんにちは、フォルシア株式会社エンジニアの籏野です。今回はzodやvalibotと同じバリデーション用ライブラリであるArkTypeについて紹介したいと思います。 ArkTypeの特徴ArkTypeの大きな特徴としては以下の点が挙げられます。TypeScriptの型記法に似た記法によりバリデーション定義が可能実行時にはzodの100倍高速に動作し、エディター上でも高パフォーマンスな補完を提供するStandard Schemaへの対応※Standard Schemaはzodやvalibotといったバリデーションライブラリの共通インターフェース仕様です。本記事で...
6ヶ月前

B to B SaaSプロダクトの継続的開発・運用保守をする上での課題とそれに対する取り組み
FORCIA Tech Blogのフィード
こんにちは、エンジニアの松枝です。私が所属する部署では企業が旅行検索サービスを作成できるSaaSプロダクトの開発、運用保守を行っています。ありがたいことに導入していただける顧客の数も増え、数多くの顧客プロジェクトが並走しています。ただ、顧客数が増えるとともにSaaSプロダクトという特性上品質保証のための検証コストが高まったり、各顧客の要望に柔軟に応えるのが容易ではなくなってきました。また開発がいくつも並走して行われ、プロジェクト間の連携がうまくとれず似たような機能の開発がそれぞれのプロジェクトで進んでしまったり、開発ブランチ運用やソースコードのコンフリクト解消に多大な時間を割く状態...
6ヶ月前

PostgreSQL 注目機能改善 #1: window関数編
FORCIA Tech Blogのフィード
まえがき本連載はPostgreSQLの比較的新しいバージョンで導入、改善された機能に注目し、その紹介と簡単な検証をする連載です。RDBは枯れた技術と評されることが多いですが、PostgreSQLは1年ごとにメジャーアップデートがあり、その度に多くの機能追加や改善が施されています。本連載では膨大な改善の中から特定の機能に着目し、各メジャーバージョンでどのような改善が導入されたかにフォーカスします。本稿ではwindow関数の改善を紹介します。PostgreSQL 15, 16 では window関数の性能が改善しました。window関数は主に分析系のクエリなどでよく使われるイ...
7ヶ月前