物流倉庫の実績集計を自動化して現場の負担を軽減したはなし

こんにちは、基幹システム部BASEチームの横山です。

突然ですが、ちょうど1年程前に行われたZOZOバイト革命は覚えていますでしょうか?物流倉庫「ZOZOBASE」で一緒に働いてくれる仲間の2000人募集や、基本時給のUP等で少しだけ話題になりましたね。

今回は、そんなZOZOBASEの人材を管理する上で一助となる作業実績の集計自動化について紹介します。

はじめに

ZOZOTOWNは独自の物流倉庫を保有しており、ブランド様からの商品入荷や保管、お客様への発送まで独自のシステムを用いて行っています。

一口に入荷から発送までと書きましたが、その中には多種多様な作業があり、現場で働く多くの方々に支えられております。このような物流倉庫の戦略を考える上で実績管理や人材管理はとても重要になります。

そんな実績の集計ですが、少し前までは人手で行われていました。それを自動化する際、どのような要件で設計・開発を行ったか、データ収集・集計・可視化はどのように行ったかを紹介します。社内で実績集計の自動化を行う際のお役に立てれば幸いです。

開発要件

開発の目的

ZOZOBASEでは倉庫全体の目標管理や、各作業者への教育・指導に生産性や単価といった指標が用いられています。しかし、その算出はこれまでデータ収集から集計作業まで人手で行われてきました。それでは集計自体が大変であったり算出ミスの可能性などいくつも問題があるため、データ収集・集計・表示を自動で行うことを目的として開発が始まりました。

物流に関する処理は自社システムを用いていますが、これまでの積み重ねで肥大化したシステムに手を加えるとなると、その改修範囲は膨大なものになってしまいます。今回は運用開始までの時間をなるべく短縮するため、既存のシステムへの改修を最小限にする形で行いました。

実績の指標

先述の通り、ZOZOBASEにおける実績には、生産性と単価という2つの指標が用いられています。今回の開発においても上記2つの指標を可視化することを目的としています。生産性は単位時間あたりどのくらいの商品を処理できたか、単価は商品一品あたりにどれくらいの人件費がかかっていたかを表しています。

生産性 = 処理量 / 作業時間
単価 = 人件費 / 処理量

ZOZOBASE内の作業

ZOZOBASEで行われている作業ですが、細かく分けると全部で100種類程あります。全ては書ききれないので、今回は入荷に関する作業を3つご紹介します。

バーコード検品/入荷処理
データ連携をしているブランド様からお預かりした商品に欠品等がないか確認しながら、タグをスキャナーで読み取り、商品管理シールを張る作業

荷受け/社内納品書作成
データ連携をしていないブランド様からお預かりした荷物の納品書をもとに商品情報を打ち込んでいく作業

通常検品/検品
荷受けで作成された商品情報をもとに欠品等がないか確認しつつ、商品名や色・サイズを確認しながら対応する商品管理シールを張る作業

他にも、トラック対応や段ボールの運搬等、入荷に関する作業だけでもその種類は多岐に渡ります。入荷以外の作業については求人ページに記載があるので、是非ご覧ください。

実績表示の粒度

上記で紹介した作業を見ると、

  • バーコード検品は商品タグを読みこむだけで対応する商品管理シールが発行される
  • 通常検品は商品名・色・サイズを確認して対応する管理シールを探さなくてはならない
  • 荷受けの社内納品書作成は上記2つと全く異なった作業

といった具合に、作業によって一商品の処理にかかる時間が異なることを感じられると思います。
つまり、異なる作業の生産性や単価を一概に比較することはできません。そのため、各作業単位で実績を可視化する必要があります。しかしながら、先述の通りZOZOBASEで行われている作業は多岐に渡るため、全ての作業実績を順に見るわけにはいきません。そこで、各作業を以下の3つの粒度で表示を行うことにしました。

ブロック
発送や入荷等の物流機能を一口で表す単位

