2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Scala 3】Apple Silicon Mac × Dev Containersで環境構築!エラーを乗り越えた学習記録

2
Posted at

はじめに

UdemyのScala 3講座を始めるにあたり、ローカルPCの環境を汚したくなかったため、Docker(Dev Containers)を使って開発環境を構築しました。

その際、Apple Silicon Mac特有のエラーに遭遇し、解決するまでに学んだことを記録として残します。

開発環境

  • マシン: MacBook Air (Apple Silicon arm64)
  • Dockerエンジン: OrbStack(軽量で爆速なので採用)
  • エディタ: VS Code (Dev Containers拡張)

遭遇した課題

当初、教材を参考に以下のイメージを使おうとしましたが、エラーが発生しました。

エラーログ:

Error response from daemon: No such image: sbtscala/scala-sbt:eclipse-temurin-jammy-17.0.10_1.9.9_3.3.3 

原因

エラーログ自体は単なる「イメージが見つからない」という内容ですが、調べてみたところ「自分のPC(Apple Silicon = arm64)に対応したアーキテクチャのイメージが存在しなかったこと」が本当の原因でした。

指定した sbtscala のイメージは Intelチップ(amd64)向け に提供されており、Dockerが「M1 Mac (arm64) 用の同じファイルを探したけれど、見つからない(= No such image)」と判断してエラーを返していた、というのが真相でした

解決策

そこで、一部の環境でしか動かないイメージを直接指定するのをやめました。

代わりに、Apple Silicon(arm64)を含めたマルチアーキテクチャに公式対応している MicrosoftのJava 17用コンテナイメージ を土台として採用しました。その上で、コンテナが立ち上がるタイミングで sbt を自動インストールする構成に変更しました

最終的な設定ファイル

docker-compose.yml

services:
  scala-env:
    image: [mcr.microsoft.com/devcontainers/java:17](https://mcr.microsoft.com/devcontainers/java:17)
    volumes:
      - .:/workspace
    working_dir: /workspace
    command: /bin/bash
    tty: true

devcontainer.json

{
  "name": "Scala 3 Development",
  "dockerComposeFile": "../docker-compose.yml",
  "service": "scala-env",
  "workspaceFolder": "/workspace",
  "remoteUser": "vscode",
  "customizations": {
    "vscode": {
      "extensions": [
        "scalameta.metals",
        "scala-lang.scala"
      ]
    }
  },
  "postCreateCommand": "bash -c 'source /usr/local/sdkman/bin/sdkman-init.sh && sdk install sbt'"
}

学んだこと

  • アーキテクチャの意識: Dockerイメージには amd64 と arm64 の違いがあり、自分のマシンに合ったものを選ぶ重要性を学びました。

  • Dev Containersの便利さ: postCreateCommand を使うことで、チーム全員が全く同じツール(今回はsbt)が入った状態で開発を開始できるのは非常に強力だと感じました。

  • エラーログの読み方: No such image や arm64 といったキーワードから、何が原因かを推測する訓練になりました。

終わりに

環境構築で半日ほど足止めを食らいましたが、結果としてDockerやインフラ周りの理解が深まりました。これからいよいよScalaのコーディングに入っていきます!

同じ構成で詰まっている方の参考になれば幸いです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?