Clojure および ClojureScript アプリケーションでの Node.js の使用
最終更新日 2020年05月27日(水)
Table of Contents
多くの Clojure および ClojureScript アプリケーションには、ビルドプロセス中だけでなく、アプリを実行するためにも Node.js ランタイムが必要です。この記事では、Node.js を、Clojure buildpack を使用するアプリケーションと組み合わせるためのいくつかの異なる方法について説明します。
Clojure や ClojureScript を使用した経験がなく、アプリを最初から作成する場合は、Luminus や Chestnut などのフレームワークから始めてテンプレートを自動的に生成するようにしてください。これらのフレームワークはどちらも、Heroku に必要な設定を生成します。このガイドは主に、Heroku 上でビルドおよび実行される既存のアプリを設定しようとしている開発者を対象としています。
複数の buildpack の使用
Node.js buildpack は、Heroku の複数の buildpack のサポートを使用して Clojure buildpack と組み合わせることができます。これは、package.json
ファイルが含まれており、依存関係を管理するために npm
を実行する必要があるアプリに有効です。buildpack は、次のコマンドを実行することによって組み合わせることができます。
$ heroku buildpacks:clear
$ heroku buildpacks:add heroku/nodejs
$ heroku buildpacks:add heroku/clojure
続いて、次のコマンドを実行して実行順序を確認します。
$ heroku buildpacks
=== nameless-brushlands-4859 Buildpack
1. heroku/nodejs
2. heroku/clojure
これにより、Heroku は確実に最初に Node.js buildpack を、2 番目に Clojure buildpack を実行するようになります。
Node.js buildpack を実行するには、プロジェクトに package.json
ファイルが存在することも必要です。このファイルでは、インストールする Node.js のバージョンと、アプリに必要な任意の依存関係を定義できます。プロジェクトのルートに package.json
ファイルを作成し、その中に次のコードを記述します。
{ "engines": { "node": "4.0.0" } }
また、これを空 (つまり {}
) のままにして、常に最新バージョンを選択することもできます。
その後、次のコマンドを実行して、このファイルを Git リポジトリに追加します。
$ git add package.json
$ git commit -m "Added package.json"
次回のデプロイ時に、Heroku は最初に Node.js buildpack を実行します。これにより、Node.js ランタイムと NPM がインストールされます。次に、NPM によって package.json
内のすべての依存関係がインストールされます。
lein-npm の使用
lein-npm プラグインは、project.clj
ファイルで直接 NPM 設定をサポートする一般的な Leiningen プラグインです。lein-npm を使用するアプリには package.json
ファイルが存在しないため、依存関係の管理を Node.js buildpack に依存することはできません。
Clojure buildpack は lein-npm の使用を検出することができ、このプラグインが見つかると Node.js ランタイムをインストールします。その後、すべての NPM パッケージが確実にインストールされるように、Leiningen buildpack プロセスに deps
ターゲットを追加します。
lein-npm を使用している場合、追加の設定は必要ありません。ただし、次の環境設定で Node.js のバージョンを設定できます。
$ heroku config:set NODEJS_VERSION=4.2.1
この動作を必要としているが、lein-npm を使用していない場合は、上記で説明した NODEJS_VERSION
環境設定を設定することによって、Clojure buildpack で強制的に Node.js をインストールできます。この動作を無効にする必要がある場合は、次の環境設定を設定できます。
$ heroku config:set SKIP_NODEJS_INSTALL=true
lein-npm を使用するサンプル ClojureScript アプリケーションはここにあります。このタイプのアプリケーションはその後、Jetty などの JVM ベースのサーバーで実行するか、または Node.js 自体で実行できます。
Node.js を使用した ClojureScript アプリの実行
Node.js で ClojureScript アプリを実行するには、まず、上記で説明した 2 つの方法のどちらかを使用して Node.js ランタイムをインストールする必要があります。
次に、アプリケーションの :cljsbuild
ディレクティブを :nodejs
ターゲットに対してコンパイルするように設定する必要があります。これが project.clj
でどのようになるかの例を次に示します。
:cljsbuild {
:builds [{
:source-paths ["src/myexample"]
:compiler {:output-to "target/js/myexample.js"
:target :nodejs
:optimizations :simple }}]})
その後、node
コマンドを使用して JavaScript を実行するように Procfile
を設定する必要があります。次に例を示します。
web: node target/js/myexample.js
完全な例は、この Node.js で実行されるサンプル ClojureScript アプリケーションにあります。