そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

インスタントWebミーティングツール「speak」試してみたよ

Sqwiggleの人から最近、Speakっていうサービスをやってるから試してみてねという案内が来ました。

f:id:begirama:20151127153607p:plain

使い方

  1. https://go.speak.io にアクセスする
  2. ユニークなIDを含むURLが生成されるので、参加者とシェアする

以上。

f:id:begirama:20151127152420p:plain

主な機能

  • 音声チャット
  • ビデオチャット
  • テキストチャット
  • 画面共有
  • 録音(有償プランに要アップグレード)

f:id:begirama:20151127153622p:plain

画面共有には専用のGoogle Extensionが必要だった。入れた後、ブラウザの再起動が必要だったので、この機能が必要な場合には大事なミーティングの前に入れときたい。

特徴

とにかく簡単。 ブラウザで使えば、専用のアプリを立ち上げる必要もないし、ログインが不要なので、誰でもすぐに使える。

テキストチャットは消えるし、ファイルをアップしたりもできないし、がっつりミーティングというのには向かないけど、 社外の人とちょっと話せる?みたいな使い方にはいいかも。

SQL DeveloperからSQL Serverにつなぐ

SQL DeveloperはOracleが出しているDatabaseを操作するためのGUIのクライアントツールです。Oracle SQL Developerから入手できます。

接続先のデータベースがOracle DBの場合はそのまま使えるけど、それ以外で最初は新規の接続を選択しても、Oracleというタブしかないので準備が必要です。 MicrosoftSQL Serverに接続する手順を書きます。

ドライバーの設定

Microsoftのドライバを使うのでは無くて、オープンソースjTDSを使うみたいです。

動作確認はjtds-1.3.1-dist.zipを使っています。

Zipを解凍した後、SQL DeveloperのPreferenceからjtds-1.3.1.jarのパスを設定します。

f:id:begirama:20140405074850p:plain

接続設定

ドライバを入れる前までは無かったSQL Serverタブが表示されます。

f:id:begirama:20140405072632p:plain

上手く接続できれば、GUIでがんがん操作できるので便利です。

f:id:begirama:20140405074445p:plain

MySQL

MySQLの場合も同様です。MySQLJDBCトライバーをSQL Developerから参照することで、MySQLのタブが表示されます。

MySQLのドライバーはこーゆーやつ。 mysql-connector-java-5.1.6.jar

参照資料

http://www.oracle.com/technetwork/jp/developer-tools/sql-developer/thirdparty-095608.html その他のデータベースに接続するために必要なドライバに付いても書かれています。

比較評価!モックアップ作成ツール「Justinmind」と「AppGyver」のPrototyperを使ってみた

モックアップ作成ツールとは

ここで言及しているモックアップとは、実際のアプリを作る前にUIだけを確認するために用意するものです。僕も実際のプロジェクトの中で、関係者に事前にモックアップで合意を取ってからアプリの開発に入ります。

同じジャンルのツールで一番有名なのはBalsamiqでしょうか


モックアップ作成ツールとして、同じPrototyperという名前のツールがJustinmind社とAppGyver社からでています。どちらも静止画だけでなく、動的なモックアップを簡単に作ってデザインや操作感の検証を行えるツールです。
どちらのツールも非常に今注目されているツールですが、コンセプトが結構違うので自分のやりたいことによって選択する必要があります。

Justinmind社のPrototyper

http://www.justinmind.com/prototyper/features-build
Freeプランで使っています。今までメインはこちらを使ってきました。

概要

iPhone/iPadAndroid、Webのデザインテンプレートが予め用意されており、それを使ってGUIを組み立てていきます。
http://www.justinmind.com/help/topic/com.justinmind.prototyper.infocenter/html/images/overview.png

組み立てたUIにアクションを埋め込むことができて、ブラウザでアプリが動いているかのように操作することができます。ボタンの背景にイメージを設定することもできるので、作り込んだデザインも用意することができます。

自分の使い方

アプリの特徴的な画像(ロゴ、グラフのイメージ、写真など)以外はテンプレートのデフォルトの部品でざくざくモックを作っていきます。
この時点で、このUIで何かできるのか、どんな情報が見られるのか、とのような配置、構成なのか、といったビジュアル以外のデザインはできあがるので、関係者や、想定ユーザに動くイメージを見てもらって検証します。

