torutkのブログ

ソフトウェア・エンジニアのブログ

WindowsのバッチファイルをGitHub Gistに置くときのメモ

きっかけ

先日(日本時間で3月21日)、Java SE 10がリリースされました。そこで、Java SE 10の開発キットであるJDK 10をWindowsにインストールしました。
この時点で、マシン上にはJDK 8、JDK 9、JDK 10とがインストールされた状態です。

コマンドプロンプト上で使用するJDKのバージョンに合わせた環境変数JAVA_HOMEとPATH)を設定するためのバッチファイル「setjdk.bat」を作っていましたので、JDK 9用に実行したところ、JDK 10用の環境変数が設定されてしまいました。

まあ、バッチファイルがJDK 8とJDK 9の設定にしか対応していなかったので、JDK 10のリリースに際してJDK 10の設定を追加する必要が生じたというところです。

ここで、Java SEは今後半年毎にメジャーバージョンアップするというリリース形態に変わり、今後は半年ごとにJava SE 11, Java SE 12, …とリリースされ、続々と生産されるJDK群がやってきます。

バッチファイル1つだけをGitリポジトリを作って管理するのは大仰なので、GitHubのGistサービスに「setjdk.bat」バッチファイルを置いています。

https://gist.github.com/torutk/27f55630516286dd1478bbd8b032bc8a

今回は、WindowsのバッチファイルをGist(Git)に置くときの注意点を書きます。

Gistに置くとき

Gistをブラウザで開き、[Edit]をクリックしてバッチファイルの中身を丸ごとコピーペーストして保存しました。以後、変更をしたときは同じく[Edit]で編集モードに入るのでそこに上書きでバッチファイルの中身をコピーペーストしました。

これまでは、Gistに上げるのみだったのですが、今回修正する前に一度Gistからファイルを落としてきました。Gistの[RAW]を右クリックし、Webブラウザのファイル保存で持ってきたところ、このバッチを実行するとエラーになりました。[Download ZIP]で落とした中にあるファイルでも同じくエラーでした。

このエラーの原因は、Gistから落としてきたファイルの文字コードUTF-8、改行コードがLFとなっていたためです。

Windowsのバッチファイルは、ASCII文字だけなら改行コードがLFでも実行できるようですが、日本語が(コメントにも)含まれていると、改行コードLFではおかしな動き(エラー)になってしまいます。

Gistで文字コードや改行コードの指定ができないか探しましたが、見当たりませんでした。
Webブラウザ上でテキストファイルを編集し変更管理ができるのは便利ですが、文字コードと改行コードはWebブラウザ(Webアプリケーション)に制約されてしまうのかと思います。

Gistで管理するファイルを文字コードCP932、改行コードCR+LFにするには

GistもGitなので、Gistの画面右上にある[Embed]ドロップダウンリストをクリックし、[Clone via HTTPS]を選択します。GitリポジトリのURLが表示されるのでそれをコピーし、gitコマンドのcloneでそのURLのリポジトリを取ってきます。

すると、ファイルが1つ取得できます。このファイルは、文字コードUTF-8、改行コードがLFであったので、これをエディタで開き文字コードをCP932、改行コードをCR+LFにして保存します。

gitの設定で、改行コードの自動変換が無効になっているか確認します。


> git config --list
:
core.autocrlf=false
:

core.autocrlfがfalseになっていれば、ファイルの改行コードがそのまま変換されずにgitリポジトリに入るはずです。これをgitでコミット&プッシュしたところ、Gistのファイルが意図した文字コードと改行コードになりました。

setjdk.bat については

Windows上では、JDKインストーラーからインストールするとレジストリにインストールしたディレクトリが記録されます。setjdk.batでは、レジストリを検索してインストールされているJDKの中から使用したいJDKのバージョンを指定するだけで環境変数の設定をしています。

詳しくは次のWikiページに書いていますのでよろしければご参照ください。

Windows JDK環境切替バッチファイル - ソフトウェアエンジニアリング - Torutk

Java SEのメジャーバージョンアップが半年毎にやってくると

開発環境や実行環境では、ツールというほどのものではない、ちょっとしたバッチファイル・スクリプトファイルがあることでしょう。これらは短時間でぱぱっと作って、なおかつ長年使い続けたりとします。安直な作りをしているので、メジャーバージョンアップには少なからず手直しが発生します。

いままでは、2〜3年おきのメジャーバージョンアップだったので、手直しも年に1回もない状況でした。しかし、今後は2018年9月のJDK 11、2019年3月のJDK 12、2019年9月のJDK 13、2020年3月のJDK 14と半年毎にやってきます。手直しする頻度が格段に増えてしまいます。