Node.js環境で作成する心理学実験
はじめに
2021 年 10 月に jsPsychv7
系がリリースされました(7.0.0
のリリースページ)。このリリースを期に jsPsych はnpm
パッケージとして公開され,Node.js
および付随する開発環境を利用しやすくなりました[1]。Node.js
は JavaScript の実行環境で,npm
はNode.js
のパッケージ管理ツールです。詳細は以下の記事などを参照してください。
個人的に以前からNode.js
に興味があったので,jsPsych v7
系のリリースをきっかけに触り始めることにしました。今回の記事では,npm
パッケージとして jsPsych を利用して心理実験を作成する方法を紹介します。
本記事は psyJS Advent Calendar 2021 24 日目の記事になります。
準備
まず,大元の Node.js をインストールします。公式インストーラを用いるなどしてインストールしてください。
次に,練習用のフォルダを作成します。そして,ターミナルやコマンドプロンプトを開き,そのフォルダがカレントディレクトリの状態で以下のコマンドを実行します。
npm init
いろいろな情報が求められますが,今回は練習用なのでデフォルト設定で問題ないです。Enter
を連打してください。
続いて,使用するモジュールをインストールします。以下の 6 つです。
- jspsych
- @jspsych/plugin-html-keyboard-response
- webpack
- webpack-cli
- style-loader
- css-loader
npm install jspsych @jspsych/plugin-html-keyboard-response webpack webpack-cli style-loader css-loader
jspsych
と@jspsych/plugin-html-keyboard-response
はお馴染みの jspsych ライブラリとhtmlKeyboardResponsePlugin
です。今回の記事で使用するプラグインは一つだけなので,これで十分です。他のプラグインも使用する場合はその都度対応するモジュールをインストールする必要があります。ここは少し面倒ですね。
webpack
・webpack-cli
はNode.js
で作成したコードをいい感じにしてくれるモジュールです。style-loader
・css-loader
はwebpack
を css ファイルに対しても有効にするためのモジュールです。
ディレクトリの整備
webpack 公式ガイドにならって,src
とdist
ディレクトリを作成します。npm init
や モジュールのインストールをしたとき合わせて生成されたディレクトリも含めて,以下のようなディレクトリ構成になっているかと思います。
.
├── dist
├── node_modules
├── package-lock.json
├── package.json
└── src
src
とdist
は次のように使い分けます。実験実施の際は,dist
ディレクトリをオンライン実験用サーバーにアップロードします。
-
src
: 直接編集するjs
ファイルを配置する。 -
dist
:webpack
を用いてsrc
のファイルおよびそこで利用されるモジュールをまとめたjs
ファイルを配置する。また,まとめjs
ファイルを読むこむ html ファイルを配置する。
実験を作成する
実験用の js ファイルをsrc
に作成します。ファイル名はhello-world.js
としています。以下のコードは,公式のサンプルコードに3行目を追加したものです。
import { initJsPsych } from 'jspsych';
import htmlKeyboardResponse from '@jspsych/plugin-html-keyboard-response';
import 'jspsych/css/jspsych.css';
const jsPsych = initJsPsych();
const trial = {
type: htmlKeyboardResponse,
stimulus: 'Hello world!',
};
jsPsych.run([trial]);
webpack でバンドル
webpack を使って,import
文で読み込んでいるモジュールや css ファイルをひとつのjs
ファイルにまとめ(バンドルし)ます[2]。
まず,webpack の動作を設定するためのファイルwebpack.config.js
を作成します。公式のコードを一部編集したものです。
.
├── dist
├── node_modules
├── package-lock.json
├── package.json
├── src
+ └── webpack.config.js
const path = require('path');
module.exports = {
entry: './src/hello-world.js', // 上のファイル名に合わせる
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
],
},
};
そして,ターミナル・コマンドプロンプトで以下のコマンドを実行し,バンドルを行います。
npx webpack
dist
フォルダを確認すると,main.js
というファイルが作成されています。ファイルの中身のコードは読めたものではないですが,これで問題なく動作します。
バンドルされたファイルを読み込む html を作成する
dist
フォルダに以下の内容の html ファイルを作成してください。重要なのは下から 3 行目で生成されたmain.js
を読み込んでいる部分です。<title>
の部分は何でも構いません。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hello world</title>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
実験を実行する
普段 jsPsych を利用して作成した実験を実行するときと同様に,html ファイルを開くと実験を実行することができます。今回のコードでは,画面中央にHello world!
と表示され,何かしらのキーを押下すると消えるという単純な動作になっています。
おわりに
今回の記事では,npm
モジュールとして jsPsych を利用して心理実験を作成する方法を紹介しました。個人的には以前から興味のあったNode.js
を利用する JavaScript 開発の一端に触れることができ満足しています。
それでは,今後こういった方法が主流になっていくかと問われると当分はそうならないだろうと思っています。心理実験作成をきっかけにプログラミングを始めた人にとってこのような手法のハードルは高いような気がします。
一方で,全くの趣味の領域かというとそんなことはなく,Node.js
での開発によって得られるメリットもあると考えています。例えば,様々な支援ツールを利用できることが挙げられます。エディタが関数や変数の候補を表示してくれたり,エラーの検出をしてくれたりします[3]。また,TypeScript
を利用して型を活用できるようにすれば,バグの少ない・管理しやすいコードを書きやすくなるはずです。
とりあえず,私自身はしばらくNode.js
環境であれこれ試してみようと思います。
不定期にはなりますが,今後も引き続き心理学実験・研究法に関する Tips を共有していきます。いいね・サポートをいただけると大変励みになりますので,ぜひそちらもよろしくお願いします。
Discussion