breadboard (yale) のインストールで躓いた点とその解決方法

「人間の行動を測定するとき，ネットワークを使いたい」
「ネットワークの形状によって，（従属変数）は異なるだろうか？」
といった関心に答えられるソフトウェアの一つが，[breadboard](https://breadboard.yale.edu/) です．

ネットワーク互恵性を研究していきたい私にとって，非常に重要なツールとなりそうな予感がするこのツール．
しかし，いざインストールしようとすると，どうにもうまくいかない...
ということで，同じように困った人，これから困る人向けに少しでも力になれるよう，この記事では私なりに躓いた点とその解決方法をご紹介します．
なお，私の使っているマシンが Windows 11 なので，以下では Windows を想定して説明します．

## breadboard をインストールする

### インストールの流れ

[breadboard 公式](https://breadboard.yale.edu/)にも書いてありますが，インストールの手順は以下です．


1. JDK 8 をインストールする
1. `breadboard_v[X.X.X].zip` をインストールする
1. `breadboard_v[X.X.X].zip` を解凍する
1. command prompt等で breadboard.bat を実行する
1. お使いのブラウザ (e.g., Chrome) のリンク欄に `http://localhost:9000` と入力して開発開始

では，一歩ずつ見ていきましょう．

#### JDK 8 をインストールする

[コチラ](https://www.oracle.com/java/technologies/downloads/#java8) にアクセスして，JDK をインストールしてください．

自分のマシンにあった JDK をインストールしましょう．

私は Windows の x64 なので，下線部のjdk をインストールしました．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/64c3778c-5509-100a-eba5-63df21706954.png)

（以下，画像の右側にキラキラしたアイコンや，かわいいアイコンが表示されますが，拡張機能によるものです．皆さんのPCに表示されなくても問題ないので，気にしないでください．）

ここをクリックして jdk をダウンロードしようとすると，Oracle のログイン画面が出てくると思います．
原則，アカウントがないとインストールできない（？）ので，住所や電話番号を入力してアカウントを登録し，その上でダウンロードしましょう．

ダウンロードしたら，ダウンロードした先のフォルダに移動して，`jdk-8u381-windows-x64.exe`をダブルクリックしてください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/cd491b9f-c474-dfcb-2b01-4ff586b29dc5.png)

ダブルクリックしたら，「次へ」か「完了」をひたすら押してください．
インストールが完了したら，次に進みましょう．

#### `breadboard_v[X.X.X].zip` をインストールする

[breadboard 公式](https://breadboard.yale.edu/)にアクセスし，上の方にある「INSTALL」ボタンを押してください．

（サイトがアップデートされたことによって，見た目が変わっている可能性があります．）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/77fa7580-ca96-7a16-e5b8-1bf6234702ad.png)

すると，以下のような画面になるはずなので，「DOWNLOAD PACKAGE」をクリックしてください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/75ac5ce7-2ce5-1dfb-bbc1-63bc4a7980eb.png)

ライセンスが表示されるので，同意する場合は「Email address」に自分のアドレスを入力して，「AGREE」を押してください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/31bd920d-ae2b-d8df-a8cd-92b1a0e82e78.png)

すると，ダウンロード先に`breadboard_v[X.X.X].zip` (私の場合は`breadboard-v2.3.1.zip`) がダウンロードされているはずです．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/039f6c07-c679-794d-53d8-325fba026aee.png)

#### `breadboard_v[X.X.X].zip` を解凍する

ダウンロードされていることが確認できたら，`breadboard_v[X.X.X].zip` を選択したうえで右クリック→「すべて展開...」→「展開」を選択してください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/feb71f1f-f938-2b20-4b6c-f400f8366223.png)

zipファイルを展開したあとのフォルダを見てみると，以下のようなファイルがずらっと並びます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/75562169-d4da-d022-b716-1a803a99386d.png)

#### command prompt等で breadboard.bat を実行する

##### `breadboard.bat`があるフォルダまで移動する

上記のファイル群のうち，`breadboard.bat`を右クリック→「プロパティ」をクリックして，パスをコピーしましょう．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/da9594cb-a15e-39f5-b49b-796f14c9900a.png)

次に，「Windowsキー」を押して，「cmd」と入力，「Enter」を押すことで，コマンドプロンプトを押してください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/190bc913-0a71-9fdf-ef7f-e7cd397c9d35.png)

その後，立ち上がったら `cd breadboardのパス`を入力して，Enterを押してください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/117d1501-afbc-5d11-f876-83b0cf742fc7.png)

##### `breadboard.bat`を実行する

次に，`breadboard-v.X.X.X`フォルダを開いて，`breadboard.bat` をコマンドプロンプトにドラッグして Enterを押してください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/d404a1f4-d012-9c8a-5fad-62c5f1019a49.png)


