kickflow Tech Blog

株式会社kickflowのプロダクト開発本部によるブログ

DevinでOpenAPIスキーマを自動生成したお話

社内AIにお願いして描いてもらったAIとOpenAPIのイメージ

こんにちは。kickflow エンジニアの芳賀と申します。
AIエンジニア界隈、すごく盛り上がっていますよね。
私としてもお仕事がなくなってしまうのではないかと戦々恐々としております(笑)

そんな中、弊社にも Devin ちゃんがジョインしております。
本記事ではDevinを開発で活用した事例についてご紹介します。

続きを読む

ActiveRecordによるクエリを監視しファイルに出力する

大型バイクを押しがけしている
トラブルが起きたとき、昔ながらの方法が役立つこともある

Wayne Truong from Houston, TX, CC BY 2.0, via Wikimedia Commons

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

Bulletは何の問題点も検出しないが実際に動かすと何故か遅い

Rails業界ではBulletなどのクエリの問題点を検出するツールが普及していますが、それらも万能ではありません。時には生のクエリログが解決の糸口になることがあります。

普通にRailsアプリケーションを作ると、development環境では以下のようなクエリログが出力されるようになっています。

例:

  CACHE User Load (0.0ms)  SELECT "users".* FROM "users" WHERE "users"."tenant_id" = '6fa44ea2-cbbd-4901-980b-abbe3e0f66cc' AND "users"."id" = '4344b765-595e-4ee7-bf91-a627cbfce622' LIMIT 1
  MonthlyActivityLog Load (6.5ms)  SELECT "monthly_activity_logs".* FROM "monthly_activity_logs" WHERE "monthly_activity_logs"."tenant_id" = '6fa44ea2-cbbd-4901-980b-abbe3e0f66cc' AND "monthly_activity_logs"."year" = 2025 AND "monthly_activity_logs"."month" = 3 AND "monthly_activity_logs"."user_id" = '4344b765-595e-4ee7-bf91-a627cbfce622' LIMIT 1 /*action='show',application='Kickflow',controller='tenant'*/
  ↳ app/controllers/api/v1/user_controller.rb:4:in 'Api::V1::UserController#show'
  ↳ app/models/monthly_activity_log.rb:47:in 'MonthlyActivityLog.create_log'

しかし、標準のクエリログは、

  • 人間が読むためにフォーマットされているため機械的に処理しにくい(JSONでくれ!)
  • log/development.log に他ログと一緒に出力されるので、クエリログを発見しにくい。
  • 全てのアクションのログが1ファイルに出力される(調べたいのは特定の重いアクションだけなのだ。)

という問題があります。そこで、この記事ではクエリログをJSON形式で出力する方法を説明します。

続きを読む

ネストしたトランザクション

こんにちは、プロダクト開発本部の渡辺です。
先日、山を走るレースをしてきました。冬の山はとにかく服装のレイヤリングが重要です。気をつけていたものの、ベースレイヤーに綿素材のインナーを着てしまい、身体が冷えてお腹を壊してしまいました。
何かを重ねる時、それぞれの特性や役割を意識する重要性を感じて、この記事を書いてみました。

概要

新しい機能を追加する際に、バックエンド側で非同期の処理を実装しました。 その処理の中で既存のサービスオブジェクトを呼び出す箇所があり、トランザクションがネストする状況が発生しました。 ActiveRecordのトランザクションがネストした時に、どういう扱いになるかが曖昧な状態だったので調べてみました。

TL;DR

  • ActiveRecordではネストしたトランザクションを親トランザクションの一部として扱う
  • ネストしたトランザクションの内側で明示的にActiveRecord::Rollbackをしてもロールバックしない
  • ネストしたトランザクションの内側でエラーが起こった時に、全体をロールバックするには親トランザクションにエラーを伝播する必要がある
  • ネストの内側だけロールバックしたい場合はrequires_new: trueを指定し、サブトランザクションだけロールバックする
続きを読む

kickflowのプロダクト開発の2024年を振り返る

こんにちは、CTOの小林です。今年のM-1グランプリも最高でしたね!

さて、2024年も残り僅かということで、今日は2024年のkickflowのプロダクト開発をプロダクト・組織・技術など各観点で振り返ろうと思います。個別のリリース内容や技術を深堀りするよりは、全体を広く浅く紹介する記事になります。もっと詳細が知りたいと思った方は、ぜひエンジニア採用のカジュアル面談にご応募いただければと思います(←いつもの宣伝です)。

続きを読む

oxlint を触ってみた

oxc のアイコン

こんにちは。kickflow エンジニアの芳賀と申します。
Vue Fes Japan 2024 、多いに盛り上がりましたね。
私自身楽しみつつも大いに収穫があるものとなりました。

特に印象に残っていたのが oxc でした。
エコシステムの拡充が進みつつ、みんなが一度は思い描いてたであろう 「Rust でツールチェインを書く」ことを実現されています。

今回はその中でも oxlint について触ってみましたので、
oxc も含めてご紹介できればと思います。

続きを読む

Kaigi on Rails 2024 に行ってきました

Kaigi on Rails 2024

プロダクト開発本部の渡辺です。 先日の「Vue Fes Japan 2024」に続き、「Kaigi on Rails 2024」にも参加しました。 kickflowでは、エンジニアの自己学習を積極的に支援しており、さまざまなカンファレンスに参加する機会を提供しています。 会社の制度を最大限に活用させていただいております。

続きを読む

Vue Fes Japan 2024 に行ってきました

社内AIに描いてもらったVue Fes Japan 2024のイメージ図

初めまして、プロダクト開発本部の渡辺と申します。
kickflowに入社して数ヶ月が経ちました。
日々の業務で多くのことを学び、充実した毎日を送っています。

今回は「Vue Fes Japan 2024」というカンファレンスに参加したので、そのレポートをまとめようと思います。
kickflowもスポンサーとして協賛しており、当社ではフロントエンドにNuxt 3を使用しているため、今回のカンファレンスは多くの学びが得られると期待していました。

続きを読む