奮闘中

QAエンジニアとして、2児のパパとして、一家を支える大黒柱として、日々奮闘中!

Googleデータポータルのコネクタをつくってみる

この記事は、Apps Scrippt Advent Calendar 2019 – Qiita 12/9の記事です。

qiita.com

背景

皆さんは、売上げやユーザー数等、事業のKPIをどのように共有、可視化していますか?

うちの会社では、いままでいろんな所に分散していたデータをGoogleデータポータルを使って、集約&可視化していこうブームがおこっています。

そこで1つ壁になっているのが、データポータルが対応していないデータとどう連携するかということです。

例えば、バグチケットを管理しているMantisHubというバグトラッキングシステムのデータを分析したいと思ったとき、データポータルでは対応していないため、このような方法で連携していました。

  1. 定期的にMantishubのデータをスプレッドシートに出力
  2. スプレッドシートをデータポータルと連携

この方法では、リアルタイムにデータを取得できない等の問題があり、他にいい方法がないかぁと探して見つけたのが、コミュニティコネクタという仕組みでした。

しかも、使い慣れているGoogleAppsScriptで開発するということなので、早速やってみました!

コミュニティコネクタの作成

今回は、例にあげたMantishubと連携するための、Mantishub Connectorを作ってみようと思います。

公式ドキュメントによるとコミュニティコネクタ作成するには大きく以下のステップになっているようです。

  1. Google Apps Scriptのプロジェクトを作成する
  2. コネクタのコードを実装する
  3. プロジェクトマニフェストを作成する
  4. デプロイする

CodeLabsでコミュニティコネクタを作成する手順を学習できるので、先にやってみるとイメージ付きやすいと思います。

Google Apps Scriptのプロジェクトを作成する

Google Apps Scriptからプロジェクトを作成します。GASerの方には説明不要ですねw

コネクタのコードを実装する

コネクタに必要な以下の関数について実装します。

実際に実装したコードはGithubで公開しています。

  • getAuthType() で認証の種類を定義する
    • 今回は、特定の認証情報を使うので、 AuthType : NONE としています
  • getConfig() で設定を定義する
  • getSchema() でフィールドを定義する
  • getData() でデータを取得して返す

プロジェクトマニフェストを作成する

スクリプトエディタの 表示 > マニュフェストファイルを表示 をクリックして、マニュフェストファイル appsscript.json を作成します。

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
    "libraries": []
  },
  "exceptionLogging": "STACKDRIVER",
  "dataStudio": {
    "name": "MantisHub Connector",
    "logoUrl": "https://raw.githubusercontent.com/andysumi/datastudio-mantishub-connector/master/logo.png",
    "company": "andysumi",
    "companyUrl": "https://github.com/andysumi",
    "addonUrl": "https://github.com/andysumi/datastudio-mantishub-connector/",
    "supportUrl": "https://github.com/andysumi/datastudio-mantishub-connector/issues",
    "description": "This connector can connect to your MantisHub, and bring the data to the Data Studio.",
    "shortDescription": "This Connector uses MantisHub API to fetch issues.",
    "authType": ["NONE"]
  }
}

マニュフェストファイルの詳細については、リファレンスを参照してください。

デプロイする

スクリプトエディタの 公開 > マニュフェストから配置 を選択して、Deployments画面で新しいデプロイを作成します。

f:id:andysumi:20191208153037p:plain
Deployments画面

さらに、作成したデプロイの データスタジオアイコン をクリックして表示されるリンクをクリックすると、データポータルのウィンドウが開きます

f:id:andysumi:20191208170200p:plain
コネクタ接続画面

あとは 接続 をクリックすれば、レポートに追加することができます!

やってみて

意外とさくっとコミュニティコネクタを作成することができました!これで、ブームに乗り遅れず、データの集約&可視化を進めていけそうですw

ただ、今回使ったMantishub APIは、期間を指定してデータを取得できなかったり、レスポンスが遅かったりとこのまま使うのは厳しそうでした。。。一難去ってまた一難。。。

GASでClosedなesaの記事URLをSlackに貼ったら展開されるようにした

ドキュメント管理ツールとして、esaというサービスを使っているのですが、こちらの記事を読んで、社内でも同じようなニーズがあったため、やってみました。

inside.pixiv.blog

記事では、アプリケーションを Ruby、サーバーサイドにHeroku利用していますが、今回はGoogle Apps Script(以降GASという)で実現していこうと思います。

GASは、Webアプリケーションとして、Googleのサーバーで公開できるため、アプリケーションとサーバーサイドをまるっと準備することができ、しかも無料、今回のような用途にはピッタリです!

