モックサービス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/ を開きます。 image

このようなページが閲覧できるので、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の状態を変更したり確認したりします。

1. PCのブラウザで試してみる

では、https://www.google.co.jp/ を使って試してみます。 このページのGoogleのロゴをローカルのものに差し替えてみます。

まずmastermindを起動します。

$ sudo mastermind --config sample.toml

この状態で、sample1の設定を有効化をしてみましょう。 http://proxapp:5000/sample1/start/ をブラウザで叩きます。 image

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でも開発が進められそうです。

以上です。