SODA Engineering Blogのフィード
https://zenn.dev/p/team_soda
株式会社SODAの開発組織がお届けするZenn Publicationです。 是非Entrance Bookもご覧ください! → https://recruit.soda-inc.jp/engineer
フィード

購入フローのテスト組合せ爆発対策で形式検証に入門した
SODA Engineering Blogのフィード
購入フローが抱えている課題購入で起きた変更障害を分析したところ以下のような傾向が見られた。購入フローにおいて取りうる状態やアクションが組合せ爆発しておりテストしきれず、実際にマイナーな組み合わせで障害が起きることが多い購入フローはユーザの決済を挟むことなどにより、TXが何段にも分離・分岐する。改修時にTX単体のテストはできているが、 TX間の契約(事前条件・事後条件)がうまく噛み合わず取りこぼして終端に辿り着かず障害になるというケースが多いまず実際の購入の状態遷移を分析して図示してみる。ノードが状態、エッジがアクション(API, バッチなど)を表す。この図からもいくつかの...
5日前

購入/決済のACIDを守るための冪等性のお話
SODA Engineering Blogのフィード
TL;DR「他人に提供する機能には冪等性を持たせましょう」 この記事で学べること冪等性とは何か、何の役に立つのか、どう実践するのか購入と決済の(それぞれ異なる)難しさACIDのうちA(原子性)、C(整合性)について 冪等性とは何か?下記AWSの資料が参考になるREL04-BP04 すべての応答に冪等性を持たせる by AWS Well-Architected Framework「リクエストが最初に完了したときに返された応答と同じ応答を返します。」 どんな時に冪等性が必要か?REL04-BP04 すべての応答に冪等性を持たせるのタイトル通り要するに「すべ...
1ヶ月前

SODA における Devin の活用事例
SODA Engineering Blogのフィード
はじめにこんにちは。SODA でスニーカーフリマアプリ「スニダン(SNKRDUNK)」のフロントエンドを開発している浅原(@assa1605)です。フロントエンドを再構築する Frontend Rebirth というチームに所属していて、Vue で書かれた既存サイトを Next.js へリプレイスしています。SODA では AI エージェントの活用が全社的に進んでおり、その一環として自律型 AI エンジニア「Devin」も各チームの開発フローに組み込まれています。エンジニアだけでなく、非エンジニアのメンバーも Devin に依頼して開発を進めています。エンジニアチームでは Git...
1ヶ月前

Flutter 3.44:Material が "外部パッケージ" になる話と、それに向けた準備
SODA Engineering Blogのフィード
概要Google I/O 2026のFlutter 3.44アップデートにて、MaterialおよびCupertinoライブラリのFlutter SDKコアからの分離が発表された(What's new in Flutter 3.44 - Flutter 公式ブログ)。これまで package:flutter/material.dart は Flutter SDK に同梱されており、pubspec.yaml への記載なしで使用できた。今後は material_ui / cupertino_ui として pub.dev 上の独立したパッケージとなり、他のサードパーティパッケージと同様...
1ヶ月前

runcのコンテナ起動処理を理解する〜CにできてGoにできないこと〜
SODA Engineering Blogのフィード
結論コンテナとはNamespace付きの隔離されたプロセスのことであるが、「このプロセスを起動する親プロセスはシングルスレッドでなければならない」というLinuxの制約がある。Goは常にマルチスレッドで動作するので、この制約に引っ掛かり、コンテナを起動することができない。そこでruncではGo runtimeが起動する前に実行される特別なCGoコンストラクタを登録することでバイパスしている。実際のプログラム: libcontainer/nsenter/nsenter.go結論は以上であり、以下は背景からの解説をする。 runcとは?runcはコンテナ技術のうち最重要な技術...
3ヶ月前

購入・決済のDDD/モジュール化で考えたこと(実践で迷ったこと編)
SODA Engineering Blogのフィード
What?下記2つの続編となります。未読の方は先にそちらをご覧ください。https://zenn.dev/team_soda/articles/164cee7da76490https://zenn.dev/team_soda/articles/16b742f8a58c45今回の記事は、SNKRDUNKに実際にDDD・モジュラモノリスな購入・決済を実装しようとしてみて、迷いがあったところや、原則を敢えて破ったところを紹介する。汎用的な設計論は前回までに展開しており、今回はかなり実践的な話をする。 先に総論購入は決済システム(PSP)の制約を強く受けるので、購入の設計には、...
3ヶ月前

購入・決済のDDD/モジュール化で考えたこと
SODA Engineering Blogのフィード
この記事についてSNKRDUNKの購入処理が非常に複雑度の高いモノリスとして実装されていた。変数のライフサイクルが長い。変更による副作用が怖い処理が長すぎてテストが書きにくい各処理の責任・所有が不明。処理の全貌を把握できる人が実質いない手続き的。正常に購入できている状態がどのようなものかが分かりにくいそこで、「購入」およびそれに依存される手続きをドメインごとにモジュール・サービスに切り出してカプセル化するということを行った。今回は「購入」「決済」にフォーカスして、その過程で検討したことを紹介する。 (1) 決済を購入から分離する購入処理の中で最も複雑で依存度の...
3ヶ月前

Flutter 3.41 へのアップデートで対応したことまとめ(SceneDelegate移行・依存競合解消など)
SODA Engineering Blogのフィード
はじめにスニーカー・トレカなどの C2C マーケットプレイス「スニーカーダンク」を Flutter で開発しています。定期的に実施している Flutter バージョンアップの時期がやってきたので、今回の対応内容をログとして残しておきます。アップデート先は 3.41.4 で、対応を開始した時点での最新 stable です。アップデート元は 3.35.2 なので、いくつかのマイナーバージョンをまたぐ形になります。 3.35.2 → 3.41.4 間の主な破壊的変更この間の破壊的変更一覧のうち、実際のアプリ対応で影響が大きかったのは以下の 2 点です。UISceneDele...
3ヶ月前

ECサイトの購入・決済システムの設計で考えたこと
SODA Engineering Blogのフィード
What?SNKRDUNKではDDD/モジュラモノリスな決済システムを開発中である。この過程で決済の設計をゼロベースで考えているので、検討したこととその結果を書いていく。今回は以下について議論する。payment集約をどう設計するかwebhook受信のアーキテクチャリコンサイルをどう設計するか (1) Paymentドメインモデルの設計Paymentドメインモデルの設計について述べる。ポイントとしては、決済処理を完遂するのに必要な情報は支払い手段(クレジットカード、アプリ決済、コンビニ決済など)によって異なる。結論としては、「支払い手段によらない共通で必要な情報...
3ヶ月前

スニダンWebのトップページをリニューアルした話
SODA Engineering Blogのフィード
こんにちは。Frontend Rebirth(フロントエンドを再構築していく) チームの mz30 です。私たちのプロジェクトでSNKRDUNK(以下、スニダン)Webのトップページをリニューアルしたので、取り組んだ内容を書いていこうと思います!移行したトップページのリンクはこちらです! 前提・背景スニダンWebのトップページをリニューアルすることになった前提・背景です。リニューアルにあたって、技術面・プロダクト面双方での課題・目的が存在していました。技術面モノリス(Vue.js)からNext.jsへのリプレイス適切なフロントエンド設計に基づいた実装にする。...
4ヶ月前

[Frontend Rebirth] コンポーネント設計篇 - Server 層を足した話
SODA Engineering Blogのフィード
こんにちは。Frontend Rebirth(フロントエンドを再構築していく)チームの Maple です。前回の記事では、私たちが採用したアーキテクチャの全体像と、コロケーション原則を中心とした設計思想についてお伝えしました。その中で軸になっていたのが、Container / Presentational という古典的なコンポーネント設計のパターンです。今回はその続編として、App Router への乗せ替えのタイミングで、Container / Presentational の 2層構成に Server 層を 1段足し、3層構成へと再設計した話をお伝えします。ここで言う「Serv...
4ヶ月前

Claude Code MAXプランだけで情報収集エージェントを構築する
SODA Engineering Blogのフィード
背景LLMを使った情報収集エージェントはAIエージェントアプリとしてすぐ思いつくものだが、それがClaude Code Maxサブスクプランだけで構築できるようになっていたので記録しておく 作ったもの国内外のテックブログのトレンドを収集して内容をサマリして通知。https://github.com/t-morisawa/news-schedule 技術Claude Code Routines(スケジュール)を使うhttps://code.claude.com/docs/ja/routinesClaudeのCloud上でスケジュールタスクを実行可能GitHub...
4ヶ月前

MagicPodで自動修復するステップを自動修復しないステップに作りかえる
SODA Engineering Blogのフィード
!この記事は2026/04/14時点でのMagicPod自動修復機能についての言及です。今後のアップデート次第では標準の機能として、自動修復OFFが実装されるかもしれません。こんにちは、SODAでQAエンジニアをしているokauchiです。今回は自動修復をあえて行わないステップを作成するというテーマです。MagicPodには自動修復機能というものが存在します。要素を見つけられない時にそれに近い要素を自動で探し出し、テストを先へ進めます。その後テストが完了すると、実行結果は"成功"ではなく、"要確認"というステータスで報告されるユーザーはそれを見て、自動補正された要素...
5ヶ月前

AIによるADRのセキュリティレビューの自動化 ― Opus 4.6 によるGitHub ActionとGemini Gemの活用
SODA Engineering Blogのフィード
はじめにSecurity Assessmentチームの小竹です。Security Assessmentチームでは、DevSecOpsの推進や脆弱性診断に取り組んでいます。「セキュリティレビューは、リリース前にまとめてやるもの」——そんな認識がまだ根強い現場も少なくありません。しかし、設計段階で入り込んだリスクを後工程で潰すのは、コストも手戻りも大きくなります。私たちが目指しているのは、設計フェーズからセキュリティの観点が自然に組み込まれている状態、つまり「安全な設計がデフォルトになる世界」です。その第一歩として、ADR(Architecture Decision Record)...
6ヶ月前

E2Eテスト自動化の推進者、ヒーローに頼りっきりをやめよう
SODA Engineering Blogのフィード
こんにちは、SODAでQAエンジニアをしているokauchiです。先日、こちらのイベントでE2Eテスト自動化について登壇しました。https://findy.connpass.com/event/384201/登壇では話しきれなかった部分を、補足する形でブログ記事にしていきたいと思います。https://www.slideshare.net/slideshow/e2e-e2e-fake-real/286318477概ね以下のようなことを話をしました。・E2Eテスト自動化は推進者がいる・推進者の頑張りでテスト自動化が運用(定期的な実行がされる状態になる)・さらにスケールする...
6ヶ月前

E2Eテスト自動化の推進者がヒーローになる日と引退する日
SODA Engineering Blogのフィード
こんにちは、SODAでQAエンジニアをしているokauchiです。先日、こちらのイベントでE2Eテスト自動化について登壇しました。https://findy.connpass.com/event/384201/登壇では話しきれなかった部分を、補足する形でブログ記事にしていきたいと思います。https://www.slideshare.net/slideshow/e2e-e2e-fake-real/286318477概ね以下のようなことを話をしました。・E2Eテスト自動化は推進者がいる・推進者の頑張りでテスト自動化が運用(定期的な実行がされる状態になる)・さらにスケールする...
6ヶ月前

背骨折れててもGo Conference mini 2026 in Sendaiに行ってきた(登壇&参加レポート)
SODA Engineering Blogのフィード
こんにちは、SODAの@magavelです。背骨が疎結合になっている人です()先週2/21(土)に開催されたGo Conference mini 2026 in Sendaiで登壇の機会をいただいたので、参加レポートを書いておこうと思います。 「モジュラモノリスにおける境界をGoのinternalパッケージで守る」というタイトルで発表しました!弊社SODAではモノリスからモジュラモノリスへの移行を進めていまして、実は前回のGo Conference mini 2022 Autumn in SENDAIでも「SNKRDUNKでGo+gRPCで すすめるモジュラモノリス」というタイ...
6ヶ月前

EMとして実践している1on1の運用方針
SODA Engineering Blogのフィード
はじめにこんにちは、TPです。私は株式会社SODAでエンジニアリングマネージャー(EM)として3チーム(各チーム2~6人)をマネジメントしています。この記事では、自分が実際にメンバーへ共有している1on1の運用方針を紹介します。社内で1on1のやり方を完全に揃えているわけではないので、あくまで自分がマネジメントしているチームに限った方針になります。1on1のやり方に正解はないと思っていますが、「何を目的に」「何をやって、何をやらないか」を明文化してメンバーと共有しておくことで、お互いにとって有意義な時間にしやすくなると感じています。※この記事の内容は個人の意見であり、会社の意...
6ヶ月前

MagicPod MCPでリトライ回数を含めたレポートを出力してみた
SODA Engineering Blogのフィード
こんにちは、SODAでQAエンジニアをしているokauchiです。E2Eテストを運用していると、単純な成功/失敗だけでは計測できない失敗予備軍が存在します。それはリトライを行った上で成功しているテストケースです。それは本当に安定していると言えるのでしょうか?今回はMagicPod MCPを使って、リトライ回数を含めたレポートを出力してみた経験をまとめます。単なる成功/失敗ではなく、"揺らぎ"まで可視化する試みです。 なぜリトライ回数を見たくなったのかリトライ回数はテストが安定していないことを隠してしまい、把握出来ないことは技術的負債に繋がります。戦略によってはリトライ成功を...
7ヶ月前

そのインタラクション、どう作るか?
SODA Engineering Blogのフィード
GestureDetectorは使ったことありますか?Flutter使ってれば何度も使ったことあると思います。しかし、そのほとんどはシングルタップを目的としたonTapのはずです。この記事ではさまざまなアプリのインタラクションを題材として、onTap以外のメソッドの使い方を見ていきます。Flutterの知識を少しでも向上してもらうのはもちろん、「こんなインタラクション、UIもあるのか!」と感じてもらい、明日から仕事や個人開発に活かしてもらえたら嬉しいです。この記事では初級、中級、上級に分けてGestureDetectorを使った色々なインタラクションデザインを見ていきます。...
7ヶ月前