STORES Product Blog
https://product.st.inc/
こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。
フィード

fastlane match の内部実装を活用して複数の iOS 開発者証明書の期限を一括チェックする方法
1

STORES Product Blog
STORES ブランドアプリチームで iOS エンジニアをしている榎本 ( @enomotok_ )です。 STORES ブランドアプリは、オーナーさんが自分のお店専用のアプリを作成できるサービスです。そのため私たちのチームでは、各オーナーさんのアプリを日々定期的にアップデート・リリースしています。現在運用しているアプリは数十個にのぼり、それぞれが異なるオーナーさんの App Store Connect の“組織”に紐づいているため、開発者証明書はアプリごとに存在します。 複数の開発者証明書を管理していると、全ての有効期限を管理するのは困難です。今回は、 fastlane match *1 の…
3日前

2025年上半期 STORES エンジニアの登壇まとめ
1

STORES Product Blog
こんにちは、技術広報のえんじぇるです。 登壇塾という登壇支援のワーキンググループがあり、エンジニアのみんなが社外で発信することを奨励しています。2025年上期は23のカンファレンス・イベントに32名(ユニーク)が登壇しました。そのうち5名は3回以上登壇していました。驚き。 各登壇の詳細をご紹介します。 1/17-18 東京Ruby会議12 1/24 Findy Team+ エンジニア組織を成功に導く"マネジメント"の重要性「組織の潜在力を最大化する取り組みとは? 1/30 2025クラウドガバナンスはこう変わる!マルチアカウント運用のre:Invent最新情報と活用例 2/4 Women in…
12日前

STORES は iOSDC Japan 2025 に参加したい学生さんを支援します
STORES Product Blog
みなさまこんにちは、STORES モバイル開発本部の @huin です。 Google I/O や WWDC25 も終わり、みなさまこれから出てくる新OSのキャッチアップ・対応に追われている日々かと思います。ワクワクしますね! 今年の WWDC25 は Liquid Glass や Foundation Models Framework の発表など、目玉となるものがとても多いアタリ年だったように思ってます。 がしかし、これを全部 キャッチアップするのは大変。。。。 そんな時にありがたいのが技術コミュニティですよねってことで、最新の技術やディープな知見があつまる iOSDC Japan 2025…
19日前

Personal Access Tokenを撤廃!セキュアなプライベートパッケージレジストリを自作プロキシで解決した話
STORES Product Blog
こんにちは、STORES 技術推進本部のid:atponsです。普段はSTORESの技術的な課題の解決や改善、パブリッククラウドの運用などを担当しています。 今回は、開発者体験を損なっていたプライベートパッケージレジストリのトークンの運用を見直し、セキュアで簡単な認証の仕組みをリバースプロキシの自作で実現した話を紹介します。
23日前

RubyのPathnameライブラリが本体組み込みになったらGC周りのテスト失敗がおきた
STORES Product Blog
こんにちは。ruby-devチームの遠藤(@mametter)です。 次期バージョンのRubyでは、pathnameがRuby本体組み込みとなり、require "pathname"なしで利用可能になる予定です。 Rubyで書き捨てスクリプトを書いてる自分のような人は地味にうれしいかもしれません。 Feature #17473: Make Pathname to embedded class of Ruby - Ruby - Ruby Issue Tracking System さて、pathnameの組み込みがマージされた直後、非常に興味深いバグが発生しました。 今回はそのデバッグの経緯を技…
24日前

「Ruby on Rails の楽しみ方」への高橋会長のレビューコメント
STORES Product Blog
STORES エンジニアの morihirok です。 先日サポーターズさん主催の勉強会「技育CAMPアカデミア」にて、学生の皆様に向けてSTORES社が講義をさせていただきました。 テーマは「『なぜ今 Rails を学ぶべきなのか』Ruby on Rails から学ぶ Web アプリケーション開発実践」ということで Ruby と Ruby on Rails についていろいろな切り口からお話をさせていただきまして、私も「Ruby on Rails の楽しみ方」と題して Ruby on Rails がWebアプリケーション開発の歴史においてどのような意味を持ち、どのように学び、楽しむとよいかとい…
1ヶ月前

