読者です 読者をやめる 読者になる 読者になる

non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

lisp版ElectronのCeramicを動かした

おはようございます。以前も、リビングで長男と一緒に寝ることがあったのですが、先日長男は一人で、リビングで寝ると言いい、一人、別の部屋で寝ることができ、おねしょもしませんでした。kjunichiです。

背景

以前からelectronのlisp版という認識でceramicをブクマだけはしていた。最新のbrightrayを利用するアプリの例が無いものかと思い、これを思い出した。

が、Emacsの設定すらかけない自分のlisp力ではceramicのREADME.mdだけでは動かせなかった。

うごかすには

common lispの処理系

common lispの何らかの処理系が必要。

自分はおそらく、数式処理のmaxima繋がりでsbclコマンドがHomebrew経由で入っていたのでこれを利用。

他にも、common lispの処理系はある模様。

quicklisp

quicklispとはlispのパッケージ管理システムの模様。node.jsでいうところのnpmっぽい印象。

用意したcommon lispの処理系にquicklispを入れる。

Until Ceramic is available from Quicklisp

この英文がよく分らないくらい英語力がないが、quicklispを入れた環境が必要と言っている模様。

sbclは、このquicklispのサイトで例が載っている処理系だったので、この通り実施。

ちなみに、quicklispは昔はsなしのサイトに置いてあったが、昨今の諸事情の為か、httpsでDL可能なので、こちらを利用した方が吉。

ceramic本体

そして、ようやくceramic本体が入れられる。

Tutorial – Ceramic 参照。

ちなみに、プロンプトはsbclのデフォルトだと、「CL-USER>」ではなく、「*」の模様。

2回目以降のceramicの動かし方

(ql:quickload :ceramic)
(ceramic:interactive)

(ceramic:setup)は不要。これ実行するとElectronのDLが始まってしまう。

仕組み

lispEmacsの設定すら未だに書けない程に明るくないが、どうやら、electron側で標準入力を監視して、そこにJSONが流れてくるとJSONの内容に応じて処理を行っている模様。

つまり、mrubyでelectronを開いて、標準入出力を取得できれば、同様の事が出来そうだった。

Link

まとめ

brightrayの動くサンプルかと思いきや、Electronをそのまま利用しており、当初の目的にはかなわなかったが、流行りの関数型言語でもあるlispに触ることが出来、経験が積めた。