Jupyter Labのカスタム設定をDockerfileに書き込む。

# 課題
DockerコンテナからJupyter Labを起動する際に、自身の嗜好にあったカスタム設定が既に反映されていてほしい。

# 解決策
- カスタム設定を記述した\<plugin_name\>.jupyterlab-settingsファイルを生成する。
- Dockerfile内でホストマシン上の\<plugin_name\>.jupyterlab-settingsのパスをイメージのファイルシステム上のパスにCOPYする。

# 具体例
- Monokai++を設定に反映する。
    1. Monokai++の設定を書き込むファイル名を特定する。
        1. <plugin_name>.jupyterlab-settingsの\<plugin_name\>を特定する。
        1. 適当にJupyter Labを起動し、上部メニューからSettings >>> Advanced Settings Editor >>> Themeを選択する。
        1. System Defaultsの//Themeの下にある// @jupyterlab/apputils-extension:themesのthemesが\<plugin_name\>にあたる。
    1. themes.jupyter-lab-settingsを生成する。
        1. Dockerfileが存在するパスと同じ場所に、themes.jupyter-lab-settingsというファイルを生成する。
        1. themes.jupyter-lab-settingsに以下の内容を書き込む。

           ```
           {
                "theme": "Monokai++"
           }

           ```
    1. Dockerfileを修正する。
        1. Dockerfile内のJupyter Labや拡張機能をinstallした後に、以下の内容を書き込む。

           ```
           # make directory
           RUN mkdir -p /root/.jupyter/lab/user-settings/@jupyterlab/apputils-extension/
           # copy setting files
           COPY themes.jupyterlab-settings /root/.jupyter/lab/user-settings/@jupyterlab/apputils-extension/
           ```

- コード自動整形がファイル保存と同時に行われるよう設定に反映したい。
    1. コード自動整形の設定を書き込むファイル名を特定する。
        1. <plugin_name>.jupyterlab-settingsの\<plugin_name\>を特定する。
        1. 適当にJupyter Labを起動し、上部メニューからSettings >>> Advanced Settings Editor >>> Jupyter Lab Code Formatterを選択する。
        1. System Defaultsの//Jupyterlab Code Formatterの下にある// @ryantam626/jupyterlab_code_formatter:settingsのsettingsが\<plugin_name\>にあたる。
    1. settings.jupyter-lab-settingsを生成する。
        1. Dockerfileが存在するパスと同じ場所に、settings.jupyter-lab-settingsというファイルを生成する。
        1. settings.jupyter-lab-settingsに以下の内容を書き込む。

           ```
           {
                "formatOnSave": true
           }

           ```
    1. Dockerfileを修正する。
        1. Dockerfile内のJupyter Labや拡張機能をinstallした後に、以下の内容を書き込む。

           ```
           # make directory
           RUN mkdir -p /root/.jupyter/lab/user-settings/@ryantam626/jupyterlab_code_formatter/
           # copy setting files
           COPY settings.jupyterlab-settings /root/.jupyter/lab/user-settings/@ryantam626/jupyterlab_code_formatter/
           ```

- 左括弧を押下すると自動で右括弧で閉じられるよう設定に反映したい。
    1. 括弧の設定を書き込むファイル名を特定する。
        1. <plugin_name>.jupyterlab-settingsの\<plugin_name\>を特定する。
        1. 適当にJupyter Labを起動し、上部メニューからSettings >>> Advanced Settings Editor >>> Notebookを選択する。
        1. System Defaultsの//Notebookの下にある// @jupyterlab/notebook-extension:trackerのtrackerが\<plugin_name\>にあたる。
    1. tracker.jupyter-lab-settingsを生成する。
        1. Dockerfileが存在するパスと同じ場所に、tracker.jupyter-lab-settingsというファイルを生成する。
        1. tracker.jupyter-lab-settingsに以下の内容を書き込む。

           ```
           {
               "codeCellConfig": {
                   "autoClosingBrackets": true
               }
           }

           ```
    1. Dockerfileを修正する。
        1. Dockerfile内のJupyter Labや拡張機能をinstallした後に、以下の内容を書き込む。

           ```
           # make directory
           RUN mkdir -p /root/.jupyter/lab/user-settings/@jupyterlab/notebook-extension/
           # copy setting files
           COPY tracker.jupyterlab-settings /root/.jupyter/lab/user-settings/@jupyterlab/notebook-extension/
           ```

# 参考
- [Dockerfile リファレンス - COPY](https://docs.docker.jp/engine/reference/builder.html#copy)
- [Advanced Usage - JupyterLab User Settings Directory](https://jupyterlab.readthedocs.io/en/stable/user/directories.html#jupyterlab-user-settings-directory)
- [オレオレJupyterlab環境をDockerで作った - オレオレ設定にするには](https://zenn.dev/fuchami/articles/d1625ac784fe5d#%E3%82%AA%E3%83%AC%E3%82%AA%E3%83%AC%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF)