TECH PLAY

フォルシア

フォルシア の技術ブログ

241

はじめに こんにちは、フォルシア SRE ユニットの高嶋です。 本記事では、AWS Organizations と AWS Config を利用した複数アカウントのリソース監視についての一例をご紹介します。監視の実現にあたっては、 Config アグリゲータという複数アカウントの AWS Config 設定や評価情報を集約してくれる機能を利用しています。大変便利な機能なのですが、集約した情報を利用して通知をするなど発展的な利用法に関する情報が少なく苦労したため、似たようなことを実現したい方の助けとなることを期待してこの記事を執筆をします。 AWS Organizations とは h
アバター
こんにちは、フォルシア株式会社エンジニアの宮本です。このたびCodeQUEEN2024というイベントに参加し、優勝することができました。この記事では当日のコンテストを振り返ります。 また、今年もフォルシアではCodeQUEENに協賛しスポンサー活動を実施しました。記事の最後ではスポンサーとして出題したクイズの解答も掲載したのでご覧ください。 昨年のブログ : https://www.forcia.com/blog/002760.html CodeQUEENとは? CodeQUEENは、AtCoder株式会社と合同会社AlgoParadeが共催する 女性向けプログラミングコンテス
アバター
こんにちは、エンジニアの瑠東です。 エンジニアは誰しもデプロイに困ったことが一度はあるのではないでしょうか。 OSやミドルウェアのバージョンアップデート・インストールをしたいが、自動で全て行う方法はないか ローカルに環境構築を行いたいが、npmコマンドなどをひとつひとつ叩かないといけない 追加・修正したコードをサーバーに反映したいが、手動でsymlinkを張りなおさないといけない 誰かがサーバーに一時ファイルを大量につくりディスク容量を圧迫しているため、デプロイ時に消すことはできないか 今回は、そんなデプロイ時に困っていることをすべて自動化してくれる技術を紹介する記事です。 フォ
アバター
こんにちは、エンジニアの籏野です。 アプリケーション開発において、テストを書くということは非常に重要です。 テストを書く際の一つの指標としてカバレッジを計測することがあると思います。 弊社でもカバレッジの計測を行っているのですが、モノレポ構成のプロジェクトでプロジェクト全体のカバレッジを計測したいという要望がありました。 プロジェクト内に存在する複数のパッケージ/アプリケーションそれぞれでのテスト実行・カバレッジ計測はできていたのですが、プロジェクト全体のカバレッジ計測は行ったことがなかったので今回調べました。 テストランナーにはvitestを使用しており、vitestのWorkspac
アバター
はじめに こんにちは、エンジニアの長谷です。 最近社内でPostgreSQL拡張をRustで実装しているのですが、世の中でもRust製のPostgreSQL拡張がいろいろと開発されているようです。 今日はその中の1つParadeDBをご紹介します。 ParadeDBとは ParadeDBとはElasticsearchのような機能を持つPostgreSQL拡張で、Rustで実装されています。 似たような拡張としてはZomboDBがありますが、こちらはあくまでElasticsearchの導入が前提でPostgreSQLとElasticsearchを連携するような機能であるのに対し、P
アバター
この記事は、Visual Studio Code(以下「VS Code」といいます)でできるだけターミナルを使わないで開発する方法を紹介する記事です。 ターミナルを使わない理由 VS Codeはターミナルを内蔵しており、VS Codeを離れることなくコマンドを使って作業できることが便利とされていますが、初学者の方はコマンドを覚えていなかったり、ターミナルでの作業に慣れていなかったりすると思います。ですので、この記事ではVS Codeを使って便利に作業する方法をご紹介します。実際の開発の流れに沿って紹介します。 できるだけターミナルを使わないVS Codeでの開発方法 Gitの
アバター
まえがき エンジニアの吉田です。 このブログのタイトルを見て記事をご覧になった方は言うまでもなく常日頃よりexplainコマンドの結果とにらめっこする生活を送っていることと推察しますが、PostgreSQL(以下postgres)の実行計画について「完全に理解した」と言える人は果たしてどれくらいいるでしょうか。 かくいう私も「ここでSeq Scanが走っているんだな」「ここはNested Loop Joinになっているんだな」「ここはパラレルに実行されているんだな」程度の極めて浅い見方しかできていない、というのが実情になります。 本稿はそんな我々の実行計画に対する理解を深めるべくpo
アバター
概要 ベクトル検索データベースを利用するにあたり、 PostgreSQL + pgvector は有力な選択肢の1つに挙げられると思います。 pgvectorがサポートするインデックスアルゴリズムは一般的で信頼性の高いものですが、近似最近傍探索アルゴリズムは近年でも新しい手法の提案が頻繁に行われている分野であり、そういった新手法をPostgreSQL向けに実装した野心的な拡張機能も存在します。 本稿は、新しいベクトル検索用拡張のひとつである VectorChord の紹介と、簡単な性能検証を試みるものです。 PostgreSQLのベクトル検索拡張 ! 本項の内容は筆者の見聞による
アバター
こんにちは、エンジニアの籏野です。 最近、弊社エンジニアが社内向けに書いた記事で「ある関数を実行したときに捕捉すべきエラーをどのように知ればよいか?」という問いを投げていました。 この問いに対する回答として、いわゆるResult型の利用を提案してくれていたのですが、これが個人的にとても興味深いものでした。 私自身最近はRustを触っていることもあり、なんとなくResult型の存在は認識していたのですが、どのようなメリットがあるのかといったことについてはあまり理解していませんでした。 そんな中で、「関数を実行したときに捕捉すべきエラー」を型を通じて可視化するというアプローチは大変学びになり
アバター
こんにちは、エンジニアの籏野です。 フォルシアの API 開発では OpenAPI 定義を利用し、TypeScript の型定義や各種ソースコードを自動で生成していることがあります。 最近は型の生成にopenapi-typescript、フロントエンドで利用する API クライアントにopenapi-fetchを利用する機会が増えてきました。 openapi-fetch を利用する場合、クエリ/パスパラメータ―や JSON.stringify できるようなボディパラメーターについては特に気にすることなく利用が可能なのですが、ファイルのアップロードを行う場合にどのようにすればよいかがわから
アバター
はじめに はじめまして、こんにちは。 フォルシアの基盤技術部でエンジニアをしている太田と申します。 突然ですが、みなさまはスマホ、デジカメ等々で写真を撮ることは多いでしょうか? 写真をよく撮られる方にあるあるのお悩みの一つに「あの写真どこ?」となることがあるかと思います。 今回はそんなお悩みが解決するような「文章による画像検索機能」を作成してみました。 キーワード画像検索機能について 今回の機能を作成するにあたって、基本機能やいくつかの要件を設けました。 機能概要 ブラウザ上で入力された検索キーワードの内容に対し、感覚的に「近い」画像を表示する機能。 単語ではなく「○○の×
アバター
こんにちは、エンジニアの籏野です。 近年のフォルシアのアプリ開発は Node.js を中心としたエコシステムの恩恵を多く受けながら行われています。 モジュールとしてアプリで利用するだけでなく、便利な CLI などもたくさん存在しており、ちょっとした困りごとが簡単に解決できる場面も多いです。 今回は開発を進める中で CLI を自作しようかなと思う場面があり、基本的な CLI の作り方について調べました。 よく見る「watch モード」も搭載してみましたので紹介します。 利用するモジュール 今回は以下の 3 つのモジュールを利用しました。 ※ TypeScript を利用していますので、
アバター
こんにちは、エンジニアの水野です。 普段我々エンジニアが用いるOSには様々な種類があります。 フォルシアでは主に、Windows標準のLinux環境であるWSLや、VirtualBoxのUbuntuを用いて開発しています。 Linuxの操作には様々なコマンドを駆使しますが、頻繁に使うもの以外は忘れてしまったり、応用方法が狭まってしまうのもまた事実。 フォルシアの現役エンジニア社員はどのようなコマンドを駆使しているのでしょうか? 今回は頻出のコマンドから、それらを組み合わせ調査時に大活躍する「FORCIA的便利なワンライナー」までを簡単に紹介します。 業務で頻出!基本コマンドいろいろ
アバター
概要 フォルシアではアプリのリポジトリ管理のために、社内に GitLab のインスタンスを立てて運用しており、開発は GitLab の MR(Merge Request) の作成 → チームメンバーからのレビューというサイクルで行われています。 レビューの際、特に見た目の変更を伴う修正が入る場合には自分のローカル開発環境に開発ブランチを持ってきてアプリを立ち上げる必要が出てきます。 レビュー対象が増えてくると、ブランチを切り替えていくのもなかなか大変なので、もう少し簡単にレビューができないだろうかということで試してみました。 方針 タイトルの通りですが、以下のような方針とします。
アバター
こんにちは、エンジニアの松川です。 普段我々エンジニアがコードを書く際に欠かせないのがコードエディタの存在。 そのなかでも Microsoft が提供する VSCode は現在最も人気のあるコードエディタの一つです。 VSCode の強みは何といってもその拡張機能の豊富さです。標準機能では物足りなくなったときも 54000 [1] もの拡張機能が強力にコーディングをサポートしてくれます。 ただそれほど数が多いと最初は何を入れればよくわからないのもまた事実、そこで今回は現役でエンジニアとして活躍するフォルシア社員にオススメの拡張機能を聞いて 10 個に厳選しましたので、紹介いたします。
アバター
こんにちは、エンジニアの澤田です。 最近、社内でRustで書かれたプログラムを見かけることが増え、社内ライブラリにRustが導入されたりなど、社内でRustを使う気運が高まっているのを感じ、自分もRustを勉強してプログラムを書いてみよう!と思いました。 自分の業務に近いところでRustを使うのによさそうなテーマを考えたとき、前回書いた記事「 Haskellで階層化されたリストを1次元リストのリストに展開する 」ではXMLからデータを取りだすところができていなかったので、それをRustでやってみようと思います! ※rustc と cargo はバージョン 1.74.0 を使用しています。
アバター
こんにちは、エンジニアの籏野です。 近年のフォルシアでの API 開発では Web フレームワークとしてExpressを利用することが多くあります。 また、開発言語には TypeScript を採用しており、型に守られた安全な開発を目指しています。 型安全な API 開発を進める上では、リクエストされたパラメーターをバリデーションし適切な型付けを担保することが必要になってきます。 このために最近はzodを使う機会が増えてきたのですが、Express と zod を組み合わせて使う際に少々ハマった点があったので、その解決方法を紹介します。 もしかしたら Express 以外の Web フレ
アバター
はじめに・ユニット紹介 児山 祥 2023年新卒入社 2023年8月素材登録プロダクトにJOIN 関連記事:https://www.forcia.com/blog/002730.html はじめまして。エンジニアの児山と申します。 新卒でフォルシアの旅行プラットフォーム部旅行技術3-2ユニットに配属され、三ヶ月ほど経ちました。 本ユニットでは、「良いプロダクト開発」を実践するために様々な取り組みを行っていますが、今回はその取り組みについて、ユニットメンバーにお聞きしていきます! その前に、まず私から本ユニットで扱う素材登録というプロダクトと本ユニットについて軽く紹介します。 フ
アバター
TypeScript プロジェクトのコンパイルのボトルネックを調査・解消してみた話 はじめに こんにちは。エンジニアの辻󠄀です。 私は社内のとある TypeScript プロジェクトで開発業務を行っていました。 ある日、新たに関数の実装を追加しようとしたその時、tsserver(TypeScript の language server)による補完候補がなかなか表示されないことに気づいたのです。 どうやら、コンパイルの時間が非常に長くなっていたことが原因のようです。 この記事では、tsc のコンパイルにおけるボトルネックを調査する方法と、そこで適用した2つの改善方法について紹介しま
アバター
はじめに フォルシアの高速検索を支える重要な技術のひとつである PostgreSQL には標準でも様々な関数が用意されていますが、独自にユーザ定義の関数をC言語で用意することも可能です。 C言語は処理が高速であることがメリットでありますが、一方で往々にしてコードが難解になりがちです。また、私も含め若いエンジニアはそもそもC言語にほとんど触ったことがないことも多いと思います。 そこで、今回は実際に手を動かしながら PostgreSQL で動作するC言語関数を実装するための課題を作成しました。これらの課題は先日社内の勉強会で実際に使用したものです。 事前準備として、PostgreSQL
アバター