DEV Community

kazuhiro hara
kazuhiro hara

Posted on

ちょっとしたコマンドをさくっとClojureScriptで書けるスターターキットchochoiをつくった

ClojureやClojureScriptを使って、ちょっとしたコマンドラインのプログラムを作る方法はたくさんあります。
多くはleiningenやbootを使ったもので、高機能かつ素晴らしいものですが、個人的に欲しいものは以下のものです。

  • NodeJS上で動くコマンドのためのプロジェクトを自動生成できる
  • clojurescriptで処理を記述できる
  • プロジェクト生成のジェネレータの起動に時間がほとんどかからない
  • 起動から実行までの時間も早い
  • ビルドもなるべく時間がかからない。leiningenやbootにも依存しない
  • npmでインストール可能
  • ビルド時は、コマンドのインストールまでやってくれる
  • なんか楽しそう(コマンドの実行結果がキャッチー)

何を作ったの?

chochoiというClojureScriptベースのCLIコマンドを生成可能なツールです。chochoiは日本語でいう「ちょちょい」であり、簡単かつ迅速にコマンドプロジェクトを作成します。

helloというコマンドを作りたいときに、chochoi new helloと実行することで、helloコマンドをビルド可能なプロジェクトファイル一式が生成されます。

まだバージョンは0.0.5でして、発展途上です。descjopを作ってた時に、自動生成関係で「うーん」と思っていた部分が主に改善されているはずです。(descjopもこっちベースで作り直す予定)

※ まだMacでしか動作確認はしていません。Windowsはパスの問題を解決する必要がありそうです。Linuxはたぶん動きそう。

使い始める前の準備

cljs.jarhttps://github.com/clojure/clojurescript/releases/latest でダウンロードしておき、これをローカルストレージのどこかに配置します。

そして、CLJS_PATHという環境変数を設定しておきます。

こんな感じです。

export CLJS_PATH="/Users/XXXXX/.cljs/cljs.jar"
Enter fullscreen mode Exit fullscreen mode

chochoiのインストール

chochoiをインストールします

$ npm install -g chochoi
Enter fullscreen mode Exit fullscreen mode

helloプロジェクトをつくってみる

例として、helloというコマンドを作ってみましょう。

chochoi new helloを実行するとこんな風にファイルが生成されます。

$ chochoi new hello

⚡ init chochoi project...

------------------------------------
- create : ./hello
- create : ./hello/src/hello
- create : hello/src/hello/core.cljs
- create : hello/src/hello/command.cljs
- create : hello/.gitignore
- create : hello/build.clj
- create : hello/build.js
- create : hello/config.js
- create : hello/package.json
- create : hello/README.md
------------------------------------

👍 completed.
Enter fullscreen mode Exit fullscreen mode

helloプロジェクトをビルドをする

helloディレクトリが生成されているので、移動し、chochoi buildコマンドを実行します。

$ cd hello
$ chochoi build

⚡ build chochoi project...

completed linked command.

completed clojurescript build.
up to date in 0.055s
/Users/XXXXX/.nvm/versions/node/v8.7.0/bin/hello -> /Users/XXXXX/.nvm/versions/node/v8.7.0/lib/node_modules/hello/out/main.js
/Users/XXXXX/.nvm/versions/node/v8.7.0/lib/node_modules/hello -> /Users/XXXXX/study/chochoi/hello

👍 completed.
Enter fullscreen mode Exit fullscreen mode

すると、ビルドが完了し、なおかつ、コマンドとして登録されます。

実行する

あとは実行するだけです。

$ hello kaz
Hello world! kaz
Enter fullscreen mode Exit fullscreen mode

すぐ起動するし、速いですね!

処理をいじるには

src/hello/command.cljsで実行処理が書かれているので、ここを変更するだけです。

(ns hello.command
  (:require [cljs.nodejs :as nodejs]))

(defn command [args]
  (println "Hello world!" (str (first args))))
Enter fullscreen mode Exit fullscreen mode

みなさまの、ごスターをお待ちしております

Top comments (0)