Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【解説】第6章 GoのCLIツールで服作りの業務効率化/zozotechbook1-ch06-go-cli

【解説】第6章 GoのCLIツールで服作りの業務効率化/zozotechbook1-ch06-go-cli

73a29163a4231a9b3f0dad5e169b671f?s=128

Ryuta Tezuka

April 30, 2020
Tweet

Other Decks in Technology

Transcript

  1. 【解説】第6章 GoのCLIツールで服作 りの業務効率化
 #技術書典 頒布本「ZOZO TECH BOOK」解説会 Vol.2
 
 株式会社ZOZOテクノロジーズ


    MSP技術推進部
 手塚 竜太 @tzone99
 Copyright © ZOZO Technologies, Inc.
  2. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 MSP技術推進部
 手塚 竜太
 前職のSIerで製造業向けのシステム開発を5年。
 (オンプレJava/JavaScript/Oracle)


    ZOZOテクノロジーズでは服づくり(設計・生産)を支援 するための開発を担当。
 (クラウドGo/TypeScript/PostgreSQL)
 2
  3. © ZOZO Technologies, Inc. 本章で想定している読者
 3 • ZOZOでの服作りに興味があるエンジニアの方
 • CLIツールを作ろうとしている方


  4. © ZOZO Technologies, Inc. https://zozo.jp/multisize/
 
 • 身長と体重を選択するだけで理想のサイズの商品が見つかる新しい洋 服の買い方
 •

    2019年秋冬アイテムから、人気ブランドのマルチサイズアイテムを販売 開始
 【参加企業】
  株式会社アーバンリサーチ、株式会社ストライプインターナショナル、
  株式会社デイトナ・インターナショナル、株式会社パル、株式会社ビームス、
  株式会社ベイクルーズ、MARK STYLER株式会社、リーバイ・ストラウス ジャパン株式会社  など
 4 事業紹介

  5. © ZOZO Technologies, Inc. たくさんのサイズから
 自分に合ったサイズの服が買える!
 ↓
 たくさんのサイズの服を正しく生産するための仕組 み・ノウハウを確立することが重要。
 


    5 https://zozo.jp/multisize/
 
 事業紹介

  6. © ZOZO Technologies, Inc. (そもそも)一般的な製造業におけるものづくりの流れ
 6 設計
 生産
 企画
 出荷


    - 市場調査
 - 企画書作成
 - 仕様書作成
 - 試作の検証
 - 製造
 - 品質検査(検寸・検品)
 - 梱包
 - 配送
 ZOZOでは、一部社外とも協力しながら多くの工程を自社で管理・実行している。

  7. © ZOZO Technologies, Inc. マルチサイズアイテムを生産するにあたっての懸念
 7 設計
 生産
 企画
 出荷


    - 市場調査
 - 企画書作成
 - 仕様書作成
 - 試作の検証
 - 梱包
 - 配送
 作業工数(生産数定義/寸法定義/試作/製図)
 設計・生産時に管理するデータ
 工場で扱うパーツ数
 品質基準の複雑度・厳密度
 他にもいろいろ。。。
 増
 - 製造
 - 品質検査(検寸・検品)

  8. © ZOZO Technologies, Inc. 今回取り扱う課題
 8 設計
 生産
 企画
 出荷


    CADファイル(服の設計図)を担当の工場に納品する際のデータ変換作業
 
 例えば
 • CADファイルと別途形状がわかるような画像ファイルも欲しい
 • サイズ単位にファイルを分割して納品して欲しい
 • 特定のパーツだけ別ファイルにして欲しい
 • etc.
 サイズ数に比例して作業量が増える。
 => 自動変換したい。
  9. © ZOZO Technologies, Inc. ツールでやることの一例
 9 不要なパーツの除外 特定のパーツをサイズ単位に分割

  10. © ZOZO Technologies, Inc. ツールでやることの一例
 10

  11. © ZOZO Technologies, Inc. 扱うCADデータのフォーマット:DXF
 11 0 SECTION 2 BLOCKS

    0 BLOCK 2 BLOCK_NAME_AAA 10 0.0000 20 0.0000 0 LINE 10 0.0 20 0.0 11 10.0 21 10.0 0 LINE 10 10.0 20 10.0 11 20.0 21 0.0 0 LINE 10 20.0 20 0.0 11 0.0 21 0.0 0 ENDBLK 0 SECTION 2 ENTITIES 0 INSERT 2 BLOCK_NAME_AAA 10 0.0 20 0.0 0 ENDSEC 0 EOF 三角形を表すデータ。 実態はテキストなので、Goでparseして扱う。
  12. © ZOZO Technologies, Inc. GoのCLIツール
 • 必要なライブラリは標準パッケージにまとまっていて、パッケージ選定のための調査や比較検証が不要
 • 実行ファイルが単一で配布や起動が容易、ユーザー説明不要
 •

    何も考えずにマルチプラットフォームで実行可能
 12 1. DXFファイルを読み込んでGoの構造体(Struct)にparse
 2. データを変換
 3. DXF形式にファイル出力
 TODO
 Why Go?

  13. © ZOZO Technologies, Inc. UT
 13 func TestSeparatorForMSP(t *testing.T) {

    //Initialize inputDir, err := filepath.Abs("./testfile/input_test/dxf/") if err != nil { log.Fatalln("Filepath parse error : ", err) } sizeMapDir, err := filepath.Abs("./testfile/input_test/csv/") if err != nil { log.Fatalln("Filepath parse error : ", err) } outputDir, _ := filepath.Abs("./testfile/output_test/") os.Mkdir(outputDir, 0777) expectedDesignNameList := getExpectedDesignNameList(inputDir, sizeMapDir) //Execute target function SeparatorForMSP(inputDir, sizeMapDir, outputDir) //Start testing... // .... //Check if Block and Insert correspondence in generated DXF files are expected. if !(reflect.DeepEqual(blNameList, insertedBlNameList)) { t.Errorf("Unexpected name list. blockList: %s insertList: %s", blNameList, insertedBlNameList) } 構造体tを使ってテスト結果を格納。 ファイルシステムの直接操作はOS気にせずに書ける。 (今回のようにparserから自作するケースで特に有用。)
  14. © ZOZO Technologies, Inc. UT(実行イメージ)
 14 ryuta.tezuka$ go test PASS

    ok github.com/hoge/fuga/mspseparator 1.154s ryuta.tezuka$ ryuta.tezuka$ go test --- FAIL: TestSeparatorForMSP (0.50s) separatorformsp_test.go:51: Unexpected name list. blockList: [P0016_02 P0046_02] insertList: [P0043_02 P0004_02] FAIL exit status 1 FAIL github.com/hoge/fuga/mspseparator 0.750s STTM180049:mspseparator ryuta.tezuka$ OK
 NG

  15. © ZOZO Technologies, Inc. UT(今回紹介した以外のケース)
 15 https://qiita.com/r-tezuka/items/2005289939d433981112

  16. © ZOZO Technologies, Inc. リリース
 ※クロスコンパイル対応のOSとアーキテクチャ: https://golang.org/doc/install/source#environment 16 bin="DXFConverter" flags="-X

    main.version=development -X main.buildtime=`date +%Y-%m-%d_%H:%M:%S`" GOOS=linux GOARCH=amd64 go build -ldflags="${flags}" -o ./bin/linux64/$bin GOOS=linux GOARCH=386 go build -ldflags="${flags}" -o ./bin/linux32/$bin GOOS=windows GOARCH=386 go build -ldflags="${flags}" -o ./bin/windows32/$bin.exe GOOS=windows GOARCH=amd64 go build -ldflags="${flags}" -o ./bin/windows64/$bin.exe GOOS=darwin GOARCH=386 go build -ldflags="${flags}" -o ./bin/mac32/$bin GOOS=darwin GOARCH=amd64 go build -ldflags="${flags}" -o ./bin/mac64/$bin 基本はgo build コマンドでOK。クロスプラットフォーム対応のbuild用シェルスクリプトを作成。

  17. © ZOZO Technologies, Inc. 導入効果
 17 • 1型分(54サイズの場合)の作業:約240分 => 5分に短縮

    • ツール導入により年間 2.4人月〜4.9人月の工数削減効果(※) ※1型27サイズ〜54サイズとして算出
 1. DXFファイルを読み込んでGoのStructにParse
 2. データを変換
 3. DXF形式にファイル出力
 TODO(再掲)
 
 導入効果

  18. © ZOZO Technologies, Inc. 今後の展望
 18 2D 3D • より広範囲の自動化へ

    • 3D着装へ
  19. © ZOZO Technologies, Inc. まとめ
 19 1. ZOZOで服作ってます!マルチサイズアイテムを要チェック!
 2. 服作りの課題解決のためにエンジニアが頑張ってます!


    3. GoでCLIツール作るの敷居が低くて簡単!

  20. None