SlackAppの作成

ほぼ、記事のとおりに進めていただければ問題ありませんが、 Event Subscription > Request URL には後述するWebアプリケーションのURLを入力して下さい。

f:id:andysumi:20181212143404p:plain

アプリケーションの作成

Apps Script – Google Apps Script から 新規スクリプト を作成し、スクリプトエディタにコードをコピペします。

github.com

github.com

アプリケーションの公開

メニューの 公開 > ウェブアプリケーションとして導入... から以下の通りに設定し、公開します。表示されるURLが、 WebアプリケーションのURL となります。

f:id:andysumi:20181212152331p:plain

以上です!

まとめ

いかがでしたでしょうか?GASを使うことで、お手軽、簡単に、実現することができたと思います。

この他に、BotGoogleのサービスと連携したりと、アイディア次第でいろいろなアプリケーションを作ることが可能なので、是非チャレンジしてみて下さい。

もしもに備えてMacをバックアップする

災害は忘れたころにやってくる、その時は突然訪れました。
いつものように、出社してMacbookを起動すると・・・

f:id:andysumi:20180601143856j:plain

Dockのアプリがすべて になっていて、PCを交換することに。。。
このような状態なので、データ移行も出来ず、0からセットアップしなければならず、かなりの時間を費やしました。

そこで、また明日やってくるかもしれない「もしも」に備えて、(出来るだけ)自動かつ低コストでMacをバックアップする方法をまとめました!

方針

  • アプリは、Homebrewで管理して、Brewfileをバックアップする
  • 設定ファイル等は、シンボリックリンクを設置して、実ファイルをバックアップする

バックアップというと、 Time Machine が簡単だと思いますが、別にHDDが必要なこともあり、会社でやるのは現実的ではないため、見送りました。

また、この方法だと、プライベート用、仕事用など複数のMacを使っていても環境を同期することが出来るのがメリットです。

バックアップ

バックアップ用ディレクトリを作って、そこにいろいろ突っ込んでいきます。
あとはそのディレクトリをDropBoxやGoogleDrive、Git等で同期しておけばOKです。

$ mkdir ~/backup

事前準備

Homebrewをインストールします。

$ usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
⋮
==> Installation successful!

$ brew doctor
Your system is ready to brew.

アプリ

Homebrewでアプリを管理するために、mas-cliHomebrew-Caskをインストールします。

# mas-cli
$ brew install mas

# Homebrew-Cask
$ brew tap caskroom/cask
$ brew tap caskroom/versions

Homebrewでインストールした パッケージ(アプリ)のリスト、Brewfile( ~/Brewfile )を作成します。
App Storeでインストールしたアプリは含まれます。

$ brew bundle dump --force

設定ファイル等

アプリの設定ファイル等は、実ファイルをバックアップ用ディレクトリに移動し、ファイルがあったディレクトリにシンボリックリンクを作成します。

# .configをbackupに移動
$ mv ~/.config ~/backup/.config

# 設定ファイルがあったディレクトリにシンボリックリンクを作成
$ ln -s ~/backup/.config ~/

ただ、アプリごとに都度この作業をするのは面倒くさいので、ツールに任せちゃいましょう。 Mackup は、この作業を簡単に実行できる便利なヤツです。

$ brew install mackup

ということで、Mackupに対応しているアプリの設定ファイルは、Mackupでバックアップします。
Dropbox等のクラウドストレージを使うことも出来ますが、今回は、いろいろまるっとバックアップしたいので、 file_system を使います。

# Mackupの設定ファイルを編集
$ vi ~/.mackup.cfg
[storage]
engine = file_system
path = backup
directory = Mackup

[applications_to_sync]
ssh
⋮

# 設定ファイルをバックアップ
$ mackup backup --force

定期実行

バックアップ作業を定期的に実行することで、常に最新の状態を保てるようにします。

launchdを使って、毎日19時に実行するように設定しています。

# 設定ファイル
$ vi ~/Library/LaunchAgents/backup.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>backup</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>/Users/you/backup/backup.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>19</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

# 登録
$ launchctl load ~/Library/LaunchAgents/backup.plist

# 確認
$ launchctl list | grep backup

復元

バックアップしたフォルダを復元先のPCに設置します。

事前準備

バックアップと同様に、まずは、Homebrewをインストールしましょう。

アプリ

Brewfileからパッケージ(アプリ)をインストールします。

# Brewfileのシンボリックリンクを作成
$ ln -s ~/backup/Brewfile ~/

