27
社内システムの 構造と設計、実装のはなし Developers Summit 2014 [13-B-3] #devsumiB 2014/02/13 @tagomoris (TAGOMORI Satoshi)

社内システムの構造と設計、実装のはなし(下書きバージョン)

Embed Size (px)

DESCRIPTION

本番用はこちら http://www.slideshare.net/tagomoris/devsumi2014-tagomoris

Citation preview

Page 1: 社内システムの構造と設計、実装のはなし(下書きバージョン)

社内システムの構造と設計実装のはなし

Developers Summit 2014 [13-B-3] devsumiB20140213tagomoris (TAGOMORI Satoshi)

TAGOMORI SATOSHI (TAGOMORIS)LINE CORP

DEVELOPMENT SUPPORT TEAM

まとめ

社内システムほど他システムとの連携を考えよう

つまり機能をAPIとして公開しよう

社内システムではHTTP JSON APIを使おう

実装は必要なところから必要なだけやろう

Webサービス今昔

Web20 とかマッシュアップ全盛期

OAuth 全盛期

WebAPI 制限期

Open WebにおけるAPI

トラフィックレスポンスタイム

誰がコストを払うの

互換性

API提供元もやり直したくなることは(よく)ある

社内システム

非公開サービス

性能よりも機能

長いライフサイクル

想定ユーザは「自分」

社内システムの機能認証

資産管理

動作状況モニタリング

データ蓄積

可視化

情報共有

プロトコル変換

便利UI提供

バージョン管理

helliphellip

何が問題なの情報と権限の分断どこになにがある どこで検索すればいいの

情報と機能の冗長化同じ社内でいくつパスワード持たせるんだよ

利用者の効率を考えないシステム勤怠入力300人の労力 gtgtgtgt 人事3人の労力

自動化の妨げになるシステムそこにしかない情報の参照にマウスクリックが必要

「全部入り」でアップデート不可能なシステムUIを持つシステム rarr クライアント更新も不可に

社内システムの連携DBを見る

SOAP CORBA

猫も194780子もSOAという時代があったんじゃよ

Enterprise Service Bus

RPC Protocols

Protocol Buffer Thrift XML-RPC

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 2: 社内システムの構造と設計、実装のはなし(下書きバージョン)

TAGOMORI SATOSHI (TAGOMORIS)LINE CORP

DEVELOPMENT SUPPORT TEAM

まとめ

社内システムほど他システムとの連携を考えよう

つまり機能をAPIとして公開しよう

社内システムではHTTP JSON APIを使おう

実装は必要なところから必要なだけやろう

Webサービス今昔

Web20 とかマッシュアップ全盛期

OAuth 全盛期

WebAPI 制限期

Open WebにおけるAPI

トラフィックレスポンスタイム

誰がコストを払うの

互換性

API提供元もやり直したくなることは(よく)ある

社内システム

非公開サービス

性能よりも機能

長いライフサイクル

想定ユーザは「自分」

社内システムの機能認証

資産管理

動作状況モニタリング

データ蓄積

可視化

情報共有

プロトコル変換

便利UI提供

バージョン管理

helliphellip

何が問題なの情報と権限の分断どこになにがある どこで検索すればいいの

情報と機能の冗長化同じ社内でいくつパスワード持たせるんだよ

利用者の効率を考えないシステム勤怠入力300人の労力 gtgtgtgt 人事3人の労力

自動化の妨げになるシステムそこにしかない情報の参照にマウスクリックが必要

「全部入り」でアップデート不可能なシステムUIを持つシステム rarr クライアント更新も不可に

社内システムの連携DBを見る

SOAP CORBA

猫も194780子もSOAという時代があったんじゃよ

Enterprise Service Bus

RPC Protocols

Protocol Buffer Thrift XML-RPC

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 3: 社内システムの構造と設計、実装のはなし(下書きバージョン)

まとめ

社内システムほど他システムとの連携を考えよう

つまり機能をAPIとして公開しよう

社内システムではHTTP JSON APIを使おう

実装は必要なところから必要なだけやろう

Webサービス今昔

Web20 とかマッシュアップ全盛期

OAuth 全盛期

WebAPI 制限期

Open WebにおけるAPI

トラフィックレスポンスタイム

誰がコストを払うの

互換性

API提供元もやり直したくなることは(よく)ある

社内システム

非公開サービス

性能よりも機能

長いライフサイクル

想定ユーザは「自分」

社内システムの機能認証

資産管理

動作状況モニタリング

データ蓄積

可視化

情報共有

プロトコル変換

便利UI提供

バージョン管理

helliphellip

何が問題なの情報と権限の分断どこになにがある どこで検索すればいいの

情報と機能の冗長化同じ社内でいくつパスワード持たせるんだよ

利用者の効率を考えないシステム勤怠入力300人の労力 gtgtgtgt 人事3人の労力

自動化の妨げになるシステムそこにしかない情報の参照にマウスクリックが必要