すると breadboard のセットアップが完了する...はずなんですが，command prompt が立ち上がってもすぐ落ちる...
私はここで躓きました．

解決手順（ChatGPTにどんな質問をして解決したか！）はこの記事の補足で説明していますが，結論からいうと，`breadboard.bat`の中身を以下のように変更することで解決します．

中身の変更の仕方がわからない方は，[テキストエディタでバッチファイルを開く方法 | TECH PROjin](https://tech.pjin.jp/blog/2017/09/02/windows_tips_how_to_open_batch/)をご参照ください．

```batch
@ECHO OFF &SETLOCAL
rem Parse the output of java --fullversion into an integer
for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"

rem Set java options for jdk9 and later
if %jver% GEQ 19000 (set "_JAVA_OPTIONS=")

rem run the breadboard server
java -cp "./lib/*;" -Dhttps.port=9443 -Dapplication.secret="pleasechangethis" -Dconfig.file=conf\application-prod.conf -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC play.core.server.NettyServer

```

その上で上記と同様の手続き（`breadboard.bat`があるフォルダまで `cd` で移動し，`breadboard.bat`を実行）をすると，以下のような画面になります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/ddf32f09-8f9d-5203-72bd-da3154dd98ab.png)

このような画面になったら，次のステップに進みましょう．


#### ブラウザのリンク欄に `http://localhost:9000` と入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/2556bb9d-e991-5417-4a98-9c3b33a3ab12.png)

リンク欄に入力したら，Enterを押すと，以下のような画面になります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/25e0d072-2467-f500-5d98-9404862a45a5.png)

この画面で必要事項を記入したら，「Create」ボタンを押しましょう．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/83ccd02e-e6e2-7537-336e-56b0ec739f1d.png)

この画面に遷移したら，セットアップは完了です！
お疲れ様でした．


### 補足：breadboard.bat の解決手順

cmd で独立で立ち上げてからbat file を実行することでエラーの内容を見てみました．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/7d59441d-31d7-fddd-9c4e-ea2f8624be05.png)

色々と試行錯誤やら検索やらしたんですが，さっぱりわからん...
ということで，ChatGPTに聞いてみました．

**僕**
> 以下の bat file を実行しました．
> ```bat
> @ECHO OFF &SETLOCAL
> rem Parse the output of java --fullversion into an  integer
> for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"
> 
> rem Set java options for jdk9
> if %jver% GTR 19000 (set _JAVA_OPTIONS="--add-modules=javafx.controls")
> 
> rem run the breadboard server
> java -cp "./lib/*;" -Dhttps.port=9443 -Dapplication.secret="pleasechangethis" -Dconfig.file=conf\application-prod.conf -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC play.core.server.NettyServer
> ```
> すると，以下のエラーメッセージが cmd 上で表示されました．
> 
> ```
> Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
> Unrecognized option: --add-modules=java.xml.bind
> Error: Could not create the Java Virtual Machine.
> Error: A fatal exception has occurred. Program will exit.
> ```
> どうすればいいですか．

**ChatGPT**

> このエラーメッセージは、Java仮想マシン（JVM）のオプションが正しく設定されていないことを示しています。具体的には、--add-modules=java.xml.bindオプションが認識されていないと言っています。また、MaxPermSize=256mオプションもJava 8以降ではサポートされなくなっているため、無視されています。
> 
> 問題を解決するために、次の手順を試してみてください。
> 
> --add-modules=java.xml.bindオプションを削除するか、より新しいJavaバージョンでサポートされるオプションに変更します。具体的なオプションはJavaのバージョンに依存します。バージョン9以降では、--add-modulesオプションが使われないことがあります。必要な場合は、Javaのバージョンに合わせて適切なオプションを設定してください。
> 
> MaxPermSize=256mオプションも削除することをお勧めします。このオプションはJava 8までで使われており、Java 9以降では無視されます。そのため、不要な警告を回避するために削除することができます。
> 
> 修正したバッチファイルのコードは次のようになります。
> 
> ```bat
> @ECHO OFF &SETLOCAL
> rem Parse the output of java --fullversion into an integer
> for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"
> 
> rem Set java options for jdk9 and later
> if %jver% GEQ 19000 (set "_JAVA_OPTIONS=")
> 
> rem run the breadboard server
> java -cp "./lib/*;" -Dhttps.port=9443 -Dapplication.secret="pleasechangethis" -Dconfig.file=conf\application-prod.conf -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC play.core.server.NettyServer
> ```
> この修正により、バッチファイルはJava 9以降でも正常に実行できるはずです。必要に応じて、Javaのバージョンに合わせてオプションを調整してください。また、バッチファイル内の他の設定も確認してください。

ほんとかよ...と思ったら，本当に動きました．
ChatGPTさん，凄いですね．