STORES Product Blog

https://product.st.inc/

こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。

フィード

記事のアイキャッチ画像
Women in Agile Tokyo 2025に協賛します
STORES Product Blog
STORES は、2月4日・5日に開催されるWomen in Agile Tokyo 2025に協賛します。 www.wiajapan.org スポンサートークの紹介 タイトル:STORESのQAチームが開発スクラムに参加して見えてきた成果と気づき 登壇者:Nazuki Kaneko 日時:2月4日(火)14:00〜 場所:ROOM C confengine.com スポンサーブース STORES のブースでは、STORES のconnpassグループメンバーになっていただくと、くじにチャレンジできます。 くじの賞品は、STORES を利用されているオーナーさんの商品です。ぜひブースに遊びに来…
2日前
記事のアイキャッチ画像
開発版のRubyを用いてCIを定期実行する試みとその成果
はてなブックマークアイコン 24
STORES Product Blog
こんにちは。本記事は ykpythemind、mame、 ko1 が共著しています。 今回は開発版のRuby(Ruby head)を用いてSTORESのRailsアプリケーションのCIを定期実行していることと、それによってRuby本体の開発にフィードバックをしていることについてお話します。 モチベーション STORES はRubyを用いて10年選手のRails製アプリケーションを複数開発・運用しており、事業の柱となる技術として大きく投資をしています。 具体的にはRubyのフルタイムコミッター2名がジョインしていたり、RubyKaigiを始めとする各カンファレンスへ協賛をしております。 prod…
2日前
記事のアイキャッチ画像
STORES はRubyKaigi 2025に参加したい学生さんを支援します
STORES Product Blog
こんにちは、id:hogelogです。2025年1月よりSTORES で VP of Engineeringという役職で仕事をしていくこととなりました。(宣伝) VPoEとして始めてのご挨拶ブログがRubyKaigi学生支援告知ブログになるというのもなかなか乙なものですね。 さて、今回はじめての試みとして学生のRubyKaigi参加を支援させていただきます。 チケット代や交通費・宿泊費を負担することなく、カンファレンスに参加いただけます。 本記事では支援の概要と、応募方法を案内させていただきます。 今回ささやかながらRubyKaigi 2025に参加したい学生さんを支援させていただくこととしま…
2日前
記事のアイキャッチ画像
東京Ruby会議12で「混沌とした例外処理とエラー監視に秩序をもたらす」というタイトルで登壇しました
はてなブックマークアイコン 6
STORES Product Blog
STORES でソフトウェアエンジニアをやっております @morihirok です。タイトルの通り先日行われた東京Ruby会議12で登壇しました。 regional.rubykaigi.org 発表資料はこちらとなります。 speakerdeck.com STORES は Sliver Sponsors として協賛させていただきました。 会自体すごく大盛況で、前夜祭から懇親会まで含めてめちゃくちゃ楽しかったです!オーガナイザー、スタッフのみなさま、素晴らしい会を本当にありがとうございました! 今回「Regional.rb and the Tokyo Metropolis」というタイトルで東京圏…
8日前
記事のアイキャッチ画像
技術的負債ではなく庭なのではないか。庭活のすゝめ。【ep.33 #論より動くもの .fm】
はてなブックマークアイコン 12
STORES Product Blog
CTO 藤村がホストするPodcast、論より動くもの.fmの第33回を公開しました。今回はykpythemind(以下、ykpy)とyubrotと、技術的負債ではなく庭なのではないかという話をしました。 creators.spotify.com 論より動くもの.fmはSpotifyとApple Podcastで配信しています。フォローしていただくと、新エピソード公開時には自動で配信されますので、ぜひフォローしてください。 コードベースを自分の庭にする 藤村:こんにちは、論より動くもの.fmです。 論より動くもの.fmは STORES のCTO 藤村が技術や技術じゃないことについてざっくばらん…
12日前
記事のアイキャッチ画像
一括生成された大量のデータを効率的に基盤システムへ送信する設計
STORES Product Blog
はじめに 基盤システムへのデータ送信 コールバックを利用したデータ送信 課題 データ作成のバッチと送信処理を分ける 実装の概要 バッチ処理で作成された事実を記録するテーブルを用意 バッチ処理でのログ記録 コールバック処理 送信バッチ処理 まとめ はじめに こんにちは、mochizukiです。 STORES には、ネットショップ、予約システム、POSレジなど、複数のプロダクトがあります。これらは元々独立して開発されてきたものですが、現在ではサービス間の連携を進め、新たな価値を提供する取り組みを行っています。 詳しくはこちら product.st.inc その中で私が所属するチームでは、各プロダク…
16日前
記事のアイキャッチ画像
東京Ruby会議12に2名が登壇&Silver Sponsorとして協賛します
STORES Product Blog
STORES は、1月18日(土)に開催される東京Ruby会議12にSilver Sponsorとして協賛します。 regional.rubykaigi.org 登壇者の紹介 STORES から2名が登壇します!意気込みを聞きました! 前夜祭(1月17日) 時間:20:20〜 タイトル:An OptCarrot Retrospective 登壇者:mame 「Rubyを3倍に高速化する」というスローガン"Ruby 3x3"のベンチマークプログラムだったoptcarrotは、9年前に開催された東京Ruby会議11で発表したものでした。その後、optcarrotは予想以上に反響を呼び、さまざまな成…
19日前
記事のアイキャッチ画像
Action Mailerに学ぶ闇の魔術と闇の魔術に対する防衛術
STORES Product Blog
はじめに STORES 予約でエンジニアをやっている@ucksです。 大体年内にやりたかったタスクが捌けてきたので空いた時間でブログを書いています。 Railsからのメール送信でお世話になるAction Mailer。 インスタンスメソッドを定義しているのにクラスメソッドから呼び出しをしています。 どの様な仕組みになっているのか不思議に思ったことはないでしょうか。 様々な方法で、OSSのソースコードを追うことがあると思いますが、今回は追い方の一例として、実際のAction Mailerのロジックを追いながら、どの様な仕組みになっているのか、参考になるロジックはあるのかを、探索したり、拡張できな…
1ヶ月前
記事のアイキャッチ画像
ジオコーディングとGeolocation APIを用いて店舗と現在地との距離を計算する
STORES Product Blog
はじめに 初めまして、STORES でエンジニアをしているhiromu617です。この度、STORES では、STORES モバイルオーダーというサービスをリリースしました。 www.st.inc 今回は、STORES モバイルオーダー内に現在地から店舗までの距離を表示してみようと思います。 なお、モバイルオーダーを開発する上での取り組みについて、wanijiさんが紹介されているのでこちらも合わせて閲覧していただけると幸いです。 product.st.inc やりたいこと STORES モバイルオーダーには、注文する店舗を選択するための店舗一覧画面が存在します。 モバイルオーダーの店舗一覧画面…
1ヶ月前
記事のアイキャッチ画像
モノレポでのVSCode Dev Container
STORES Product Blog
STORES 予約 でエンジニアをしている水野です。VSCode Dev Containerを利用すると開発環境のセットアップが迅速化されたり必要なライブラリ、ツールをコード化できたりとメリットが多いため導入している現場も多いかと思います。 STORES 予約 でもVSCode Dev Containerを利用しています。しかし今後モノレポな環境に携わる機会が見えたとき、そういえばモノレポでもVSCode Dev Containerって使えるんだっけ?となったので調べてみました。 Multiple containers モノレポの場合は公式で紹介されているMultiple containers…
1ヶ月前
記事のアイキャッチ画像
AlloyDBを業務システムのバックエンドとして利用するためのアイデア
STORES Product Blog
はじめに fujiuです。この記事ではGoogle CloudのフルマネージドPostgreSQL互換データベースであるAlloyDBについて、業務システムのバックエンドとして利用する方法を紹介します。 AlloyDBはPostgreSQL互換なインターフェースを備えているためOLTPのユースケースにおいて高速にクエリすることができます。 さらに、AlloyDBはカラムナエンジンという仕組みを備えており、これをうまく扱えるようなSQLでクエリすることで、OLAPのユースケースでも使えるようなパフォーマンスを発揮します。 STORES において顧客データを集約し活用することは、事業者さまのビジネ…
1ヶ月前
記事のアイキャッチ画像
モバイルオーダーを開発する中で役立った5つの取り組み
STORES Product Blog
始めに STORES エンジニアの waniji です。このたび STORES では STORES モバイルオーダー というサービスをリリースしました。 www.st.inc 価値の高いプロダクトをスピード感を持って開発するため、チームでさまざまな取り組みを実施してきました。その中でも、特にやってよかったと感じた取り組みを5つ紹介します。 1. リリースフェーズを区切る モバイルオーダーで実現したいことは多岐にわたりましたが、すべてを盛り込むとリリースが後ろ倒しになってしまうため、優先順位を明確にする必要がありました。そのため、リリースまでのマイルストーンとしてリリースフェーズを区切り、そのフ…
1ヶ月前
記事のアイキャッチ画像
GitHub の Sub-issues はいいぞ
STORES Product Blog
GitHub の Sub-issues はいいぞ はじめに こんにちは! STORES でソフトウェアエンジニアをしている @m0nch1 です。 今回は GitHub issues に新しく追加された Preview 機能の1つである Sub-issues について紹介しようと思います。 Sub-issues は GitHub Projects と組み合わせることでより便利に機能するものになっており、GitHub Projects での活用例についても紹介しようと思います。 ちなみに STORES ではバックログの管理に GitHub Projects を活用しているチームが多く、日々活用し…
1ヶ月前
記事のアイキャッチ画像
自動化でスクラムを後押しする
STORES Product Blog
こんにちは。STORES ブランドアプリ のバックエンドエンジニアをしているotariidaeです。2024年4月に新卒入社して初めてブログを書きます。 リモートワーク環境下でのスクラムイベントの課題 みなさんはスクラムをやっていますか?透明性・検査・適応を日々実践していますか? 私が所属するチームでも開発プロセスとしてスクラムを採用しています。 また STORES ではリモートワーク中心の働き方になっており、社内の多くの会議はオンラインで行われています。スクラムイベントも例外ではありません。 スクラムイベントをオンラインで実施する上で重要なことは何でしょうか? そうですね、わいわいスレですね…
1ヶ月前
記事のアイキャッチ画像
Oktaの SMS/音声認証終了に対応しました
STORES Product Blog
こんにちは、コーポレートエンジニアの伊藤(ito2)です。 今回は、先日対応した Okta のSMS/音声認証の停止について書いていきます。同様のケースを検討される際の参考になれば幸いです。 以下、前置きです。 私は、PX 部門 IT 本部コーポレートエンジニアリンググループに所属しています。 PX は、人事、採用、労務、広報、社内IT からなる部門で、人事はプロダクト開発と同じ、従業員と考えるのではなく、ユーザーと捉えようという考えから「People Experience(PX)」と名乗っています。社内 IT についても同じ文脈で活動しており、ユーザー体験を重視するメンバーが集まっています。…
1ヶ月前
記事のアイキャッチ画像
スクラム開発で行った改善の話
STORES Product Blog
はじめに こんにちは、STORES のエンジニアの takeuchi です。 私が現在所属しているチームは2024年の春に新規に編成され、現在まで新規プロダクトの開発に取り組んできました。 このチームでは、スクラム開発を採用しています。2週間スプリントごとにスプリントゴールを設定し、そのスプリントゴールの達成を目指しプロダクト開発を前進させています。 本記事では、私たちのチームのスクラム開発の概要と、スプリントを重ねながらチームで改善してきたことについて紹介します。 スクラム開発の概要 スクラムイベント スクラム開発は、短い開発サイクル(スプリント)を通じて計画・作業・振り返りを繰り返すソフト…
1ヶ月前
記事のアイキャッチ画像
KMP / CMPを使った新規プロダクトの開発
STORES Product Blog
このたび STORES では STORES モバイルオーダー というサービスをリリースしました。 www.st.inc 名前からも想像できるように、店頭から離れた場所からもスマートフォンでテイクアウト注文できる特徴をもったサービスです。 注文するお客様にとって、移動中に注文をして待ち時間を短縮できるとても利便性が良いサービスですが、お店にとっても行列を見てお客様が返ってしまう機会損失をなくしたり、電話を使わずに新規の注文を受け付けられるなどメリットがあります。 では、お客様が注文したオーダーをお店の方はどのように把握し、調理を開始するのでしょうか。また、調理が終わったら、どのように受取に来てほ…
1ヶ月前
記事のアイキャッチ画像
プロと読み解くRuby 3.4 NEWS
STORES Product Blog
プロと読み解くRuby 3.4 NEWS テクノロジー部門技術基盤グループの笹田(ko1)と遠藤(mame)です。Ruby (MRI: Matz Ruby Implementation、いわゆる ruby コマンド) の開発をしています。お金をもらって Ruby を開発しているのでプロの Ruby コミッタです。 本日 12/25 に、恒例のクリスマスリリースとして、Ruby 3.4.0 がリリースされました(Ruby 3.4.0 リリース )。今年も STORES Product Blog にて Ruby 3.4 の NEWS.md ファイルの解説をします(ちなみに、STORES Adven…
1ヶ月前
記事のアイキャッチ画像
STORES レジ のビルド時間を改善したかった話
STORES Product Blog
こんにちは! STORES レジ の開発をしている iOS / Android エンジニアの @satoryo056 です。 今回は STORES レジ のビルド時間を短縮するために実験したことを紹介します。 STORES レジ について STORES レジ (以下、レジアプリ)は iPadOS 専用のモバイルアプリで、実店舗とネットショップの商品・在庫・売上の管理をしたり実店舗(オフライン)でのお会計をすることができます。 最近は 予約システムとの連携機能を実装 したり、長年課題だった技術的負債の改善 に取り組んだり、プロダクト監視の時間 を設けたりと開発面・運用面でアップデートを続けていま…
1ヶ月前
記事のアイキャッチ画像
enableEdgeToEdge のデフォルト引数を理解しよう
STORES Product Blog
こんにちは、naberyo(@error96num)です。今年4月に STORES へ入社し、 STORES ブランドアプリ のAndroidエンジニアをしています。 Androidエンジニアのみなさま、アプリのターゲットSDKは35に上げましたか? もし上げたなら、エッジツーエッジ対応もお済みでしょうか? Android 15 (SDK 35) 以降をターゲットとするアプリでは、画面の端から端までコンテンツが描画される「エッジツーエッジ」がデフォルトで適用 されるようになりました。この変更は、没入感あるUXを実現する素晴らしい機能ですが、対応を間違えると思わぬ落とし穴にはまる可能性があります…
1ヶ月前
記事のアイキャッチ画像
Passkeyの作成・取得に関するWebAuthn APIの重要オプション解説
STORES Product Blog
はじめに こんにちは!@m11oです。 この記事はSTORES Advent Calendar 2024の17日目の記事です。今回はWebAuthn APIにおけるPasskeyの作成・取得に関する主要なオプションを網羅的に解説しようと思います。 というのも、自分がPasskeyを実装した際に、WebAuthn APIのドキュメント以外でまとまった記事が見つからず、試行錯誤したり、色々な人に教えてもらったりしながら、苦心して実装しました。 なので、この記事ではオプション一つひとつの役割や返ってくるデータを明示することで、実装時の参考にしていただければ嬉しいです。 想定読者 これからPasske…
1ヶ月前
記事のアイキャッチ画像
STORES 決済から別の現場に異動した話
STORES Product Blog
はじめに こんにちは。 @nannanyです。 この記事はSTORES Advent Calendar 2024の12/20の記事です。 2024年の4月より、STORES 決済 のバックエンド開発を離れ、STORES内の別プロダクト開発に従事してきました。 現場移行に伴ってやったこと、変えたこと、感想などを綴り、STORES で働くイメージ喚起につながればと思いこの記事を執筆しました。 経緯 STORES ではネットショップ・予約システム・キャッシュレス決済・POSレジ・ブランドアプリ・ロイヤリティ・データ分析、といった複数のプロダクトを運営しています。 私自身は2021年の5月から STO…
1ヶ月前
記事のアイキャッチ画像
Goのテストで GraphQL APIサーバのE2Eテストを書く方法
STORES Product Blog
はじめに こんにちは、STORESの高田です。 STORES には Go で実装した GraphQL API サーバがあり、そのプロジェクトでは Go のテスト内で E2E テストを行っています。今回はそのテスト方法についてご紹介します。 実装例 今回の E2E テストは CI でも実行したいため、再現性のある安定したテストであることが求められます。 少し工夫する必要がありますが、テスト対象となるサーバのポート確保時に、エニーポートを指定して動的にポートを割り当てることで安定したテストを実現できます。 以下のコードのように、 TestMain 内での net.Listen("tcp", "lo…
1ヶ月前
記事のアイキャッチ画像
実装漏れをテストで防ぐ仕組み
STORES Product Blog
実装漏れをテストで防ぐ仕組み STORES 予約 で Web エンジニアをしている osd です。 実装漏れの問題はプロダクト開発の中でも根本的な解決が難しい問題の一つだと思っていて、その問題を解決する一例として「複製機能の実装漏れを防ぐ仕組み」についてお話しします。 予約ページとは STORES 予約 では、予約受付の設定が区切られる予約ページという概念が存在します。予約ページでは 価格の設定 支払い方法の設定 担当スタッフの設定 予約受付時間の設定 などの設定を行うことができ、よく機能追加や改修が行われる箇所の一つです。 予約ページトップ 複製機能とは 複雑な設定値を持つこともあり、設定漏…
1ヶ月前
記事のアイキャッチ画像
STORES レジにおけるSwift6移行対応
STORES Product Blog
この記事は STORES Advent Calendar 2024 の16日目の記事です。 はじめに こんにちは、STORES レジ でアプリ開発している @nekowen です。 STORES のモバイルプロダクトは STORES レジ 以外に「STORES ブランドアプリ」「STORES 決済」「STORES 予約」が存在しますが、今年の下期から各プロダクトで Swift6 に移行する取り組みを行なっています。 本記事では STORES レジ で取り組んでいる Swift6 移行対応についてかんたんにご紹介します。 実施計画と見積もり 🤔 レジアプリは SwiftPM を用いたマルチモジュ…
1ヶ月前
記事のアイキャッチ画像
新卒1年目を振り返る!
STORES Product Blog
こんにちは! STORES 決済 Androidチームのchukaです。 こちらはSTORES Advent Calendar 2024 16日目の記事です。 気がつけば12月ももう終わりですね。 2024年は私が新卒として STORES に入社し、たくさんの初めてに直面した1年でした。 せっかくなので、この1年で経験したことについて振り返っていきたいと思います! QRコード決済 STORES 決済 は、今年11月11日に「PayPay」などの20種類以上の主要QRコード決済に対応しました!🎉 www.st.inc こちらのQRコード決済プロジェクトに、入社して1~2ヶ月頃から携わらせていただ…
1ヶ月前
記事のアイキャッチ画像
GraphQLの @oneOf ディレクティブの活用事例
STORES Product Blog
STORES でバックエンドエンジニアをしている片桐です。 みなさんはGraphQLの@oneOfというディレクティブをご存知でしょうか? このディレクティブは、GraphQLの標準仕様においてBuilt-in Directivesへの追加が検討されている新しいディレクティブです。 RFC: https://github.com/graphql/graphql-spec/pull/825 今回 STORES のプロダクトで実際に導入してみたので、このディレクティブの具体的な使用例と使用してみて気づいたことを紹介します。 @oneOf ディレクティブとは? @oneOf は input に対して…
1ヶ月前
記事のアイキャッチ画像
go-cmp/cmp/cmpopts のオプション活用事例
STORES Product Blog
はじめに こんにちは、STORESの高田です。 今回は github.com/google/go-cmp/cmp のオプションの中から、実際のテストコードで使用頻度の高いオプションについてご紹介します。 基本的な使い方 cmp パッケージ用の汎用的なオプションは cmpopts package - github.com/google/go-cmp/cmp/cmpopts - Go Packages で提供されています。以下のように cmp.Diff() への引数として使うことができます。 t.Run("...", func(t *testing.T) { ... opts := cmpopts…
1ヶ月前
記事のアイキャッチ画像
net/http/httptest でHTTPクライアントをテストする方法
STORES Product Blog
はじめに こんにちは、STORESの高田です。 今回は net/http/httptest でHTTPクライアントをテストする方法についてご紹介します。 外部サービスのクライアントを含めたテストを実装する際には net/http/httptest を使うと、外部依存を排除しつつ再現性のあるテストを書くことができます。 基本的な使い方 テストの一例として、 Refresh token を用いて Access token を取得する箇所での使い方を見ていきます。 使い方は以下の通りで、httptest.NewServer でテスト用のHTTPサーバを作成します。func NewServer(han…
2ヶ月前
記事のアイキャッチ画像
Dependabotを活用してライブラリのアップデートを効率化
STORES Product Blog
はじめに こんにちは、STORESの高田です。 今回は Dependabot を用いてライブラリのアップデートに追従する方法についてご紹介します。 プロジェクト開始時に見落とされがちな物のうちの一つに、ライブラリのアップデートがあると思います。途中から更新に追いつこうとすると気が思い作業になるので、早めに設定しておくと後々苦労せずに済みます。 アップデート方針を決める アップデート方針はチームに合うように調整すると良いと思いますが、今回は以下の方針で設定します。 ライブラリのアップデートにはできるだけ工数をかけない セキュリティアラートは可能な限り早く対応する Dependabot の設定 D…
2ヶ月前