関西Ruby会議08 参加レポート
STORES Product Blog
こんにちは、Webエンジニアのima1zumiです。2025年6月28日に開催された関西Ruby会議08に参加しました。この記事では参加レポートと、参加したメンバーからの感想をお届けします。 関西Ruby会議は、関西で定期的に開催されているプログラミング言語Rubyに関する技術カンファレンスです。今年で8回目で、京都府京都市の先斗町歌舞練場という会場で開催されました。風情ある素敵な会場でした! 会場前にずらりと並べられたスポンサーののぼり 普段は鴨川をどりの会場ですが、今日は関西Ruby会議の会場。 2階には桟敷席もありました 以下は参加したメンバーの感想です。 感想 ima1zumi 印象に…
1ヶ月前

STORES 予約の契約管理をZuoraに移行しました
STORES Product Blog
はじめに こんにちは。 STORES でエンジニアをやっている asibi3Q です。 週末は山に登って下界から離れる生活を送っています。 今回は去年1年を通して、STORES 予約の契約管理をサブスクリプション管理 SaaS である Zuora に移行した話について書きます。 移行の背景 STORES には多くのプロダクトが存在しますが、元々は別々の会社で作られたプロダクトで契約管理方法も異なります。 そのため、 プロダクト毎に請求方法やオペレーションが異なることで、オペレーションコストや開発コストが大きい 請求業務の属人化と手作業の多さによる人的リソースの負担増加 といった運用上の課題が多…
1ヶ月前

新規のRailsアプリケーションにPitchforkを導入しました
STORES Product Blog
こんにちは、エンジニアのima1zumiです。私たちのチームでは、STORES の新規プロダクト開発においてRackアプリケーションサーバとしてPitchforkを選定しました。本記事では、その選定背景、具体的な設定内容や運用上の知見をまとめてご紹介します。 なお、本記事執筆時点ではPitchforkの大きな特徴であるrefork機能は導入していません。 Pitchfork選定の背景と理由 Pitchforkとは Pitchforkは、Shopifyが開発・メンテナンスを行っているRackアプリケーション用のHTTPサーバです。広く利用されているUnicornをベースとしたフォークであり、pr…
1ヶ月前

BigQuery→Slack通知をテンプレート化してみた
STORES Product Blog
こんにちは、データ本部のssxotaです。STORESでデータ基盤の保守開発を担当しています。 今回は、BigQueryから集計したデータをSlackで通知する仕組みをテンプレート化し、通知内容の追加や更新を容易にできるようにしたので紹介します。 これまで、BigQueryからのSlack通知は、Argo Workflowsを利用して実行されていました。ワークフロー内でBigQueryにクエリを発行し、結果を文字列に加工してSlack APIを呼び出すことで、社内の経営指標を日次で通知する仕組みが動いていました。 Slack通知構成図 今回、こちらの記事でも紹介しているスタンダードプランの開始…
1ヶ月前

新卒1年目の振り返り
STORES Product Blog
新卒2年目のエンジニアのmaseです。 1年目が終わり気づけば3ヶ月経ってしまいましたが、新卒1年目でやったことを振り返っていこうと思います! 私は、内定者アルバイトで入社してから2024年12月まで STORES 予約 のチーム配属で開発を行い、2025年1月からはプロダクト統合に関わるチームで開発を行っています。 1年間を通して本当にいろいろなことを学ぶことができました。その中でも特に印象深いものについて書いていきます! STORES 予約 : 外部APIの仕様変更に伴う改修 初めてチームで設計からリリースまでしっかり関わることになったプロジェクトでした。 この開発では、リリースに向けて責…
1ヶ月前

Goで作られたシステムをRuby on Railsに移植しています 〜GraphQL編〜
STORES Product Blog
STORES でエンジニアをしている片桐です。 先日、「Goで作られたシステムをRuby on Railsに移植しています」という記事を投稿させていただきました。 product.st.inc product.st.inc ベース部分の実装について別ブログで紹介したいと書かせていただきましたが、今回はその中から「GraphQLの移行基盤としてのGraphQL Stitchingの導入」について紹介させていただきます。 GraphQL Stitching の導入 GraphQL Stitchingの実現には、すでに弊社内で採用実績のある graphql-stitching gemを利用します。 …
1ヶ月前

