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?

More than 3 years have passed since last update.

「go言語でつくるインタプリタ」のためのdocker環境構築

Last updated at Posted at 2020-12-12

(常識かもしれないのですが)「go言語でつくるインタプリタ」を現在読んでいてローカル環境との衝突がだるかったので、docker環境を構築しました。コンテナの中でテストしたり、インタラクティブモードを走らせられます。

一応Github Repo: https://github.com/greenteabiscuit/go-interpreter

monkeyフォルダが置いてあるところ(srcフォルダ直下)にDockerfiledocker-compose.ymlを配置します。

ファイル配置の全体像:

go-interpreter/ch01/src git:(master) ls
Dockerfile         docker-compose.yml monkey

Dockerfile:

# ベースとなるDockerイメージ指定
FROM golang:latest
# コンテナ内に作業ディレクトリを作成
# RUN mkdir /go/src
# コンテナログイン時のディレクトリ指定
WORKDIR /go/src
# ホストのファイルをコンテナの作業ディレクトリに移行
ADD . /go/src

docker-compose.yml:

version: '3' # composeファイルのバーション指定
services:
  app: # service名
    build: . # ビルドに使用するDockerfileがあるディレクトリ指定
    tty: true # コンテナの起動永続化
    volumes:
      - .:/go/src # マウントディレクトリ指定
    environment:
      - "GOPATH=/go"

実際のビルド手順:

$ cd go-interpreter/ch01/src
$ docker-compose up build
$ docker-compose up

テストする場合:

(In another directory)
$ docker exec -it containername /bin/bash
(Inside docker container)
/go/src# echo $GOPATH
/go

/go/src/monkey# go test ./lexer/
ok  	monkey/lexer	0.006s

REPL:

go run main.go
Hello root! This is the Monkey programming language
Feel free to type in commands
>> let add = fn(x,y) {x+y};
{Type:LET Literal:let}
{Type:IDENT Literal:add}
{Type:= Literal:=}
{Type:FUNCTION Literal:fn}
{Type:( Literal:(}
{Type:IDENT Literal:x}
{Type:, Literal:,}
{Type:IDENT Literal:y}
{Type:) Literal:)}
{Type:{ Literal:{}
{Type:IDENT Literal:x}
{Type:+ Literal:+}
{Type:IDENT Literal:y}
{Type:} Literal:}}
{Type:; Literal:;}

参考:

DockerでGoの開発環境を構築する
Docker for MacでGoの実行環境を作る

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?