フォルシア の技術ブログ

postgres_fdwのjoinが1300倍高速化!22時間→1分にしたチューニング手法

はじめに こんにちは、エンジニアの長谷です。 フォルシアではPostgreSQL拡張の一つであるpostgres_fdwを使ってDB間の連携をとっているのですが、最近その処理が非常に遅くなっていることがわかりました。 ボトルネックとなっている部分は非常にシンプルなSQLながらちょっとした実装の違いでパフォーマンスに大きな差が出る興味深いものであり、実際チューニングすると22

Gitでコミットを取り消す5つの方法を整理して比較する

はじめに フォルシア株式会社エンジニアの山本です。未経験で転職して以来、チーム開発の中でコミットを取り消す機会が増えてきました。 個人開発ではやり直しも自由ですが、チーム開発では履歴の整合性が重要です。誤ってコミットを消したり、force pushで混乱を招いたりしないためには、正しい知識が欠かせません。 この記事は、Gitを日常的に使う初中級者ITエン

プロンプトを育ててAIの「いい感じ」をコントロールする

概要 こんにちは、エンジニアの籏野です。 昨今AIを用いた開発が非常に盛んになってきました。 弊社でもClaude Codeによる開発支援を中心として、ChatGPT/Google Agentspace等々の導入検討・および利用推進が進んでいます。 そんなAI活用において、もっとも重要なのが人間からの指示をAIに伝えるための「プロンプト」です。 今回の記事ではAIに意図した動作をさせるためにどの

バッチ監視のプラクティス

はじめに 定期実行するバッチ処理というのは大小様々ありつつ至るところで見られるものだと思います。 実際にフォルシアでも、主にデータの取り込み・加工・出力の処理を中心にいろいろなプロダクトの"重要な機能"として存在しています。 そんな大事なバッチ処理ですが「毎日ちゃんと回って当たり前」と思っていると、いざ止まった時に大きな障害につながりかね

Pythonのマルチプロセスで巨大なデータを処理する場合のエラーハンドリング

こんにちは、エンジニアの澤田です。 普段の業務で、Pythonのプログラムで外部のAPIへリクエストを送り、そのレスポンスを加工してデータベースへ保存する処理を行っています。 その際、リクエスト数が多いため、リクエストを送って結果を受け取る処理を並列(マルチプロセス)で行っています。 ここで 1つのリクエストを「サブプロセス」と呼ばれる子プロセスが担当

Mastra × MCPでドキュメント作成を自動化してみる

はじめに こんにちは、新卒2年目エンジニアの紺谷です。 私はここ1年ほどSaaSプロダクトの運用保守チームで働いています。 普段は顧客や非エンジニアの社員からの問い合わせ対応(プロダクトの仕様の確認やバグ発生時の調査など)や、プロダクトや業務フローを改善していくための開発などをしています。 こういった仕事をやっていくにはプロダクトに使われている

PostgreSQL 注目機能改善 #3: 実行計画編

まえがき PostgreSQLでは頻繁にクエリプランが改善されており、メジャーバージョンが上がる度に何かしらの変更が加わっています。 ひとくちにクエリプランの改善と言ってもその内容はさまざまで、新しいプランの追加、同じプランの処理の改善、他のプランへの暗黙的な置換などがあります。 本稿ではその中でも、プランナ制御用に新しく追加されたパラメータ[1]に関

社内ナレッジを蓄積するマン

はじめに こんにちは。フォルシア株式会社エンジニアの宮本です。 社員全員が見られるWikiにナレッジを蓄積していくことは業務の効率化のために重要です。しかし、その運用を継続し全体に浸透させるのは簡単ではありません。 私の所属するフォルシアでは情報共有サービスのesaを利用しており、知見共有が比較的うまくいっている方だとは思いますが、一方で私は「

Webアプリのパフォーマンスを(お金をかけずに)定点観測する方法

はじめに Webアプリケーションの開発者の方であれば、自身の開発したアプリのパフォーマンスを気にしたことがあるのではないかと思います。 実際にChromeに同梱されている「Lighthouse」やオンラインサービスの「PageSpeedInsights」、「webpagetest」といったツールを使って計測したことがある方も多いのではないでしょうか。 ただ、単発で計測するのが簡単ですが、長期的な動

Zenn記事投稿コンテスト「TypeScriptでやってみた挑戦・学び・工夫」へ協賛しました

こんにちは、エンジニアの山下です。フォルシアは第3回Zenn記事投稿コンテスト「TypeScriptでやってみた挑戦・学び・工夫」に協賛しました。この記事では企業賞決定の経緯や授賞式の様子をレポートします。 zenn記事投稿コンテストとは Zenn記事投稿コンテストは、技術情報共有プラットフォーム「Zenn」を運営するクラスメソッド株式会社様主催の、エンジニア向けの技術

PrismaからPGliteに繋げてリポジトリ層のテストをお手軽にやってみた

こんにちは、エンジニアの籏野です。 今回はPGliteとPrismaを用いて、実際にデータベースに接続して行うリポジトリ層のテストについて紹介します。 作成したサンプルプロジェクトは以下のリポジトリに置いていますので、合わせてご確認ください。 https://github.com/taku-hatano/pglite-prisma-test リポジトリ層におけるテストの課題 クリーンアーキテクチャのようなデザインパタ

SaaSプロダクトのKubernetesマニフェスト管理をcdk8s化して運用性・保守性を大幅改善しました

こんにちは、エンジニアの齊藤です。 私が携わっているプロダクトでは、複数の旅行会社向けにSaaSサービスを提供しており、Kubernetes(k8s)でWebアプリケーションやバッチジョブを運用しています。嬉しいことに導入してくださるお客様が増えてきたのですが、各顧客に要求されるリソース量や細かな設定値が異なっているため、顧客数の増加に伴い運用負荷が高まってきて

TypeScriptのgeneratorで再帰的探索をシンプルに実装する

こんにちは、エンジニアの籏野です。 最近、ESLintカスタムルールの開発において、AST(抽象構文木)から特定のノードをすべて抽出してルールを作成したいという要望がありました。 その際に、generatorを活用することで、非常に効率的かつ可読性の高い実装を行うことができたので、その方法を紹介したいと思います。 generatorの基本については既に多くの記事が存在す

AIエージェントワーキンググループはじめました

こんにちは。フォルシア株式会社エンジニアの宮本です。 ChatGPTやコーディングエージェントなどの生成AIがエンジニアリング現場に浸透し、業務効率化に活用する動きが広がっています。しかし「全社的に浸透しているか?」と問われると、まだまだ個人やチームのノウハウに依存しているのが一般的な現状かと思います。 フォルシアでも「AIの活用を前提とした業務変

Next.js App Routerでのi18n対応全部調べてみた

こんにちは、エンジニアの籏野です。 この度、Next.jsのApp Routerを利用したアプリケーションへのi18nの導入方法を調査することになりました。 Pages Routerを利用した場合の導入方法はイメージがつくのですがApp Routerを利用した場合は初めてとなりますので、その方法を調査・比較しました。 なお今回の調査は主に、Localizationの方法に焦点を当てています。 言語毎の出し分け