$ brew bundle

設定ファイル等

Mackupに対応しているアプリの設定ファイルは、Mackupで復元します。

$ mackup restore --force

Mackupに対応していないアプリの設定ファイル、その他ファイル・ディレクトリは、規定のディレクトリにシンボリックリンクを作成します。

最後に

ここまで、アプリと設定ファイル等については、最低限のバックアップ&復元が出来ました。

簡単ですね、お金かかりませんね、これでいつ「もしも」がやってきても大丈夫です!

テスト管理ツールをいろいろ試してみた 〜PractiTest編〜

f:id:andysumi:20171219100020p:plain

テスト管理ツールをいろいろ試してみたシリーズ第1弾は、いきなり大本命、PractiTestです。

機能が豊富な上に、使いやすい、わかりやすいデザインになっていて、実業務での導入を決めました!

概要

料金

  • Tester
    • PROFESSIONAL : $35 / user / month
      • プロジェクト数は無制限、基本的な機能は使える
    • ENTERPRISE : $45 / user / month
      • PROFESSIONALに加え、API利用、自動テストやバージョン管理との連携などの機能が使える
  • Developer : $15 / user / mmonth
    • Testerの契約が必要
    • issueの登録/更新のみ可能で、その他のアイテムは読み取り専用

機能

  • 要件管理 : ○
  • テストケース管理 : ○
    • テスト実行後にテストケースを修正した時、テスト結果が変更されない : ○
  • テスト実行・進捗管理 : ○
  • バグ管理 : ○
  • インポート/エクスポート : ○
  • 公開API : ○ ※ENTERPRISEのみ
  • Markdown対応 : ○

機能解説

Project

f:id:andysumi:20171221133836p:plain

最初に、Projectを作成します。

作成済みの、Projectからユーザーやカスタムフィールドの情報をクローンすることが出来るようです。Projectを作成する度に、1から設定する必要が無いので、便利ですね。

PRICINGには、 Unlimited Projects と記載がありましたが、初期状態では4つまでしか作成出来ず、それ以上作成する場合は、サポートへ連絡する必要があるみたいです。

Dashboard

f:id:andysumi:20171225233626p:plain

作成したProjectを選択すると、Dashboardが表示されます。

ここでは、テストやバグのステータス等、Projectに関する情報が確認出来ます。表示される情報は細かくカスタマイズが可能です。

Requirements(要件)

f:id:andysumi:20171225184205p:plain

PractiTestでは要件にテストケースを紐付けて管理するため、まず、要件を登録します。

Descriptionの装飾はツールバーの他、Markdownに対応しているため、とてもスムーズに入力出来ます。

Traceabilityにはテストケース以外にバグを紐付けることが可能なため、要件が変更された場合の影響範囲が一目瞭然です。

Test Library(テストケース)

f:id:andysumi:20171225185748p:plain

次に、テストケースを登録します。

ステップ毎に期待値を設定する構成になっているのもPractiTestのポイントですね。

後は、テストケース毎にステータスを設定することが出来ます。各ステータスもカスタマイズ可能なので、レビューの時に使えるかなぁと。

また、ENTERPRISEユーザーでは以下のような機能も使うことが可能です。

  • Step Parametersを使うことで、テスト実行時に入力する値等を変数として定義
  • Time Managementを有効にすると、テストケース実行の見積もり時間を設定

Test Sets & Runs(テストセット)

f:id:andysumi:20171225192346p:plain

テストを実行する単位として、作成したテストケースを選択して、テストセットを作成します。

テストケース作成時に予定時間を設定していると、テストセット全体、各テストケース毎に予定と実績の監視をすることが可能です。

また、PractiTestの特徴として、Exploratory and Session Based Testsを管理することが出来ます。実業務でも、スクリプトテストと並行して探索的テストも実行しているので、積極的に使っていきたいと思っています。

f:id:andysumi:20171225194741p:plain

こちらは、テスト実行時の画面です。ステップ毎に手順、期待値を確認しながら、テスト結果を選択していきます。

Failed の場合は、Fail & Issueリンクから直接バグを登録することが出来ます。

テストを開始すると、自動的にRunningTimeがカウントアップされます。席を外す時やテスト以外のことをする時はタイマーを停止しないと時間がどんどん経過してしまうので、注意が必要ですw

Actionボタンからは、ステップの修正・追加・削除が可能で、期待値やステップに誤りがあった場合は、修正しながらテストを進め、Update Original testボタンでテストケースに簡単に反映させることが可能です。

Issues(バグ)