STORES 決済 と PCI DSS (1) 現状と効率化 - 情報の集約と管理
STORES Product Blog
こんにちは。セキュリティ本部の soh です。 昨年から STORES 決済 の PCI DSS 対応 を、バックエンドエンジニアやコーポレート IT エンジニアとともに担当しています。 私自身、初めて PCI DSS 対応を担当する中でさまざまな知見を得ることができ、また改善点も発見することができました。 本稿では、その中でも、 STORES 決済 の PCI DSS 対応における現状と、管理上の効率化の取り組みについてご紹介します。
1ヶ月前

Cloud Run + IAP で Lightdash をホスティングしてみた
STORES Product Blog
はじめに \コンニチハ/ STORES株式会社でアナリティクスエンジニアをやっているk-0120です。突然ですが、BIツールって何を使われてますか?STORES では現在 Metabase という BIツールを利用しています。GUIによるクエリ生成や各種ビジュアライゼーションなど、所謂BIツールに必要な機能は網羅されているのですが、非エンジニアが自走して使うには JOIN や GROUP BY の概念を理解する必要があり、ややハードルが高いという印象があります。 そこで、より直感的にデータを扱え、dbtとの親和性も高いLightdashというBIツールに注目し、まずは検証環境を構築してみること…
1ヶ月前

multi-xcodeproj + xcworkspace 構成移行の実践
STORES Product Blog
multi-xcodeproj + xcworkspace 構成移行の実践 はじめに xcodeproj とは? xcworkspace とは? この記事で解決すること 背景と課題 STOERS レジ の当初の構成 Build Configuration Stagingで起こっていた問題 Swift Packageの制約 具体的に何が起きるのか? SwiftUI Previewの問題 ビルド速度の問題 その他の問題 multi-xcodeproj + xcworkspace 構成 考え方 構成の全体像 xcworkspace の役割 複数xcodeprojに分けるメリット 1. Swift P…
1ヶ月前

Goで作られたシステムをRuby on Railsに移植しています 〜データベース編〜
STORES Product Blog
STORES でエンジニアをしている片桐です。 先日、「Goで作られたシステムをRuby on Railsに移植しています」というブログを投稿させていただきました。 product.st.inc ベース部分の実装について別ブログで紹介したいと書かせていただきましたが、今回はその中から「複数データベースの設定」について紹介させていただきます。 作業の全体像 移植先のシステムから移植元のシステムのデータベースを扱えるようにするに当たって、行わなければならない作業は大きく3つありました。 移植先システムから移植元システムのデータベースにアクセスできるようにインフラ構成を変更する。 移植先システムに移…
1ヶ月前

Compute Engineで安全・手軽なRails console環境を構築する
STORES Product Blog
こんにちは、エンジニアのokuboです。このブログでは、Rails console用のサーバをCompute Engine上で安全かつ手軽に運用する手法をご紹介します。 モチベーション 現在STORESでは、いくつかのRailsアプリケーションをGoogle CloudのCloud Run上で稼働させています。 Cloud Runはその仕様上SSH接続ができないためrails consoleが利用できません。 開発・運用効率の向上のために何とかrails consoleが使いたいと考えましたが、スタンダートと言えるほどの手法がなく、手探りでいくつかの選択肢を出して検討しました。 web con…
1ヶ月前

モバイルオーダーの予約システムで複雑な時間の計算を集合演算で解決した
STORES Product Blog
こんにちは、Webアプリケーションエンジニアのsomeziです。 皆さんは予約システムをつくったことはありますか?私は現在モバイルオーダーを開発しており、その中で時間を指定せずに最短で受け取れるように注文する「即時注文」と、あらかじめ決められた時間に受け取るように注文する「予約注文」をつくりました。 本記事では、即時注文と予約注文を実装する際に「このパターンでこの時間注文できるんだっけ??」と何度も混乱した経験から、時間の集合演算というアプローチでリファクタリングすることで技術的に乗り越えた話を紹介します。 ※世間一般でイメージする予約システムとはちょっと違いますが、広義の意味では予約システム…
1ヶ月前

