タグ

ブックマーク / techblog.zozo.com (19)

  • ZOZOTOWNリニューアルで実施したCache Stampede対策 - ZOZO TECH BLOG

    はじめに こんにちは。マイグレーションチームの藤です。 この記事では、先日のリニューアルに伴って導入したBackends For Frontends(以下、BFF)で、Redisを使ったキャッシュの事例をご紹介します。キャッシュを導入する際に起きる問題とその回避策について、サーバーサイドのアプリケーションで行った対策をもとに紹介していきます。 ZOZOTOWNリニューアルとBFF ZOZOTOWNで導入したBFFは、複数のAPIのレスポンスをフロントエンドが必要とする形式に集約して返却することを主な目的としています。これまでの実績から、大規模セール時のアクセス数は通常時の何倍にもなることがわかっており、BFFもそれに耐えられるパフォーマンスが必要です。 しかし、BFFに来たすべてのアクセスをそのままAPIに流すと、パフォーマンスに影響する恐れが出てきました。そのため、APIからのレスポン

    ZOZOTOWNリニューアルで実施したCache Stampede対策 - ZOZO TECH BLOG
  • ZOZOテクノロジーズのオープンソースソフトウェアポリシーを策定しました - ZOZO TECH BLOG

    こんにちは。MLOpsチームリーダー兼プラットフォームSREチームリーダーのsonotsです。今年の4月からZOZOTOWNリプレイスプロジェクトにも関わるようになりました。Zoomの背景画像を「進め!電波少年」にしてみても、チームの若者に伝わらないのが最近の悩みです。 今回の記事は、昨年度にタスクフォースとして発足したOSSポリシー策定委員会を代表して、今年の4月に弊社で策定したOSSポリシーについて紹介します。 OSSポリシー策定の背景と目的 弊社でもOSSを利用・貢献・公開しているメンバーが増えてきています。また、会社としても業界貢献、技術アピールの側面からOSS活動を奨励したいという想いがあります。 しかし、弊社にはOSSポリシーが存在しなかったため、相談を受けた際にCTO室が都度判断するという状況がしばらく続いていました。都度判断ではスケールしないため、「社員がOSS活動しやすい

    ZOZOテクノロジーズのオープンソースソフトウェアポリシーを策定しました - ZOZO TECH BLOG
  • iPadOS新機能「Multiple Windows」をWEARに仮実装してみた - ZOZO TECH BLOG

    はじめに こんにちは。WEAR iOSチームの坂倉 (@isloop) です。 この間リリースされたiPadOSはかなり盛りだくさんの内容でしたね。 個人的には、1つのアプリで複数のウィンドウを開ける「Multiple Windows」機能が一番気になりました。 この記事では、WWDC 2019のセッション Introducing Multiple Windows on iPad と Architecting Your App for Multiple Windows を参考にしながらWEARへの仮実装を通して「Multiple Windows」を解説します。 解説 条件 Multiple Windowsは以下の条件で動作します。 Xcode 11以降に含まれるiOS 13.0 SDK以上でビルドされたアプリ iPadOSがインストールされているiPad Supporting Multip

    iPadOS新機能「Multiple Windows」をWEARに仮実装してみた - ZOZO TECH BLOG
  • iOSアプリに導入したプロトコル指向なAPI抽象レイヤーの設計 - ZOZO TECH BLOG

    iOSアプリエンジニアの@hiragramです。VASILYにジョインしてだいたい3か月経ちました。 今回は、僕がジョインしたプロジェクトに導入した、APIリクエストの抽象レイヤーの設計について紹介します。また、記事の最後にこの抽象レイヤーのコードをフレームワークとして切り出したもののリンクがありますので、興味がある方は見てみてください。 課題と方針 当プロジェクトでは、リアクティブフレームワークにRxSwift、通信ライブラリにAPIKit、JSONマッパーにHimotokiを採用しています。 従来のアプリの実装には、 ViewModelが直接APIKitをインポートして通信しており、通信のトリガーやレスポンスの処理が画面によってバラバラ APIが取得対象のリソースを常にresultsというキーに配列で返すようになっており、必ず1個しか返さないAPIのレスポンスもresults.firs

    iOSアプリに導入したプロトコル指向なAPI抽象レイヤーの設計 - ZOZO TECH BLOG
  • CloudFormationとOpsWorksでインフラを育てる - ZOZO TECH BLOG

    こんにちは。インフラエンジニアの光野です。 弊社ではネットワークの構築と管理にAWS CloudFormationとAWS OpsWorksを導入しました。 記事では、その効果と導入に際しての工夫について紹介いたします。 目次 Before / After 効果 CloudFormarionとは CloudFormation or Terraform OpsWorksとは SSH/sudo管理 CloudFormationとOpsWorksの役割分担 CloudFormationテンプレートの分離方針 OpsWorksマルチレイヤーによるインスタンスの管理 OpsWorksでのdry-runとdiff YAML版CloudFormationでOpsWorks(Chef)を定義する場合の注意点 まとめ Before / After CloudFormationとOpsWorksを導入するま

    CloudFormationとOpsWorksでインフラを育てる - ZOZO TECH BLOG
  • モダンなSwiftのExtensionについて - Targeted Extensions - ZOZO TECH BLOG

    VASILYのiOSエンジニアにこらすです。最近、Swift Evolutionに私の2つ目の提案がマージされました。 今回は、Swiftで型にExtensionを作る特殊な方法について説明します。 今回紹介する方法を使ってExtensionを作ると、名前空間が切り分けられ、コードの読み書きがしやすくなります。 ブログを書くに当たって、この Extension 実装方法を研究しましたが、この手法の正確な名前がわからなかったため、この記事では「Targeted Extensions」と呼ぶことにします。 Extensionについて 通常、 Extensionを書くとき、String なら下記のようになります。 extension String { var count: Int { return characters.count } } "hello".count // 5 Extension

    モダンなSwiftのExtensionについて - Targeted Extensions - ZOZO TECH BLOG
  • Docker / Apache Mesos / Marathon による3倍速いIQONクローラーの構築 - ZOZO TECH BLOG

    わーい!コンテナたのしー!🐾 こんにちは。流行りには積極的に乗っていきたい。インフラエンジニアの光野です。 弊社が運営するファッションサイトIQONでは、日々200以上の提携ECサイトから100万のオーダーで商品をクロールしています。 新商品の追加・商品の在庫状況・セールの開催など情報は日々変化するため、弊社において「正しくクロールすること」と「速くクロールすること」は肝心カナメの要素です。 記事では、特に「速くクロールする」という目的で構築したコンテナベースの新クローラーシステムを紹介いたします。 このクローラーシステムは、最終的にクロール時間67%減、 維持コスト70%減という成果が得られました。 キーワード: コンテナ, Docker, Apache Mesos, Marathon, AWS Lambda, Amazon EC2 SpotFleet 問題解決手段の検討 -> コン

    Docker / Apache Mesos / Marathon による3倍速いIQONクローラーの構築 - ZOZO TECH BLOG
  • 新しいアプリを作るときによく使うSwift Extension集 - ZOZO TECH BLOG

    iOSエンジニアの庄司 (@WorldDownTown) です。 最近、業務で新しいiOSアプリを立て続けにいくつか開発する機会に恵まれました。 そんな中、いくつもアプリを使っていると、どのアプリでもよく使う処理があぶり出されてきます。 そういう処理はSwiftのExtensionとして別ファイルに書き出し、他のアプリへも切り出しやすいように個別のFrameworkにして管理しています。 Frameworkの管理については過去のこちらの記事を参考にしてみてください。 今記事では、最近の開発でよく使ったExtension集をご紹介します。 Swift標準ライブラリ Date private let formatter: DateFormatter = { let formatter: DateFormatter = DateFormatter() formatter.timeZone = N

    新しいアプリを作るときによく使うSwift Extension集 - ZOZO TECH BLOG
  • AMPの導入と効果について - ZOZO TECH BLOG

    こんにちは、エンジニアの荒井です。 2016年はAMP(Accelerated Mobile Pages)の正式サポートがアナウンスされ、導入した方も多いのではないでしょうか。VASILYでもAMPを導入し数ヶ月運用しています。AMPの導入に関しては、関連記事も多く存在しますが、導入したことによって得られた結果について触れている記事は少ないと感じています。そこで記事では、弊社でのAMP導入事例と、AMPによって得られた効果を紹介したいと思います。これから導入を検討している方はAMP対応による効果の一例として、すでに導入している方は比較対象として参考にして頂ければと思います。 AMPについて 初めにAMPについて簡単に説明します。 AMPはモバイルページを高速にユーザー届けるために発足したプロジェクトです。昨年Googleの検索結果に表示されるようになり、様々なサービスで対応が進められてい

    AMPの導入と効果について - ZOZO TECH BLOG
  • AndroidアプリのQA実施に必要な作業を自動化する - ZOZO TECH BLOG

    こんにちは、Androidエンジニアの堀江(@Horie1024)です。VASILY DEVELOPERS BLOGは新年2回目の更新になります。ちなみに去年の更新回数は53回だったようです。 また、Androidチームのトピックスとしては、先日ベストイノベーティブアプリ大賞を受賞した際にいただいたトロフィーがオフィスに届きました。今年も賞をいただけるようVASILY全員で頑張ります。 company.vasily.jp はじめに Android版iQONのリリースは約1~2週間に1回行っており、リリース前には社内QAを実施しています。QAを実施するために必要な作業は定型な作業ですが、手動で行うと思いの外時間が掛かりますし、作業の抜け漏れが起きる事もあります。 そこで、タイトルにもあるようにQAの実施に必要な作業を自動化しました。一度自動化してしまえば作業に抜け漏れがなくなり、自分たちの時

    AndroidアプリのQA実施に必要な作業を自動化する - ZOZO TECH BLOG
  • 会社の新年会用に低温調理器具を作りました - ZOZO TECH BLOG

    あけましておめでとうございます。 バックエンドエンジニアの塩崎です。 今年の抱負として「テクノロジー系の同人誌を書く!」と言ったら、「アニメの女の子が出てくる漫画」のことだと勘違いされてしまいました。 いつもはiQONに関することを書いているこのTECH BLOGですが、今回の記事はiQONには全く関係のない内容です。 新年会用に低温調理器具を作った話を紹介します。 はじめに 今年のVASILYの新年会は「各地の温かいもの」を持ち寄るという企画を行いました。 しかし、僕は実家に帰らずにアキバ近辺をうろうろしていました。 アキバで温かいもの言ったら、「おでん缶」か「アニメ店長」くらいしか思いつかないため、温かいもの探しに困っていました。 そんな時に、秋月電子でいいものを見つけました。 これです。 アキバ名物(?)メタルクラッド抵抗です。 これに電流を流せばジュール熱が発生するので、お土産の要

    会社の新年会用に低温調理器具を作りました - ZOZO TECH BLOG
  • Google BigQueryの新機能 Standard SQLまとめ - ZOZO TECH BLOG

    こんにちは、VASILYバックエンドエンジニアの塩崎です。 VASILYでは様々なログデータの分析にBigQueryを使用しています。 インデックスについて何も考えなくても良いのが特に便利です。 さて、そんなBigQueryですが、数か月前にStandard SQLという新しい仕様のSQLがサポートされました。 BigQuery 1.11, now with Standard SQL, IAM, and partitioned tables! VASILYでも徐々にStandard SQLに移行をしているので、使い勝手や従来のSQLからの移行方法についてまとめておきます。 Standard SQLとは SQL:2011に準拠しつつ、配列や構造体等の構造化データを扱えるように拡張されたSQLです。 Standard SQLの登場によって、以前からあったSQLはLegacy SQLと呼ばれるよ

    Google BigQueryの新機能 Standard SQLまとめ - ZOZO TECH BLOG
  • ディープラーニングによるファッションアイテム検出と検索 - ZOZO Technologies TECH BLOG

    データサイエンティストの中村です。VASILYではファッションに特化した画像解析エンジンを開発しています。記事では、スナップ写真からファッションアイテムを検出するシステムを紹介したいと思います。 概要 このシステムの入力はスナップ写真です。スナップ写真が入力されたとき、システムは以下のタスクを解きます。 写真中からファッションアイテムに該当する領域を検出する 検出したファッションアイテムのカテゴリを予測する 検出したファッションアイテムに似ているアイテムをDBから検索する 各タスクを解く方法は様々ありますが、弊社のシステムでは2種類のネットワークを使ってこれを達成しています。 ファッションアイテムの検出とカテゴリ予測 検出は画像認識の基的なタスクで盛んに研究されていて様々な手法が提案されていますが、今回はSingle Shot MultiBox Detector (SSD)*1 と呼ば

    ディープラーニングによるファッションアイテム検出と検索 - ZOZO Technologies TECH BLOG
  • データサイエンスチームでのインターンのすすめ - ZOZO TECH BLOG

    データサイエンスチームの後藤です。 学生のみなさんはそろそろ夏のインターンの時期ですね。 私も、ちょうど一年前に学生の立場でVASILYのインターンに参加して熱い夏を過ごしたことを思い出します。 記事では、データサイエンスチームの実際の仕事と夏のインターンについてご紹介します。 記事の最後に、インターン募集の案内も貼っていますので、インターンに参加したいと思ってくれた方はぜひチェックしてください! VASILYのインターンの特徴 エンジニア向けのインターンでは、VASILYのプロダクトであるiQONに直接関わる開発を行っていただきます。よくあるコンペティション形式やハッカソン形式のようなものではなく、メンターと一緒に、実際のプロダクトで動いているコードを触りながら開発を進めていきます。私たちはユーザーに価値を届けることをとても大事にしていますので、インターン生にも、最後まで責任をもってア

    データサイエンスチームでのインターンのすすめ - ZOZO TECH BLOG
  • DynamoDBの並列処理によるデータの欠損とProvisioning超過の対策 - ZOZO TECH BLOG

    こんにちは。iQONのバックエンドエンジニアを担当しているjoeと申します。 最近、iQONのお知らせ機能のDBMySQLからDynamoDBへ移行しました。 移行する際に発生した問題点である並列処理によるデータ欠損とProvisioning超過の対策を書きます。 間違っているところや改善点があればご指摘ください。よろしくお願い致します。 お知らせ機能とは お知らせ機能とは、facebookで言うところの「◯◯さんがあなたの投稿に「いいね!」といっています」のような、ユーザーに対するアクションがあったことを通知したり、アイテムが値引きされた、アイテムの在庫が少なくなった等のlikeしたアイテム情報をユーザーに通知する機能です。 既存のお知らせ機能の問題点 既存の構成における問題点は以下の二点です。 データの肥大化 レスポンスが遅い お知らせのデータ構造は、下記のようになっています。 My

    DynamoDBの並列処理によるデータの欠損とProvisioning超過の対策 - ZOZO TECH BLOG
  • UIPageViewControllerをつかって無限スクロールできるタブUIを実装してOSSとして公開しました - ZOZO TECH BLOG

    こんにちは、エンジニアの遠藤です。 最近iQONアプリのホーム画面のデザインをリニューアルしました。 タブを使ったデザインにすることで、iQON内にある多くのコンテンツが見やすくなりました。 今回はこのタブ機能の実装についてざっくりと紹介しようと思います。 実装したものはライブラリーとしてGitHubに公開しているので、ぜひ使ってみてください! github.com 機能 今回実装した機能は下記の3つです 1. スワイプでページを無限に表示切り替え 2. タブは無限スクロール 3. タブをタップしたらタップした項目のページを表示 実装について 1. スワイプでページを無限に表示切り替え スワイプしたらページの表示を切り替えたいのでUIPageViewControllerを継承したTabPageViewControllerというクラスを実装しました。 今回は無限にページの表示切り替えをしたい

    UIPageViewControllerをつかって無限スクロールできるタブUIを実装してOSSとして公開しました - ZOZO TECH BLOG
  • ディープラーニングで洋服を整理してみました - ZOZO TECH BLOG

    概要 畳み込みニューラルネットワークによる画像生成モデル(DCGAN)に弊社のワンピース画像10万枚を学習させました。 得られた生成モデルを使って、乱数で作った100次元ベクトルからワンピース画像を生成しました。 逆に、一枚のワンピース画像を100次元ベクトルに圧縮し、可視化しました。 可視化したことで、モデルがワンピースの【色】【形】【柄】【モデルやマネキンの有無】など、基的な特徴を捉えられていることがわかります。 この技術は、自動タグ付けや類似画像検索に応用することができます。 はじめに はじめまして。データサイエンスチームの後藤と申します。現在、アイテム画像のカテゴリ判定モデルを作ったり、各部門のKPIの日々の変動やシステムの異常を知らせるダッシュボードを作る仕事をしています。 また、最新の研究論文にもアンテナを張り、提案手法の検証にも取り組んでいます。今回は、去年の暮れあたりから

    ディープラーニングで洋服を整理してみました - ZOZO TECH BLOG
  • アプリのAPIリクエストのトレースはどうするのが効率的か? - ZOZO TECH BLOG

    こんにちは。iOSエンジニアの庄司です。 普段のアプリ開発において、バックエンドチームから「○○のページで△△のデータ取得するためにリクエストしているURLってどんなの?」と聞かれることがよくあります。 その都度、APIリクエストとリクエスト結果をprintで表示するフラグをONにしてアプリをビルドするということをしていたため、かなり手間がかかっていました。 こういった作業を楽にするためにネットワークデバッグライブラリをいくつか比較してみました。 ライブラリ ResponseDetective https://github.com/netguru/ResponseDetective NSURLSessionのリクエストやレスポンスをデバッガのログに流してくれるライブラリです。 特徴・利点 フルSwiftで書かれており、NSURLProtocolのメソッドに割り込んでログを落とす事ができます

    アプリのAPIリクエストのトレースはどうするのが効率的か? - ZOZO TECH BLOG
  • 効率的なアプリ開発のためにデザインガイドラインを作成した話 - ZOZO TECH BLOG

    こんにちは。デザイナーの権です。 アプリ開発に関わるデザイナーの方々は、仕様とデザインが決まって実装に移る際、どのようにチームでやりとりしていますか? それぞれの開発体制や状況に合わせて進めていくので、会社によって様々だと思います。弊社でも効率的な開発のために、デザインデータや仕様書、指示書、プロトタイプの準備等、日々試行錯誤しながら最適な方法を探しています。 数ある開発手段の中で今回は、弊社が運営するサービス「iQON」の機能改善やデザインリニューアルに効率的に対応できるよう新たに作成した、デザインガイドラインについてご紹介したいと思います。 デザインガイドライン作成の背景 弊社では1年ほど前からデザイナーが5人に増えたことにより、プラットフォームごとに一人づつオーナーシップをとって制作を進める体制に変更されました。 私も以前は、アプリデザインや広告のデザインなどジャンル関係なく携わって

    効率的なアプリ開発のためにデザインガイドラインを作成した話 - ZOZO TECH BLOG
  • 1