WEB実験をするには,jsPsychで作成したWEB実験用htmlファイルを,どこかのウェブサーバーにおく必要があります。サーバーの知識のある方は自前でサーバーを立てて実施できますし,有料ですがpavlovia(https://pavlovia.org/about.html )などのサービスを使っても実施できます。自前でサーバーを立てると,その維持費用が必要なのと,サーバーの設定や管理には結構スキルが必要です。pavloviaは,サーバーの管理は不要で,設定も簡単ですが,ある程度の予算が必要です(2019年8月現在,1名の実験につき0.2ポンド)。Googleのサービスの1つのFirebaseなら,サーバーの管理は不要で(最初に少し設定が必要です),通常のWEB実験なら無料枠内で実施できます。以下では,Firebaseを用いたWEB実験の解説をしています。
プロジェクトはアプリのコンテナになるので,1つのデータ収集に1つのプロジェクトを割り当てます(1web実験につき1プロジェクトです)。わかりやすく認知課題名or研究名をプロジェクト名にしてもいいですが,そのプロジェクト名がweb実験時のURLに記載されるので,参加者の回答に影響のない名前を選ぶと良いかと思います。
続いて,Googleアナリティクスを使うか聞いてきますが,「今は必要ない」としておきます。
無事プロジェクトが完成して,プロジェクトのページにはいるとこんな感じの画面になります(今回のプロジェクト名はstroopです)。
Firebaseのサイト上のプロジェクトの設定は終わったので,次はローカルPC(手元のパソコンです)の設定をします。
手順は,Node.jsをインストールしてから(これはOSによって違います),以下のコマンドをターミナルに打ち込んで,Firebase CLIをインストールします。
npm install -g firebase-tools
その後,Google アカウントで Firebase にログインします。
firebase login
これで,Firebase CLIを使用する準備が整いました。
なお,以下がその例です。ターミナルの”$“の次にcdと打ち込んで,カレントディレクトリにするフォルダの場所を指定します(Macの場合,当該フォルダをターミナルにドラッグ&ドロップするとパスがはいると思います)。今回の例では,Documents内にfirebaseというフォルダを作って,さらに,その下にstroopというフォルダを作った上で,それをカレントディレクトリにしています。
cd Documents/firebase/stroop
firebase init
こんな感じの文字が出てきます。
“Select a default Firebase project for this directory”と聞いてきますので,最初にFirebase上で設定したプロジェクト名を選択して,エンターを押します。
“What file should be used for Database Rules?”と聞いてきますので,そのままエンターを押します。
“What do you want to use as your public directory?”と聞いてきますので,そのままエンターを押します。
“Configure as a single-page app (rewrite all urls to /index.html)?”と聞いてきますので, Nをタイプします。
これで,firebaseプロジェクトの初期化が終わりました。
{
/* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
"rules": {
".read": false,
".write": false
}
}
{
/* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
"rules": {
".read": false,
".write": true
}
}
firebase deploy
コピーしたFirebase SDKをHTMLに挿入します。
まずは,“
“を追加します。RstudioでjsPsychを使っている場合は,jsPsychのタグ設定部分にfirebase関連のjsを追加します。データベースも使うので,firebase-appだけでなく,firebase-database.jsも追加します。
library(htmltools)
tagList(
tags$script(src='https://www.gstatic.com/firebasejs/6.4.0/firebase-app.js'),
tags$script(src='https://www.gstatic.com/firebasejs/6.4.0/firebase-database.js'),
tags$script(src='jspsych-6/jspsych.js'),
tags$script(src='jspsych-6/plugins/jspsych-html-keyboard-response.js')
)
// Firebase set up
// Your web app's Firebase configuration
var firebaseConfig = {
apiKey: "XXXXX",
authDomain: "XXXXX",
databaseURL: "XXXXX",
projectId: "XXXXX",
storageBucket: "",
messagingSenderId: "XXXXX",
appId: "XXXXX"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
/*ID(日付時刻_8桁の乱数)の設定*/
// 乱数
var l = 8;
var c = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var cl = c.length;
var r_num = "";
for(var i=0; i<l; i++){
r_num += c[Math.floor(Math.random()*cl)];
}
// 日付時刻
var time_date= new Date();
var year = time_date.getFullYear();
var month = time_date.getMonth()+1;
var date = time_date.getDate();
var hour = time_date.getHours();
var minute = time_date.getMinutes();
var second = time_date.getSeconds();
// ID
var exp_id = year +'_'+ month +'_'+ date +'_'+ hour +'_'+ minute +'_'+ second +'_' + r_num;
/*タイムラインの開始*/
jsPsych.init({
timeline: timeline,
on_finish: function() {
firebase.database().ref(exp_id).set({
data: jsPsych.data.get().values()
})
}
});
firebase deploy
“https://プロジェクト名.firebaseapp.com/ファイル名.html”で実験画面が出てくればHostingは成功です。
そして,実験課題に取り組んでから,firebaseのプロジェクトページに行って,Realtime Databaseにデータが入っていれば,データベースの方も成功です。以下は私が3回ストループ課題を行ったデータです。
以上,Firebaseの登録からウェブ実験の準備をして,データ収集までを解説しました。なお,FirebaseからダウンロードしたJSONファイルを解析可能なデータセットにする方法は,認知課題の解析データセット作成にて解説しています。
本資料の作成にあたり,Firebaseのサイト,Northwestern Child Language Development Labのチュートリアル資料,Alex K.氏の資料を参考にした。↩︎