ここまでできているとアプリの開発には入れるので、IllustratorPhotoshopを使ったビジュアルデザインと並行して開発に着手します。


このツールでビジュアルまで凝ったモックを作り込むのは手間がかかるので、逆にIllustrator等で作ったイメージでビジュアルは評価して、改善を繰り返しています。


このツールの良い点は、デザインして設定して公開する機能が一つになっているので、その場で、デザインを直して公開という作業がスピーディーに行けます。

AppGyver社のPrototyper

http://www.appgyver.com/
Freeプランでは3画面までしかサポートしてないので、Basicプランで使っています。

概要

デザインテンプレートとかないです。デザイン済みのイメージをアップロードするところからはじめます。
そして、アップロードされたイメージに領域を指定して、アクションを埋め込んで行きます。

例えばボタンの場所をマウスで囲って、別の画面へ遷移するアクションを設定します。
http://www.appgyver.com/assets/prototyper/features_add_links-8218e48eace7b65bd2ee2b6843a052e1.png


作ったモックはURLや、QRコードを使って他の人にシェアでき、このツール用のスマフォアプリが用意されているので、そのアプリ上でモックを動かして評価します。

このモック実行用のアプリが、iPhone/iPadだとさくさく動いて良いですが、Android(Galaxy S3とSony Tablet Sで評価)ではアプリが頻繁に落ちてしまいました。

自分の使い方

Illustratorで先にビジュアルデザインを作ります。この段階では、デザイナーさんではなく自分でやりますので、あまり凝ったことはやりません。Illustrator用のiPhone/iPadAndroidのデザインテンプレートを使ってさくさく作ります。テンプレートは例えばこんなの。

それをAppGyverのツールに取り込んで、アクションを設定した後、関係者にシェアします。


こちらツールの良い点は、Illustratorで画面を作るので、自由度が高くてどんどんUIを作り込んで行けること。Justinmindのやつでは、ここにこの部品入れたいんだけど、なんか入らない・・・、ということもたまにあります。AppGyver側の設定操作も画面上を枠で囲って、アクションを埋め込むという直感的なもので良いです。

ただ、デザインが別ツール故に、デザインを修正して公開までのステップがJustinmind社のと比べると多いです。がんがん修正が発生するフェーズでは面倒に感じます。


面白いのはモックの元になるのは画像だったら何でも良いので、手書きのイラストを写真で取って取り込んでも良いわけです。後はパワポで作ったイメージとかも。

どっちを使うか。両方を使ってみた結論

ビジュアルデザインが重要で、それ次第で機能も変わるならAppGyver

ビジュアルデザインは置いておいて、機能性や操作性のデザインから進めて行けるならJustinmind

個人的にはAndroidのスマフォ、タブレットをメインに持っているのでAppGyverのAndroidアプリは改善を期待してます。
自社のアプリはデザインファーストで作っているので、今後はAppGyverにお世話になる機会が増えそうです。

分散チーム構成でのアプリ開発。デザイン、開発のコミュニケーション基盤

最近やっているスマフォ・アプリの開発案件での仕事環境を書き綴りたいと思います。
コンサル案件や、開発案件でも別件では違うやり方をやっていたりしますが、具体的な方が面白いと思いますのであえて個別のツール名で書いていきます。


その案件でのアプリ開発側の登場人物はざっくり3種類の人です。実際には複数のメンバーで1つのロールをやっています。


ロールとしては、お客さんと一緒に要件を決めて、概要設計を行います。
具体的なアウトプットは、ざっくりこんな感じです。

  1. 前提となるユーザーストーリー、ペルソナの定義、機能の一覧。(これらは受託の場合は提案書に書いている)
  2. ワイヤーフレームと画面設計書
  3. DB論理設計
  4. API仕様

後はできあがってきた物のレビュー。テスト。


デザイナーさん
ユーザーストーリー、ペルソナとワイヤーフレームから画面のデザインをIllustratorで作成。
画面パーツの切り出しまで。


デベロッパーさん
画面設計、DB論理設計、API仕様から詳細設計とアプリの開発。



