統計数理研究所 オープンハウス連携イベント
データサイエンスが描き出す「モノづくり」の未来シナリオ～産学連携シンポジウム～

ものづくりとソフトウェア-- DevOpsとSoftware 2.0
6/17, 2021
丸山宏
花王/東大/PFN@maruyama on twitter１．20世紀後半：ものづくりに学んだソフトウェア開発

２． 2000-現在：独自の進化を遂げたソフトウェア開発

３．これから：ソフトウェア開発に学ぶものづくり

１．20世紀後半：ものづくりに学んだソフトウェア開発

ものづくりの大前提： 設計・生産と利用の分離
価値
設計

生産

利用

開発・製造と利用の完全な分離出荷してからの手戻りはほぼ不可能

時間

設計・生産においても手戻りは高コスト → フロントローディング

出典： 経済産業省 2020年版ものづくり白書 p73
https://www.meti.go.jp/report/whitepaper/mono/2020/honbun_pdf/index.html

ものづくりに学んだ20世紀のソフトウェア開発
ウォーターフォール開発モデル
要求定義

概念設計

詳細設計

テスト

出典：https://clicccar.com/2020/03/07/958117/

できるだけ手戻りを発生させない！

ソフトウェア開発における不確実性
●
●
●
●
●
●
●

要求定義は顧客の真の期待を表現しているか○ 各ステークホルダの合意ができているか
開発の各段階の機能は、上位の要求を正しく反映しているか（バグはないか）できあがったシステムは非機能要求を満たすか（性能・品質・使いやすさ・セキュリティ・メンテナンスのしやすさなど）開発にかかる工数の見積もりは正しいか（デスマーチに依存していないか）
システムは事前に想定された通りの環境で運用されるか将来起きる可能性のある新たな要求は何か：不確実性に対するソフトウェア工学の叡智：アジャイル開発
スプリント毎に顧客の要求を再確認
短い(1週-1月)サイ
クルの「スプリント」

優先順位付けされた顧客要件（バックログ）

常に動く（完成形の）ソフトウェア

出典：https://backlog.com/ja/blog/what-is-agile-and-waterfall/

プロセスやツールよりも 個人と対話を。
包括的なドキュメントよりも 動くソフトウェア を。
契約交渉よりも 顧客との協調 を。
計画に従うことよりも 変化への対応 を。
アジャイル・マニフェスト (2001) https://agilemanifesto.org/

スプリント毎に顧客との対話によりバックログをアップデート

QCD*は妥協しないが、機能は優先度に応じてできるものだけを実装する*QCD: Quality(品質), Cost, Delivery(納期)開発と運用の一体化： DevOps
デリバリ／デプロイ
amazonでは、1時間に1,000回以上リリースされる（2012年当時）• 継続的インテグレーション• ソフトウェア定義インフラ
4/3,2015• デリバリ・パイプライン/自動デプロイメント• カナリアリリース、A/Bテスト• 意図的な障害の注入：

出典： http://www.atmarkit.co.jp/ait/articles/1307/02/news002.html

DevOpsへの３つの道
1.

フローの原則開発 → デプロイ → 顧客体験のパスを高速にする

2.

フィードバックの原則
あらゆるステージで、問題の発生と同時にフィードバックを行う

3.

継続的な学習と実験の原則
成功と失敗の両方から組織として学習する文化を持つ

リードタイムの短縮！
ISBN-13 : 978-4822285487

林南八氏の言葉*●

TPSとは稼働率向上を目指したものではない●

生産における品質の作り込みとは、問題のあるワークを次工程に流さないこと○ 自働化：「止める」「止まる」○ JIT： リードタイムを短縮することで、正常・異常がその場でわかる●生産においては「1個流し」が基本

トヨタ生産方式の精神がDevOpsに受け継がれている！
* ビデオ「年末年始期間限定公開：トヨタ生産方式の本質とは？」（ 2021年1月）より

２．独自の進化を遂げたソフトウェア開発

テスト駆動開発（TDD）

現在のテストスイートに対しては、常にすべてのテストが通る状態を保つ

テストスイート

仕様と現状のコードを見て,失敗するテストを加える
リファクタリング(重複を除く、共通部分を括りだす、一般化する)

コードリポジトリ

ISBN-13 : 978-0321146533

仕様は気にせず、 現状のテストが通る最小限のプログラムを書く継続的インテグレーション（CI）
リポジトリ

CIツール

テストスイート

