Gnuplot と chokidar のインストール(Windows) - BYOD PC のセッティング(12)

はじめに

第二学年の情報処理で gnuplot を用いてグラフを描画した。第二学年では gnuplot の中でコマンドを入力してグラフを作成していたが、第三学年ではファイルを用いたグラフ作成方法を学習する。その際、ファイル更新に同期してグラフが再作成される仕組みを取り入れる。

Windows の場合には、hogehoge.gp といった gnuplot に紐づいたファイルを作成すると、ダブルクリックするだけで gnuplot を実行する機能がある。昨年度の授業ではこれを活用させていたが、以下のような問題が発生した。

  1. スクリプトにミスがあってもエラーが見えないので、どこがミスっているのかわからず、結局 gnuplot で load コマンドでエラーを確認していた
  2. PDF を開いたままだと gnuplot が PDF を作成してくれない。そのエラーもわからない。

これらのおかげで、Windows ユーザに対するサポートがものすごく大変であった。このシステムを使ってもらうのは、これらのトラブル対応を簡単にするためでもある。

(6/14追記: PDF リーダとして SumatraPDF をインストールすることで、Adobe Reader を殺す処理をしなくてよくなったので、内容を一部変更した)

エディタのインストール

ファイルを編集するためにテキストエディタが必要となる。このあたりは趣味の問題なので、自分の好きなものをインストールして欲しい。ここでは最近よく使われる Visual Studio Code を紹介しておく。 Visual Studio Code は、Microsoft 社が作成した軽量エディタである。パッケージ形式で色々と拡張できる。インストールしただけでは日本語が表示されないので、その方法だけ説明しておく。以下、インストールは管理者モードの PowerShell で実行すること。

cinst -y vscode

起動するとこんな感じで全て英語で表示されている。

f:id:hkob:20200418221540p:plain
Visual Studio Code 起動画面

左側の拡張機能(赤丸の部分)をクリックし、検索窓に「japanese」を入れて出てきた「Japanese Language Pack for ...」で「Install」をクリックする。

f:id:hkob:20200418221716p:plain
拡張機能の追加

再起動を求められるので確認すると、日本語の画面となって立ち上がる。拡張機能はたくさんあるので、自分で必要なものをインストールして欲しい。

f:id:hkob:20200418221815p:plain
日本語化終了

gnuplot のインストール

第二学年では gnuplot の eps ターミナルを利用していたが、第三学年からは 基本的に pdf ターミナルを利用する。 gnuplot は単純に Chocolatey でインストールできる。

cinst -y gnuplot

chokidar のインストール

ファイル保存を監視する chokidar をインストールする。chokidar は node.js で動作するアプリなので、まず node.js と yarn をインストールする。

cinst -y nodejs yarn

次に chokidar をインストールする。パスの問題でローカルにインストールしていたが、PowerShell を開き直すことで解決することに気づいた。そこで、ローカルではなくグローバルにインストールすることにした。 chokidar は自分のホームの下のドキュメント以下にフォルダを作成し、そこにインストールすることにする。最初にそのフォルダを作成し、移動する。ここで、$HOME は自分のホームフォルダを示す記号である。

# mkdir $HOME\Documents\chokidar # この処理は必要なくなった
# cd $HOME\Documents\chokidar # この処理は必要なくなった

このフォルダに chokidar をインストールする。yarn init の後には色々聞かれるが単にリターンだけ打てばよい。

# yarn init # この処理は必要なくなった
# yarn add chokidar-cli # この処理は必要なくなった

上記のコマンドの代わりにグローバルにインストールするコマンドを入力する。

yarn global add chokidar-cli

インストールが終わったので、PowerShell を閉じ、再度PowerShell を起動する。chokidarとして一瞬黒い画面が起動したら成功である。

以下の文章はもう必要ない。

chokidar コマンドは $HOME\Documents\chokidar\node_modules.bin にインストールされる。これをどこからでも使えるように、PowerShell のエイリアスを設定する。エイリアスの設定は $profile という環境変数に設定されたファイルに記録される。notepad $profileとすることでこのファイルを編集できるが、初期状態ではこのファイルが作成されていないため以下のように表示される。もし、「パスが見つかりません」と表示された場合には、mkdir $HOME\Documents\WindowsPowerShellとタイプしてディレクトリを作ってから、再度notepad $profileと実行すること。

