kickflow Tech Blog

株式会社kickflowの開発チームによるブログ

JavaScriptで文字列の長さを正しくカウントする

文字列の長さをカウントするのは難しい

こんにちは、CTOの小林です。

JavaScriptで文字列の長さをカウントする際、特にサロゲートペアや合字を含む場合には注意が必要です。この記事では、String.length[...str].length、およびIntl.Segmenterを使用して文字列の長さを正しくカウントする方法について説明します。

続きを読む

Active Storageのダイレクトアップロードのパフォーマンスチューニング

こんにちは。エンジニアの森本です。

kickflowでは、申請するチケットに対してファイルを添付することができます。これらをActive Storage のダイレクトアップロードを使って実現しています。 以前からファイルを大量に添付したチケットを申請すると、タイムアウトが発生してしまう問題がありました。APMサービスを見てみると、ファイルをダウンロードしている処理がありました。 今回は、ダイレクトアップロードを利用していてファイルを大量にアップロードしたときにタイムアウトが発生しないように行った工夫を共有したいと思います。

続きを読む

kickflowでのRow Level Security導入: 成功事例と実装ガイド

プロダクト開発本部の小本です。

kickflowでは2024年2月から RLS / activerecord-tenant-level-security を導入しています。RLSは安全なSaaSを開発するために必須の機能なのですが、やや複雑な機能であり、新入社員は困惑する事が多いようです。そこで、RLSの概念とkickflowでの使い方を概説します。

続きを読む

Elasticsearchのインデックス切り替えを無停止で行えるようにしました

こんにちは。エンジニアの森本です。

テキストでの全文検索はどのような仕組みを利用されていますか? kickflowでは、全文検索エンジンとしてElasticsearchを使っています。これまでは、1つのインデックスで検索を行っていたため、マッピングの変更時にダウンタウンが発生してしまう問題がありました。そのため、マッピング変更時には計画メンテナンスを設けてインデックスの再作成を行っていました。しかし、データ量が増え続けていること、これからもインデックスのマッピング変更が発生することを考えてメンテナンス期間を設けずにインデックスの再作成が行える仕組みを導入しました。

どのような仕組みを導入したのかをご紹介したいと思います。

続きを読む

Nuxt 3への移行がもうすぐ終わりそうです

こんにちは、CTOの小林です。年々歳をとるにつれて、1年がどんどん短く感じるようになってきました。12月なんて体感で3日くらいしかないような気がします。

「師走」ということで、Stable Diffusionで生成した「走る師匠」の画像

kickflowではこの1年は通常の機能開発と並行して、Nuxt 2から3へのバージョンアップを行っていました。本格的な移行作業は今年の10月ぐらい始めたのですが、移行のための調査や事前準備はNuxt 3がリリースされた2022年の11月から開始しているので、1年以上かかった長期プロジェクトとなります。今日はNuxt 3へのバージョンアップにkickflowがどのように立ち向かっていったかをご紹介します。

続きを読む

「JSON Schemaを知っている」人のための今どきJSON Schemaの紹介記事

ナヌークサウルスの復元図
最近はティラノサウルス科恐竜には羽毛があったとするのが定説(本文には関係ありません)

こんにちは。株式会社kickflow・プロダクト開発本部の小本です。

最近、「設定をJSONファイルとしてエクスポート・インポートする機能」を実装する際にJSON Schemaをウン年ぶりに使いました。その際、私のJSON Schema観がジュラ紀のまま止まっていたことに気づいたので、最新のJSON Schemaにどんな機能が追加されているか、触りだけ紹介します。

続きを読む