注目のストーリー
All posts
理想の「ZOZOTOWN」を自らつくるために、私たちMLエンジニアが挑戦していること
プロフィール寺崎 優希(技術本部 ML・データ部 推薦基盤ブロック ブロック長 / 2020年新卒入社)大学院卒業後、2020年に株式会社ZOZOテクノロジーズ(現株式会社ZOZO)に新卒入社。現在は、ファッションEC「ZOZOTOWN」でユーザーごとに商品、ブランド、ショップなどをおすすめしてユーザー体験を向上させることをミッションとするML・データ部推薦基盤ブロックのブロック長を務める。趣味は、楽器演奏、テニス、お酒を飲むこと。目次価値を“提供し続ける”ために、ZOZOという選択肢顧客体験と事業成長の二兎を追うエンジニアリング理想の「ZOZOTOWN」を自らつくる仕事新卒1年目からフ...
【TECH BLOG】MLOpsマルチテナントクラスタへのArgo CDの導入と運用
はじめにこんにちは。ML・データ部MLOpsブロックの築山(@2kyym)です。MLOpsブロックでは2022年の上期からArgo CDの導入に着手しました。本記事ではArgo CDの導入を検討した背景から導入のメリット、また導入における公式マニフェストへの変更点や、運用において必須である認証や権限管理など、具体的な手順についてご紹介します。少しでもArgo CDの導入を検討している方の助けになれば幸いです。またArgo CDを導入するきっかけとなった、複数運用していたKubernetesクラスタを1つに集約するマルチテナントクラスタへの移行についても触れます。マルチテナントクラスタの設...
【TECH BLOG】ZOZOTOWNの基幹データベースをリプレースした話
はじめにこんにちは、技術本部SRE部ZOZOSREチームの堀口です。普段はZOZOTOWNのオンプレミスとクラウドの構築・運用に携わっています。またDBREとしてZOZOTOWNのデータベース全般の運用・保守も兼務しております。ZOZOTOWNではSQL Serverを中心とした各種DBMSが稼働しています。その中でZOZOTOWNサービスの根幹となるいわゆる基幹データベース(以下、基幹DBと呼ぶ)を5年ぶりにリプレースしました。基幹DB群は、商品情報、在庫情報、注文情報、会員様情報、ブランド様情報、配送管理、キャンペーン情報、分析系情報などZOZOTOWNサービスにおけるほぼ全ての情報...
【TECH BLOG】WEAR Webフロントエンドの自動テスト構成 2023
こんにちは。WEAR Webフロントエンドチームの冨川 (@ssssota) です。私たちのチームでは普段WEARのWebフロントエンド全般の開発から運用までを行なっています。また、あと半年ほどで10年になるVBScript+jQuery環境からNext.js/React環境へのリプレイスを進めています。リプレイスの詳細は弊チームの藤井が書いた記事をご覧ください。本記事では、WEARのWebリプレイス環境における自動テストの構成について紹介します。自動テストの構成を悩んでいる方の決断の一助になれば幸いです。はじめに前提構成の決定と判断QAチームによるE2EテストPlaywrightによる...
【TECH BLOG】ZOZOFIT iOSアプリ開発の全貌
はじめにこんにちは、計測プラットフォーム開発本部アプリ部の中岡、永井、東原です。私たちのチームではZOZOMAT、ZOZOGLASSといった既存の計測機能の改善と、新規計測アプリの研究開発を担当しています。その新規計測アプリとして、ZOZOFITというボディーマネジメントサービスを2022年の夏に米国でローンチしました。この記事では、ZOZOFITのiOSアプリを新規開発するにあたって、どのような技術要素を取り入れたかについてご紹介します。目次はじめに目次ZOZOFITとは計測機能とその実装・統合計測機能について計測機能の実装・統合についてiOSアプリの技術要素使用技術対応OSUIフレー...
【TECH BLOG】ZOZOTOWNのWebホーム画面をNext.jsでリプレイスして得た知見
はじめにZOZOTOWN開発本部の武井と申します。ZOZOTOWNのフロントエンドリプレイスプロジェクトを主に担当しております。ZOZO DEVELOPERS BLOG でも「ZOZOのリプレイスプロジェクトで得られる唯一無二の経験。大規模サービスを進化させるやりがいとは」というインタビュー記事を掲載しておりますので、もしよろしければこちらも併せてご覧ください。さて、本題です。現在ZOZOTOWNではオンプレミスかつ、モノリスだった既存システムをマイクロサービスAPIに責務を分割したり、インフラをクラウドに移行したりしています。しかし、いわゆるWebのUIを構築するためのシステムは現在も...
【TECH BLOG】GitHub Flow with GitOpsの導入
はじめにこんにちは、計測プラットフォーム開発本部SREブロックの近藤です。普段はZOZOMATやZOZOGLASS、ZOZOFITなどの計測技術に関わるシステムの開発、運用に携わっています。計測プラットフォーム開発本部では、複数のプロダクトを開発運用していますが、リリース作業はプロダクト単位で行っています。プロダクトによってローンチから数年経過し安定傾向のものもあれば、ローンチしたばかりで機能開発が盛んなものもある状態です。複数のプロダクトを管理する上では当然の状況ですが、プロダクト単位でリリース作業手順が異なり、手順そのものにも課題がある状態でした。本記事では、リリース作業で課題となっ...
【TECH BLOG】ZOZOFITにおけるADRを利用した意思決定を残す文化作り
はじめにこんにちは。計測プラットフォーム開発本部バックエンドチームの佐次田です。普段はZOZOMATやZOZOGLASSなどの計測技術に関わるシステムの開発、運用に携わっています。去年の夏に、ZOZOFITというサービスを北米向けにローンチしました。本記事では、ZOZOFITのローンチまでに遭遇した意思決定における課題と、ADRというドキュメンテーション手法を用いた解決までの取り組みについて紹介します。目次はじめに目次計測プラットフォーム開発本部 バックエンドチームとはZOZOFITとは開発中に直面した課題過去の背景が分からず決断しにくい意思決定の結論が追いにくい意思決定の認識合わせに時...
【TECH BLOG】Aurora Serverless v2を本番導入した話 〜検討や導入時のポイント・得られた効果について〜
はじめにこんにちは。SRE部ECプラットフォーム基盤SREブロックの石田です。本記事では、Aurora Serverless v2を本番導入するにあたってどのような検討をし、どのように導入していったか、また導入後に得られた効果について紹介します。はじめにAurora Serverless とは背景比較検討比較内容方針の決定アーキテクチャ導入1. Aurora Serverless v2を手動で構築2. AWS CloudFormationでProvisioned型Aurora MySQLバージョン3を再構築3. AWS CloudFormationでAurora Serverless v...
【TECH BLOG】OpenAPI Generatorに適したOpenAPIの書き方
はじめにこんにちは! WEARバックエンドブロックの高久です。WEARではOpenAPI(Swagger)を使って、アプリやWebのクライアントが利用するAPIを定義しています。そして先日、開発効率化のためにOpenAPI GeneratorでOpenAPIからAPIクライアントコードを自動生成、活用できるように整備をしました。その中でOpenAPI Generatorに適したOpenAPIの書き方のポイントがいくつかあったので、内容を紹介していきます。想定読者OpenAPIを現在利用している、またはこれから利用する予定の方OpenAPI Generatorを利用したコード自動生成を検討...
【TECH BLOG】Cloud FirestoreからPostgreSQLへ移行したお話
はじめにこんにちは。ブランドソリューション開発本部FAANSバックエンドブロックの田村です。普段はサーバサイドエンジニアとしてFAANSのバックエンドシステムの開発をしています。FAANSとは、弊社が2022年8月に正式ローンチした、アパレル店舗のショップスタッフの販売サポートツールです。FAANSでは、データベースとしてGCPのサーバレスでドキュメント指向のNoSQLデータベースであるCloud Firestoreを当初採用していました。Cloud Firestoreはサーバレスなので運用負荷が掛からず、また安価でスケーラビリティにも優れたハイパフォーマンスなデータベースです。しかし、...
【TECH BLOG】ベースラインプロファイル導入によるアプリのパフォーマンス改善と測定方法
はじめにこんにちは、ブランドソリューション開発本部フロントエンド部WEAR Androidブロックの安土琢朗です。普段はファッションコーディネートアプリWEARのAndroidアプリを開発しています。WEARではすでにXMLで書かれたレイアウトをJetpack Composeにリファクタリングする作業を進めています。作業を進める中で、Jetpack ComposeのLazyColumn利用箇所でスクロールが以前よりスムーズに動かない、初回起動時にスクロールが遅いなどのパフォーマンス問題に直面しました。本投稿では、最適なパフォーマンスを実現する方法の1つであるベースラインプロファイルの導入...
【TECH BLOG】Vertex AI Pipelinesからの外部通信の通信元IPアドレスをNATで固定する
はじめにこんにちは、技術本部ML・データ部MLOpsブロックの鹿山(@Ash_Kayamin)です。MLOpsブロックではバッチ実行環境としてVertex AI Pipelinesを用いています。Vertex AI PipelinesはGCPマネージドなKubeflow Pipelinesを提供するサービスで、コンテナ化した処理に依存関係をもたせたパイプラインを定義し実行できます。この記事ではVertex AI Pipelinesで起動するノードからIPアドレス制限があるエンドポイントへ通信するために、NATを利用して通信元IPアドレスを固定した方法と実装のはまりどころについてご紹介しま...
【TECH BLOG】【イベントレポート】ZOZO Tech Meetup〜Java活用事例紹介〜
はじめにこんにちは。ZOZO DevRelブロックの@wirohaです。3/23にJavaのオンラインイベント「ZOZO Tech Meetup〜Java活用事例紹介〜」を開催しました。ZOZOの開発において「Java」にフォーカスした技術選定や設計手法、設計時の考え方などを紹介するイベントです。登壇内容まとめ弊社から次の4名が登壇しました。ZOZOTOWNの商品の閲覧を支えるJava(技術本部 ECプラットフォーム部 / 藤本 拓也)ZOZOTOWNのカート決済システムのリプレイス〜歩みとこれから〜(技術本部 カート決済部 / 高橋 和太郎)Spring Boot+Redis Cach...
【TECH BLOG】CompositionalLayoutを用いた横スクロールのレイアウト改修で直面した問題と解決方法
こんにちは。WEAR部iOSチームの小野寺です。先日CollectionViewで実装しているトップページを改修しました。改修はトップページに並べていたコンテンツを1つにまとめて、横スクロール(手動 / 自動)によってコンテンツを切り替え可能にしました。横スクロールによってコンテンツを切り替える仕様なので、CompositionalLayoutで実装しました。上記の方針で進めていく中で、困難な実装に直面したので紹介します。セクション全体への装飾最初に直面した問題が、セクション全体に対するViewの装飾です。今回画像の赤枠部分について、次のように改修が必要になりました。トップページ改修の要...