自宅でも職場でもネカフェでもperl

perlをwindows10で使う話。それも、マシンを渡り歩きながら使えるようにしようという話です。

# ポータブルperlでリモートワークしよう

perlは便利なツールです。およそテキストファイルが介在する仕事なら何であれ頼れる相棒となって助けてくれます。筆者などperlを使わない日は一年365日中2日ぐらいしかありません。

ところが、残念なことにwindowsにはperlが標準ではインストールされていません。これはたいそう不便なので、自宅のwindowsマシンにはperlが追加で（しかも二つものバージョンが）インストールされています。

しかし問題は職場などの共用マシン。ちょっと勝手にソフトをインストールするわけにもいきません。そうしたマシンでも環境を「汚す」ことなくなんとかperlを使えるようにしたい。そして、仕事が終わったら「perl？ 何のこと？ しらないなあ？」と何食わぬ顔して立ち去りたい。

そこでポータブルperlをUSBスティックメモリに展開し持ち歩くという方策を検討してみることにしました。これなら、家でも職場でもインターネットカフェ（ネカフェ）でもperlが使えます。加えて、エディタと各種UNIX系ツールも使えるようにすれば、場所を問わず仕事ができる。ノマドでユビキタスでナウいリモートワークが実現できるのです。
![usbstick.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383429/2c9ab891-6957-a17c-3e07-d2a829b5e783.jpeg)

# セットアップの手順

## USBメモリスティックの調達

安いので十分。以下に述べるソフトを全部展開しても1GBいかないので、amazonあたりで16GBぐらいのをまとめ買いするといいでしょう。

なお、USBメモリがFAT32でフォーマットされている場合（市販のはたいていそうなっている)、NTFSでフォーマットし直しておくことを勧めます。特にMSYS2を使いたい場合は必ずそうしてください。

以下、特に断りない場合は、作業用のwindowsマシンに既に新品のUSBメモリが刺さっていて、ドライブは`f:`であると仮定しています。

## perl

windows上で使えるperlは何種類か知られています。以下に示すstrawberry perlか、MSYS2のどちらかを導入するのが2020年時点では現実的な選択です。

### 最短距離でperlだけ使いたいならstrawberry perlを入れよう

入手元：[Strawberry Perl for Windows](http://strawberryperl.com/)

基本的にzipを解凍するだけなので、セットアップは簡単です。

0. インストーラ(.msi）ではなく、portable版zipをダウンロードし、USBメモリのルートディレクトリ直下に`f:\strawberry-perl-5.32.0.1-64bit-portable`のようなサブディレクトリを作る形で展開する。
0. 当該ディレクトリ中の`portableshell.bat`を実行するとコマンドラインが開く。とりあえず、`perl --version`と実行して、perlのバージョンその他が表示されるのを確認。


### いろいろ本格的にやりたいならMSYS2を入れよう

入手元：[MSYS2 - Software Distribution and Building Platform for Windows](https://www.msys2.org/)

多くのツールが利用可能となっていて、そのうちの一つとしてperlが含まれています。

本格的な仕事を始めると、いかにperlが高機能といってもその守備範囲内だけでは辛い種類の作業も出てきます。このような場合はUnix-likeツールの助けを借りることができれば、楽にやれることの範囲が飛躍的に広がります。代表的なツールとしてはxargs、find、sortなどが挙げられるでしょう。それらを一通りパッケージングしたのがMSYS2です。

0. 当該ページ中央付近にある「Download the installer:」を目印にして、インストーラ(.exe）をダウンロードする。
0. インストーラを起動。展開先をまず聞いてくるので、USBメモリのルートディレクトリ直下に専用サブディレクトリを作る（例えば`f:\msys2`）方向でパス名を指定する。
0. 起動用バッチファイルを用意する。

USBメモリのドライブ名は固定ではないので、環境に応じて適切なパスを設定する仕組みが必要です。そのためのバッチファイルを作成して、USBメモリのルートディレクトリに置いておきます（f:\msys2.bat）。内容は以下の通り[^1]。ファイル名は`msys2.bat`としました。

[^1]: [MSYS2 bash and linux tools on windows](https://techc.omorita.com/topics/msys2/#usbflash)から拝借しました。

```
@echo off
set PATH=%~dp0msys64\mingw64\bin\;%~dp0msys64\usr\local\bin\;%~dp0msys64\usr\bin\;%~dp0msys64\bin\;%PATH%
set MSYSTEM=MINGW64
set PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig
.\msys64\msys2.exe
```

## エディタ

perlスクリプト作成に欠かせないのがエディタ。ポータブル仕様でフリーのエディタはいくつか知られています。ここでは、プログラマに好評らしい[VSCode](https://qiita.com/tags/vscode)を試してみましょう。

[Download Visual Studio Code - Mac, Linux, Windows](https://code.visualstudio.com/Download)
から、インストーラではなくzipファイルをダウンロードし、USBスティックのルートディレクトリに直接展開する。

# 使ってみる

strawberry perl、MSYS2、VSCodeのセットアップを自宅で終えたUSBメモリを持って、ネカフェに行ってきました。

![ネカフェのPCにUSBスティックメモリを刺してみたところ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383429/1b00a56e-46a2-1937-8d48-4153567a0821.jpeg)

とりあえずMSYS2の起動を試みましょう。上で作った起動用バッチファイル`msys2.bat`をダブルクリックしてみます。つづいてperlを実行してバージョンを確かめてみます。

![MSYS2起動時のコンソールのスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383429/d0e11824-96d6-4b19-ef81-b1160d4b4e51.png)

この起動スクリプトは、そのときのログインユーザ名を見て`/home/ユーザ名`のディレクトリを作り、これをカレントディレクトリに自動的に設定するようです。そのファイル名の日本語部分が文字化けして表示されていますが、まあ実用上大きな問題はないでしょう。確かにperlが起動できたことが確認できました。

なお、このネカフェPCではUSBメモリのドライブは`F:`ではなく`E:`でしたが、MSYS2並びにperlの使用に何の問題もありません。実ドライブ名・ディレクトリ名とMSYS2コンソール上で見えるディレクトリの対応関係は、コマンドラインから`mount`コマンドや`df`コマンドを使えば確認できます。

# 最後に

安価なUSBメモリの中に、自己完結的で本体PCの環境を「汚さない」形でperlの開発環境を構築できました。紛失・破損のリスク対策さえしっかりすれば、ノートパソコンを持ち歩くより楽に、リモートワークができそうです。