f:id:hkob:20200418222801p:plain
$profile の新規作成
開いたファイルに以下のようにエイリアスを設定して保存する。

Set-Alias chokidar $HOME\Documents\chokidar\node_modules\.bin\chokidar

f:id:hkob:20200418222936p:plain
エイリアスの設定

このファイルを実行できるようにするために、実行ポリシーを RemoteSigned に変更しておく。

Set-ExecutionPolicy RemoteSigned                                                   
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y

Gnuplot の自動実行テスト

Gnuplot の自動実行テストをやってみる。テスト用のフォルダを作成し、そこに移動する。場所はどこでもよいが、ここでは $HOME\Documents\gnuplotTest とでもしておく。

mkdir $HOME\Documents\gnuplotTest
cd $HOME\Documents\gnuplotTest

gnuplot でグラフを作成するシェルスクリプトを作成する。まず空のファイルを作成し、実行属性を付ける。

 New-Item -Type File test2.gp

ここで、この gnuplotTest.gp を監視し、変更があったらgnuplot スクリプトを実行するように設定する。最初の引数が監視するファイル名(ワイルドカードも利用可能)で、-c の後ろが実行するコマンドである。

chokidar gnuplotTest.gp -c "gnuplot gnuplotTest.gp"

コマンドを実行すると別の cmd.exe のウインドウが出てきて、Watching と表示され、監視していることがわかる。この時の画面はこんな感じになる。

f:id:hkob:20200418224921p:plain
chokidar 実行画面

一方、エディタで gnuplotTest.gp を開く。空なので何も表示されないが、Visual Studio Code の場合には、デフォルトで UTF-8 で開く。gnuplot はShiftJIS の文字コードを期待するので、以下の手順で変更しておく。赤の「UTF-8」の部分をクリックし、表示された「エンコード付きで再度開く」をクリックする。 大量のエンコード候補が出るので、「shift」くらいをタイプして「Japanese (Shift JIS)」を選択する。 ← 毎回やるのは面倒なので、gnuplot を UTF-8 で利用することにする。

開いたら、以下の gnuplot スクリプトを記述する。

set encoding utf8
# 最初に文字コードを変更しておく

# ここの名前は自分で設定する
name = "test.pdf"

# 以下の 2 行は Adobe Reader を使うときだけコメントを外す。面倒なので、SumatraPDF を勧める。
# system("taskkill /im AcroRd32.exe")
# system("timeout 1")

# ここからは固定
set term pdf color font 'Arial,10'
set output name

# ここからは自分で変更する部分
plot sin(x) t "日本語"


# ここから下も固定部分
set output
system(name)
quit

ここで、スクリプトを簡単に説明する。最初の system コマンドは既に起動している Adobe Reader プロセスを止めるコマンドである。ここでは、PDF が Adobe Reader で開くことを期待している。もし、Adobe Reader 以外で PDF を開いている場合には、タスク名を書き換えて欲しい。タスク終了がすぐに実行されるわけではないので、timeout コマンドで1秒の猶予を設けている。 これまで、PDF リーダとして Adobe Reader を使っていたが、PDF を専有しない SumatraPDF を利用することで、この無駄な処理を止めることができることがわかった。

その後は、PDF ターミナルを設定し、さらに出力ファイル名を設定している。ここでは sin(x) のグラフを「日本語」というタイトルで描画する(日本語のテストのため)。その後、set output コマンドで PDF ファイルを閉じる。 gnuplot の描画が終わると、system コマンドで作成された pdf ファイルを開く。

このシェルスクリプトを保存した瞬間に、先ほど実行した chokidar がファイルの変更を確認し、gnuplot を自動実行する。タイプミスがなければ、自動的にプレビューで PDF ファイルが表示される。この時のスクリーンショットを以下に示す。最初の1回目なので Adobe Reader が動いていないため、エラーが表示されていることがわかる。

試しに、sin(x) の部分を別の関数に書き換えて保存してみて欲しい。保存した瞬間にAdobe Reader が強制終了されたのち、再度グラフが自動的に再度描画されることが確認できる。なお、chokidar を止めるには、「control-c」を押せばよい。

f:id:hkob:20200418230803p:plain
chokidar による自動実行

これより後は授業で実施するので、ここまでとする。

hkob.hatenablog.com