このレポジトリは、リックテレコム社刊行の「関数型プログラミングの基礎」のサンプルコードをおさめたものです。
github pagesのサイトは、http://akimichi.github.io/functionaljs/ になります。
サンプルコードを利用するには、まず最初に本レポジトリをクローンし、次にそのディレクトリに入ります。
$ git clone git@github.com:akimichi/functionaljs.git
$ cd functionaljs
テスト環境の構築には、 1) 個別にインストールする, 2) docker を使う 、 の2つの方法があります。
ここでは ubuntu が動作している環境にテスト環境をインストールする方法を説明します。 他のOSについては、書籍を参照ください。
node.jsのインストールは、nvmを用います。
nvmをインストールするには、curlコマンドを用いて次のようにするのが簡便です。
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash
あるいはwgetコマンドを用いる場合は、次のようになります。
$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash
上記の方法はスクリプトが移動したなどの理由で失敗することがあります。 もしインストールに失敗する場合は、https://github.com/creationix/nvm を参考にして最新の方法でインストールしてください。
次に、node.js v0.12.0 をインストールします。
$ nvm install v0.12.0
ローカル環境に nvm がインストールされていることが必要です。
レポジトリをクローンしたディレクトリに移動します。
cd functionajs
nvm use で node.jsのバージョン v0.12.0 を使うことを指定します。 npm install で必要なパッケージをインストールします。
$ nvm use
$ npm install
テストを実行するには gulp を利用します。 gulpコマンドを利用するため、以下のようにgulpをグローバルにインストールします。
$ npm install -g gulp
これでJavaScriptのコードをテストする準備が整いました。 コードのテストは、以下のようにします。
$ gulp js-test
なおscalaとhaskellのコードをテストするには、以下のdockerによるインストールを参照ください。
dockerを使って、各種のテスト環境を構築できます。 あらかじめdockerをインストールしておいてください。 この方法は、dockerさえインストールしておけば確実に環境を構築できるという利点があります。 ただし、dockerイメージは約4GBあるのでディスク容量の少ないマシンでの利用には注意してください。
なお、dockerを使ったインストールは、リックテレコム社が推奨する方法ではありません。 インストール時の問題等のついては、 https://github.com/akimichi/functionaljs/issues に投稿してください。
dockerコンテナを動かす前に、dockerイメージを準備する必要があります。 dockerイメージを取得するには、2つの方法があります。 ひとつは docker hub からダウンロードする方法で、もうひとつはDockerfileから自分で作成する方法です。
docker hubからイメージをダウンロードするには、pullコマンドを利用します。
$ docker pull emile/functionaljs:v1
イメージを準備するもう一つの方法は、Dockerfileをもとに自分でdockerイメージを作成する方法です。 イメージをローカル環境に作成するには、dockerコマンドで以下のようにします。
$ docker build -t="username/functionaljs:v1" .
なお、上記コマンドのusernameには基本的にユーザー名がはいります。
dockerイメージが準備できれば、そのイメージからコンテナを起動することでテストの実行が可能です。
以下のコマンドでnode.jsのコードをテストします。 もし自分のユーザー名でイメージを作成した場合は、以下のemileの箇所を、そのユーザー名に置きかえてください。
$ docker run -it --rm --workdir="/workspace/nodejs" emile/functionaljs:v1 /bin/bash --login -i -c "gulp --harmony js-test"
以下のコマンドでscala のコードをテストします。
$ docker run -it --rm --workdir="/workspace/scala" emile/functionaljs:v1 /bin/bash -c "sbt test"
以下のコマンドでhaskell のコードをテストします。
$ docker run -it --rm --workdir="/workspace/haskell" emile/functionaljs:v1 /bin/bash -c "stack test"
dockerコンテナにログインすることで、node.jsなどの対話的環境(REPL)を実行できます。
REPL を実行するには、まずコンテナにログインします。
$ docker run -it --workdir="/workspace" emile/functionaljs:v1 bash --login -i
これでコンテナ内の /workspace ディレクトリにログインしました。
node.jsのREPLを試すには、以下のように nodejsのディレクトリに移動して nodeコマンド を呼びだします。 コンソールを抜けるときは Ctrl-C を2回続けて押します。
$ cd nodejs/
$ node
> 1 + 2
3
>
(^C again to quit)
scala のREPLを試すには、 scalaのディレクトリに移動して、 sbt console を起動します。 コンソールを抜けるには、:q を入力します。
$ cd scala
$ sbt console
[info] Loading project definition from /workspace/scala/project
[info] Set current project to Functional Book Test Project (in build file:/workspace/scala/)
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_80).
Type in expressions to have them evaluated.
Type :help for more information.
scala> 1 + 2
res0: Int = 3
scala> :q
haskellのREPLを試すには、 haskell のディレクトリに移動して、 ghci を起動します。 コンソールを抜けるには、:q を入力します。
$ cd haskell
$ ghci
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
Prelude> 1 + 2
3
Prelude> :q
Leaving GHCi.