Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

posted at

updated at

clojureの環境構築

はじめに

最近、clojureと言う言語を聞いたので、その環境構築を行いました。
clojureはLISPをJVM仮装マシン上で動けるようにしたものです。

レポジトリはこちら

dockerのビルド

ディレクトリ構成

初回インストールを行うために以下の構成にしてあります。
後で、変更します。

├── Dockerfile
├── docker-compose.yaml
Dockerfile
FROM clojure:openjdk-8
WORKDIR /usr/src/app

# bashは入れても入れなくてもどっちでもいいです。
RUN apt-get update && apt-get install --no-install-recommends -y bash=5.0-4 \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
docker-compose.yaml
version: '3'
services:
  clojure:
    build: .
    tty: true # 後で、コンテナ内に入るため。終わったら消す。

インストールと永続化

docker-compose exec clojure bash -c "lein new app workspace"
docker cp `docker-compose ps -q clojure`:/usr/src/app/workspace/ ./

docker-compose.yamlを書き換える。

docker-compose.yaml
version: '3'
services:
  clojure:
    build: .
    command: 'lein run'
    working_dir: /usr/src/app/workspace
    volumes:
      - ./workspace:/usr/src/app/workspace

最終的なディレクトリ構成

作られたディレクトリの中身は完全にjavaですね。

├── Dockerfile
├── docker-compose.yaml
└── workspace
    ├── CHANGELOG.md
    ├── LICENSE
    ├── README.md
    ├── doc
    │   └── intro.md
    ├── project.clj
    ├── resources
    ├── src
    │   └── workspace
    │       └── core.clj
    ├── target
    │   └── default
    │       ├── classes
    │       │   └── META-INF
    │       │       └── maven
    │       │           └── workspace
    │       │               └── workspace
    │       │                   └── pom.properties
    │       └── stale
    │           └── leiningen.core.classpath.extract-native-dependencies
    └── test
        └── workspace
            └── core_test.clj

Hello, World!

最後に、docker compose up!!!

> docker compose up
Attaching to clojure_1
clojure_1  | Retrieving org/clojure/clojure/1.10.1/clojure-1.10.1.pom from central
clojure_1  | Retrieving org/clojure/spec.alpha/0.2.176/spec.alpha-0.2.176.pom from central
clojure_1  | Retrieving org/clojure/pom.contrib/0.2.2/pom.contrib-0.2.2.pom from central
clojure_1  | Retrieving org/clojure/core.specs.alpha/0.2.44/core.specs.alpha-0.2.44.pom from central
clojure_1  | Retrieving org/clojure/clojure/1.10.1/clojure-1.10.1.jar from central
clojure_1  | Retrieving org/clojure/spec.alpha/0.2.176/spec.alpha-0.2.176.jar from central
clojure_1  | Retrieving org/clojure/core.specs.alpha/0.2.44/core.specs.alpha-0.2.44.jar from central
clojure_1  | Hello, World!
clojure_1 exited with code 0

ビルドしていなければ、勝手にビルドしてくれるみたいですね。
ここは、go,javaよりも便利ですね。

workspace/src/workspace/core.clj
(ns workspace.core
  (:gen-class))

(defn -main
  "I don't do a whole lot ... yet."
  [& args]
  (println "Hello, World!"))

このファイルを書くかえれば、コーディングが行えます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?