Weitere ähnliche Inhalte
Ähnlich wie Bpstudy20180725 (20)
Mehr von Shinichiro Takezaki (9)
Bpstudy20180725
- 1. Copyright © Virtual Technology, Inc
サーバ構築ゼロで
フロントエンドが主役の開発を
2018/7/25 BPStudy#131 ⽵嵜 伸⼀郎(@stakezaki)
1
- 2. Copyright © Virtual Technology, Inc
⽵嵜 伸⼀郎 (たけざき しんいちろう)
twitter id:stakezaki
(有)バーチャルテクノロジー代表取締役
元⽇本IBM
元株式会社暮らしのデザインCTO
2
- 3. Copyright © Virtual Technology, Inc
vte.cx 半端ないって!
あいつ 半端ないって!
だってjavascriptだけで
Webサービス作れるんやで!
そんなん出来ひんやん 普通!
3
vte.cx(ブイテックス)
著作権フリー画像
- 5. Copyright © Virtual Technology, Inc
何で作ったか?
• 楽しく仕事したい
• ゴールドラッシュではツルハシを売れ
• 既存技術に満⾜できなかった
5
「成功の確率はとても低いことをよく知っています。
それでもスタートアップを始めるのはそれがどうしてもやりたいことだからです。」
<本⾳>
- 6. Copyright © Virtual Technology, Inc
楽しく仕事したい
• やっつけ仕事でなく楽しく開発したい
– ミドルウェアや⾃社サービスの開発は楽しい。
しかし、受託開発は⾟い。=やっつけ感
– ⼈材派遣商売はいつか⾏き詰まる。
• 弊社エンジニアの⼀⼈がうつ病に
6
派遣の仕事をやめ、 vte.cxの受託案件だけに絞った
これで、⾃社サービスと同じような開発スタイルで
「持ち帰り」で「アジャイル」開発することが可能になった
また、積極的にOSSにしていくことでモチベーションアップ
- 7. Copyright © Virtual Technology, Inc
ゴールドラッシュではツルハシを売れ
• ゴールドラッシュで最も⼤きな成功を収めたの
は採掘者たちに必需品を売った⼈
• ⼀般ユーザ向けにサービスを提供する(⾃⾝で
⾦を採掘する)か、⼀般ユーザ向けにサービス
を開発しているデベロッパー向けにツールを売
るか(ツルハシを売る)
7
BaaS=ツルハシ
- 8. Copyright © Virtual Technology, Inc
業務アプリのお決まり機能を提供
• ログイン認証
• データ⼊⼒フォーム
• ⼀覧表⽰
• ページネーション
• CSVアップロード
• PDF帳票出⼒
• メール送信
• データ分析
8
スクラッチで作る必要がない
⼯数削減、短納期で開発可能
エンジニアはきっと⾶びつく
だろうと考えていた
- 9. Copyright © Virtual Technology, Inc
しかしエンジニアに全く興味持ってもらえず
9
フレームワーク
売ってまーす。
しーん
・ ・ ・
ツルハシ(BaaS)
使いませんか?
「つまり、エンジニアが欲しがるものを作っていなかった」
お客様
(エンジニア)
- 10. Copyright © Virtual Technology, Inc
エンドユーザに直接アプローチ
10
⼀緒に作りましょう!
早いし安いよ!
受注システム
欲しいなあ
WoW!
お客様
(エンドユーザ)
顧客の抱える課題の専⾨家になり顧客に愛されるプロダクトを作ることだけに集中
- 12. Copyright © Virtual Technology, Inc
Firebaseとは競合しません!
• vte.cxは業務システム(例えば、受発注システム
や在庫管理システムなど)をターゲットとして
います。
12
• ログイン認証
• データ⼊⼒フォーム
• ⼀覧表⽰
• ページネーション
• CSVアップロード
• PDF帳票出⼒
• メール送信
• データ分析
Vte.cxが得意とするところ
- 13. Copyright © Virtual Technology, Inc
想定しているお客様
• ⾃社でWebサービスを⽴ち上げたい
• 開発+サービスの運⽤もまかせたい
• SaaS/パッケージ製品では機能がフィット
しない。カスタマイズできるものがほしい
13
これって
機能追加できる?
お客様
はい、
すぐにできます。
vte.cx開発者
BaaS
- 14. Copyright © Virtual Technology, Inc
ビジネス領域
14
所有
利⽤
特化 ⼀般
SaaS
IaaS
PaaS BaaS
パッケージSI フレームワーク+
カスタマイズ
オンプレミス
クラウド
• 圧倒的な パフォーマンス+スケーラビリティ を 低価格 で提供
• SaaSでは対応できない 特定顧客向けソリューション を素早く提供
コンペの多く
がココ
2/17
PHP FW
超高速
開発
- 15. Copyright © Virtual Technology, Inc
特定顧客向けソリューションをやる理由
15
• 最初はツルハシ(BaaS)だけで商売できたらいいな
と思っていたがうまくいかないことがわかった
• 潜在ユーザーを信じて戦い続けるのは鉄のメンタ
ルと経済⾁体双⽅の体⼒が要る。たぶん、負ける
• やはりキラーアプリケーションが必要
• お客様と共同開発でOSS化
• 現在、受注在庫管理システム、倉庫管理シス
テムを開発中(OSSで公開予定)
• 私達は開発⾃体は好き。ミドルウェアだけでなく
新規のサービスを作っていきたいし⾃分たちで作
ることで改善点もわかる(ドックフーディング)
- 16. Copyright © Virtual Technology, Inc
BaaS+OSS戦略で勝算アリ!?
• 既存システム(受注・在庫管理システム
等)のOSSを提供、カストマイズする戦略
• 圧倒的な開発スピードと低コスト
• 運⽤費はもともと安い(オンプレ⽐1/10)
16
オンプレのパッケージには絶対負けないはず
※個⼈的感覚
- 17. Copyright © Virtual Technology, Inc
何で作ったか?
• 楽しく仕事したい
• ゴールドラッシュではツルハシを売れ
• 既存技術に満⾜できなかった
17
ここからは技術的な話が中⼼になります。
あくまで個⼈的で主観的な内容です。
またお客様にとってみたらどうでもいい話
- 18. Copyright © Virtual Technology, Inc
l
View Service Resource
既存技術に満⾜できなかった
2007年頃、ECサイトをオンプレミスで開発(⼀応、マイクロサービス)
品質最悪
スケールしない
三重苦
管理が⼤変
- 20. Copyright © Virtual Technology, Inc
乗り越えなきゃいけない課題
• 運⽤管理を楽にする
• スケーラビリティを確保
• アプリの品質向上
• 可⽤性向上
20
- 21. Copyright © Virtual Technology, Inc
「先進の技術」なんてのはIT屋の寝⾔
• エンドユーザはシステム開発を必要悪と
して認めているにすぎない。開発しない
で済むならそうしたいと思っている。
• ⼀⽅のエンジニアは新技術を採⽤したが
りそれによって⼯数が膨れても当然とい
う顔をする。
21
サーバレス、マイクロサービス、OpenAPI、GraphQL、・・・
楽しさという罠にハマり、やりたいことをやるのがエンジニア
- 22. Copyright © Virtual Technology, Inc
本質的なことに集中しよう
• 「本来の、本質的な」=バーチャル
• お客様はWebサービスを素早く構築して
世の中に出したいと思っているはず
• いかに内部の設計が素晴らしくても膨⼤
な⼯数と時間がかかってしまっては意味
がない
22
- 23. Copyright © Virtual Technology, Inc
いろいろやめた
• PHPをやめてReactのSPAに
• RDBをやめKVS(Datastore)+BigQuery
• Microservicesをやめてk8s構成に
• Thin Server Architecture
ではなくBFFの導⼊
23
- 24. Copyright © Virtual Technology, Inc
SPA(Single Page Application)
• サーバーでHTMLを⽣成するよりも、
クライアントで動的に画⾯を更新する⽅が効率的
• ユーザーの操作に応じてインタラクティブに動く
リッチクライアントを実現できる
24
これってネイティブアプリ?
お客様
いいえ、Webアプリです。
開発者
SPA
- 25. Copyright © Virtual Technology, Inc
フロントエンド中⼼の世界感
• HTML、CSS、JavaScriptなどのコーディングだ
けで本格的なWebシステムを作れるようにした
• サーバサイドのAPI (API設計とスキーマ)もフロ
ントエンドエンジニアが⾃由に作れるようにした
• JavaScriptのエコシステムを採⽤することでロッ
クインを排除した
25
- 26. Copyright © Virtual Technology, Inc
vte.cxのこだわり
• バックエンドの複雑さを隠蔽
– サーバ構成の都合をクライアントに押し付けない
– Microservicesでありがちな認証などの考慮をクライア
ントにさせない
• Webアプリのことだけに集中させる
– 重要なのはAPIとスキーマ設計(+ACL)
– 静的コンテンツを含めSame Originで管理する
• ローカル開発環境やCI/CD環境を提供
– JavaScriptエコシステムを利⽤したローカル開発環境
– 複数のブランチに対応したサービスを⾃由に作成可能
– CircleCIなどによる⾃動デプロイ
26
- 27. Copyright © Virtual Technology, Inc
Thin Server Architecture
27
・・・
REST
• クライアントからRESTでサーバリソースにアクセス
• サーバからはJSONやXMLのデータを返すのみ
データ
- 28. Copyright © Virtual Technology, Inc28
• URLをフォルダに⾒⽴てて⾃由に設定・追加可能
• リソースを様々なフォーマットに変換可能
• XML、JSON、MessagePack等などのデータ
• HTMLやCSS、JavaScript、PDF、画像などの静的コンテンツ
REST APIと直感的な規約
- 29. Copyright © Virtual Technology, Inc
API以外の余計なことは考えたくない
29
適当に分散して勝⼿にスケールすることを期待
これが真のサーバレスではないのか!?
- 30. Copyright © Virtual Technology, Inc
ちなみにサーバレス アーキテクチャー
(FaaS)
30
API Gateway
Lambda
Cognito SNSDynamoDB
Cloud Front
S3
clientmobile client
- 31. Copyright © Virtual Technology, Inc
Webプラットフォームとしては時期尚早
• 静的コンテンツとAPIが異なるドメイン
– CORSの設定なんか画⾯からやりたくない
– イベント・ドリブンでWebアプリ作れんの?
– あとセッション管理どうすんの?
• デプロイどうすんの?
• Spinup、200ms問題
• サービス利⽤には認証が必要
– CognitoのSecurity Token Service
• たぶん、Knativeも同じ31
- 32. Copyright © Virtual Technology, Inc
Kubernetes !!これでしょ!
•無停⽌メンテナンス
•可⽤性向上
•スケールアウト
•ログ⼀元管理
32
- 33. Copyright © Virtual Technology, Inc
サーバ側すべてをサービス化
• DBの設定⾃体はそれほど難しくないがその後の運⽤が⼤変=>KVSに
• トラフィックが増えたらサーバを増やす、運⽤状態をモニターする、その
他無数の管理業務がある=>k8sの運⽤監視、StackDriver
33
すべてをサービス化することで運⽤コストを劇的に下げる
- 34. Copyright © Virtual Technology, Inc
WebスケールIT
• グーグルやアマゾン、フェイスブックといった
⼤⼿のクラウド特有のアーキテクチャによる分
散システムで、⾼度に⾃動化された運⽤管理に
より、システム規模の拡張にも、負荷を最⼩限
に抑えることが可能な特⻑を備えるもの
• このアーキテクチャを適⽤させることにより、
⼩規模のサービス・プロバイダーでも、「⼤規
模なクラウド・サービス・プロバイダーと同じ
能⼒を提供するグローバル・クラスのコン
ピューティング様式」を実現することが可能
34
- 35. Copyright © Virtual Technology, Inc
Microservicesをやめた
• 機能が増えたらその都度サービスを⽴てるのか?
• BaaSでは論理的にサービスを追加でき⾃由にAPI
を作ることができる。それで⼗分では?
35
“ソフトウェアシステムの⼤多数は、
単⼀のモノリシックアプリケーション
として構築されるべきである”
by Martin Fowler
- 36. Copyright © Virtual Technology, Inc
36
ビジネスロジック PDFService
モノリスにしてkubernetes構成
ビジネスロジック
+PDFService
ビジネスロジック
+PDFService
分散するとスケーラビリティと
可⽤性の対応が難しくなる
Microserviceによる構成
オーケストレーションツールにスケーラ
ビリティと可⽤性の対応を任せられる
ビジネスロジック と PDFServiceは⾮⼲渉化
されており、変更がお互いに影響されること
はない
ノード1 ノード2
ノード1
ノード2
機能単位でわけるならモノリスで⼗分
- 37. Copyright © Virtual Technology, Inc
マルチテナントで実現するMicroservices
それぞれが独⽴して動作するアプリケーション
37
Microservicesの単位は実はもっと⼤きい
販売管理
サービス
受注出荷管理
サービス
API連携
- 38. Copyright © Virtual Technology, Inc38
しかしフロントの責務が増える
http://www.slideshare.net/fullscreen/sagawafumio/ss-38480894/6
- 39. Copyright © Virtual Technology, Inc
BFF(Backend for Frontend)の導⼊
• クライアント偏重の是正
– ⾮同期コールバック地獄に陥りがちなクライアントより
サーバで処理実⾏した⽅が有利であることに気づく
• Thin Server Architectureを⾒直し
– サーバサイドの開発はやはり必要
– Server Side Javascriptでビジネスロジック記述
• Isomorphic(Universal)
– SSR、動的PDF出⼒
– サーバで同期実⾏
39
例えば、
鏡と明細の
マージ編集
- 40. Copyright © Virtual Technology, Inc
FrontendとServer Side
40
Browser
(React)
Backends for
Frontends
(Server Side
JavaScripr)
Datastore
Bigquery
vte.cx API
Frontend Server Side
BFFはServer SideにあるFrontend機能のこと
Client Side
- 41. Copyright © Virtual Technology, Inc
GraphQLではなくBFFで
• GraphQLが解決しようとしていること
– クライアントからリクエストを何度も発⾏する
必要がある(N+1問題)
– 提供されているAPIが不⼗分だと、クライアント
側でテーブル結合する必要があるなど
• そもそもAPI変更コストが⼤きいという前提がまずい
– サーバ側の変更は基本的に⼤変なのでAPIはなるべく変更した
くないという背景(変更に数週間かかるなど)
– APIは最⼤公約数的なものになってしまいがち
41
結局はクライアントで頑張る発想から超えられないGraphQL
⼀⽅、柔軟にAPIを作成でき、かつ、開発コストも低い
BFF(ServersideJS)があればGraphQLは不要ではないか!?
- 42. Copyright © Virtual Technology, Inc
型
• 型があれば10%〜20%のバグを減らすこ
とができるとの調査結果
• サーバサイドにおける動的型付け⾔語疲れ
42
- 43. Copyright © Virtual Technology, Inc
エントリスキーマ
• シンプルなシンタックス
– 「項⽬名(型)= 正規表現」の形式で記述
– Indexを指定可能
– 正規表現でバリデーション
• ソフトスキーマ
– 項⽬の追加が可能
– 運⽤中でも変更可
43
- 45. Copyright © Virtual Technology, Inc
まとめ:採⽤してよかった技術
• SPA(React/React Native)
• TypeScript
• ソフトスキーマ
• BFF(Server Side JavaScript)
• Kubernetes(GKE)
• Google Datastore
• Google Bigtable
45
圧倒的な開発⽣産性
⾼いクオリティ
スケーラビリティ
⾼可⽤性
低コスト
運⽤保守(DevOps)
- 46. Copyright © Virtual Technology, Inc
まとめ:採⽤しなかった技術
• Microservices
• Serverless(FaaS)
• OpenAPI
• GraphQL
46
- 47. Copyright © Virtual Technology, Inc
ビジョン
”もうフルスタックエンジニアはいらない。
HTMLとJSの知識さえあればWebサービスを
開発できる。
そのような世界を私たちは⽬指しています。”
47