オフラインなWindowsで開発環境を作る

インターネットに接続されたPCで特定のディレクトリにポータブルな環境を作って、オフラインのPCにコピーするという発想です。
USBメモリの利用を前提としていますので、いろんな事情でUSBメモリ経由でデータを持ってこれないような制約がある方の力にはなれませんので、ご了承ください

perlやpythonの開発環境を試行錯誤してやっとマシなものができた気がするので、供養の意味を込めて投稿したいと思います。
きっと、もっと良い方法もあると思いますが、そのへんはご了承ください。

# 前提条件
タイトル通りWindowsで開発環境を整える手順ですが、以下の条件があるものとします。

* 無料
  * お金で解決できるならIntelliJとか使ったほうが良いかもしれません。
* 開発PCはインターネットに接続されていない。
* インターネットに接続されたWindowsPCがあり、このPCでダウンロードしたファイルはUSBで開発PCにウィルスチェックを行えば（建前）、移動可能
* 開発PCとインターネットに接続されたPCは同じエディション
* 言語はPerl, Python, Golang, Node.jsを想定
  * 環境変数を設定すれば動作する言語でも応用できるかもしれません。
    * PHPとか？

# ご注意
言わずもがな、ここ参考に操作したとこと、データが消えたことによる損害等については責任はとれませんので、自己責任で行ってください。

# 導入するもの

* Visual Studio Code
* python 
* perl
* go
* node.js
* hyper

>   C:\\prog

以下に環境を作っていきます。



## Git for Windows
zip版をダウンロードして以下の場所に展開してください。

>   C:\\prog\git


次に、このbashを起動するためバッチファイル(bash.bat)を作成していきます。
ホームディレクトリなどをUSBにするための設定を書いていきます。

```bat
@echo off
SETLOCAL
SET _A=%~d0
SET DLETTER=/%_A:~0,1%
SET PTBLROOT=%DLETTER%/prog
SET HOME=%DLETTER%/prog/homedir
SET HOMEPATH=%HOME%
SET USERPROFILE=%HOME%
SET APPDATA=%USERPROFILE%/AppData/Roaming
SET LOCALAPPDATA=%USERPROFILE%/AppData/Local
SET COMSPEC=%PTBLROOT%/git/bin/bash.exe
START %~d0\prog\git\usr\bin\bash --login -i
SETLOCAL
```

スクリプト中で指定しているディレクトリは、事前に作成しておいてください。
ちなみに、``` %~d0 ``` は、バッチファイルの構文？で、バッチファイルがあるドライブレター (ここでは ``` C: ```) に展開されます。
>    C:\prog\homedir
>    C:\prog\homedir\AppData\Roaming
>    C:\prog\homedir\AppData\Local


そのままだと、起動直後のディレクトリが、バッチファイルがある場所になってしまいました。
気になる方は、以下のコマンドを打って、ログイン直後に、ホームディレクトリに移動します。

```bash
echo cd ~ > ~/.bash_profile
```

## Visual Studio Code
ダウンロードページにある .zip リンクからダウンロードします。