セクション
ブロック内の作業を種類ごとにまとめた単位で、入荷ブロックにはバーコード検品、荷受け、通常検品の3つのセクションがある

アクティビティ
実作業の単位で、通常検品セクションを例に挙げると、検品作業、シール出し作業、搬送作業等がある

個人の生産性

ZOZOBASEでは、各作業者への指導材料としても生産性の値を用いています。そのため、個人の生産性も算出する必要があります。単価については、時給の違いがダイレクトに表れてしまうため、個人単価の算出は行わずに生産性のみ算出します。

千葉県習志野拠点と茨城県つくば拠点

ZOZOBASEは千葉県習志野と、茨城県つくばの2か所に拠点を構えています。拠点毎に比較を行うことを考え、どこの拠点で行われた作業なのかといったデータも保持しておく必要があります。

作業者の雇用形態

ZOZOBASEで働く作業者には様々な雇用形態があり、雇用形態毎に時給が変わります。アルバイトからアルバイトリーダーへの昇進といったように雇用形態が変化することもあります。

集計のスパン

実績の集計は毎日行われるようにします。

データの準備

実績算出に必要なデータ

ここまでの内容から、集計・可視化を行うにあたり必要なデータとその条件は以下のように考えられます。

必要なデータ
  • 処理量
  • 作業時間
  • 人件費
条件
  • 各作業毎のデータであること
  • 人件費算出・個人生産性の算出を考え、作業者一人一人を識別できること
  • 人件費算出のため雇用形態に関する情報も含むこと
  • 集計は日毎に行うこと

処理量データの取得

ZOZOBASEで行われる作業は自社システムを用いて行っているため、そのデータの流れから作業者の処理量を取得します。作業によってはシステムを介さないものもありますが、その場合は他作業の処理量から類推したり、日の終わりに入力する欄を設けることで補います。

作業時間と人件費の取得

自社システムを用いて作業を行っているとはいえ、「ある作業者が何時にどの作業を始めて、何時には別の作業に移った」といったデータは持っていませんでした。

また、処理量データと同様に、システムを介さない作業の作業時間を取得する必要があります。

そこで打刻システムを作成し、始業や終業、他の作業に切り替えるタイミングで必ず打刻してもらうことで、各作業に従事している時間を個人毎に取得できるようにしました。このデータは日に1万件近く集まります。

打刻システムの導入

新たに作成した打刻システムですが、この打刻という行為に時間をとられてしまっては元も子もありません。そこで、作業者が用いるハンディで打刻できるようにしたり、入館証と個人を紐づけ入館証をタッチするだけで打刻できるようにしています。

人件費は打刻データから休憩時間等を考慮した後、各作業者の雇用形態に紐づく時給をかけることで求めることができます。

以上のことを踏まえて、打刻システムで収集するデータは以下のようにしました。

  • アクティビティID
  • 作業者ID
  • 作業開始時間
  • 作業終了時間
  • 拠点ID
  • 雇用形態ID

集計

処理量のデータはシステムの至るところに散在しており、打刻データは毎日膨大な量が集まります。これらのデータを表示の都度集計していてはロードに時間がかかってしまうため、日毎・作業毎に集計を行い集計データのみを集めたテーブルに保持しておきます。

実績の可視化

実績推移と生データ

可視化に際して、まず月次や日別での実績の推移をグラフで確認できる画面の作成を行いました。

次に、実績の指標である生産性・単価やそれらを算出する元となる人件費・総作業時間を表示する画面を作成し、それぞれの機能において表示期間・拠点・表示粒度の切り替えが行えるようにしました。

利用例としては、実績推移を表示する画面で実績が落ち込んでいる箇所をブロック→セクション→アクティビティの順に確認し、実績が落ち込んでいるアクティビティを特定する。 特定したアクティビティの生データとその期間に行った施策等を照らし合わせ、今後の施策を考える等が想定されます。

※画像はダミーデータを表示したもので実際の実績とは関係ありません

個人生産性の確認

