0
社内システムの
構造と設計、実装のはなし
Developers Summit 2014 [13-B-3] #devsumiB
2014/02/13
@tagomoris (TAGOMORI Satoshi)
TAGOMORI SATOSHI (@TAGOMORIS)
LINE CORP.
DEVELOPMENT SUPPORT TEAM
まとめ
社内システムほど他システムとの連携を考えよう
つまり機能をAPIとして公開しよう
社内システムではHTTP JSON APIを使おう
実装は必要なところから、必要なだけやろう
Webサービス今昔
Web2.0 とかマッシュアップ全盛期
OAuth 全盛期
WebAPI 制限期
Open WebにおけるAPI
トラフィック・レスポンスタイム
誰がコストを払うの?
互換性
API提供元もやり直したくなることは(よく)ある
社内システム
非公開サービス
性能よりも機能
長いライフサイクル
想定ユーザは「自分」
社内システムの機能
認証

情報共有

資産管理

プロトコル変換

動作状況モニタリング

便利UI提供

データ蓄積

バージョン管理

可視化

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

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

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

自動化の妨げ...
社内システムの連携
DBを見る
SOAP! CORBA!
猫も

子も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 API
Thrift, Protocol Buffers, MessagePack-RPC
IDL
Performance
FTP, RSH, SSH
HTTP
SOAP, XML-RPC, Messa...
長期運用を前提にしよう
アップデートの容易さ
出力部分のシンプルさ
データ内容把握の容易さ
見ればわかる!
テストの容易さ
curlで叩きたい
テスト容易性まじだいじ
自動テストではなく、人が試す、こと
百聞は一見に如かず
ちょっと試して何が返ってくる、何が見える
100ページのドキュメントより1回のcurl
パフォーマンスより大事
Facebookですら、RPCはHTTPでよい (e...
2.
社内システムではHTTP JSON APIを使おう
実装
社内システムですよ
自分達で作り、自分達で使います
動くことが大事
ドキュメント、大事?
優先度
使う機能、使わない機能
顧客相手なら「こんなこともあろうかと」
自分相手なら?
いま欲しい機能
簡単に実装できる、いますぐには使わない機能
欲しい気がするけど、微妙な機能
優先度ハック
まあ、忙しいよね
それ、本当にJSON APIひとつ追加する30分も割
けないくらい忙しいの?
機能の追加ってそんな簡単じゃないよね
UIなしでSELECT結果をJSON出力するだけが本
当にそんなに難しい?
疎結合モジュールの集...
逆優先度ハック
切り刻まれた細かい機能追加タスク
それ、今いらないなら後でやればいいのでは?
だっていつでもできるでしょ
後でやればいいなら、今後何が必要か考えなくて
いいのでは?
(将来の)要件定義は難しい、なら後回しにしよう
3.
実装は必要なところから、必要なだけやろう
アーキテクチャと
開発・運用の関係
アーキテクチャの割り切りが開発・運用を加速する
開発・運用の前提がアーキテクチャをシンプルにする
ビジネスへのインパクト
社内システムほど試しやすい場は無い
誰か損する?
誰もが得するでしょ?
顧客は自分
自分が嫌なものは作らないでしょ?
自分が使いたいものを使えるでしょ?
TO MAKE IT SIMPLE
MAKES OUR OWN ENVIRONMENTS
BETTER THAN BEFORE.

LET’S DO WITH YOUR OWN SYSTEMS!
社内システムの構造と設計、実装のはなし(下書きバージョン)
社内システムの構造と設計、実装のはなし(下書きバージョン)
Upcoming SlideShare
Loading in...5
×

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

9,941

Published on

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

Published in: Technology
0 Comments
25 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,941
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
17
Comments
0
Likes
25
Embeds 0
No embeds

No notes for slide

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

  1. 1. 社内システムの 構造と設計、実装のはなし Developers Summit 2014 [13-B-3] #devsumiB 2014/02/13 @tagomoris (TAGOMORI Satoshi)
  2. 2. TAGOMORI SATOSHI (@TAGOMORIS) LINE CORP. DEVELOPMENT SUPPORT TEAM
  3. 3. まとめ 社内システムほど他システムとの連携を考えよう つまり機能をAPIとして公開しよう 社内システムではHTTP JSON APIを使おう 実装は必要なところから、必要なだけやろう
  4. 4. Webサービス今昔 Web2.0 とかマッシュアップ全盛期 OAuth 全盛期 WebAPI 制限期
  5. 5. Open WebにおけるAPI トラフィック・レスポンスタイム 誰がコストを払うの? 互換性 API提供元もやり直したくなることは(よく)ある
  6. 6. 社内システム 非公開サービス 性能よりも機能 長いライフサイクル 想定ユーザは「自分」
  7. 7. 社内システムの機能 認証 情報共有 資産管理 プロトコル変換 動作状況モニタリング 便利UI提供 データ蓄積 バージョン管理 可視化 ……。
  8. 8. 何が問題なの? 情報と権限の分断 どこになにがある? どこで検索すればいいの? 情報と機能の冗長化 同じ社内でいくつパスワード持たせるんだよ! 利用者の効率を考えないシステム 勤怠入力300人の労力 >>>> 人事3人の労力 自動化の妨げになるシステム そこにしかない情報の参照にマウスクリックが必要 「全部入り」でアップデート不可能なシステム UIを持つシステム → クライアント更新も不可に
  9. 9. 社内システムの連携 DBを見る SOAP! CORBA! 猫も 子もSOAという時代があったんじゃよ Enterprise Service Bus RPC Protocols Protocol Buffer, Thrift, XML-RPC, ...
  10. 10. Make it simple! 権限: 分断を最小限にしよう 全員参照できてよい情報がほとんどでは? 機能: 複数の参照方法を最初から考えよう ブラウザでの参照 + APIとしての参照 ブラウザも同じAPIを叩くのが最もシンプル モジュール化: 単機能システムを連携させよう アップデートが容易な状態を保つ
  11. 11. 1. 社内システムほど他システムとの連携を考えよう 機能をAPIとして公開しよう
  12. 12. Closed WebにおけるAPI トラフィック・レスポンスタイム データ量が通常小さく問題になりにくい 誰がコストを払うの? 会社! 互換性 これが最大の問題 API互換性を維持 + UIのアップデート?
  13. 13. APIの互換性 プロトコルの互換性 データ構造の互換性 データそのものの一貫性の維持 クライアント要件の普遍性/不変性
  14. 14. Protocols of internal API Thrift, Protocol Buffers, MessagePack-RPC IDL Performance FTP, RSH, SSH HTTP SOAP, XML-RPC, MessagePack over HTTP JSON
  15. 15. 長期運用を前提にしよう アップデートの容易さ 出力部分のシンプルさ データ内容把握の容易さ 見ればわかる! テストの容易さ curlで叩きたい
  16. 16. テスト容易性まじだいじ 自動テストではなく、人が試す、こと 百聞は一見に如かず ちょっと試して何が返ってくる、何が見える 100ページのドキュメントより1回のcurl パフォーマンスより大事 Facebookですら、RPCはHTTPでよい (ex:presto) 疎結合
  17. 17. 2. 社内システムではHTTP JSON APIを使おう
  18. 18. 実装 社内システムですよ 自分達で作り、自分達で使います 動くことが大事 ドキュメント、大事?
  19. 19. 優先度 使う機能、使わない機能 顧客相手なら「こんなこともあろうかと」 自分相手なら? いま欲しい機能 簡単に実装できる、いますぐには使わない機能 欲しい気がするけど、微妙な機能
  20. 20. 優先度ハック まあ、忙しいよね それ、本当にJSON APIひとつ追加する30分も割 けないくらい忙しいの? 機能の追加ってそんな簡単じゃないよね UIなしでSELECT結果をJSON出力するだけが本 当にそんなに難しい? 疎結合モジュールの集合にする 単機能追加の時間単位を切り刻む
  21. 21. 逆優先度ハック 切り刻まれた細かい機能追加タスク それ、今いらないなら後でやればいいのでは? だっていつでもできるでしょ 後でやればいいなら、今後何が必要か考えなくて いいのでは? (将来の)要件定義は難しい、なら後回しにしよう
  22. 22. 3. 実装は必要なところから、必要なだけやろう
  23. 23. アーキテクチャと 開発・運用の関係 アーキテクチャの割り切りが開発・運用を加速する 開発・運用の前提がアーキテクチャをシンプルにする
  24. 24. ビジネスへのインパクト 社内システムほど試しやすい場は無い 誰か損する? 誰もが得するでしょ? 顧客は自分 自分が嫌なものは作らないでしょ? 自分が使いたいものを使えるでしょ?
  25. 25. TO MAKE IT SIMPLE MAKES OUR OWN ENVIRONMENTS BETTER THAN BEFORE. LET’S DO WITH YOUR OWN SYSTEMS!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×