kickflow Tech Blog

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

社内ドキュメントに対応したSlack AIボット(GPT-4o搭載)を開発した話

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

ChatGPTをはじめとした生成AI、便利ですよね。素のChatGPTでも十分に便利なのですが、業務で使うには社内ドキュメントにも対応して欲しいと誰もが思うのではないでしょうか。すでにOpen AIのAPIを使って社内ドキュメントに対応したAIボットを開発している事例は多数ありますが、kickflowでも社内用AIボットを開発して社員に展開しました。今日はこのAIボットのアーキテクチャや実装についてご紹介します。

続きを読む

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がどのように立ち向かっていったかをご紹介します。

続きを読む