OpenSesame で心理学実験をしてみよう #2 JATOS サーバを使ったオンライン実験を設定してみよう
前回の記事
で,OpenSesame による実験プログラムを作りました。では,次にこれをオンライン実験として実装してみましょう。Web サーバ上で実験を行うために,OpenSesame では OSWeb という javascript のライブラリを使用します(現在の OpenSesame のバージョンでは OSWeb は最初から組み込まれています)ので,それを利用します。
ただし,ここで注意が必要です。スタンドアローンの PC 上と Web サーバ上ではいくつか異なる点があるので,その修正が必要です。まずは,そこから始めていきましょう。
とりあえず,公開を優先して全てを書ききる前の段階で記事を公開します。一通り動くはずですが,細かい所は少しずつ修正していきますので,ご了承ください。
Web 上で実験をするための事前準備 (1) – Python script は動きません
前回,不正解試行の反応時間をプログラム側で除去した validRT という変数を Python inline script で作成しました。しかし,この Python script,残念ながら Web 実験では使うことができません。代わりに javascript inline_script を使います。
しかし,こちらの解説はちょっと面倒なので,とりあえず今回は Python script のアイテムを削除してしまう方向でいきます(なくても実験自体の動作には影響しませんし。まずは動かすことを優先)。ということで,キーレスポンスの後に作った Python script を消去してください(別のアイテムを削除しないように気をつけましょう)。また,念のためにプログラムを別名で保存しておくことをオススメします。
Web 上で実験をするための事前準備 (2) – テキストは注意が必要です
さて,次に教示等で使っているテキスト表示です。日本語を使っていない場合は大丈夫なのですが,日本語を使っているときはちょっとだけ注意が必要です。例えば,テキストに 実験の説明 とか書いた場合,ブラウザ実行すると undefined となってしまい,中身が表示されません。きちんと検証したわけではないですが,どうもテキストの中に記号が含まれない状態で日本語を入れると,ソースコードのテキストが " (ダブルクオーテーション)で囲まれず,ブラウザ側でうまく処理されないようです。ですので,ここは直接ソースをいじって修正しましょう。sketchpad を開き,右上にあるマトリックスのような形をしたボタン(下図の1)をクリックし,「スクリプトの表示」を選択してください。
そうすると,下のようなソースコードの編集画面になります。
上の方が修正前ですが,例えば実験の説明の箇所のテキスト表示 (textline) の設定が,
text=実験の説明
となっています。ですので,ここの表示内容をダブルクオーテーションで囲んでしまえば良いわけです。ただ,そのままダブルクオーテーションを入れてしまうと,保存したときになぜかダブルクオーテーションが消えてしまいます。どうも表示内容に記号がないとダメなようです。ですので,ちょっとトリッキーな方法ですが,後ろ(でなくてもいいですが)に半角スペースを1つ入れておきましょう。
text="実験の説明 "
句読点とかが入っているときちんとダブルクオーテーションで囲まれるんですけどねえ。いまいち挙動がつかめません。多分 Python のマルチバイト文字の処理の問題のような気がします(確か OpenSesame の Python は古い 2.7 だったような気が)。
コードを書き換えたら,右上にある「適用して閉じる」をクリックするのを忘れないようにしてください。その他の sketchpad についても全て確認して,ダブルクオーテーションが付いていない箇所には何かしらの記号を入れてからダブルクオーテーションで囲んでください。
Web 上で実験をするための事前準備 (3) – Web 用に保存しましょう
OpenSesame で作られる,拡張子が .osexp のファイルは,そのままでは Web 実験には使えません。OSWeb というライブラリを含んだファイルに変換する必要があります。変換はとても簡単です。
Run in Browser メニューをクリックして,Export experiment as JATOS study をクリックします。そして,ファイルを適当な名前で保存すると,必要なファイルを全て含んだ zip ファイルが作成されます。
これで OpenSesame 側の準備は完了です。
JATOS サーバをインストール
残念ながら,この zip ファイルをサーバに持って行くだけでは Web 実験はできません。そこで,Web 実験用のツール JATOS をサーバにインストールします。JATOS は,実験プログラムを作るのではなく,実験を管理するシステムです。
JATOS の公式サイトから,Download をクリックすると github のサイトにジャンプしますので,必要なファイルをダウンロードしてください。いくつかバージョンがありますが,
jatos.zip – Java なしバージョン
jatos_linux_java.zip – Linux 用 Java あり
jatos_mac_java.zip – macOS 用 Java あり
jatos_win_java.zip – Windows 用 Java あり
となっています。既に Java がインストールされている場合は Java なしの jatos.zip,Java のない環境の場合は,それぞれの OS 毎の Java を含んだファイルをダウンロードしてください。
ここから先は,筆者の手元の環境が Mac なので,Mac の例を使って説明します。Linux の場合も基本はほとんど変わらないはずです (Windows は最近使ってないので知りません。誰か試してくれません?)。なお,シェルでの作業が必要なので,シェルアクセスができることを確認してください。レンタルサーバー等でシェルが実行できない場合は,JATOS を動かすことはできません。また,デフォルトで,JATOS は 9000 番のポートを使います。ファイアウォールの設定で 9000 番の通信ができるように設定してください。
Mac,Linux の場合は,Web サーバ (Apache) が基本的にインストールされていると思いますが,Windows の場合はインストールする必要があるかもしれません。確認取れたら追記します。
JATOS のインストール自体はとても簡単です。ダウンロードした zip ファイルをサーバ上の適当なディレクトリに持っていき,zip ファイルを解凍してください。解凍先のディレクトリに作成される,loader.sh というシェルスクリプト (Mac / Linux) と,loader.bat (Windows) というバッチファイルが JATOS の起動用のファイルです。
Terminal.app (Mac の場合)で,パッケージを解凍したディレクトリに移動して
./loader.sh start
と入力します。これで JATOS サーバが起動します。
JATOS サーバに実験を登録
JATOS サーバは,基本的には Web サーバです。そのため,実験自体は,先ほど OpenSesame で作成したパッケージをアップロードする必要があります。では,まず管理コンソールにアクセスしましょう。今は,手元の PC でのテストですので,ブラウザを立ち上げ,アドレスバーに
http://localhost:9000/
と入力します。外部サーバで JATOS を動かす場合は localhost の部分を,ご自分のサーバのホスト名または IP アドレスに置き換えてください。
図の左上のようなコンソールが現れますので,ユーザー名,パスワード共に admin と入力してログインしてください。現れた管理画面で,上部のメニューバーにある Import Study をクリックすると,ファイル選択ダイアログが表示されますので,先ほど作成した zip ファイルを選択,「開く」をクリックします(その後,インポートして良いかを問うダイアログが表示されますので,Import をクリック)。うまくいくと,以下のような画面になります。
実験の諸設定は,Properties で行います(クリックしましょう)。
色々設定可能な項目はありますが,とりあえず Description の所に,課題の説明を書いておきましょうか。さて,きちんと動くかどうか確認したいところですね。Properties を保存したら,コンソールで Run をクリックしてみましょう。
Run をクリックすると実験が開始されます。そのまま最後まで実験を行い,正常に動作するかどうか確認してください。うまく行かない場合は OpenSesame に戻って必要な修正を行い,再度 JATOS にインポートします。
実験が上手く終了したら,結果を確認しましょう。結果は↑の Run の隣にある Results をクリックします。以下のような画面になります。
今は一人分のデータしかありませんが,1 という ID (Worker ID) を持つ参加者のデータが記録されています。Worker というのは,クラウドソーシングの時に参加者を表す言葉として使われます。なお,ここでは Worker の種類は JATOS になっています。これは,管理コンソールから直接実行したことを意味しています。
実験バッチの登録
さて,もう一度,管理コンソールに戻り,
一番右にある,緑色のボタン (Worker & Batch Manager) をクリックします。
すると,上のような参加者管理画面になります。
では,実験参加者用の URL を取得しましょう。New Batch と書かれたボタンの下にあるボタン(図の1の位置にあるボタン)をクリックし,Personal Single Worker のところにある Get Link をクリックします。Single というのは,各参加者が一回しか参加できないことを示しています(もし,途中で誤って終了してしまった場合,参加者は再度の参加ができなくなるので注意してください)。
そのようにスタックした参加者のデータを削除すれば,再度のアクセスは可能なようです。
Get Links をクリックすると3のようなダイアログが表示されるので,そこにコメント(内容は何でも良いです),集める参加者数を Amount の欄に入力します。登録が終わると,参加者ごとのアクセス用の URL が作成されます。
あとは,このURLをそれぞれの参加者に通知すれば良いです。なお,最後の personalSingleWorkerId の部分だけが人によって異なります。ここで設定された番号が,Results のところで説明した Worker ID としてセットされます。
指定された URL から参加者がアクセスし実験が終了すると,
そのデータが追加されます(管理コンソールの Results セクションを見てください)。先ほどの管理コンソールから直接実行したのとは異なり,Worker Type が Personal Single になっているのがわかります。
(追記)共通URLによるアクセスをさせたい場合
クラウドソーシングや授業なので,全員共通の URL で実験に参加させたい場合,上の Personal Single だと,個人ごとに URL が変わり(正確には,サーバに渡すパラメータが変わり),一人一人に個別に通知をする必要があります。クラウドソーシングや授業内での実験だと,ちょっと面倒くさいですよね。もう一つの方法は,General Single Worker というタイプを使う方法があります。Worker & Bench Manager で,General Single Worker の 方で Get Link をすると,全員共通の URL が発行されます。
ただし,General Single Worker はデフォルトでは有効になっていませんので,General Single Worker の左隣にある × 印をクリックし,有効にしてください。なお,General Single Worker の方は,アクセスがある度に,新たな Worker ID がセットされます。
結果のダウンロード
次は,実験結果を出力する手順です。管理コンソールの Results をクリックし,結果の表示画面に移動します。
上の方に Export Results というボタンがありますので,そこをクリックし,All または Selected をクリックします。ここは全て (All) をダウンロードしましょう。もちろん,必要なデータだけを選択して Selected でもかまいません。クリックすると,JSON 形式のテキストファイルがダウンロードされます。
中身を開くと↑のような感じです。ちょっとこのままだと使いにくいですね。大丈夫。その場合は,ダウンロードしたデータを OpenSesame で CSV または Excel ファイルに変換することができます。
OSWeb を含んだ実験パッケージに変換する時に使った Run in browser メニューにある Convert JATOS results to csv / xlsx をクリックします。ファイル名,ファイル形式を聞いてきますので,適当に名前を付けて保存してください。OpenSesame で実行したのとほぼ同じ形式のデータが作成されます(一部 workerID など JATOS 特有のフィールドもありますので全く同形式ではないですが)。
JATOS サーバの終了
テストが成功したら,JATOS サーバを終了しましょう。方法は簡単。先ほど loader を使ったシェルで,
./loader.sh stop
と入力するだけです。
JATOS stopped と表示されれば終了です。
終わりに
さて,これで JATOS でテストが完了しました。後は,外部から利用できるサーバ上で JATOS を実行すれば実験ができそうですね。サーバをレンタルするもよし,Google Cloud Platform を使うもよし,はたまた AWS を使うのも良いでしょう。ただ,この辺はまだ筆者自身が試していないのでなんとも言えません。まあ,実験していない間はサーバを止めることができるので GCP か AWS ですかねえ。
この辺が参考になりそうです。近いうちに試したいと思います。
さて,JATOS ですが,実は OpenSesame 以外で作った実験も実施できます。
公式ドキュメントの Write your study のセクションを見てみましょう。
jsPsych, lab.js といった OpenSesame 以外の実験作成ツール(というかライブラリ)が並んでいます。lab.js については,すでに山形大の小林先生,大杉先生がすんばらしい解説を書いているので,そちらをご参考に。
とりあえず今回はここまでです。まだまだ続きます(多分)。
この記事が気に入ったらサポートをしてみませんか?