BigQuery MCPサーバーを作ってみる
STORES Product Blog
はじめに はじめまして。 データ本部でデータエンジニアをやっている@takaHALです。 最近、MCP(Model Context Protocol)を活用した様々なツールが登場し、ClaudeやCursorなどのAIツールでできることが急速に拡大していますよね。 今回は、MCPへの理解を深めるため、実際にMCPサーバーを作ってみることにしました。弊社STORESではデータウェアハウスとしてBigQueryを使用しているので、BigQueryにアクセスできるMCPサーバーの実装に挑戦します。 今回作るもの 作成するMCPサーバーでは、最終的にClaudeDesktopから以下の3つの操作ができ…
1ヶ月前

数字を動かすチームになるために──現在地と目的地の見える化
STORES Product Blog
はじめに こんにちは、STORESの西村(@jnishimu)です。 STORES(ストアーズ)では、2025年3月から、キャッシュレス決済・POSレジ・ネットショップ・予約システム・モバイルオーダーなどを “まとめて” 使える新しいプラン「スタンダードプラン」を開始しました。これに伴い、「このプランを世の中の中小事業者の“スタンダード”にしていく」という大きな目標のもと、2025年4月から社内の横断プロジェクトが立ち上がりました。 マーケティング、セールス、カスタマーサクセス、プロダクトマネージャー、エンジニアといった多職能のメンバーが連携しながら進めていくこのプロジェクトにおいて、私たちデ…
1ヶ月前

ブランドアプリの ID 基盤移行に向けた Cookie 管理の仕組みの実装
STORES Product Blog
はじめに こんにちは。STORES ブランドアプリで Android エンジニアをしている Yuto Koguchi (@10llip0p) です。 STORES では現在 ID 基盤の統一に取り組んでおり、複数のプロダクトへ共通のアカウントでログインしてシームレスに利用できる体験を目指しています。 私が担当するブランドアプリにおいても今年からこの新しい ID 基盤への移行に取り組んできました。 STORES の ID 基盤とセキュリティ観点 STORES では Open ID Connect (OIDC) に準拠した ID 基盤を自前実装しており、様々なプロダクトやサービスに導入を進めていま…
1ヶ月前

ViewModel での複雑な状態管理への処方箋
STORES Product Blog
こんにちは!Android エンジニアの naberyo(@error96num)です。 私が現在開発に携わっている STORES モバイルオーダー では、モバイルオーダーから入った注文を飲食店のキッチンで管理するための「キッチンディスプレイアプリ」をネイティブアプリとして提供しています。*1 本記事では、このキッチンディスプレイアプリの ViewModel をリファクタした話について共有します。 背景 ─ 機能追加による UI のリッチ化 キッチンディスプレイアプリには、モバイルオーダーで入った注文を一覧表示する機能があります。これまでは即時注文(今すぐ受け渡す注文)しか扱わなかったため、画…
1ヶ月前

Goで作られたシステムをRuby on Railsに移植しています
STORES Product Blog
STORES でエンジニアをしている片桐です。 STORES では店舗運営に関するさまざまなプロダクトを提供しています。これらのプロダクトは元々別の会社で運営されてきた完全に異なるプロダクト群で、アカウント体系から全く異なるシステムになっていました。近年はこれらのシステムを本格的に統合する取り組みを進めてきており、その中で統合のためにいくつかのシステムが新たに作成されてきました。 ある程度統合が進み、うまくいったところ・いかなかったところが見えてきた中で、これまでに作ったシステムの技術選定・システムの役割に対する課題感が見えてきました。 現在弊社ではこの課題を解決していくプロジェクトを進めてい…
1ヶ月前

EC・POSレジのプラン購読の仕組みをZuoraに移行した話
STORES Product Blog
はじめに はじめまして。STORES でエンジニアをやっている id:shu-suzuki-1124 です。 競馬では例年より早く宝塚記念が開催されたため春のG1もすべて終わり、新馬戦や夏競馬が本格的に始まってきました。 未来への可能性に期待膨らむ新馬戦、波乱万丈で刺激的な夏競馬、私はG1も好きですがこの季節もまた別の趣があってとても好きです。 思えば私が STORES に入社したのも去年の夏頃でした。そして STORES で働いたこの1年はまさしく未来に胸踊らせつつ刺激的な1年だったと感じています。 なのでこの1年に郷愁を感じつつ、その中でも今年の1~3月で参画した STORES ネットショ…
1ヶ月前