個人の生産性については教育・指導に用いるため、必要なのはブロックやセクション等の単位ではなくアクティビティ単位の表示のみです。そのため、生産性の平均値や総処理量、総作業時間の月次推移と日毎の処理量・作業時間の表示を1つのページにまとめて表示しています。

※画像はダミーデータを表示したもので実際の実績とは関係ありません

打刻状況の確認

打刻システムを導入したことで、副次的に、現在どのような人がどのような作業をどれくらいの時間行っているのかを確認する機能を実装できました。この機能を用いることで現場管理をリアルタイムで行うことができます。

運用開始後に出てきた問題点とその解決方法

ここまで開発を終え、いざ運用を開始したところ、打刻システムの利用に関する部分で以下の問題点が出てきました。

  • 誤った打刻がされてしまう(異なる作業、異なる拠点等)
  • 打刻自体を忘れられてしまう

作業時間や人件費を算出する上で打刻データは必ず正確でなくてはならないのですが、上記問題の影響で正確なデータを扱えない期間がありました。

作業者の視点で考えると、いきなり打刻システムが導入されてよくわからないうちに運用が始まるもんだから開発者側が意図しない動きももちろんしますよね。それに人間だから忘れることもあります。

これらを解決するためにいくつかの改良を行いました。

打刻システムをもっと使いやすく

運用開始した初期は、拠点や雇用形態等の情報を作業者に選択してもらい打刻する仕組みだったため、誤打刻が頻発していました。そこで、拠点に関する情報はIPアドレスやCookieなどを利用して半自動で選択がされるように、雇用形態についてはDBの作業者を管理するテーブルで一元管理し自動入力されるようにしました。
また作業の選択については、物流システム上のメニューと打刻されている作業の紐づけを行い、メニューと紐づく作業で打刻されていなかったら該当作業の打刻画面に遷移するようにしました。

本来だったら自動で打刻されるようにしたかったのですが、1つのメニューに複数の作業が紐づく場合が多かったため自動打刻は断念しました。

集計値の修正をできるように

集計された後でも打刻データと集計データの修正を行えるように以下のことを行いました。

  • 打刻データに修正フラグを持たせる
  • 修正フラグの有無を検知し該当部分のみ集計し直すバッチを作成し毎日夜間に実行する

修正対象の打刻データと関連のある打刻データ(同拠点、同アクティビティ、同雇用形態)に対して修正フラグを立て、夜間実行のバッチに処理させる形です。

勤怠管理システムとの同期

各アクティビティの正確な作業時間を測定するため打刻システムを導入しましたが、労務で管理している勤怠システムもあります。

労務使用の勤怠管理システムでは勤務の開始時間と終了時間のみ記録されていますが、給与計算に用いられるため、人件費を算出する上ではこちらの値を使用したほうが正しい値が出せます。

ただ、そのデータが正式に利用できる形になるまで数日かかっていたため、運用を開始した初期は勤怠管理システムの情報は使えないでいましたが、集計後のデータ修正を可能にしたため同期が可能になりました。

現在では毎日の打刻データの中で各作業者の最初の開始時間と最後の終了時間のみ、勤怠管理システムの打刻時間に修正することでより正確なデータを用いて集計を行っています。

おわりに

ZOZOTOWNを物流の面で支えるZOZOBASEにおける実績集計の自動化について紹介しました。既存システムになるべく改修を加えない形で実績を自動集計する一例として考えていただければと思います。

大部分が手探りの状態での開発でしたが、ZOZOBASEで働く方々と意見を出し合いながら今の形になりました。

まだまだ改善の余地はありますが、人手で行われていた集計を自動化することによって、現場の方々の負担は大分取り除かれているようです。

このように、ZOZOテクノロジーズではBASEをはじめとした様々な事業部と常に連携し、お互いが意見を出し合いながら開発を行っています。 ZOZOのサービスに愛着を持ち、より良いものにしていきたいという意思のある仲間を募集していますのでご興味のある方は、以下のリンクからぜひご応募ください!

tech.zozo.com

カテゴリー