使っているコミュニケーションツール
プロジェクトメンバーはそれぞれ違う場所で仕事をしていることもあるので、コミュニケーションの基盤にひと工夫あります。

私<-->デザイナーさん
Boxを使っています。
Boxはイメージファイルを共有して、それについてコメントを付けたり、タスクを作ってコミュニケーションを取れる基盤です。こちらはワイヤーフレームや、手書きのこんな感じ!みたいなのをアップして、デザイナーさんが作成したデザインにコメントしたり、というやり取りに使っています。
ファイルサーバ&メールで連絡と違って、リアルタイムにやりとりできて、バージョン管理もできる。
20MBのイメージファイルをメールに添付して怒られるといこともない。
アプリもあるので、外出先でちょっとレビューしてコメントするというのもOK。


Pinterestに参考になりそうなアプリのイメージや、部品を溜めておいて、お客さんやデザイナーさんと、デザインの方向性を決めるのに参考にします。



私<-->デベロッパーさん
Redmine & Subversion
まあ良くある構成かも知れません。ツール間が連携していて、Redmine上でリポジトリを参照できるようになっています。

こちらで作成した概要設計について、実現性や、不明確なところにRedmineのチケットでどんどん突っ込みが入り、回答しながらブラッシュアップされていきます。

Mac OS X 64bitでSOAP UIを起動させるために

切っ掛けは不明ですが、数ヶ月前は普通に使えていたSOAP UIが起動できなくなってしまいました。
OSのバージョンを上げたときに、使ってるJVMが変わったかな?OSのバージョンはOS X 10.8.2。

エラー内容
こんなエラーがでます。
java.lang.Exception: Object owner or JVM pointer are not correct

$soapui.sh 
================================
=
= SOAPUI_HOME = /Applications/soapui-4.5.1
=
================================
Configuring log4j from [/Applications/soapui-4.5.1/bin/soapui-log4j.xml]
10:54:33,746 INFO  [DefaultSoapUICore] initialized soapui-settings from [/Applications/soapui-4.5.1/soapui-settings.xml]
10:54:34,667 INFO  [WorkspaceImpl] Loading workspace from [/Applications/soapui-4.5.1/bin/../../TestPBE-workspace.xml]
10:54:34,753 INFO  [WsdlProject] Loaded project from [file:/Users/sogo/Documents/soapui/NewWSDLFile-soapui-project.xml]
10:54:35,229 INFO  [SoapUI] Used java version: 1.6.0_37
objc[38025]: Class MessageLoopView is implemented in both /private/var/folders/xp/3j0nqcx93sbgs2zxszylhcnh0000gn/T/jxbrowser-3.0.Build.Unknown/libjniw.jnilib and /private/var/folders/xp/3j0nqcx93sbgs2zxszylhcnh0000gn/T/jxbrowser-3.0.Build.Unknown/libjniwrap.jnilib. One of the two will be used. Which one is undefined.
objc[38025]: Class MessageLoopView is implemented in both /private/var/folders/xp/3j0nqcx93sbgs2zxszylhcnh0000gn/T/jxbrowser-3.0.Build.Unknown/libjniw.jnilib and /var/folders/xp/3j0nqcx93sbgs2zxszylhcnh0000gn/T/jxbrowser-3.0.Build.Unknown/libjniw.jnilib. One of the two will be used. Which one is undefined.
2012-12-14 10:54:37.717 java[38025:11703] [Java CocoaComponent compatibility mode]: Enabled
2012-12-14 10:54:37.742 java[38025:2517] java.lang.Exception: Object owner or JVM pointer are not correct

解決策
エラー内容からUIの部分が64bitがサポートされてないみたいなので、Javaの起動オプションに-d32を追加すればOKです。

soapui.shを開いて、JAVA_OPTSを探します。

JAVA_OPTS="-Xms128m -Xmx1024m -Dsoapui.properties=soapui.properties -Dsoapui.home=$SOAPUI_HOME -d32"

SOAP UIのTestSuite機能を使ったWebサービスのテスト自動化

SOAP UIはWebサービスを呼び出すことができるテストツールです。

