{"id":26904356,"url":"https://github.com/akimichi/functionaljs","last_synced_at":"2025-07-01T15:10:51.761Z","repository":{"id":33063266,"uuid":"36699829","full_name":"akimichi/functionaljs","owner":"akimichi","description":"「関数型プログラミングの基礎」サンプルコード","archived":false,"fork":false,"pushed_at":"2024-04-23T07:10:55.000Z","size":7338,"stargazers_count":41,"open_issues_count":3,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-08T07:19:56.836Z","etag":null,"topics":["functional-programming","javascript","nodejs"],"latest_commit_sha":null,"homepage":"http://akimichi.github.io/functionaljs/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akimichi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-02T01:27:03.000Z","updated_at":"2025-03-02T11:26:23.000Z","dependencies_parsed_at":"2022-09-03T21:24:51.571Z","dependency_job_id":null,"html_url":"https://github.com/akimichi/functionaljs","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akimichi%2Ffunctionaljs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akimichi%2Ffunctionaljs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akimichi%2Ffunctionaljs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akimichi%2Ffunctionaljs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akimichi","download_url":"https://codeload.github.com/akimichi/functionaljs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246628338,"owners_count":20808106,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["functional-programming","javascript","nodejs"],"created_at":"2025-04-01T10:53:10.165Z","updated_at":"2025-04-01T10:53:10.969Z","avatar_url":"https://github.com/akimichi.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 「関数型プログラミングの基礎」サンプルコード\n\nこのレポジトリは、リックテレコム社刊行の[「関数型プログラミングの基礎」](https://www.amazon.co.jp/%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E-JavaScript%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%AD%A6%E3%81%B6-%E7%AB%8B%E5%B7%9D%E5%AF%9F%E7%90%86/dp/4865940596/ref=sr_1_1?ie=UTF8\u0026qid=1476598423\u0026sr=8-1\u0026keywords=%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)のサンプルコードをおさめたものです。\n\ngithub pagesのサイトは、http://akimichi.github.io/functionaljs/ になります。\n\n## 利用法 \n\nサンプルコードを利用するには、まず最初に本レポジトリをクローンし、次にそのディレクトリに入ります。\n\n~~~\n$ git clone git@github.com:akimichi/functionaljs.git\n$ cd functionaljs\n~~~\n\nテスト環境の構築には、 1) 個別にインストールする, 2) docker を使う 、 の2つの方法があります。\n\n### ローカル環境にテスト環境を個別にインストールする\n\nここでは ubuntu が動作している環境にテスト環境をインストールする方法を説明します。\n他のOSについては、書籍を参照ください。\n\n#### node.js のインストール\n\nnode.jsのインストールは、[nvm](https://github.com/creationix/nvm)を用います。\n\nnvmをインストールするには、curlコマンドを用いて次のようにするのが簡便です。\n\n~~~\n$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash\n~~~\n\nあるいはwgetコマンドを用いる場合は、次のようになります。\n\n~~~\n$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash\n~~~\n\n上記の方法はスクリプトが移動したなどの理由で失敗することがあります。\nもしインストールに失敗する場合は、https://github.com/creationix/nvm を参考にして最新の方法でインストールしてください。\n\n次に、node.js v0.12.0 をインストールします。\n\n~~~\n$ nvm install v0.12.0\n~~~\n\n### テストの実行 \n\nローカル環境に nvm がインストールされていることが必要です。\n\nレポジトリをクローンしたディレクトリに移動します。\n\n~~~\ncd functionajs\n~~~\n\nnvm use で node.jsのバージョン v0.12.0 を使うことを指定します。\nnpm install で必要なパッケージをインストールします。\n\n~~~\n$ nvm use\n$ npm install\n~~~\n\nテストを実行するには [gulp](http://gulpjs.com/) を利用します。\ngulpコマンドを利用するため、以下のようにgulpをグローバルにインストールします。\n\n~~~\n$ npm install -g gulp\n~~~\n\nこれでJavaScriptのコードをテストする準備が整いました。\nコードのテストは、以下のようにします。\n\n~~~\n$ gulp js-test\n~~~\n\nなおscalaとhaskellのコードをテストするには、以下のdockerによるインストールを参照ください。\n\n### dockerを使う\n\n[docker](https://www.docker.com/)を使って、各種のテスト環境を構築できます。\nあらかじめdockerをインストールしておいてください。\nこの方法は、dockerさえインストールしておけば確実に環境を構築できるという利点があります。\nただし、dockerイメージは約4GBあるのでディスク容量の少ないマシンでの利用には注意してください。\n\nなお、dockerを使ったインストールは、リックテレコム社が推奨する方法では**ありません**。\nインストール時の問題等のついては、 https://github.com/akimichi/functionaljs/issues に投稿してください。\n\n#### dockerイメージを準備する\n\ndockerコンテナを動かす前に、dockerイメージを準備する必要があります。\ndockerイメージを取得するには、2つの方法があります。\nひとつは docker hub からダウンロードする方法で、もうひとつはDockerfileから自分で作成する方法です。\n\n##### docker hubから取得する\n\ndocker hubからイメージをダウンロードするには、pullコマンドを利用します。\n\n~~~\n$ docker pull emile/functionaljs:v1\n~~~\n\n##### dockerのイメージを自分で作成する\n\nイメージを準備するもう一つの方法は、Dockerfileをもとに自分でdockerイメージを作成する方法です。\nイメージをローカル環境に作成するには、dockerコマンドで以下のようにします。\n\n~~~\n$ docker build -t=\"username/functionaljs:v1\" .\n~~~\n\nなお、上記コマンドのusernameには基本的にユーザー名がはいります。\n\n#### 単体テストを実行する\n\ndockerイメージが準備できれば、そのイメージからコンテナを起動することでテストの実行が可能です。\n\n以下のコマンドでnode.jsのコードをテストします。\nもし自分のユーザー名でイメージを作成した場合は、以下のemileの箇所を、そのユーザー名に置きかえてください。\n\n~~~\n$ docker run -it --rm --workdir=\"/workspace/nodejs\" emile/functionaljs:v1 /bin/bash --login -i -c \"gulp --harmony js-test\"\n~~~\n\n以下のコマンドでscala のコードをテストします。\n\n~~~\n$ docker run -it --rm --workdir=\"/workspace/scala\" emile/functionaljs:v1 /bin/bash -c \"sbt test\"\n~~~\n\n以下のコマンドでhaskell のコードをテストします。\n\n~~~\n$ docker run -it --rm  --workdir=\"/workspace/haskell\" emile/functionaljs:v1 /bin/bash -c \"stack test\"\n~~~\n\n#### REPLを実行する \n\ndockerコンテナにログインすることで、node.jsなどの対話的環境(REPL)を実行できます。\n\nREPL を実行するには、まずコンテナにログインします。\n\n~~~\n$ docker run -it  --workdir=\"/workspace\" emile/functionaljs:v1 bash --login -i\n~~~\n\nこれでコンテナ内の /workspace ディレクトリにログインしました。\n\nnode.jsのREPLを試すには、以下のように nodejsのディレクトリに移動して nodeコマンド を呼びだします。\nコンソールを抜けるときは Ctrl-C を2回続けて押します。\n\n~~~\n$ cd nodejs/\n$ node\n\u003e 1 + 2\n3\n\u003e \n(^C again to quit)\n~~~\n\nscala のREPLを試すには、 scalaのディレクトリに移動して、 sbt console を起動します。\nコンソールを抜けるには、:q を入力します。\n\n~~~\n$ cd scala\n$ sbt console\n\n[info] Loading project definition from /workspace/scala/project\n[info] Set current project to Functional Book Test Project (in build file:/workspace/scala/)\n[info] Starting scala interpreter...\n[info] \nWelcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_80).\nType in expressions to have them evaluated.\nType :help for more information.\n\nscala\u003e 1 + 2\nres0: Int = 3\n\nscala\u003e :q\n~~~\n\nhaskellのREPLを試すには、 haskell のディレクトリに移動して、 ghci を起動します。\nコンソールを抜けるには、:q を入力します。\n\n~~~\n$ cd haskell\n$ ghci\n\nGHCi, version 7.10.2: http://www.haskell.org/ghc/  :? for help\nPrelude\u003e 1 + 2\n3\nPrelude\u003e :q\nLeaving GHCi.\n~~~\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakimichi%2Ffunctionaljs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakimichi%2Ffunctionaljs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakimichi%2Ffunctionaljs/lists"}