Social PLUS Tech Blogのフィード
https://zenn.dev/p/socialplus
株式会社ソーシャルPLUS 開発チームの技術ブログです。
フィード

Renovate で Terraform 管理の EKS クラスターとアドオンのバージョンを自動更新する
2
Social PLUS Tech Blogのフィード
こんにちは、tsub です 😄Terraform で EKS クラスターを管理している場合、アドオン(kube-proxy、vpc-cni、CoreDNS、EBS CSI ドライバー)のバージョン管理が課題になることがあります。弊社ではこれまで、アドオンのバージョンを Terraform aws provider の aws_eks_addon_version datasource で動的に取得していました。この方法は常に「推奨バージョン」を参照するため、新しいバージョンがリリースされるたびに terraform plan のドリフトが生じます。日を跨いでからリリースすると、ドリフト...
5日前

Vitestの設定を調整してテスト速度を改善してみる
Social PLUS Tech Blogのフィード
どうもこんにちは、たくびーです。業務のかたわらフロントエンドのテスト速度改善に取り組んでいます。先日はボトルネックとなるバレルファイルを特定し解消することで高速化を行いました。https://zenn.dev/socialplus/articles/bfb19c5f98ae32今回はちょっと違うアプローチでテスト速度の改善に挑戦してみました。!執筆時点でのVitestのバージョンはv4.1.5です。 コードベースが大きくなるほどVitestが遅く感じる?Vitestは高速なテストランナーとして知られています。実際、Jestと比べてかなり速いです。それでも、コードベー...
12日前

Redash の Query Result をパラメータ付きで参照する
Social PLUS Tech Blogのフィード
Redash v10.1 より後(おそらく v25 系から)利用できるようになった、Query Results Data Source (QRDS) のクエリパラメータ指定を含む呼び出しの使い方について、2026/05/18 時点の公式ユーザーガイドでは、単純な整数値(id)の指定方法の例しか無いため、複数指定の方法を雑に[1]確認したメモ記事です。-- 参照するクエリ(Query 12345)-- Query Parameters を出力するだけのクエリSELECT "{{DATE1}}" AS date1, "{{DATE2}}" AS date2, "{{DATE...
14日前

AIが1000行書くより、人間が1行レビューするほうが難しい
Social PLUS Tech Blogのフィード
最近、AIでコードを書くのがかなり普通になってきた。Cursor や Claude Code みたいなツールを使えば、数分で数百行〜数千行のコードが出てくる。実際かなり便利だし、自分も日常的に使っている。ただ最近、OSS や会社の現場を見ていて感じるのは、「コードを書く速度」より「コードベースを維持する能力」のほうが重要になってきているということ。 AI が怖いのは「バグ」ではないAI のコードって、意外と普通に動く。テストも通るし、型も合うし、一見ちゃんとして見える。でも本当に怖いのはそこではなくて、よく分からない abstraction が増える...
20日前

プロダクトバックログを一列に並べたらシンプルになった
Social PLUS Tech Blogのフィード
「自分たちのプロダクトバックログが複雑すぎてわからん」という問題を改善しました。 改善前今まで使っていたプロダクトバックログには、次のような9つの状態(以下、status と呼びます)がありました。基本的には、この順序で status が進んでいきます。Draft:下書きUI required:デザイン待ちBacklog:要件とデザインが確定したWaiting for refinement:リファインメント待ちIn refining:リファインメント中Refined:リファインメント済みReady:次のスプリントで着手するつもりIn progress:このスプリン...
24日前

RubyKaigi 2026 参加レポート
Social PLUS Tech Blogのフィード
はじめにこんばんは、 okumud です。先日 RubyKaigi 2026 へ参加してきました。弊社は本年も Gold Sponsor として協賛し、 simomu, terandard, otsubo, masaki, 私 の 5人で参加しました。 また、グループ会社の feedforce から pokotyamu も参加しました。https://prtimes.jp/main/html/rd/p/000000167.000085682.htmlこの記事ではそれぞれ印象に残ったセッションについて紹介します。 印象に残ったセッション Guide to g...
1ヶ月前

Rails 8.0 から except_on オプションで「このコンテキストではバリデーションをスキップしたい」が書けるようになった
Social PLUS Tech Blogのフィード
Rails 8.0 から except_on オプションで「このコンテキストではバリデーションをスキップしたい」が直感的に書けるようになりました。修正は以下で行われています。2021年10月に作成されたプルリクエストなので要求自体は結構前からあったようです。https://github.com/rails/rails/pull/43495以下のように、バリデーション定義時に except_on オプションを使用できるようになります。class Post < ApplicationRecord validates :title, presence: true, excep...
1ヶ月前