「全部入り」でアップデート不可能なシステムUIを持つシステム rarr クライアント更新も不可に

社内システムの連携DBを見る

SOAP CORBA

猫も194780子もSOAという時代があったんじゃよ

Enterprise Service Bus

RPC Protocols

Protocol Buffer Thrift XML-RPC

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 4: 社内システムの構造と設計、実装のはなし(下書きバージョン)

Webサービス今昔

Web20 とかマッシュアップ全盛期

OAuth 全盛期

WebAPI 制限期

Open WebにおけるAPI

トラフィックレスポンスタイム

誰がコストを払うの

互換性

API提供元もやり直したくなることは(よく)ある

社内システム

非公開サービス

性能よりも機能

長いライフサイクル

想定ユーザは「自分」

社内システムの機能認証

資産管理

動作状況モニタリング

データ蓄積

可視化

情報共有

プロトコル変換

便利UI提供

バージョン管理

helliphellip

何が問題なの情報と権限の分断どこになにがある どこで検索すればいいの

情報と機能の冗長化同じ社内でいくつパスワード持たせるんだよ

利用者の効率を考えないシステム勤怠入力300人の労力 gtgtgtgt 人事3人の労力

自動化の妨げになるシステムそこにしかない情報の参照にマウスクリックが必要

「全部入り」でアップデート不可能なシステムUIを持つシステム rarr クライアント更新も不可に

社内システムの連携DBを見る

SOAP CORBA

猫も194780子もSOAという時代があったんじゃよ

Enterprise Service Bus

RPC Protocols

Protocol Buffer Thrift XML-RPC

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 5: 社内システムの構造と設計、実装のはなし(下書きバージョン)

Open WebにおけるAPI

トラフィックレスポンスタイム

誰がコストを払うの

互換性

API提供元もやり直したくなることは(よく)ある

社内システム

非公開サービス

性能よりも機能

長いライフサイクル

想定ユーザは「自分」

社内システムの機能認証

資産管理

動作状況モニタリング

データ蓄積

可視化

情報共有

プロトコル変換

便利UI提供

バージョン管理

helliphellip

何が問題なの情報と権限の分断どこになにがある どこで検索すればいいの

情報と機能の冗長化同じ社内でいくつパスワード持たせるんだよ

利用者の効率を考えないシステム勤怠入力300人の労力 gtgtgtgt 人事3人の労力

自動化の妨げになるシステムそこにしかない情報の参照にマウスクリックが必要

「全部入り」でアップデート不可能なシステムUIを持つシステム rarr クライアント更新も不可に

社内システムの連携DBを見る

SOAP CORBA

猫も194780子もSOAという時代があったんじゃよ

Enterprise Service Bus

RPC Protocols

Protocol Buffer Thrift XML-RPC

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 6: 社内システムの構造と設計、実装のはなし(下書きバージョン)

社内システム

非公開サービス

性能よりも機能

長いライフサイクル

想定ユーザは「自分」

社内システムの機能認証

資産管理

動作状況モニタリング

データ蓄積

可視化

情報共有

プロトコル変換

便利UI提供

バージョン管理

helliphellip

何が問題なの情報と権限の分断どこになにがある どこで検索すればいいの

情報と機能の冗長化同じ社内でいくつパスワード持たせるんだよ

利用者の効率を考えないシステム勤怠入力300人の労力 gtgtgtgt 人事3人の労力

自動化の妨げになるシステムそこにしかない情報の参照にマウスクリックが必要

「全部入り」でアップデート不可能なシステムUIを持つシステム rarr クライアント更新も不可に

社内システムの連携DBを見る

SOAP CORBA

猫も194780子もSOAという時代があったんじゃよ

Enterprise Service Bus

RPC Protocols

Protocol Buffer Thrift XML-RPC

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 7: 社内システムの構造と設計、実装のはなし(下書きバージョン)

社内システムの機能認証

資産管理

動作状況モニタリング

データ蓄積

可視化

情報共有

プロトコル変換

便利UI提供

バージョン管理

helliphellip

何が問題なの情報と権限の分断どこになにがある どこで検索すればいいの

情報と機能の冗長化同じ社内でいくつパスワード持たせるんだよ

利用者の効率を考えないシステム勤怠入力300人の労力 gtgtgtgt 人事3人の労力

自動化の妨げになるシステムそこにしかない情報の参照にマウスクリックが必要

「全部入り」でアップデート不可能なシステムUIを持つシステム rarr クライアント更新も不可に

社内システムの連携DBを見る

SOAP CORBA

猫も194780子もSOAという時代があったんじゃよ

Enterprise Service Bus

RPC Protocols

Protocol Buffer Thrift XML-RPC

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 8: 社内システムの構造と設計、実装のはなし(下書きバージョン)

何が問題なの情報と権限の分断どこになにがある どこで検索すればいいの

情報と機能の冗長化同じ社内でいくつパスワード持たせるんだよ

利用者の効率を考えないシステム勤怠入力300人の労力 gtgtgtgt 人事3人の労力

