はじめに
おはようございます。当ブログにアクセス頂き、ありがとうございます。Clojurescriptの深みに日々はまっている、たなけんです。
本エントリでは、Clojurescriptでのrepl使用方法を記載します。
Clojurescriptのreplの種類
Clojurescriptでは、以下の2種類のreplを利用することができます。- Rihno環境
- Webブラウザ環境
今回は、ブラウザ上でのClojurescriptの挙動を確認するため、後者のWebブラウザ環境でのreplの使用方法について記載します。
Webブラウザ環境のreplでは、cljsbuildプロセスが入出力を処理し、Webブラウザプロセスが入力されたS式を評価します。
cljsbuildによるrepl利用の準備
cljsbuildはコンパイルだけではなく、replの起動、テストの実行といった機能も兼ね備えています。しかし、Webブラウザ環境でreplを起動するには、接続用のhtmlを読み込むClojurescriptおよび接続用のClojurescriptが必要となります。今回はClojurescriptのwikiを例として取り上げますが、実際に開発しているアプリケーションに、数行付け加えるだけでも、Webブラウザ環境のreplを使用することができます。下記で示される、コードはClojurescriptのrepl利用の手引きからの引用となります。
htmlファイル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Browser-connected REPL</title> | |
</head> | |
<body> | |
<div id="content"> | |
<script type="text/javascript" src="out/goog/base.js"></script> | |
<script type="text/javascript" src="foo.js"></script> | |
<script type="text/javascript"> | |
goog.require('foo'); | |
</script> | |
</div> | |
</body> | |
</html> |
何の変哲も無い、ただ接続用のClojurescriptを読み込むだけのhtmlです。
しかし、1点だけ注意事項があります。それは、必ずボディ部でscript要素を宣言しなくてはいけないということです。
私は当初ヘッド部でJavascriptライブラリの読み込みを宣言しており"Type error: parentElm is null"というエラーに悩まされてしまいました。
接続用のClojurescript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns foo | |
(:require [clojure.browser.repl :as repl])) | |
(repl/connect "http://localhost:9000/repl") |
clojure.browser.replを利用し、cljsbuildで起動したポートへ接続します。
clojure.browser.repl/connect関数: 引数のurlへ接続し、replへの入力を受け付ける
起動から接続まで
以下の手順によりreplを起動し、入出力プロセスと評価プロセスを接続します。- コンソールを起動、cljsbuildを利用しているプロジェクトのルートへ移動
- コンソールから、lein trampoline cljsbuild repl-listenと入力し、replを起動
- Webブラウザを起動し、接続用htmlを読み込む
- 同じWebブラウザからurl(デフォルトlocalhost:9000)へアクセスし、cljsbuildのreplと、Webブラウザの接続を確立(接続用のhtmlファイル名がindex.htmlではない場合(例. not-index.html)、urlはhttp://localhost:9000/not-index.htmlのようになる)
replの利用
接続が確立された後は、コンソールから評価したい式を入力することで、ブラウザのdom要素等を操作することができます。また、load-namespace関数を使うことで、クラスパス内の任意のClojurescriptファイルを読み込むことができます。
今回の作業は以上。最後までお読み頂きありがとうございました。
たなけん(作業時間45分)
0 件のコメント:
コメントを投稿