【じゃんけんゲームで入門】JScript

当記事では、自作したじゃんけんゲームを題材にしてJScriptの文法や使用するときの注意点などを確認していきます。Windows 10 Home 64bit版環境で検証しています。

ソースコードは以下よりご確認ください。

[rps-like/JScript at master · tomomoss/rps-like](https://github.com/tomomoss/rps-like/tree/master/JScript)

## じゃんけんゲームとは

じゃんけんゲームはコンソール上で動作するCUIゲームです。

基本的なルールは既存のじゃんけんそのものです。じゃんけんで勝つごとに1点取得し、対戦相手よりも先に5点先取することで勝者となります。

対戦内容はログファイルに書き出して、後から読み返せるようにします。

## JScriptとは

JScriptはMicrosoftによって仕様が拡張されたJavaScriptです。1999年12月に発表されたECMAScript3（ES3）に準拠しており、そのうえでMicrosoftによって拡張が行われています。

1996年8月に発表されたInternet Explorer 3.0に **クライアント用スクリプト言語** としてVBScriptともに実装されました。また、Windows 98から搭載が開始されたスクリプト実行環境であるWSH（Windows Script Host）にも標準で対応しています。

使い勝手としては、ほぼJavaScript（ECMAScript）そのままです。とはいえ、仕様の基礎となっているのがES3であるため、現在では当たり前となった機能の多く――特に **ES6以降の機能が使えない** という残念な面があります。

## 開発環境構築手順

JScriptはWindows系OSであれば標準搭載されていますので開発環境を構築する必要はありません。また、JScriptはWindows専用言語ですので非Windows系OSでは開発できません。

## 注意したい仕様

基本的な文法などはGitHubに上げているソースコードを読んでいただくか、あるいは自前で調べていただくとして――ここからは、GitHubに上げているソースコードからは読み取れない仕様や初めてJScriptを触る人に向けての注意事項を列挙します。

### JScriptの動かし方

当項目では **ブラウザやASPでの動かし方には触れず、WSH上で動作させることに限定** して解説します。

WSH上でJScriptを動かすには「.js」拡張子を付けたソースファイルを、WSHの本体である **wscript.exeかcscript.exeの第1引数として渡すことで実行** されます。どちらの実行ファイルも（WindowsをCドライブにインストールしていた場合）C:\Windows\System32に置いてあります。

当該ディレクトリには標準でPATHが通っていますのでファイル名だけで呼び出すことができます。

```
C:\Users\tomomoss> wscript.exe .\test.js
```

```
C:\Users\tomomoss> cscript.exe .\test.js
```

wscript.exeとcscript.exeの違いですが、wscript.exeはウィンドウなどを表示して対話的に処理を行うプログラムのための実行環境です。対してcscript.exeはコンソールを表示・操作することができるので自動化を目的としたプログラム向けの実行環境となります。例えば、以下コードをそれぞれのファイルで実行すると挙動が異なります。

```js
WScript.Echo('Hello world.');
```

対話的に処理を進めるためのwscript.exeだとウィンドウが表示され、処理の自動化等に向いたcscript.exeではコンソールが表示されます（ダブルクリックで立ち上げた場合は一瞬表示されて、すぐ消えてしまいます）。このように作りたいプログラムのカタチに応じて使用する実行環境を使い分ける必要があります。なお、Windowsの標準設定では.jsファイルの既定のプログラムにはwscript.exeが指定されていることに留意してください。

ところで、上記コードは双方の実行環境に対応していましたが、片方の実行環境でしか動かない処理もあることに注意してください。以下処理はcscript.exe専用です。

```js
WScript.StdOut.WriteLine('Hello world.');
```

なお、当記事に掲載しているプログラムはcscript.exeで動かすことを想定しています。

### 標準文字コードはShift JIS

WSHの標準文字コードはShift JISです。ソースファイルはShift JISで書く必要がありますし、スクリプトの処理で出力されるファイルもShift JISになっています。

私もよくやらかしたのですが、Shift JIS以外の文字コードで書いたファイルを実行すると以下のようなエラーが表示される場合があります。

```
C:\Users\AGadget> cscript //Nologo test.js
test.js(1,1) Microsoft JScript コンパイル エラー: 終了していない文字列型の定数です。
```

このようなエラーが出て、かつ、エラー発生個所を見てもエラーの原因が分からない場合は文字コードを間違えていないか確認してみてください。

### エントリポイント

JScriptのエントリポイントはコードの先頭です。CやJavaのように特定の関数・メソッドから始まるわけではありません。

### 配列操作

ES3が土台になっているためArray.forEachメソッドもfor...of文も使えません。そのため配列をループで回すような処理をするにはfor文を使うことになります（for...in文を配列に使うのは推奨できません）。

### 変数宣言はvar文のみ

let文・const文は使えません。var文で変数を宣言してください。

### class文がない

ES3にはclass文がありません。そのためfunction文でクラス（のようなもの）を定義することになります。

詳しくは以下記事などを参考にしてください。

[JavaScript：関数からClassを学ぶ - Qiita](https://qiita.com/daisu_yamazaki/items/109e3044645c4fe2925d)

[Google流JavaScriptにおけるクラス定義の実現方法(ES6以前) | yunabe.jp](https://www.yunabe.jp/docs/javascript_class_in_google.html)

[JavaScriptでクラスを実現する方法](https://so-zou.jp/web-app/tech/programming/javascript/grammar/function/class/)

### アロー演算子はない

アロー演算子は実装されていません。

### 厳格モードはない

厳格モードは実装されていません。

## 私が意識していること

JScriptを使うときに私が意識していることを列挙します。1つ前の「注意したい仕様」を読んでいることを前提とした内容になっています。

### コーディング規約

JScriptの公式コーディング規約――つまり、Microsoftから発表されたコーディング規約はありません。

じゃんけんゲーム制作にあたってはGoogle推奨のコーディング規約で書いています。Google制定のもの以外にも、いくつか有名なコーディング規約がありますので、各自思い思いの規約を採用すれば良いかと思います。