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

Ryuta Tezuka

April 30, 2020
Tweet

Other Decks in Technology

Transcript

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


    ZOZOテクノロジーズでは服づくり(設計・生産)を支援 するための開発を担当。
 (クラウドGo/TypeScript/PostgreSQL)
 2
  2. © ZOZO Technologies, Inc. https://zozo.jp/multisize/
 
 • 身長と体重を選択するだけで理想のサイズの商品が見つかる新しい洋 服の買い方
 •

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

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


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

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


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

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


    CADファイル(服の設計図)を担当の工場に納品する際のデータ変換作業
 
 例えば
 • CADファイルと別途形状がわかるような画像ファイルも欲しい
 • サイズ単位にファイルを分割して納品して欲しい
 • 特定のパーツだけ別ファイルにして欲しい
 • etc.
 サイズ数に比例して作業量が増える。
 => 自動変換したい。
  6. © 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して扱う。
  7. © ZOZO Technologies, Inc. GoのCLIツール
 • 必要なライブラリは標準パッケージにまとまっていて、パッケージ選定のための調査や比較検証が不要
 • 実行ファイルが単一で配布や起動が容易、ユーザー説明不要
 •

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

  8. © 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から自作するケースで特に有用。)
  9. © 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

  10. © 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用シェルスクリプトを作成。

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

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