VirtualBoxでUbuntu仮想環境を作成し、VSCodeでRemote-SSH接続

# はじめに
### 作ったもの
WindowsにVSCodeとVirtualBoxをインストールし、
VScodeのRemoteSSHを用いてVirtualBox内のUbuntuに接続し開発できる環境を作成した。

### なぜ作ったか
 * 機械学習を試す環境が欲しい
 * 私が持っているマシンはwindowsのみで機械学習回りを自由に試すにはやりづらく感じた
 * 手軽に構築できるLinux系の仮想環境を構築したかった

# 環境構築にあたって発生した問題
VirtualBoxでUbuntu仮想環境を作成し、仮想環境内で機械学習実行環境を整備する予定でした。
しかし、以下の問題が発生し少し苦労したので、どういうことを試したかや回避策は何かを共有します。

* Ubuntuインストールウィザード「言語選択時」、VirtualBox画面が小さく「次へ」ボタンがない（押せない）
* VirtualBox画面のリサイズができない（ウィンドウの端っこをドラッグ＆ドロップしても画面が変化しない）
* Ubuntuインストール後再起動した際に、画面が黒くなり何も表示されない
* Ubuntuインストール後再起動した際に、アクティビティ画面が表示されるが操作ができない


<table>
<tr>
<td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126750/44d63e9c-69e7-09fd-a26a-d2f9212e5037.png"> 
<td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126750/0700ef02-10a2-e394-6a3d-9906de243654.png">
</tr>
</table>

下記を参考にしながら設定をいじくりましたが解決できませんでした。
- [【仮想マシン】VirtualBoxで画面がリサイズされない時の対処](https://sukima-lab-diary.blog.jp/archives/26124828.html)
- [VirtualBox6.0で画面がリサイズされない場合はGraphic Controllerを変えると直るかもしれない](https://blog.takekoshi.net/virtualbox6-0-linux-vmsvga/)
- [VirtualBoxでubuntsuに入れません](https://okwave.jp/qa/q9926067.html)
- [Ubuntuがログイン後、黒い画面のまま動かない](https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13226991428)

# 回避方法
参照記事でも触れられていると思いますがディスプレイツールのシステム内部が関係した難しそうな問題でした。
接続方法にこだわりはなく、目的は機械学習実行環境を作成することですので、問題解決より問題回避することにしました。
以下の対処方法で環境をセットアップしました。参考になれば幸いです。

 * VirtualBoxでUbuntuの仮想環境を作成
 * ホストPCのVSCodeから仮想環境UbuntuにSSH接続
 * VSCodeから環境構築、コーディング、処理実行
![スクリーンショット 2022-09-10 145725.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126750/4eb6ef02-408b-849c-ab3c-23d2f68017c0.png)


### 対象読者
 * 同じ環境を整備しようとしている方
 * 同じエラーで困っているが、開発が始められればエラーの原因はなんでも良い方

## 環境構築
### 環境
 * ホストOS：Windows 11
 * 仮想環境OS: Ubuntu Desktop 22.04.1 LTS
 * インターネットに接続できる環境


### VirtualBoxのインストールおよび設定
 1. [VirtualBox ダウンロード](https://www.oracle.com/jp/virtualization/technologies/vm/downloads/virtualbox-downloads.html)
 1. [Ubuntu isoファイルの入手](https://jp.ubuntu.com/download)
今回はUbuntu Desktop 22.04.1 LTSをインストールしました。
 1. VirtualBox+Ubuntuの設定
参考：[環境設定 (VirtualBox+Ubuntu編)](https://www.nces.i.nagoya-u.ac.jp/enpit-pro-emb/course/files/%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A_VirtualBox+Ubuntu%E7%B7%A8.pdf)
もし、「Ubuntuインストールウィザード「言語選択時」、VirtualBox画面が小さく「次へ」ボタンがない（押せない）」などが発生した場合は、「[【仮想マシン】VirtualBoxで画面がリサイズされない時の対処](https://sukima-lab-diary.blog.jp/archives/26124828.html)」を参考に対処してみてください。参考記事の中にあります、方法１、２を試すことでインストールだけは完了することができました。
 1. 再起動後に問題なく動作している方
おめでとうございます！機械学習を試す環境は整いました。良い開発ライフを！
画面のリサイズができない、画面が動かない、画面がまっくらなどでVirtualBoxを用いた開発が難しい方、
もう少しお付き合いください。
 1. VSCodeとSSH接続するために以下のサイトを参考にポートフォワードの接続設定
[VirtualBox + CentOS 7 に SSH 接続できるようにする方法](https://webgroove.work/virtualbox-centos7-ssh/)

VirtualBoxの設定は以上になります。
なお、VirtualBoxのUbuntuはサーバのようなものですので使用の際は起動しておいてください。

### WindowsにVS Codeをインストールおよび設定
1. [VSCode(Visual Studio Code)のインストール](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)
1. 設定ウィザードに従ってインストール
1. Remote-SSHの拡張機能インストール + リモートエクスプローラにVirtualBoxのssh情報を登録
参考: [VirtualBox の CentOS 7 に VSCode で SSH 接続する方法](https://webgroove.work/virtualbox-centos-7-vscode-ssh-connection/)

### VSCodeと仮想環境UbuntuにJupyterをインストール
1. VSCodeにJupyterをインストール
参考：[VSCODEで Pythonの仮想環境を有効にする](https://transcosmos-ecx.jp/blog/shopify/91)
2. SSH接続したVSCodeの上タブ「ターミナル」>「新しいターミナル」を押下し画面下部にターミナルを表示する
![スクリーンショット 2022-09-10 113246.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126750/446e6dc0-db7f-ce68-948d-d694e25be632.png)
3. 開いたターミナルに以下のライブラリをインストール
    1. sudo apt -y upgrade
    1. sudo apt install -y python3-pip
    1. pip3 install Jupyter
    1. pip3 install jupyterlab

設定は以上になります。
あとは「新しいファイル」＞ Jupyter Notebookでファイル作成で開発を楽しんでください！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126750/3304a0ad-ec82-8cc4-65eb-7d8aa6af9425.png)

以上です。

# 最後に
今回説明した環境構築は結構回りくどいことをししていると自覚しています。
例えばサーバとして仮想環境使うならCentOSのminimalを仮想環境にすれば良いとかデュアルブートでやればいいとかとか、、、
ぐうの音も出ません。
VirtualBoxだとGPU連動が難しいと聞きますので、機械学習の大きなことをするときにはデュアルブートしたLinux環境でGPU計算できるように構築してみたいと思います。