モックサービスmastermindを使って開発を効率的に
メディアシステム開発部の野崎です。 auスマートパスなどのサーバサイド開発を担当しております。
担当システムの特徴としては、連携システムが多いことですが、より効率的に開発運用したい感じることが多いため、mastermindというモックサービスを試してみます。
はじめに
mastermindとは
- mitmproxyを利用したmockサービスである
- URLごとやURL patternごとに定義する
- 定義ごとにHTTP(S)リクエストを遮断し、レスポンスを改ざんする
- ustwoという会社でつくられているらしい
- MIT License で提供
- 2016/07現在のところ、v0.9.0が最新版
インストール
以下の環境で試しています。
- Mac OS X: 10.11.5
- Webブラウザ:Google Chrome
インストールは、こちらを参考に進めていきます。
mastermindのインストール
homebrewを使いインストールします。
$ brew tap ustwo/tools
$ brew install mastermind
証明書をインストール
次にhttps通信も扱うため、mitmproxyの証明書をインストールします。 まず下記のコマンドで、mastermindを起動します。
$ sudo mastermind --with-driver --source-dir .
ブラウザで、http://mitm.it/ を開きます。
このようなページが閲覧できるので、Appleのアイコンを押下します。
すると mitmproxy-ca-cert.pem
という証明書をDLできるのでインストールしましょう。キーチェーンアクセス.appでインストールの確認が出来ます。
サンプルコード
サンプルコードの説明
さて、こちらのサンプルコードを使って、機能を試してみます。
$ git clone https://github.com/nozaki-mediba/mastermind-sample.git
$ cd mastermind-sample
サンプルの中は以下の構造になっています。
├── rulesets
│ ├── 168x40.png
│ ├── 544x184.png
│ ├── sample1.yaml ⇛ ruleset
│ └── sample2.yaml ⇛ ruleset
└── sample.toml ⇛ config
mastermindの使い方概要
ここで使い方を簡単にまとめておきます。 大きく設定する箇所は2点あります。
- config:mastermindのhost,portの設定やrulesetの指定を行う。
- ruleset:どのURLをmockにするかを指定する。
mastermindの起動停止
sample.toml
をconfigとし、起動する場合以下のコマンドです。
$ sudo mastermind --config sample.toml
停止はctrl+c
らしいですが上手くいかない場合もありました。その場合は下記のコマンドで停止出来ました。
$ sudo killall -9 mastermind && sudo proxyswitch --disable
rulesetの状態切り替え
rulesetの状態を変更したり確認したりします。
- ruleset xxxの有効化 http://proxapp:5000/xxx/start/
- rulesetの状態確認 http://proxapp:5000/state/
- rulesetの無効化 http://proxapp:5000/stop/
1. PCのブラウザで試してみる
では、https://www.google.co.jp/ を使って試してみます。 このページのGoogleのロゴをローカルのものに差し替えてみます。
まずmastermindを起動します。
$ sudo mastermind --config sample.toml
この状態で、sample1の設定を有効化をしてみましょう。 http://proxapp:5000/sample1/start/ をブラウザで叩きます。
httpsで配信されているGoogleのロゴですが、ローカルのファイルに差し替えることができました。
2.モバイル端末で試してみる
次にモバイル端末でも同様のことを試してみます。
iPhone6/iOS9.3.2のSafariで確認しました。
http://www.mediba.jp/のコーポレートロゴをローカルのものに差し替えます。
mastermindを起動しているPCと同じWifiに接続し、ローカルIPとポートを指定します。
そして、sample2を有効化します。 http://proxapp:5000/sample2/start/
Safariでhttp://www.mediba.jp/を閲覧すると、
ロゴが差し替わっています。
ここでは記載しませんが、端末にPCの場合と同様にmitmproxyの証明書をインストールすれば、httpsの差し替えも行えます。
最後に
ここまでフロント側での使い方を見てきましたが、
vagrantでのアプリケーションで対向先が多い場合でも
例えば、libcurlを使っているアプリケーションの場合.curlrc
に
mastermindのプロキシURLhttp://localhost:8080
を指定すると
対向先のmockが簡単に作れそうです。
このmockはyamlで定義できるので、開発チーム内で共有しやすく vagrantでスタブサーバを立ち上げなくてもよく、非力なPCでも開発が進められそうです。
以上です。