f:id:andysumi:20171225194816p:plain

テストランからバグを登録する場合、実行中のステップからタイトル、Descriptionが自動的に入力され、スピーディーに登録することが出来ます。

登録が完了すると、Submit issue and continue testingボタンで実行中のテストランへ戻れるのは、地味ですが便利ですね。

もちろん、単体で登録することも可能です。

Settings(設定)

設定からは、Filter、Field、Workflow、Dashboardのカスタマイズ等が出来ます。カスタマイズ性が高いのはPractiTestのポイントですね!

Import & Exportからは、Issue、Test、Test Run、Test Set、Requirementのインポート及びエクスポートが可能です。特にインポート機能では、Googleドライブからのインポートが出来るので、今までスプレッドシートでテストケースを管理していた方は移行がスムーズかもしれません。

感想

必要な機能は全て網羅されており、カスタマイズ性も高く、ExploratoryTestingStep Parameters等の痒い所に手が届くような機能もあり、これを超えるツールはないんじゃないかというぐらいの完成度だと思いますw

また、問い合わせに対しても数時間で返信があったり、要望に応じて、オンラインでデモも実施してくれたり(もちろん英語ですが)、サポートが手厚いのも判断の決め手となりました。

なんかPractiTestの回し者みたいになってきましたが、テスト管理ツールを検討されている方は、是非試してみるツールだと思います!

テスト管理ツールをいろいろ試してみた

この記事は、ソフトウェアテスト Advent Calendar 2017 – Qiita 12/15の記事です。

qiita.com

そして、このブログ初めての記事です!

Qiitaに投稿しようか迷いましたが、前からブログをやってみたかったのでこの機会にチャレンジしてみました。以後、お見知り置きを。

※12/26 PractiTestのトライアルレポートへのリンクを追加しました

そうだ テスト管理ツール、導入しよう

社内でテスト管理ツールを導入することになり、色々なツールを使い倒したので、そのまとめを紹介したいと思います。 (自分たちで環境の面倒までみたくなかったので、SaaS以外のサービスは除外しています)

この記事では、ツールの概要や機能についてのまとめを記載し、それぞれのツールの詳細については、別途記事にしていく予定です。

※あくまで個人的な感想になりますので、人や組織によって合う合わないあると思いますが、ツール選定の参考になれば幸いです。

テスト管理ツールとは

テスト管理ツールとは・・・割愛します!

こちらに、テスト管理ツールとはなんぞや、導入するとなにがいいの?等、分かりやすくまとまっていますので、参考にしてくださいm

比較のポイント

  • 料金
  • 機能
    • 要件管理:要件とテストケースとのトレースがとれ、要件のカバレッジがわかるのは魅力
    • テストケース管理:テスト管理ツールとしては必須の要件
    • テスト実行・進捗管理:こちらも必須要件、ダッシュボードなどが見やすいかもポイント
    • バグ管理:バグとテストケースのトレースが取れるのはいいかも
    • インポート/エクスポート:既存のテストケースからの移行や、別のツールに移行する場合にあると便利
    • 公開API:将来的に自動テストとの連動とか出来るといいなぁと妄想
    • Markdown:細かい点ですが、日頃使う機会が多いため重要

比較表

要件管理あり

PractiTest SpiraTest testuff TestCollab ReQtest
料金 $35/user $69.99/3user $27/user $25/user $45/user
要件管理
ケース管理
テスト実行・進捗管理
バグ管理 ×
※外部ツールとの連携可
インポート/エクスポート ×
公開API
※上位プランのみ
×
Markdown × × ×
トライアルレポート こちら 乞うご期待 乞うご期待 乞うご期待 乞うご期待

要件管理なし

TestCaseLab EasyQA TestRail Qangaroo Lean Testing Kualitee HIPTEST
料金 $28/500testcases $10/user $25/user ¥5,000/15user 無料 無料 無料
要件管理 × × × × × × ×
ケース管理
テスト実行・進捗管理
バグ管理 ×
外部ツールとの連携可
×
外部ツールとの連携可
×
インポート/エクスポート ×
公開API × × × ×
Markdown ×
※一部のみ
× × ×
トライアルレポート 乞うご期待 乞うご期待 乞うご期待 乞うご期待 乞うご期待 乞うご期待 乞うご期待

最後に

まだまだ道半ばですが、導入していく上での気づきやノウハウがあったら共有して行こうと思います!

また、実際テスト管理ツールを使われている方の感想や、同じようにこれからテスト管理ツールを導入しようとしている方のご意見など、コメントいただけるとありがたいです。