この記事は SAP Advent Calendar 2022 の 12 月 14 日分の記事として執筆しています。
仕事用の Mac(M1) の他、普段使っている Windows11 それぞれの環境で 同じ BTP 開発体験を得たいなーと思ったため、Lima と WSL2 を使って環境を作ってみます。 なお、BTP 開発環境は btp-setup-automator を使用してラクします。 また、 Lima や WSL2 もほぼ初期設定のままで進めてみますので、細かな設定等を施したい場合は個々のより詳細な記事や公式資料をご確認ください。
Lima と WSL2 のセットアップ
Lima
公式に従い、brew でインストールします。
brew install lima
VM インスタンスの生成
Lima の VM インスタンスを作るにはいろいろな方法があるのですが、とりあえず動かすならテンプレートを使用するのが一番簡単です。
テンプレートの一覧
limactl start --list-templates
出力結果
almalinux-8 almalinux-9 … 中略 docker … 中略 ubuntu vmnet
今回は Docker を使いたいので、 docker テンプレート(中身は Ubuntu )を指定します。
limactl start --name=default template://docker
また、 btp cli も cf cli も aarch64 には対応していないよう1なので、アーキテクチャを “x86_64” に指定します。
(arch: "x86_64"
を yaml に事前設定、または構築時に “Open an editor to review or modify the current configuration” を選択して記載すれば良いです)
なお、特にメモリサイズ等を指定しない場合のデフォルト定義は以下となるようです。
The current default spec: OS: Ubuntu 22.10 (Kinetic Kudu) CPU: 4 cores Memory: 4 GiB Disk: 100 GiB Mounts: ~ (read-only), /tmp/lima (writable) SSH: 127.0.0.1:60022
正常にインスタンス生成が完了した場合、以下のようなログが出力されます。
613.25 MiB / 613.25 MiB [-----------------------------------] 100.00% 8.80 MiB/s
INFO[0121] Downloaded the image from "https://cloud-images.ubuntu.com/releases/22.04/release-20221018/ubuntu-22.04-server-cloudimg-arm64.img"
... 中略
INFO[0309] READY. Run `lima` to open the shell.
INFO[0309] Message from the instance "default":
To run `docker` on the host (assumes docker-cli is installed), run the following commands:
------
docker context create lima-default --docker "host=unix:///Users/user/.lima/default/sock/docker.sock"
docker context use lima-default
docker run hello-world
------
作成したインスタンスを確認する
$ limactl list
NAME STATUS SSH ARCH CPUS MEMORY DISK DIR
default Running 127.0.0.1:60022 x86_64 4 4GiB 100GiB /Users/user/.lima/default
VM へ接続
インスタンス作成時に指定した名前を使用し、接続することが出来ます。
$ limactl shell default
WSL2
こちらも公式の手順通りにインストール。 ディストリビューションは、Lima と同じ Ubuntu にします。
wsl --install -d Ubuntu
ユーザー名とパスワードを設定すれば、インストールは完了です。
Systemd を有効化
WSL の Version 0.67.6 からサポートされるようになったので、有効にする
{
cat <<EOF
[boot]
systemd=true
EOF
} | sudo tee /etc/wsl.conf
WSL の再起動をわすれずに
wsl --shutdown
Docker のインストール
公式に準拠して進めます。
- GPG key を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- リポジトリのセットアップ
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- パッケージのインデックスファイルを更新してからの、Docker インストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- 動作チェック
sudo docker run hello-world
以下のような結果が得られれば、インストール完了です。
Unable to find image ‘hello-world:latest’ locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:faa03e786c97f07ef34423fccceeec2398ec8a5759259f94d99078f264e9d7af Status: Downloaded newer image for hello-world:latest
Hello from Docker!
ついでに、毎回 sudo とするのは面倒なので、docker グループにユーザーを追加
sudo usermod -aG docker $USER
wsl を再起動させて、先程の hello-world を実行することができれば、完了です。
docker run --rm -it hello-world
BTP 開発環境構築
冒頭に記載した、btp-setup-automator を使用します。
## 名前は任意
docker container run --rm -itd --name "btp-setup-automator" "ghcr.io/sap-samples/btp-setup-automator:latest"
これだけで、BTP 開発環境構築終了です。
いろいろ 動作確認
$ btp --version
SAP BTP command line interface (client v2.24.0)
$ cf --version
cf version 8.4.0+b4c083e.2022-06-02
$ cds --version
@sap/cds: 6.3.2
@sap/cds-compiler: 3.4.4
@sap/cds-dk: 6.3.2
@sap/cds-dk (global): 6.3.2
@sap/cds-foss: 4.0.0
@sap/cds-mtx: -- missing --
@sap/eslint-plugin-cds: 2.6.0
Node.js: v16.17.1
home: /usr/local/lib/node_modules/@sap/cds-dk/node_modules/@sap/cds
$ mbt --version
Cloud MTA Build Tool version 1.2.18
開発に必要なツール群が一気に使えるようになりました。
最後に
今回は Lima や WSL2 上の Docker を用いた開発環境を構築する方法を試してみました。 それぞれテンプレートや、ツールのセットアップまで実施してくれるイメージが用意されているため、あっさり BTP 開発環境を用意することができました。 開発を始めるまでの敷居が低くなってありがたい限りです。 冒頭お断りさせていただいた通り、ほぼ初期設定のまま進めたため、このまま実務に使うには諸々過不足があるかと思いますが、それも設定次第でクリアできるはずですので、活用してみてほしいです。
-
ちゃんとは調べられてませんが、たとえば btp cli だと amd64 版しか提供されていないみたいです。 ↩︎