自分が担当する心理学実験実習はPsychopy3+Pavloviaで乗り切ることにしたのですが,不必要に時間がかかってしまったこともあるので,つまづいたところをまとめておきました。

  1. Psychopy3は最新版を。単純な実験でローカルではまったく問題ないのにサーバーにあげてwebブラウザーで動かそうとしても動かない問題。妙だと思ったら,ローカルのPsychopyが3.XX.XXと一世代前のものでした。Mac用Standalone最新版は現時点(2020/05/09)で2020.1.3ですが,これさえも数週間前は2020.1.2でした。自分がこけた理由はPsychopyの更新通知を信じていたことです。メインメニューに Tools > Psychopy Updates...があるのですが,手動で試すとproxyエラー。確かに設定画面にproxy入力欄があるけど,何を入力すればよいかわかりません。更新のメール配信を受け取るか,何かあったら最新版がでていないかどうかまず確認した方が無難そうです。
  2. 1に関連する話。バージョンが2020.XX.XXになってから,pythonで書いたコードを自動的にjavascriptに変換してくれるようになりました。これまではネット検索しながら,自分で変換してたのですが,その必要がなくなった,とここまではいいのですが,この自動変換では動かないこともあるのです。そして,そうなるとやはり手動でjavascriptを書かないとならず,でも手動で書いたあとに自動モードにすると手動で書いたコードが上書きされてしまうなど,とても慎重に作業を進める必要があります。デバッグは夜遅く,疲れたときにするものではないとつくづく思い知らされました。
  3. 2に関連する話。うまくいかなかったところの一つがpython用の外部ライブラリ(math)を使っていたことです。まったく同等のライブラリがjavascript側にあるわけではないので,そこは手動で書き直しました。
  4. そしてそもそも欲張って失敗こいたのが,スマホやタブレットに対応しようとしたことです。新入生には自宅にPCない学生もいるだろうという想定で用意したのですが,結局,そういう学生はいなかった(新入生,すげ〜)。そしてwebサイト開発者泣かせが,OS,ブラウザー,ブラウザーのバージョン違いであることをすっかり忘れて,素人が無理しようとしたのが過ちでした。Psychopy3には画面の座標指定にいくつかの方法があって,自分はheight(画面中央が0,0で縦が-.5から+.5,横がモニターの解像度によって変わる設定)を使っていたのですが,やはりそれですべての環境に対応することは難しいらしく(当然だよね〜),何回やってもローカルで設定した画面とテスト環境(iPhone, iPadなどなど)が揃いません。そかも,そのズレに法則性をみつけることができません(できてたらアプリが補正するよね)。結局,ちょっと変な見え方しても気にしないでねと学生さんに了解してもらい,うまく刺激が提示されない人用にはYouTube動画で刺激だけ提示して記録は手元で印刷した記録用紙にしてもらい,あとでGoogleフォームに入力してもらうという荒業を使うことにしました。
  5. なんか悪いことばかりのようですが,以前使っていたPsychopy2に比べると,Psychopy3も2020.1.2もローカルではめちゃくちゃ安定しています。実験室で実験ができる状況であれば,お勧めのアプリであることに間違いなしです。
  6. さて,Psychopy3ではビルダーが生成するpythonのコードをjavascriptに変換してくれるわけですが,このときに使われているのがpsychojsライブラリです。そして,これをPavloviaというGitを使ってソース管理でき,実験を配信するサーバーにあげることで,参加者が各自webブラウザーから実験に参加できるようになるわけです。このあたりの仕組みも当初さっぱりわからず,苦労しました。特に,PavloviaPavlovia用のGitHubが別サーバーでそれぞれ別にアカウントが必要なことがわからず右往左往しました。簡単にいうと,Pavloviaでは実験に使うクレジット(参加者が1回実験に参加するたびに課金される従量制)を購入したり,それを各実験に割り当てたりするサイトです。GitHubはソフトウエアやアプリ開発をするためのクラウドで,ここにソースコードや刺激ファイル,データファイルが蓄積されていきます。他の開発者のコードをシェアすることもできます。ソフトウエア開発界隈ではいまや常識的なことみたいですが,自分のような新参者にはpushだのpullだの未だに未開地です。
  7. ローカルのPsychopy3で作成したコードをGitHubのコードと同期させることになりますが,ここでもいくつかつまづきがありました。自分はMacのローカルHDDに,実験1つにつきPsychopy用のフォルダーを一つずつ作成しています。でも,上に書いたように,スマホやタブレットにも対応しようとしていたので,キーボードで反応をとるバージョンとマウスで反応をとるバージョンの2つのメインプログラムを同じフォルダーに名前をかえて保存していました。これをGitHubと同期させてPavloviaで(サーバー経由,webブラウザーで)テストすると,いくらローカルで修正してもそれが反映されないという妙な現象が起こります。わかったのは,実験ごとに一つのindex.htmlファイルがつくられ,そこからは一つの実験のスクリプトしか呼べないので,もう一方のスクリプトを変えても修正が反映されないということです。つまり,ローカルもGitHubも一つのフォルダーには一つの実験プログラムしか保存してはいけませんよということです。
  8. そんでもって,ではキーボード,マウス,2つのバージョンを別々のフォルダーに保存しようってことになりますね。なので,ローカルでフォルダーをコピーし,各々から余計なファイルを削除し,GitHubにも新しいフォルダーを作り,同期させます。これでうまくいくと思うじゃないですか。だめなんだな,これが。丸一日時間を浪費しました。最終的にPsychopyのコミュニティ掲示板で質問したら,親切な人が教えてくれました。ローカルフォルダーとGitHubを同期させると,ローカルフォルダーにGitHubの情報が自動的に書き込まれる。ただ,それは不可視ファイルになっているのでみえない。そいつらを削除してから同期しないと正常に同期できないっすよ〜 だそうです。ありがたや。速攻で問題解決。やっぱこういう問題は人に聞いた方が早いですね。Psychopyのコミュニティ掲示板はけっこう活発で,開発者のJon Peirce先生が回答してくれることもあります。ざざっと見ていると「なんだ,こんなことも質問しちゃうの?」みたいな書き込みもあります。でも日本の掲示板のように「ザコは来るな」とか「過去ログ読め」みたいなキツい人はいないようです。あ,日本の掲示板うんうんはあくまで個人の印象です。
  9. 上述のようにローカルのpsychopyビルダーはpythonのコードを書き出してくれ,Pavlovia用にはそれをjsのコードににしてくれるわけですが,必ずしも1対1対応ではなく,そもそも挙動が違うところもあります。自分がはまったのは,ルーチンを終了するコード。pythonなら break, jsだとcontinueRoutine = False;にするのですが,breakは end routineのタブに書けば処理されるのに,jsでは無視されてしまいます。ループの判定タイミングが違うみたいで,上述の掲示板では jsの場合,each frameのタブに書いてねと教わりました。
  10. javascriptはり勉強したことがないので,そのせいかもしれませんが,なんにせよデバッグが大変という印象です。PyCharmとかVSCなどでコーディングしながらデバックできるわけではなくて,ローカルのpsychopyでコードをいじり,GitHubと同期して,ブラウザーで実行しながらブラウザーのモニターでエラーコードをみていかないとなりません。手間で時間がかります。かつ,スクリプトは自分で組んだわけではなく,Psychopyが自動的に生成したものですので,ソースを追うのも一苦労です。そして,なんといってもpsychojsのライブラリ仕様がわかっていないとデバッグにも限界があります。時間をかけて,javascriptも,psychojsも勉強しようと覚悟しない限り,触らぬ神に祟りなしだと感じました。
  11. なので,目指すは,とにかくローカルのpsychopyでいかにコードをかかずに走るようにするかです。そうすれば,画面レイアウトの不自由さはあるにせよ,なんとかweb実験できるようになります。の,はずなのですが... 比較的単純な(でも刺激数が多い。そのせいかも),コードコンポーネントのない実験もうまく動作せず,謎のjsエラーがでてしまって解決せず,時間もないのでお蔵入りさせた幻の実験4もできてしまいました。今はとにかくコロナ対応で余裕がないのでペンディングし,時間ができたら再挑戦しようと思っています。
  12. psychopy3にはデモプログラムがたくさんついてきて,そのなかのいくつかがPavloviaにもあがっています。自分は日本語の教示をつけたり,刺激に漢字を使ったり,マウス入力をさせたかったりと欲張ったせで時間をかけてしまいましたが,そういうこだわりを捨てれば,すでに利用可能な実験を使わせてもらうのが手軽さとしては一番だと思います。

 以上,めちゃくちゃ勘違いしているところもおそらく多々あり,恥の上塗りになる可能性もありますが,同じところでつまづいて時間浪費してしまう人もいるかもしれないので公開しました。

 参考までに。

アーカイブ

法政心理ネット