正しく動くコードだけが、リポジトリのmainブランチに追加される
広範に影響がある変更については、各自が他の作業を止めて対応する（cf.
「アンドンを引く」、非難無しのポストモーテムを行う）

カナリア・リリース（ダーク・ローンチ）
新しいリリースを、限定されたユーザーに解放することで、影響を最小限にしながらフィードバックを得る

出典： https://qiita.com/Ladicle/items/5a68ff85e15e86781453

A/B テスティング
ランダム化比較試験をリアルタイムに行うことで、より性能の高いバージョンを探す

出典： https://www.assion.co.jp/blog/guide-of-abtesting/意図的な障害の注入“Game Day” – 本番システムでのテスト

Netflixでの “Chaos Monkey”

17

出典： CACM Vol. 55, NO. 11, 2012

4/3, 2015“The best way to avoid failure is to fail constantly”
http://techblog.netflix.com/2010/12/5-lessons-weve-lear
ned-using-aws.html
Hiroshi ruyama

学習する組織 = TEAL型組織

出典：Frédéric Laloux, Reinventing Organizations, 2014.

思想：「生き物」としてのソフトウェア●●●

ソフトウェアには完成形はない
プログラムを見たら、書き換えなさい
書き換えられないプログラムとは、死んだプログラム

19

ISBN-13: 978-0137081073
4/3, 2015

Hiroshi Maruyama

深層学習は、ソフトウェア開発の方法を根本から変えるものだ

https://medium.com/@karpathy/software-2-0-a64152b37c35

作るプログラム、探すプログラム
作るプログラム探すプログラム

ｘ探索

ｘ

仕様Sを満たすプログラムたち

テスト駆動開発とは仕様をテストケースで近似する営み
出力

入力

ｘ2

ｙ2
ｘ4

ｘ3

ｙ4

ｘ1

ｙ3
テストスイート≒仕様

テストに通れば「正しい」プログラム！

ｙ1

自動デバッグ（Automatic Program Repair）

ｘ

探索ｘ

https://cacm.acm.org/magazines/2019/12/241055-automat
ed-program-repair/fulltext

仕様Sを満たすプログラムたち線形回帰をプログラミングと見ると…
入力

y = fθ(x)ｘ●

出力ｙfθ は線形な関数族の元○○fθ(x) = a*x + b<a, b>がパラメタθ、これを求めることが、プログラミングに相当●●

入出力例の集合を訓練データ Tとする
仕様を命題Sの代わりに、誤差 Lで与える○ L(T, θ) -- テストデータに対する誤差L(T,θ)を最小化するθを効率よく計算する方法（最小二乗法）がある！

汎用計算機構としての深層ニューラルネット
出力（超多次元）勾配法でパラメタを最適化できる桁違いに多いパラメタ●●○

任意の多次元非線形関数を近似*

🡺 疑似的にチューリング完全！

活性化関数が非線形性を表現* G. Cybenko. Approximations by superpositionsof sigmoidal functions. Mathematics of Control,Signals, and Systems, 2(4):303–314, 1989.

入力（超多次元）25

探すプログラミングとは何か – パラメタの探索
f() 全体の空間（θの空間）

プログラム

ｘx

y = fθ(x)y探索

ｘfは (パラメトリックな) 関数族• f がCプログラムの全体• f が線形： Y = Ax + B• fは深層ニューラルネット

仕様を満たすθの部分空間

３．ソフトウェア開発に学ぶものづくり

ものづくりへの回帰：ソフトウェアの比重が高まるものづくり

出典： 経済産業省 自動車新時代戦略会議（第1回）‐配布資料
https://www.meti.go.jp/committee/kenkyukai/seizou/jidousha_shinjidai/001_haifu.html

ソフトウェア更新による、出荷後の価値向上

iOS 14の画面
出典: CNET https://japan.cnet.com/article/35143361/

DevOpsを可能にするものづくり：ソフトウェアによるデカップリング

出典: Rezawana Islam, Evolution of aircraft flight control system and fly-by-light flight control system, 2013.

ソフトウェアの変更により、異なる性能の機体にすることができるものづくりにおける「探索による設計」
汎用原子レベルシミュレータによる材料探索

出典：https://www.preferred.jp/ja/news/pr20210427/

ロボットハンドの設計

出典：https://arxiv.org/pdf/2008.05777.pdf

１．20世紀後半：ものづくりに学んだソフトウェア開発

２． 2000-現在：独自の進化を遂げたソフトウェア開発

３．これから：ソフトウェア開発に学ぶものづくり

Thank You