Dev Spacesで始めるOpenLiberty

# はじめに
開発の現場では、各メンバーの開発環境を整えるのは必須ですが地味に時間がかかります。
オンボード時のセットアップに半日かかるとしたら、開発者が30名くらいのプロジェクトではそれだけで計1人月程度を要します。なかには「設定がうまくいかない」という人もいるでしょう、さらに時間と手間がかかります。
複数のプロジェクトを同時に担当する人は、各プロジェクト向けに環境をつくるのも手間がかかるし、言語のバージョンが競合する場合などは環境の切り替えも大変です。
これらの課題への対策として**開発環境をリモートに構築する**というソリューションがあります。
これを使うことで「開発プラットフォームを外部に必要なタイミングで複製し、IDEはブラウザ上で動かす」という環境を提供することができ、開発者はローカル環境での準備に負荷をかけることなく、開発作業に集中できるというものです。

# リモート開発環境のソリューション
クラウド上で利用するソリューションとしては、CodeSpaces（GitHub）、CodeCatalyst（AWS）などが挙げられると思いますが、パブリックな環境を使った開発が難しいという制約もよく聞きます。
ここでは、OpenShift上で実現可能なリモート開発環境であるDev Spacesの使い方をご紹介します。

### Dev Spacesとは
OpenShift上で展開できるコンテナベースの開発環境で、コンテナ上で開発のための編集やテスト実行が行えます。実装はEclipse Cheをベースとしています。
利用するIDEはオープンソース版のVSCodeが標準です。IntelliJ IDEA Community Editionもプレビューレベルで選択可能となっています。

# 検証環境
| プロダクト | バージョン |
|:-:|:-:|
|  OpenShift | 4.14.12(OpenShift Local)  |
| Dev Spaces  | 3.12 |
| OS | CentOS stream9 |


# OpenShiftでDev Spacesを使えるようにする（管理者向け）
手順はおおまかに
・OpenShift環境にOperatorでDev Spacesをインストールする
・開発プロジェクトにDevspaces用のインスタンスを作成する
の2パートになります。

### OpenShift Localの設定変更
検証ではOpenShift Localを使用していますが、リソース要求の初期設定がコンパクトに設定されているためデフォルトでは起動ができませんでした。そのため、ターミナルから次の設定変更を行っています。
```
crc config set disk-size 60
crc config set memory 16000
```

### OpenShift環境にOperatorでDev Spacesをインストールする
OperatorHubから、次のOperatorを検索します。
<img width="200" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/97a9f5f3-f91e-0fa8-5cc6-89f7e12144bd.png">

インストール設定はデフォルトのままで進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/0e59b1e2-4206-dd38-a749-c232ec70933b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/af80d087-4af3-4284-5063-49f150ec3fcc.png)

あまり時間がかからずインストールは終了します。
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/a058998d-963e-701d-d8a7-5e225e918997.png">

### 開発プロジェクトにDev Spaces用のインスタンスを作成する
この記事向けに、開発プロジェクト「devspaces-sample」を作成します。
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/add41cc2-e964-3ef0-663e-cba1979022e3.png">

「インストール済みのOperator」（プロジェクト：devspaces-sample）は次のようになっており、右のリンクにある「Dev Spaces instance specification」をクリックします。
（DevWorkspaceはDevspacesのインストール時にあわせて自動的に追加されます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/9d0ee785-a0fd-1a3c-79ec-d248b7e1d115.png)

インスタンスは未作成のため、ここからインスタンスを作成していきます。右の「CheClusters」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/0b160887-16c7-bdc6-5a65-42b1d537d267.png)

ここではデフォルトのままで作成します。
<img width="200" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/71df8ebf-17bd-d456-bf3a-5f95690e404e.png">

特に問題なければ、developerパースペクティブのdevspaces-sampleでは、次のように展開されます。検証環境では4〜5分で起動しました。
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/f35213fd-10a8-7b32-dca2-db6aa71a6525.png">
もし起動がうまくいかないようであれば（plugin registryが起動しきらない場合など）、Podのイベント表示などから状況を確認ねがいます。

インスタンスが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/26250b2c-eeef-671d-cf45-0f4eb8514326.png)

インスタンスの詳細を確認します。このなかの「Red Hat OpenShift Dev Spaces URL」が、各開発者向けに提供するエントリーポイントです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/9f59b22e-3519-1649-69a1-14c5b9c5a3f1.png)

# Dev Spacesにアクセスする（開発者向け）
### 開発環境を起動する
上で確認したDev Spaces用のURLにアクセスします。
ログインの後、ユーザーに対するアクセス許可が要求されるため、Allowを選択します。
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/24926fb8-5ad5-85c4-f35e-6ccad26fd8ca.png">

ワークスペースの管理画面が表示されます。「Git repo URL」の欄に作業対象のGitのリポジトリURLを指定して、Create&Openのボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/8f77b828-f6a9-da93-9952-4433878133e0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/709d4636-dfd8-daaf-473c-7605d892cbc5.png)

ブラウザ上にVScodeのエディター画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/614a03e3-c2f0-8e01-147e-68ed4cf85f6a.png)

### 開発環境上でアプリケーションを実行する
VSCode上からターミナルを起動し、
```
./mvnw liberty:dev
```
を実行します。
利用するポート番号をリモート開発環境からローカルにリダイレクトする、また新しいタブで表示するかの確認が入ります。
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/c6556bc7-a2d1-f305-6d55-46937a929cb9.png">

<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/1bbe2606-fa60-f01d-3c51-8a105c42a2a1.png">

<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/43d85462-098b-af8c-7b2c-573331bff5a0.png">

リモート開発環境で起動したアプリケーションを、ローカルのブラウザ上に表示することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/5c03e347-0b04-0d3a-722b-4d87ae896b91.png)

# まとめ
リモート開発環境を使うことで、「コンテナでクイックにアプリケーションを展開する」というコンテナ利用体験を開発タスクにも広げることができます。
開発シーンでの見えづらいコストを削減する可能性がありますので、まずは体験してみてください。

# 参考URL
https://rheb.hatenablog.com/entry/2023/05/26/140300

https://alesnosek.com/blog/2021/02/28/deep-dive-into-codeready-containers-deployment-on-linux/