自動化の妨げになるシステムそこにしかない情報の参照にマウスクリックが必要

「全部入り」でアップデート不可能なシステムUIを持つシステム rarr クライアント更新も不可に

社内システムの連携DBを見る

SOAP CORBA

猫も194780子もSOAという時代があったんじゃよ

Enterprise Service Bus

RPC Protocols

Protocol Buffer Thrift XML-RPC

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 9: 社内システムの構造と設計、実装のはなし(下書きバージョン)

社内システムの連携DBを見る

SOAP CORBA

猫も194780子もSOAという時代があったんじゃよ

Enterprise Service Bus

RPC Protocols

Protocol Buffer Thrift XML-RPC

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 10: 社内システムの構造と設計、実装のはなし(下書きバージョン)

Make it simple権限 分断を最小限にしよう

全員参照できてよい情報がほとんどでは

機能 複数の参照方法を最初から考えよう

ブラウザでの参照 + APIとしての参照

ブラウザも同じAPIを叩くのが最もシンプル

モジュール化 単機能システムを連携させよう

アップデートが容易な状態を保つ

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 11: 社内システムの構造と設計、実装のはなし(下書きバージョン)

1 社内システムほど他システムとの連携を考えよう

機能をAPIとして公開しよう

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 12: 社内システムの構造と設計、実装のはなし(下書きバージョン)

Closed WebにおけるAPIトラフィックレスポンスタイムデータ量が通常小さく問題になりにくい

誰がコストを払うの会社

互換性これが最大の問題API互換性を維持 + UIのアップデート

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 13: 社内システムの構造と設計、実装のはなし(下書きバージョン)

APIの互換性

プロトコルの互換性

データ構造の互換性

データそのものの一貫性の維持

クライアント要件の普遍性不変性

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 14: 社内システムの構造と設計、実装のはなし(下書きバージョン)

Protocols of internal APIThrift Protocol Buffers MessagePack-RPC

IDL

Performance

FTP RSH SSH

HTTP

SOAP XML-RPC MessagePack over HTTP

JSON

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 15: 社内システムの構造と設計、実装のはなし(下書きバージョン)

長期運用を前提にしようアップデートの容易さ

出力部分のシンプルさ

データ内容把握の容易さ

見ればわかる

テストの容易さ

curlで叩きたい

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 16: 社内システムの構造と設計、実装のはなし(下書きバージョン)

テスト容易性まじだいじ自動テストではなく人が試すこと

百聞は一見に如かず

ちょっと試して何が返ってくる何が見える

100ページのドキュメントより1回のcurl

パフォーマンスより大事

FacebookですらRPCはHTTPでよい (expresto)

疎結合

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 17: 社内システムの構造と設計、実装のはなし(下書きバージョン)

2社内システムではHTTP JSON APIを使おう

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 18: 社内システムの構造と設計、実装のはなし(下書きバージョン)

実装

社内システムですよ

自分達で作り自分達で使います

動くことが大事

ドキュメント大事

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 19: 社内システムの構造と設計、実装のはなし(下書きバージョン)

優先度使う機能使わない機能

顧客相手なら「こんなこともあろうかと」

自分相手なら

いま欲しい機能

簡単に実装できるいますぐには使わない機能

欲しい気がするけど微妙な機能

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 20: 社内システムの構造と設計、実装のはなし(下書きバージョン)

優先度ハックまあ忙しいよね

それ本当にJSON APIひとつ追加する30分も割けないくらい忙しいの

機能の追加ってそんな簡単じゃないよね

UIなしでSELECT結果をJSON出力するだけが本当にそんなに難しい

疎結合モジュールの集合にする

単機能追加の時間単位を切り刻む

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 21: 社内システムの構造と設計、実装のはなし(下書きバージョン)

逆優先度ハック切り刻まれた細かい機能追加タスク

それ今いらないなら後でやればいいのでは

だっていつでもできるでしょ

後でやればいいなら今後何が必要か考えなくていいのでは

(将来の)要件定義は難しいなら後回しにしよう

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 22: 社内システムの構造と設計、実装のはなし(下書きバージョン)

3実装は必要なところから必要なだけやろう

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 23: 社内システムの構造と設計、実装のはなし(下書きバージョン)

アーキテクチャと開発運用の関係

アーキテクチャの割り切りが開発運用を加速する

開発運用の前提がアーキテクチャをシンプルにする

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 24: 社内システムの構造と設計、実装のはなし(下書きバージョン)

ビジネスへのインパクト社内システムほど試しやすい場は無い

誰か損する

誰もが得するでしょ

顧客は自分

自分が嫌なものは作らないでしょ

自分が使いたいものを使えるでしょ

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS

Page 25: 社内システムの構造と設計、実装のはなし(下書きバージョン)

TO MAKE IT SIMPLEMAKES OUR OWN ENVIRONMENTS

BETTER THAN BEFORE

LETrsquoS DO WITH YOUR OWN SYSTEMS