VSCode上でJupyterNotebookを動かす方法

# はじめに
JupyterNotebookやGoogleColaboって便利ですよね。  
ライブラリの管理も楽で簡単に環境構築できるし！  
でも普段から使い慣れたエディタでソースコードを書いてGitに上げたりしたいと思いませんか？  
今回はPythonの仮想環境の作成方法を通じてVSCode上でJupyterNotebookを動かす方法を記していきます！
# 仮想環境とは
まず仮想環境とは何なのでしょうか。  
仮想環境は、特定のプロジェクトに必要なライブラリやパッケージを他のプロジェクトと分離して管理するためのものです。これにより、異なるプロジェクト間での依存関係の衝突を避けることができます。  
### 具体的なメリット
1. プロジェクト間の依存関係の分離:異なるプロジェクトで異なるバージョンのライブラリが必要な場合、仮想環境を使うことでコンフリクトを避けられます。
2. システム全体への影響を最小限に:仮想環境内でのパッケージのインストールや更新が、システム全体のPython環境に影響を与えません。
3. クリーンな開発環境:新しいプロジェクトを始める際に、必要最小限のパッケージだけをインストールした環境を作れます。
4. 再現性の向上:プロジェクトの環境を他の人と共有したり、別のマシンで再現したりするのが容易になります。
5. 実験的な変更の安全性:新しいライブラリやバージョンを試す際、メインの環境を壊すリスクなく実験できます。  

# 仮想環境の作り方(初期作成の方法)
ローカル環境でJupyter NotebookをVSCodeと連携して使用する方法を、Anacondaを使わずに構築する手順をご説明します。以下の手順で進めていきましょう:

1. Pythonのインストール:
   まず、公式サイトから最新版のPythonをダウンロードしてインストールします。

2. プロジェクトディレクトリに移動:
    ```bash
    cd path/to/your/project
    ```
2. 仮想環境の作成:
   コマンドプロンプトまたはターミナルで以下のコマンドを実行します。
   ```bash
   python -m venv Jupyter_Sample
   ```
   `Jupyter_Sample`は任意の環境名に変更可能です。

3. 仮想環境の有効化:
   - Windows: `Jupyter_Sample\Scripts\activate`
   - macOS/Linux: `source Jupyter_Sample/bin/activate`

4. 必要なパッケージのインストール:
   ```bash
   pip install jupyter notebook ipykernel
   ```

5. Jupyter用のカーネルを作成:
   ```bash
   python -m ipykernel install --user --name=myenv
   ```

6. VSCodeのインストールと設定:
   - VSCodeをインストールします。
   - Python拡張機能をインストールします。
   - Jupyter拡張機能をインストールします。

7. VSCodeでJupyter Notebookを使用:
   - VSCodeを開き、`.ipynb`拡張子の新しいファイルを作成します。
   - 右上のカーネル選択から、先ほど作成した`myenv`を選択します。

これで、AnacondaなしでJupyter NotebookをVSCodeで使用する環境が整いました。

# .ipynbファイルの作成
.ipynbファイル（Jupyter Notebookファイル）の配置場所については、通常プロジェクトのルートディレクトリか、専用のサブディレクトリに置くのが一般的です。

以下のようなディレクトリ構造をお勧めします：

```
Jupyter_Sample/
│
├── notebooks/
│   ├── analysis.ipynb
│   └── data_exploration.ipynb
│
├── data/
│   └── (データファイルがあれば)
│
├── etc/
├── Include/
├── Lib/
├── Scripts/
├── share/
└── pyvenv.cfg
```

この構造では：

1. `notebooks/` ディレクトリを新たに作成し、そこに.ipynbファイルを配置します。
2. 必要に応じて `data/` ディレクトリを作成し、分析に使用するデータファイルを保存します。

このような構造にすることで、プロジェクトが整理され、ノートブックファイルと他のプロジェクトファイルを明確に分けることができます。

ただし、小規模なプロジェクトや個人的な実験の場合は、.ipynbファイルをプロジェクトのルートディレクトリ（`Jupyter_Sample/`）に直接配置しても問題ありません。

最終的には、あなたのワークフローと好みに合わせて配置を決めてください。重要なのは、一貫性を保ち、プロジェクトの構造が分かりやすくなるようにすることです。

# サンプルコードを動かしてみよう
ここで`matplotlib`を使ってグラフの描画を行うプログラムを作成してVSCode上でJupyterNotebookが動作するか実験してみましょう！  
matplotlibを使用するための手順を説明します。

1. まず、仮想環境を有効化します（まだしていない場合）:
   ```bash
   source venv/bin/activate
   ```

2. matplotlibをインストールします:
   ```bash
   pip install matplotlib
   ```
    この時の`matplotlib`は作成した`Jupyter_Sample`内でインストールされています。  
    **ローカル環境にはインストールされていません！**
3. Jupyter Notebookも必要なので、まだインストールしていない場合は:
   ```bash
   pip install jupyter
   ```

4. .ipynbファイルを作成し、VSCodeで開きます。

5. ノートブック内で以下のようなコードを書きます:

   ```python
   import matplotlib.pyplot as plt
   import numpy as np

   # データの生成
   x = np.linspace(0, 10, 100)
   y = np.sin(x)

   # プロットの作成
   plt.figure(figsize=(10, 6))
   plt.plot(x, y)
   plt.title('Sine Wave')
   plt.xlabel('x')
   plt.ylabel('sin(x)')
   plt.grid(True)
   plt.show()
   ```

6. このセルを実行すると、サイン波のグラフが表示されるはずです。

注意点:
- VSCodeでJupyter Notebookを使用する場合、Pythonの拡張機能がインストールされていることを確認してください。
- グラフが表示されない場合は、VSCodeの設定で "Plot output inline" が有効になっているか確認してください。

もし特定の種類のプロットや可視化について質問がある場合は、お知らせください。matplotlibは非常に多機能なライブラリなので、様々な種類のグラフや図を作成できます。  

# ライブラリの情報を保存する
ライブラリを`requirements.txt`に保存します。  
このファイルの作成と更新には以下のコマンドを実行していきます。  
```bash
pip freeze > requirements.txt
```
そして作成、更新したファイルを環境に適用するにはライブラリをインストールする以下のコマンドを実行します。  
```bash
pip install -r requirements.txt
```

# ローカルで作った環境をGitで保存する

ここでは先ほど作成した環境をGitを通じて管理し、リモートに上げる方法をGitとGitHubを使って解説していきます。  
GitHubとの連携にVSCodeの機能や拡張機能を使っていきます。   
また、私が[参考にしているサイト](https://miyashimo-studio.jp/blog/detail/vscode-github/)があるので詳しくはそちらを見ながら連携を進めていってください。  
ここではダイジェスト版としてコマンドやVSCodeの操作だけを載せておきます。
## ローカルのGitに登録  
```bash
git init
git config --local user.name 
git config --local user.email
```
`git init`でこのリポジトリでのgitコマンドを使えるようにしてユーザーネームとメールアドレスを登録します。  
ここの`name`は自分のユーザーネームで`email`は登録するメールアドレスを入力します。  

## VSCodeの機能でコミットする
VSCodeのGitのアイコンから変更をステージしてコミットをします。  


# GitHubとの連携
ここまで来たら普通のGit、GitHubの連携のコマンドや操作で完了します。  
1. GitHubの`New Repository`からリポジトリを作成する
2. pushのコマンドをコピーして控えておく
2. コマンドを実行してリモートとローカルを紐づける
2. 連携完了

# まとめ