pnpm v10 へのアップグレードで Vercel ビルドが失敗した話
Social PLUS Tech Blogのフィード
こんにちは、steshima です。ソーシャル PLUS のフロントエンドでは、パッケージマネージャーに pnpm を使用しています。先日、その pnpm のバージョンを v9 から v10 にアップグレードしたところ、Vercel 上でのビルドが失敗するようになりました。原因や対応内容を備忘録として残しておきます。 発生したエラービルド失敗時、Vercel では下記のビルドログが出力されていました。Detected `pnpm-lock.yaml` 9 which may be generated by pnpm@9.x or pnpm@10.xUsing pnpm@9...
1ヶ月前

AI 任せにできない。Bad / Good で整理するリネームのパターン
Social PLUS Tech Blogのフィード
こんにちは、あるいはこんばんは。まっくすです。今日は私がよく指摘されるリネームについて書こうかと思います!コードを書いていると、名前を変えたくなる場面はよくありますよね?一見するとリネームは簡単そうに見えますが、単なる文字列置換では終わらないことが多いです。 この記事で扱うリネームのパターンこの記事では、リネームを次の5つのパターンに分けて考えます。表記ゆれを揃えるリネーム意味の変化に追従するリネーム型の変更に伴うリネーム利用側の命名も揃える必要があるケース仕様変更に伴うリネーム 命名は難しい命名が難しいのは、単に識別しやすい名前をつければよいわけではない...
1ヶ月前

