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

はじめに

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

sumatrapdf のインストール

PDF viewer である sumatrapdf をインストールします。 PDF reader としては Adobe Reader が有名だが、残念ながら開いている時に別のアプリでファイルを更新できないという問題があります。 そこで、この授業では、sumatrapdf をデフォルトの PDF ビューアとして利用します。 choco.config に次の行を追加して、Start-Process -Verb runas cinst choco.config としてインストールしてください。途中で一度「A」とタイプする必要があります。

  <package id="sumatrapdf" />

PDF ファイルを開くと、どのアプリで開くかが設定できます。先ほどインストールした SumatraPDF を選択して、「常にこのアプリを使って .pdf ファイルを開く」としてください。すでに別のアプリに設定してしまっている人は、設定で変更してください。

デフォルト PDF アプリの設定

gnuplot のインストール

第二学年では gnuplot の eps ターミナルを利用していましたが、第三学年からは 基本的に pdf ターミナルを利用します(PDF の方が LaTeX のコンパイルが速いことと、Explorer で直接中身が見えるためです)。 gnuplot も Chocolatey でインストールできます。choco.config に登録し、インストールしてください。

  <package id="gnuplot" />

chokidar のインストール

次に、ファイル保存を監視する chokidar をインストールします。 chokidar は node.js で動作するアプリなので、まず node.js と yarn をインストールします。やり方は上と同じなので省略します。

  <package id="nodejs" />
  <package id="yarn" />

その後、node.js の global に chokidar-cli をインストールします。管理者権限で実行したいのですが、Start-Process は引数一つのコマンドしか実行できないので、PowerShell を普通に管理者権限で開き、以下のコマンドを実行してください。 管理者権限の PowerShell でなく、一般ユーザの権限でインストールしてください。

yarn global add chokidar-cli

インストールが終わったので、PowerShell を閉じてください。vscode も一度終了します。 再度開いた vscode 上のターミナルでchokidarとして説明書きが出たら成功です。

Gnuplot の自動実行テスト

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

mkdir $HOME\Documents\gnuplotTest
code ~/Documents/gnuplotTest

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

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

コマンドを実行すると Watching と出て、監視していることがわかります。 この時の画面はこんな感じになります。

実行画面

開いたら、以下の gnuplot スクリプトを記述します。 Windows 版の gnuplot はデフォルトで「マイクロソフト漢字コード」を期待しているのですが、vscode のデフォルトは「UTF-8」なので最初にスクリプトで文字コードを指定しています。

set encoding utf8
# 最初に文字コードを変更しておく(このコメントだけは encoding の下にないと動きません)

# mac 版と異なり、ここの名前は自分で設定します
name = "gnuplotTest.pdf"

# 以下の 2 行は Adobe Reader を使うときだけコメントを外します
# このコマンドで、無理矢理に Adobe Reader のタスクを強制終了しています。
# あまりいい手法ではないので、SumatraPDF を使ってください。
# system("taskkill /im AcroRd32.exe")
# すぐにタスクが終了しないので、1秒待っています。こちらも SumatraPDF なら必要ありません
# system("timeout 1")

# ここは固定部分
set term pdf color font ',10'
set output name

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


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

ここで、スクリプトを簡単に説明する。 これまで、PDF リーダとして Adobe Reader を使っていましたが、PDF を専有しない SumatraPDF を利用することで、この無駄な処理を止めることができることがわかりました。 どうしても Adobe Reader を使い続けたい人は、この処理を活かしてください。

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

このスクリプトを保存した瞬間に、先ほど実行した chokidar がファイルの変更を認識します。 その結果、chokidar が gnuplot を自動実行します。 コピーミスがなければ、自動的にプレビューで PDF ファイルが表示されるはずです。 この時のスクリーンショットを以下に示します。

試しに、sin(x) の部分を別の関数に書き換えて保存してください。 保存した瞬間にグラフが自動的に再度描画されることが確認できます。 なお、chokidar を止めるには、「control-c」を押してください。

chokidar による自動実行

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


hkob.hatenablog.com