前回はモックサービスの機能を使って、Webサービスがまだできてないタイミングでの、Webサービスの利用側のアプリのテストを効率的に行う方法を書きましたSOAP UIはフリー版が用意されています。有償版はレポーティング機能などが充実しているようです。

 

 今回はSOAP UIのTestSuiteという機能を使って、JUnitのような感じでWebサービスのテストを自動的に行う方法です。

 

単体テストレベルだれば、xUnitを使ってプログラムレベルで確認するので良いと思います。ただ、機能テスト、結合テストまで行くと、SOAP UIの様なテストツールを使って、実際にテスト環境にデプロイされたWebサービスを自動で、何度も、テストできるのはすごいメリットだと思います。

 

早速準備。まず、新しいプロジェクトを作成します。

f:id:begirama:20120731155556j:plain

 

テストをしたいWebサービスのWSDLを選択して、"Create TestSuite"にチェックをします。これでTestSuiteが用意されますが後からでも追加できます。

f:id:begirama:20120731155610j:plain

 

画面左にTestSuiteの設定が管理されているツリーができています。

f:id:begirama:20120731155615j:plain

管理の大きさとしてはTestSuite>Test Case>Test Stepです。一連のテストのシナリオがTestCaseで、そのシナリオの中で実装されるアクションがStepくらいの感じで良いと思います。TestStepを右クリックして"Add Step"を選ぶとStepをどんどん追加していけます。

 
ここまでで準備はOK。後は一つ一つのテストのアクションを設定していく番です。
追加したStepで、テスト用のリクエストを設定します。このメッセージがWebサービスに投入されます。次に、Webサービスからの応答をチェックするAssertionを追加します。

f:id:begirama:20120731155621j:plain

 

Assertionの種類はいろいろ事前に用意されています。

f:id:begirama:20120731155625j:plain

 

以下は、レスポンスメッセージ中に含まれる文字列をチェックしている例です。

f:id:begirama:20120731155628j:plain

 

文字列比較以外にもXPathXQueryを使って確認したり、HTTPのレスポンスコードや、SOAP Faultかどうか、さらにはSLAとしてレスポンスタイムが何秒以内かを確認することまでできます。

f:id:begirama:20120731155633j:plain

 

さて、実際にテストを事項してみましょう。

f:id:begirama:20120731155638j:plain

この例では、テストを実行したけれど、Assertionで想定外の結果が発見されています。

 

さらに、エラーになったテストをクリックすると、更に詳細な結果を確認することができます。

f:id:begirama:20120731155641j:plain

 

もちろんJUnitのように一連のシナリオを連続で実行することもできるので、商品の登録、参照、削除といったシナリオを用意しておいて、自動でテストを流すこともできます。

f:id:begirama:20120731155648j:plain

 

今やっているプロジェクトでも、全部のケースを網羅するテストはSOAP UIでやる予定は無いのですが、よく使われる機能、クリティカルな機能は、SOAP UIのTestSuiteを使って、サーバにデプロイされる度に自動で実行するように計画しようとしています。

JDeveloperのHTTPキャプチャ

JDevにはHTTPキャプチャを取るツールが付いているので、試してみることにします。
実験台はJDev10.1.3.3です。#11がでてますが、さわる暇がなく残念なことです。。

まず、メニュー「ツール」の「設定」から、HTTPアナライザを開き、どのポートでリッスンするのかを指定します。
f:id:begirama:20081028213631p:image

次に、HTTPアナライザを開きます。メニューの「表示」の中にあります。
f:id:begirama:20081028213632p:image

で、矢印ボタンで、キャプチャを開始できますが、画面下を見ていただくと、
タブがありますね。履歴を見ると、1回のHTTPのやりとりが1行で見れます。ふむ。
f:id:begirama:20081028214452p:image

1行選らんで、データタブを見ると、HTTPの電文の中身をみれます。
プルダウンからContentを選ぶとテキストでも見れますし、
Hexを選ぶと16進でも見れます。
f:id:begirama:20081028214453p:image

Javaの場合、ProxyをJavaの引数で指定して使えるのが便利ですよね。結合試験なんかやって、こっちは正しいSOAPメッセージ送った、いやメッセージがおかしい、といったやり取りの中で、設定レベルで、ちょろっと変えて試せるのは良い。

-Dhttp.proxySet=true -Dhttp.proxyHost=localhost -Dhttp.proxyPort=8099