画面遷移前の“すき間時間”でボタンがクリックできてしまっていた話
Social PLUS Tech Blogのフィード
こんにちは、ずっきーです!フォーム送信時にボタンを非活性(disabled)状態にしても、画面遷移前の短い時間にボタンがクリックできてしまう問題がありました。原因と対策法について深掘りしていこうと思います。 問題の概要ログインフォームで「次へ」ボタンを押すと API を呼び出し、リクエスト成功後に別ページへリダイレクトする実装でした。const onSubmit = async (values: FormValues) => { try { await fetch('/sample', { method: 'POST', body:...
2ヶ月前

job-iteration gem から Active Job Continuation に移行した
Social PLUS Tech Blogのフィード
こんにちは、terandard です。Ruby on Rails 8.1 から Job を中断・再開できる Active Job Continuation という機能が追加されました。この機能を利用すると、長時間実行される Job がデプロイなどによって中断された場合でも、再開して続きから実行することができます。https://railsguides.jp/active_job_basics.html#ジョブの継続この機能は job-iteration gem から着想を得て実装されたものです。This took a lot inspiration from Shopify's...
2ヶ月前

社内勉強会「Social PLUS Tech Talk」の紹介
Social PLUS Tech Blogのフィード
こんにちは、simomu です。今日は Social PLUS 社内で開催している勉強会「Social PLUS Tech Talk」の紹介をします。 Social PLUS Tech TalkSocial PLUS Tech Talk は2週間に1回、開発チームの中から当番の人が最近触った技術や勉強したことなどを発表していく技術勉強会です。「技術勉強会」と称していますが、技術に限らずマネジメントやチームビルディングに関する話も OK になっています。もともとは同じグループ会社の Feedforce 社で行われていた社内勉強会を Social PLUS 社でもやっていきたいと...
2ヶ月前

k6-operator on Argo CD でワンクリック実行可能な負荷試験環境を構築する
Social PLUS Tech Blogのフィード
概要弊社では、スパイク耐性などを検証するため、k6 による負荷試験環境を Kubernetes 上に構築しています。この記事では 「Argo CD の GUI からワンクリックで負荷試験が走る」 仕組みをどう実装したかを紹介します。 前提条件本記事では以下のバージョンを前提としています。Amazon EKS (EC2) 1.33Argo CDImage v3.3.3Helm Chart 9.4.10k6-operatorImage v1.2.0Helm Chart 4.2.0k6v1.6.1 k6 の実行方法と管理方法の検討k6-...
2ヶ月前

MySQL (InnoDB) の INSERT 時のロックを深掘る
Social PLUS Tech Blogのフィード
はじめにhttps://zenn.dev/socialplus/articles/2e16da32f39a0cの続きです。前のブログでは、UPDATE、DELETE、 SELECT ... FOR UPDATE / SHARE のロックを主に紹介しました。そして INSERT 時のインサートインテンションロックがギャップロックを待つことでファントム行のアノマリーを防止すると書きました。本記事では INSERT 時に獲得される インサートインテンション以外の ロックを紹介します。INSERT 時のロックは獲得の仕組みが複雑で、再現が難しいことがあります。特に INSERT ......
3ヶ月前

ShopifyアプリのインストールフローをManaged Installに移行した話
Social PLUS Tech Blogのフィード
はじめにこんにちは、masaki です。現在ソーシャルPLUS では CRM PLUS on LINE という Shopify アプリを開発し、公開しています。CRM PLUS on LINE は一言でいうと、「SNS連携機能やLINE配信機能をShopifyストアに組み込めるアプリ」 です。詳しくは以下をご覧ください。https://crmplus.socialplus.jp最近、このアプリの Shopify ストアへのインストールフローを、従来の認可コードフローから 2024年1月に Shopify が発表した Managed Install へ移行しました。htt...
3ヶ月前

【ActiveRecord】 inverse_of の自動推論によって別モデルが返ってきた話
Social PLUS Tech Blogのフィード
こんにちは、st-1985 です。先日、「あるモデルの設定値が増えてきたので別モデルとして切り出す」という作業を行いました。その際に切り出したモデルを取得しようとすると別のモデルが取得されるという現象に遭いました。調べていくと原因は自動設定された逆関連付け(inverse_of)と別モデルの関連付けと重複しているというものでした。本記事では上記について書いていこうと思います。 背景:設定値が増えてきたので別モデルへもともと以下のようなSiteとそれに紐づく機能に対する設定のモデルがありました。class Site < ApplicationRecord ha...
4ヶ月前

教えるから助けへのシフト
Social PLUS Tech Blogのフィード
エンジニアの仕事において、私たちは日々「教え、教えられる」環境にいます。しかし、技術の進化が加速し、正解のない問いが増えている今、単なる「ティーチング(教えること)」だけでは限界が見え始めています。今、私たちが意識的にシフトすべきなのは、「教える」から「助ける」への転換です。一見似ているこの2つには、決定的な違いがあります。「教える」と「助ける」の構造的な違いまず、この2つのスタンスを整理してみましょう。項目教える(Teaching)助ける(Helping)関係性先生と生徒(上下関係)共に立ち向かうパートナー(並列関係)答えの所在教える側が既に...
4ヶ月前

TanStack Query v5で廃止された refetchPage の代替実装
Social PLUS Tech Blogのフィード
こんにちは、koyablueです。最近TanStack Queryのv4 → v5へのアップデート作業を行いました。その際、useInfiniteQueryのrefetchPageというオプションが廃止されており、v4までの「ページを選別してリフェッチする」という挙動をどう置き換えるべきか、いろいろと調査が必要になりました。この記事ではその調査内容と代替実装をまとめます。 useInfiniteQueryとはTanStack Queryが提供するフックで、無限スクロールや「もっと読み込む」など、ページを追加取得して積み上げていくタイプのUIを実装したい場合に使用されます。 ...
4ヶ月前

Argo CD の Pull Request Generator で構築している PR ごとのプレビュー環境の運用改善
Social PLUS Tech Blogのフィード
こんにちは、tsub です 😄弊社では以前から Argo CD の ApplicationSet と Pull Request Generator を使ってバックエンドリポジトリの PR 単位で独立した環境をデプロイできるプレビュー環境を構築しています。Pull Request Generator を使うと PR 単位で Argo CD Application を作成・削除できるためプレビュー環境の実装に非常に便利ですが、一方でバックエンドリポジトリの PR の状況に依存するため、インフラリポジトリの Kubernetes マニフェストを変更する際に、マニフェスト差分を CI で確認...
4ヶ月前

長時間 Job に対して job-iteration gem を利用した話
Social PLUS Tech Blogのフィード
okumud です。 はじめにRails で CSV 取り込みや外部 API 連携などの 長時間かかる Job を書いたことがある方は多いと思います。処理対象が少ない場合は問題なく動いている Job が、大量の処理を行ったときに以下のように落ちる経験はないでしょうか。デプロイ時に Job が中断されるJob 中断後、最初からやり直しになる弊社でもまさにこの問題に悩まされていました。本記事では、Rails 8.1 にまだ移行していない環境でも使える job-iteration gem を使って、 「中断されても困らない Job」を実装した話 を紹介します。Rails ...
5ヶ月前