[Download Visual Studio Code - Mac, Linux, Windows](https://code.visualstudio.com/download)

ダウンロードしたら展開

> C:\\prog\\vscode


### .bash_profileに設定を追加
..bash_profile に 下記の記述をして ``` # $SHELL -l ``` とかプロンプトを閉じるなどして立ち上げ直すしてください。

```bash
alias code="${DLETTER}/vscode/code.exe"
```

```
code
```
と入力して、visual studio codeが起動されればOK。


拡張などを入れたくなりますが、プログラミング言語が入っていたほうがやりやすいと思うので、次の言語のインストールへ。

## python
winpythonのインストーラー(WinPython64-3.6.5.0Zero.exe)をダウンロード＆実行して、展開先ディレクトリを I:\prog\lang\python3.6.5 にします。

### .bash_profile に設定を追加
まず、必要な環境変数を調べます。

バンドルされている起動スクリプトの ``` C:\prog\lang\python3.6.5\WinPython\WinPython Command Prompt.exe ``` を起動して、 ``` SET |SORT ``` コマンドを実行します。引数はいりません。

表示された中から、WinPythonが使いそうなものを確認して、


```cmd
WINPYARCH=WIN-AMD64
WINPYDEBUG=disabled
WINPYDIR=C:\prog\lang\python3.6.5\WinPython\python-3.6.5.amd64
WINPYDIRBASE=C:\prog\lang\python3.6.5\WinPython
winpython_ini=C:\prog\lang\python3.6.5\WinPython\settings\winpython.ini
WINPYVER=3.6.5.0Zero
WINPYWORKDIR=C:\prog\lang\python3.6.5\WinPython\scripts\..\Notebooks
```

.bash_profileに追記していきます。

```bash
# source .bash_profile でパスが無限に長くならないようにする
if [ -z "${MY_ORIG_PATH}" ]; then
  MY_ORIG_PATH=${PATH}
else
  PATH=${MY_ORIG_PATH}
fi

# python (winpython 3.6.5)
PATH=${PTBLROOT}/lang/python3.6.5/WinPython/python-3.6.5.amd64:${PTBLROOT}/lang/python3.6.5/WinPython/python-3.6.5.amd64/Scripts:${PATH}

WINPYARCH=WIN-AMD64
WINPYDEBUG=disabled
WINPYVER=3.6.5.0Zero
WINPYDIR=%DLETTER%/prog/lang/python3.6.5/WinPython/python-3.6.5.amd64
WINPYDIRBASE=%DLETTER%/prog/lang/python3.6.5/WinPython
winpython_ini=%DLETTER%/prog/lang/python3.6.5/WinPython/settings/winpython.ini
WINPYWORKDIR=%DLETTER%/prog/lang/python3.6.5/WinPython/scripts/../Notebooks
```

```bash
$SHELL -l 
python -V 
```
で python 3.6.5 が表示されることを確認する。


## perl
今回はstrawberryperlを使います。

[Strawberry Perl for Windows - Releases](http://strawberryperl.com/releases.html)

リリースページからPortable editionをダウンロード(strawberry-perl-5.26.2.1-64bit-portable.zip)して、展開先ディレクトリを C:\prog\lang\perl5.26.2.1 にします。

### .bash_profileに設定を追加

```bash
# strawberry perl (perl 5.26.2.1)
PATH=${PTBLROOT}/lang/perl5.26.2.1/perl/site/bin:${PTBLROOT}/lang/perl5.26.2.1/perl/bin:${PTBLROOT}/lang/perl5.26.2.1/bin:${PATH}
# TERM= # これを指定するとバックスペースが効かなかった
PERL_JSON_BACKEND=
PERL_YAML_BACKEND=
PERL5LIB=
PERL5OPT=
PERL_MM_OPT=
PERL_MB_OPT=
```

```bash
$SHELL -l 
perl -V 
```
となれば、OK

## Go
go言語の公式ページからファイルをダウンロードします。
https://golang.org/dl/
gp1.10.2.windows-amd64.zip を C:\prog\lang\go1.10.2 に展開します。

### .bash_profileに設定を追加
```bash
# Go言語 (go1.10.2)
PATH=${PTBLROOT}/lang/go1.10.2/bin:${PATH}
```

```bash
$SHELL -l 
go env
```

## Node.js
Node.js の公式ページから Windows Binaryのほうをダウンロード(今回は、node-v10.2.1-win-x64.zip)して、${PTBLROOT}/lang/node-v10.2.1-win-x64/ 以下に展開します。

### .bash_profileに設定を追加
```bash
# Node.js (10.2.1)
PATH=${APPDATA}/npm:${PTBLROOT}/lang/node-v10.2.1-win-x64:${PATH}
```
```bash
$SHELL -l 
node -v
```
10.2.1が表示されればOK


## hyper

以上で、コマンドプロンプト上のbashで開発環境が整うのですが、せっかくなのでかっこいい hyper でbashを動かして気分を上げていきましょう。

[githubのリリース](https://github.com/zeit/hyper/releases)にある hyper-Setup-2.0.0.exe をダウンロードします。


bash.bat のプロンプトの中で、hyper-Setup-2.0.0.exeがあるディレクトリに移動し、

```bash
./hyper-Setup-2.0.0.exe
```

を実行します。
(環境変数を設定した環境で実行することによって、hyperはUSBメモリ内のAppData以下にインストールされます。)

### 起動用バッチファイルの設定 (hyper.bat)

バッチファイル実行でhyperが起動するようにして、bashが動くように設定していきます。

```batch
@echo off
SETLOCAL
SET _A=%~d0
SET DLETTER=/%_A:~0,1%
SET PTBLROOT=%DLETTER%/prog
SET HOME=%DLETTER%/prog/homedir
SET HOMEPATH=%HOME%
SET USERPROFILE=%~d0/prog/homedir
SET APPDATA=%USERPROFILE%/AppData/Roaming
SET LOCALAPPDATA=%USERPROFILE%/AppData/Local
SET COMSPEC=%~d0/prog/git/bin/bash.exe
START %LOCALAPPDATA%\hyper\Hyper.exe
SETLOCAL
```

作成したバッチファイルを実行して ``` C:\prog\homedir\.hyper.js ``` が生成されるか確認してください。
表示は一瞬で消えるかもしれません。

### hyperの設定
次にhyperがGit for Windowsのbashへのオプションを設定していきます。

.hyper.js をメモ帳以外のエディタで開き、以下の項目を設定してください。

```javascript
{
    // ....
    shellArgs: ['--login', '-i'],
    env: {
        LC_ALL: "ja_JP.UTF-8"
    }
    // ...
}
```

もう一度、hyper.bat を実行してみてhyperの中で bash が起動できるか確認してください。


# 後はお好きに
以上で、最低限のセットアップは終わりました。あとは、好きなモジュールであったり、拡張機能をインストールしていって、USBメモリ等を使って、インターネットに接続されていないPCの C:\prog へコピーして利用してください。

初回のコピーはエクスプローラーからやっても問題ないと思いますが、モジュールの追加などで更新する場合は、FastCopy 等のツールを使ったほうが早く終わります。



## 最終的な bash.bat
``` cmd
@echo off
SETLOCAL
SET _A=%~d0
SET DLETTER=/%_A:~0,1%
SET PTBLROOT=%DLETTER%/prog
SET HOME=%DLETTER%/prog/homedir
SET HOMEPATH=%HOME%
SET USERPROFILE=%HOME%
SET APPDATA=%USERPROFILE%/AppData/Roaming
SET LOCALAPPDATA=%USERPROFILE%/AppData/Local
SET COMSPEC=%PTBLROOT%/git/bin/bash.exe
START %~d0\prog\git\usr\bin\bash --login -i
SETLOCAL
```

## 最終的な hyper.bat
``` cmd
@echo off
SETLOCAL
SET _A=%~d0
SET DLETTER=/%_A:~0,1%
SET PTBLROOT=%DLETTER%/prog
SET HOME=%DLETTER%/prog/homedir
SET HOMEPATH=%HOME%
SET USERPROFILE=%~d0/prog/homedir
SET APPDATA=%USERPROFILE%/AppData/Roaming
SET LOCALAPPDATA=%USERPROFILE%/AppData/Local
SET COMSPEC=%~d0/prog/git/bin/bash.exe
START %LOCALAPPDATA%\hyper\Hyper.exe
SETLOCAL
```

## 最終的な .bash_profile

```bash
# source .bash_profile でパスが無限に長くならないようにする
if [ -z "${MY_ORIG_PATH}" ]; then
  MY_ORIG_PATH=${PATH}
else
  PATH=${MY_ORIG_PATH}
fi

# python (winpython 3.6.5)
PATH=${PTBLROOT}/lang/python3.6.5/WinPython/python-3.6.5.amd64:${PTBLROOT}/lang/python3.6.5/WinPython/python-3.6.5.amd64/Scripts:${PATH}

WINPYARCH=WIN-AMD64
WINPYDEBUG=disabled
WINPYVER=3.6.5.0Zero
WINPYDIR=%DLETTER%/prog/lang/python3.6.5/WinPython/python-3.6.5.amd64
WINPYDIRBASE=%DLETTER%/prog/lang/python3.6.5/WinPython
winpython_ini=%DLETTER%/prog/lang/python3.6.5/WinPython/settings/winpython.ini
WINPYWORKDIR=%DLETTER%/prog/lang/python3.6.5/WinPython/scripts/../Notebooks

# strawberry perl (perl 5.26.2.1)
PATH=${PTBLROOT}/lang/perl5.26.2.1/perl/site/bin:${PTBLROOT}/lang/perl5.26.2.1/perl/bin:${PTBLROOT}/lang/perl5.26.2.1/bin:${PATH}
# TERM=
PERL_JSON_BACKEND=
PERL_YAML_BACKEND=
PERL5LIB=
PERL5OPT=
PERL_MM_OPT=
PERL_MB_OPT=

# Go1.10.2
PATH=${PTBLROOT}/lang/go1.10.2/bin:${PATH}

# node 10.2.1
PATH=${APPDATA}/npm:${PTBLROOT}/lang/node-v10.2.1-win-x64:${PATH}

# make 
PATH=${PTBLROOT}/make/bin:${PATH}

# hyper
PATH=${PTBLROOT}/homedir/AppData/Local/hyper/app-2.0.0/resources/bin/:${PATH}

alias code="${PTBLROOT}/VSCode/Code.exe"

cd ~
```