Mambaforgeでポータブル版のJupyterLabを作りChromeのアプリモードで起動する設定

# したこと
　「[minicondaのポータブルインストール](https://akirayou.net/wp/2020/miniconda%e3%81%ae%e3%83%9d%e3%83%bc%e3%82%bf%e3%83%96%e3%83%ab%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/)」を参考（ほとんどそのまま）に、Mambaforgeでポータブル版のJupyterLabを作った。
　また、「[JupyterLab3.0の起動ブラウザを指定する方法](https://qiita.com/matsxxx/items/10c93edab12a93604aab)」を参考に、JupyterLabをChromeのアプリモードで起動できるようにもしてみた。
# Mambaforgeとは
　`mamba`とはAnacondaやMinicondaで使われているパッケージマネージャー`conda`より**高速**で互換なパッケージマネージャーである。
　`mamba`でパッケージをインストールするとき、conda-forgeからパッケージをインストールする機会が多くある。このとき、
```batch
mamba install -c conda-forge パッケージ名
```
のように、チャンネルを指定するため`-c conda-forge`をつける必要がある。
　しかし、Mambaforgeはconda-forge に特化しているので
```batch
mamba install パッケージ名
```
とするだけでよい。

（参考）
- `mamba`について　[GitHub - mamba-org/mamba](https://github.com/mamba-org/mamba)
- Mambaforgeについて　[GitHub - conda-forge/miniforge](https://github.com/conda-forge/miniforge)
# 環境設定用のバッチファイル
　最初に作る。JupyterLabのインストール用バッチファイルや起動用バッチファイルで環境設定をするために呼び出して使う。
```batch:environment_settings.bat
@echo off
cd /d %~dp0
SET MAMBA_PATH=%~dp0Mambaforge
SET PATH=%MAMBA_PATH%;%MAMBA_PATH%\Scripts;%MAMBA_PATH%\Library\bin;%MAMBA_PATH%\condabin;%PATH%

SET USERPROFILE=%~dp0UserProfiles
SET LOCALAPPDATA=%USERPROFILE%/appdata/Local
SET APPDATA=%USERPROFILE%/appdata/Roaming

SET JUPYTER_CONFIG_DIR=%USERPROFILE%

call mamba.bat activate base
```
# MambaforgeとJupyterLabのインストール用バッチファイル
```batch:install.bat
@echo off
cd /d %~dp0
SET MAMBA_PATH=%~dp0Mambaforge
SET INSTALLER=%~dp0Mambaforge-Windows-x86_64.exe

IF not EXIST %INSTALLER% (
    bitsadmin /TRANSFER Mambaforge https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Windows-x86_64.exe %INSTALLER%
)

IF not EXIST %MAMBA_PATH%\python.exe (
    mkdir %MAMBA_PATH%
    %INSTALLER% /S /InstallationType=JustMe /AddToPath=0 /RegisterPython=0 /NoRegistry=1 /D=%MAMBA_PATH%
)

call environment_settings.bat
call mamba install nodejs jupyterlab jupyterlab-language-pack-ja-JP jupyterlab_code_formatter black isort -y

mkdir NoteBooks
```
WindowsのMinicondaのインストーラーには、サイレントモードというのがあり、オプションをつけて実行することにより、ポータブル化することができる。

　「[Installing on Windows -- conda](https://conda.io/projects/conda/en/latest/user-guide/install/windows.html#installing-in-silent-mode)」から引用すると、
>To run the the Windows installer for Miniconda in **silent mode**, use the `/S` argument. The following optional arguments are supported:
>- `/InstallationType=[JustMe|AllUsers]`---Default is `JustMe`.
>- `/AddToPath=[0|1]`---Default is `0`
>- `/RegisterPython=[0|1]`---Make this the system's default Python. `0` indicates Python won't be registered as the system's default. `1` indicates Python will be registered as the system's default.
>- `/S`---Install in silent mode.
>- `/D=<installation path>`---Destination installation path. Must be the last argument. Do not wrap in quotation marks. Required if you use `/S`.

　上記に加えて、`/NoRegistry=1`は「[minicondaのポータブルインストール](https://akirayou.net/wp/2020/miniconda%e3%81%ae%e3%83%9d%e3%83%bc%e3%82%bf%e3%83%96%e3%83%ab%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/)」によると、
>windowsのプログラムとしてインストーラーを登録しない

ということである。

　そして、「[GitHub - conda-forge/miniforge](https://github.com/conda-forge/miniforge)」に
>It can be compared to the Miniconda installer.

と記述があるので、Mambaforgeのインストーラーにも利用できると考え、実行した。ポータブル化できているようである。

（参考）
- [minicondaのポータブルインストール](https://akirayou.net/wp/2020/miniconda%e3%81%ae%e3%83%9d%e3%83%bc%e3%82%bf%e3%83%96%e3%83%ab%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/)
- [Installing on Windows -- conda](https://conda.io/projects/conda/en/latest/user-guide/install/windows.html#installing-in-silent-mode)
# JupyterLabをChromeのアプリモードで開くための構成ファイル
```python:chrome_config.py
c = get_config()
c.ServerApp.browser = '"C:\\Program Files\\Google\\Chrome\\Application\\Chrome.exe\" --app=%s --start-maximized --force-dark-mode'
```
- Chromeの設定に使うだけなので、この２行だけでよい。
- Pythonでは(半角)￥マークの代わりに`\`が使われるが、エスケープシーケンスを用いて`\\`としなければならない。Windowsでは(半角で)`￥￥`と表示される。（自分なりの解釈）
- `--app=<URL>`でアプリモードで起動する。アプリモードとは、Chromeをアドレスバーやタブバーを省略した状態で起動し、Webアプリ化したもの。
- `%s`はJupyterLab Serverの作成したURLを指す。
- `--start-maximized`で、ウィンドウを最大化して起動する。
- 最後の`--force-dark-mode`はダークモードが好きだから付けてるだけ。削除してよい。

（参考）
- [JupyterLab3.0の起動ブラウザを指定する方法](https://qiita.com/matsxxx/items/10c93edab12a93604aab)
- [Google Chrome　起動オプション 一覧](https://abhp.net/it/IT_Google_Chrome_950000.html)
# JupyterLab起動用のバッチファイル
```batch:start_jupyter.bat
@echo off
call environment_settings.bat
jupyter-lab.exe --config=chrome_config.py ./NoteBooks
```
　最後の行を
```batch
cmd
```
または
```batch
powershell
```
に変えるとコンソールを開くことができる。
# ドライブ・フォルダを変更したときPythonのkernelへのパスを修正するバッチファイル
```batch:change_path_to_python_kernel.bat
@echo off
call environment_settings.bat
python -m ipykernel install --user
```
（参考）　[Installing the IPython kernel](https://ipython.readthedocs.io/en/stable/install/kernel_install.html)

# 追加情報
　`environment_settings.bat`に
```batch
SET JUPYTER_CONFIG_DIR=%USERPROFILE%
```
の一行を追加した。
　こうすると、`chrome_config.py`のファイル名を`jupyter_lab_config.py`に変えて、`%USERPROFILE%`で指定したフォルダに置けば`start_jupyter.bat`の最後の行を
```batch
jupyter-lab.exe ./NoteBooks
```
とすることもできる。
　何故こうしなくて、`--config=chrome_config.py`で指定しているのかというと、chromeの設定だけということの明示と、設定をテストしていじっているときに、いちいちフォルダを移動するのが面倒だったから。

　`jupyter_lab_config.py`は、コンソールを開き、
```batch
jupyter lab --generate-config
```
とすると、`%USERPROFILE%`で指定したフォルダに作られる。
　この`jupyter_lab_config.py`を編集することによって、JupyterLabを開くブラウザの指定やnotebookの初期フォルダの設定などいろいろなことができる。