Consumer-Driven Contractの雑なまとめ
Consumer-Driven Contractとは
用語
Consumer サービスを使う側(リクエストを投げてレスポンスを受ける側)
Provider サービスを提供する側(リクエストを受けてレスポンスを返す側)
Contract Consumerが期待するリクエストとレスポンスの定義
Mock Service Provider Consumerのテストを実施する際に利用するもの
Pact Broker https://github.com/bethesque/pact_broker ConsumerとProviderでのpact共有の課題を解決する
仕組み
ConsumerがProviderに期待する振る舞い(Contract)を提供し、Providerはそれに準じた挙動をしているか検証する。 Providerの挙動がContractと異なる場合にProvider側での検知が可能となる。 サービス間の振る舞いを、より大きな枠で担保する仕組み。
Consumer側が主導権を握っている。
Mock Service Providerを利用するので、テストコードにいちいちMockを書かなくても良い。
pact brokerを用いた仕組み
- CIでConsumerのテストを回す
- テストを実施するとjson形式のpactファイルが出力される
- Pact Brokerにpactを送信する
- Pact Brokerの最新のpactでProviderのテストを回す
なぜCDCが必要か
- それぞれの単体テストでMockを書いたとして、そのMockが本当に正しい振る舞いをしているかが保証されていない
pactとは
consumer-driven contract testing tool.
example project
http://io.itv.com/scala-pact/examples/index.html
pactStubber
で簡単にスタブサーバーを立てることが出来る。
CI用にスタンドアローンにすることも可能。
コスト
- すべてのサービスを立ち上げて結合テストを回すことと、CDCでテストを回すことのどちらがコストが高いのか
- contractのすべてをまかなえるのだろうか?
プロダクションレディマイクロサービス ―運用に強い本番対応システムの実装と標準化
- 作者: Susan J. Fowler,佐藤直生,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/09/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Elixir ecto で bigint を使う
↓のように bigserial
を使えばOK
def change do create table(:users, primary_key: false) do add :user_id, :bigserial, primary_key: true timestamps() end end
※ コマンドでbigserialを指定するのは無理っぽい
$ mix phx.gen.schema Accounts.User users user_id:integer ** (Mix) Unknown type `:bigserial` given to generator. The supported types are: array, binary, boolean, date, decimal, float, integer, map, naive_datetime, references, string, text, time, utc_datetime, uuid
- 作者: DaveThomas
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- この商品を含むブログを見る
npm runとはなにか
package.jsonに記述しているscriptsに定義されたタスクを実行させるためのコマンド
npm run {scriptsに定義されたタスク名}
という感じ
例えば以下のような定義があれば
// 略 "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", } // 略
npm run dev
と叩くことでタスクが実行される
WebRTCをいろいろ調べてまとめてみた
www.slideshare.net
ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化
- 作者: Ilya Grigorik,和田祐一郎,株式会社プログラミングシステム社
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/05/16
- メディア: 大型本
- この商品を含むブログ (3件) を見る
B to Cサービスの難しさとその崩壊 - ビジョンを失うということ -
夢に満ち溢れた初期
初期段階は、サービスを作って誰かの役に立つこと、社会へのインパクトを夢にサービスを作りはじめる
その夢が正しいかどうかわからない
だからいかに早く市場へ出すかに注力する
多少汚いコードであっても、後々に負債になることがわかっていても
この時のファースト・プライオリティはサービスを世に出す事である
市場に受け入れられるか受け入れられないかがわからないものに時間と金をつぎ込み続けるのは愚かである
少人数のメンバーで全員がそれを理解してスピード感を持って開発に臨む
どんなに大変だったとしてもそこには希望がある
社会のために
世の中をより豊かにするために
自らの手でイノベーションを起こすことへの高揚感にあふれ
世界の革新を胸に秘めて
ローンチ
ある程度形になった段階でローンチされるサービス
まだまだ未熟ではあるが、その思想や未来に期待したイノベーターが付く
顧客は契約の段階では、思想や未来に胸を膨らませて契約を行うが
いざ業務において使い始めると、不足していることがたくさん目についてくる
すると、はじめは要望として様々なものがあげられてくる
開発者たちは自分たちの目指す思想・未来と照らし合わせて
取捨選択を行い
時には大胆な方向転換を行う
初期段階は少人数での開発であり、コードもまだまだ少ないためそれほど難しくはない
顧客の増加と売上
様々な要望を取り入れていくと、細かい部分では気になるところはあるものの
大枠では使えるサービスが出来上がってくる
この頃にはアーリーアダプターもそこそこの数になり
アーリーマジョリティが付いてくる
そうなってくると、このサービスはどんどん伸びていくものであると経営的判断がなされる
すると何が起きるか
急速な人員の増加と、売上伸長へ意識偏重
エンジニア、セールス問わず急拡大が行われる
新規採用・他部署からの異動
人を集める方法はいくらでもある
急速な組織の拡大
少人数で壮大なビジョンを掲げて開発して来たところに
急な転換
なにが起きるか
少人数で図れていた意思疎通ができなくなる
コードが崩れはじめる
初期メンバーはどこが負債になるかを理解しているし
なぜその負債が生まれているかは十分な理解をし共通認識として受け入れている
けれども、急拡大にて配属された人にはそういった共通認識もない
目にするのは人の手垢まみれのコードだ
そこに思い入れはない
そうこうしているうちに別の新規事業立ち上げで初期メンバーは引き抜かれていく
残るのはほんの一握りの初期メンバーと、出鼻を挫かれた途中入場のメンバーだ
途中入場者は初期メンバーの残した負債に苦しむことになる
負債に足を取られながらも売上を上げるために
開発スピードを落とさないために努力する
しかし、そこには行き場のない怒りと虚しさがある
途中入場者も初期メンバーの残した負債の理由を理解できるからだ
理解できるからこそ、その怒りの矛先をどこに向けることも出来ず
苦悩する
徒労でしかない
コードに限界が来たときに
大きなテコ入れをしようとしたときに
どれほどのメンバーが快く手を挙げるだろうか
売上伸長
売上を伸ばすためにトップが変わる
どんなにエンジニア経験のあるトップであって
エンジニアの心を理解しようと努めても
経営層から売上を求められている以上、思いはどうしても売上へ変調し偏重する
そして次第に
壮大なビジョンは失われる
そのトップにとっては、今自分が抱えているサービスの売上を伸ばすことがファースト・プライオリティだから
最初のビジョンがどうあろうと関係ない
最初のビジョンを理解していたとしてもそれを推し進めるだけの推進力はない
なぜなら最初からそこに携わっていないからそのビジョンに対する熱量がない
その熱量の違いから何が起きるのだろう
顧客が求めるものを作り続けるだけの日々
ときに自らの発想でものを作るが続かない
もどかしい
誰のための
一体、誰のためなんのためにサービスを作っているのか
組織の急拡大に向けて採用された人物は
少人数でやっていたころのビジョンやその組織のあり方に突き動かされて来た人たちばかりだ
それがいざ足を踏み入れるとそこにはあの頃の輝きはもうない
見えない敵と戦う日々
暗闇でもがく日々
崩壊
少人数でのマネジメントは大人数には使えない
破壊して構築しなおすか
構築し直すだけの希望はパンドラの箱に残っているだろうか
夢見るその先は
エンジニアはものを作ることがゴールではない
その先になにを夢見るのか
- 作者: リチャード・シェリダン
- 出版社/メーカー: 翔泳社
- 発売日: 2017/01/20
- メディア: Kindle版
- この商品を含むブログを見る
Elixir のサンプル
1対多のテーブルとか
Elixir ecto の自動生成IDをUUIDにする
- 作者: Dave Thomas,笹田耕一,鳥井雪
- 出版社/メーカー: オーム社
- 発売日: 2016/08/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
Elixir/Phoenix 初級?: はじめの一歩 (OIAX BOOKS)
- 作者: 黒田努
- 出版社/メーカー: 株式会社オイアクス
- 発売日: 2016/11/21
- メディア: Kindle版
- この商品を含むブログを見る