約30行でできる!Jetpack Composeで作るサイン画面
STORES Product Blog
はじめに こんにちは! STORES 決済 でAndroidアプリの開発をしているchukaです。 最近は美味しいパンを食べることにハマっています。 美味しいパン屋さんを知っている方は、ぜひ教えてください 🥐 🍞 🥖 🥯 Jetpack Composeでサインをしよう みなさんは、クレジットカードでの支払い時にサインを求められた経験はありますか? STORES 決済 でも、クレジットカードで決済されたとき、アプリ上でサインをしてもらう場合があります。*1 でも、Jetpack Composeでサイン画面を作るのってなんか難しそう・・・と思いませんか?(私は思っていました) 実はそのサイン画面、…
1ヶ月前

PCI DSS v4.0 に準拠するために CSP レポート分析基盤を構築しました
STORES Product Blog
STORES 技術推進本部の id:atpons です。普段は STORES 全体の技術課題をいい感じにしたり、パブリッククラウドの管理、運用をしています。 今回は STORES ネットショップで PCI DSS v4.0 に準拠するにあたり必要となった CSP レポートの分析システムについて、さまざまな検討を行った結果、内製することにした経緯を紹介します。 CSP レポートとは Content Security Policy(CSP)は、Web サイトのセキュリティを向上させるためのセキュリティ機構です。CSP ヘッダを設定すると、ブラウザ上で読み込まれるリソース(スクリプト、スタイルシート…
1ヶ月前

プロダクト開発と伴走するデータ活用
STORES Product Blog
はじめに こんにちは。STORES株式会社でデータアナリストをしています、satoyuです。 STORESでは2025年3月に新たな料金プランを発表・リリースしました。またリリースに合わせて、事業者がSTORES製品を使い始める際のオンボーディングフローを統合しました。これにより、各製品ごとの開設オンボーディングが不要になり、1つのSTORES製品として利用開始できる環境が整いました。 しかし、新しいオンボーディングフローの導入により、以前と比較して体験が悪化していないか、オンボーディング中に事業者の離脱がないかなど、プロダクトリリース後の評価において考慮すべき点が複数生じました。 このような…
1ヶ月前

セッションストアをValkey Serverlessへ移行してみたら、パフォーマンスもコストも大きく改善した話
STORES Product Blog
こんにちは、技術推進本部のシムです。 今回は最近実施したセッションストアのValkey Serverless移行について、なぜ移行を決めたのか、実際の移行プロセスや成果、運用で得られた知見を紹介します。 ここでのセッションストアとは STORES ネットショップの本体は Rails で動いており、該当アプリケーションのセッションストアを指します。 元々は MemoryDB (with Redis OSS) をストレージとして利用しており、該当クラスタにはセッションに関係するデータも一部追加で保存されておりました。 なぜ Valkey Serverlessに移行したのか? ここには Server…
1ヶ月前

STORES アカウントにsidを導入しました
STORES Product Blog
こんにちは。エンジニアのokuboです。このブログではSTORES アカウントのsid導入およびsidを利用したBack-Channel logoutの実装について、実際の開発現場での課題や仕様、実装例、得られた知見を紹介します。 モチベーション STORESは複数の独立したサービスで構成されています。事業者様は、同一のSTORES アカウントでこれらのサービスにログインし、サービス間を遷移しながら日々の業務を行っています。 STORES アカウントによる認証機能は、STORESが自社開発しているID基盤システムによって提供しています。 STORES アカウントでは、サービス間を移動する際にロ…
1ヶ月前

Webhook の重複処理実行を回避してシステムの信頼性を高める
STORES Product Blog
こんにちは、STORES ブランドアプリ や STORES ロイヤリティ の開発をしている ta-chibana です。 STORES では複数のサービスが通信しあうことで実現される機能が多くありますが、STORES で開発されたプロダクト同士の連携に限らず、Shopify などの外部サービスと連携する機能も存在します。 本記事では STORES での Shopify 連携で実装した Webhook の重複処理実行を回避する仕組みについて紹介します。 なお、STORES での Shopify 連携においては shopify_app gem を利用しているため、その前提での実装例となります。 W…
1ヶ月前