【JSCL】
インストールなしでCommon Lispを動かす

  • JSCLはCommon LispをJavaScriptにコンパイルする処理系で、デモページを開くだけでREPLが使えます。
  • JSCLはコンパイラ自身がCommon Lispで書かれており、ソースの97%以上がLispで完結しています。

関連記事

1. ブラウザで動くCommon Lisp

LispのREPLは、ブラウザだけでもいくつか動かす選択肢があります1

1. ブラウザで動くCommon Lisp

Common Lispをちょっと試したいときに、SBCLをインストールして、EmacsとSLIMEを設定して、となると確かに億劫です。

1.1. JSCL

JSCL は、Lispで書かれたLispコンパイラであり、そのコンパイラ自身がブラウザ上で動きます。

1.1. JSCL

Common LispをJavaScriptにコンパイルするコンパイラで、Common Lisp自身でブートストラップされています2

デモページにアクセスするとすぐにREPLが起動するので、そのまま式を入力できます。

(mapcar #'(lambda (x) (* x x)) '(1 2 3 4 5))
; => (1 4 9 16 25)Code language: Lisp (lisp)

対応範囲はCommon Lisp仕様の部分集合ですが、言語の中核部分は十分カバーされているので、入門には問題ない水準です。
多値、tagbodygocatchthrowblockreturn-from、レキシカル変数とスペシャル変数、オプション引数とキーワード引数、setf、パッケージ、loopマクロ、CLOS、format関数あたりは動きます3

npmパッケージとしても配布されているため、Node.js環境でも使えます4

npm install -g jscl
node dist/jscl-node.jsCode language: Bash (bash)

1.2. JSCLのアーキテクチャが面白い理由

JSCLが技術的に興味深いのは、ブートストラップの構造にあります。

JSCLのアーキテクチャ SBCL ホスト処理系 (ビルド時のみ) compile JSCL ソース Common Lisp 97% JavaScript 2% output jscl.js ブラウザで動く Lispコンパイラ ブラウザ上で動く REPL Lisp 式を入力 (mapcar …) jscl.js が変換 → JavaScript 結果を表示 (1 4 9 16 25) Lisp で書かれた Lisp コンパイラがブラウザ上で動く

ホスト処理系としてSBCLなどを使ってJSCL自身をコンパイルし、その成果物であるJavaScriptがブラウザ上でLispプログラムをコンパイル・実行します5
Lisp処理系がLispで書かれるというのは伝統的な設計ですが、ターゲットがJavaScriptというのはなかなか面白い組み合わせです。

GitHubリポジトリを見ると、ソースの97%以上がCommon Lispで書かれており、JavaScriptは2%程度です。
実装の大部分がLispで完結しています。

2. ほかの処理系

ブラウザで動く Common Lisp インストール不要で今すぐ試せる3つの環境 JSCL デモページを開くだけ REPLがすぐ起動 JS にコンパイル npm でも使用可 Attempt This Online $ sbcl > (+ 1 2) 3 ネイティブ SBCL 仕様に忠実な挙動 スクリプト実行スタイル 貼り付けて即実行 Replit (defun foo) ファイル保存しながら テンプレートを選択 無料プランで動作 長いコードにも対応

2.1. Attempt This Online

Attempt This Online は、Steel Bank Common Lisp、通称SBCLをオンラインで実行できる環境です6

JSCLと違いネイティブのSBCLが動くので、より仕様に忠実な挙動を確認できます。
ただし、コードを貼り付けて実行するスタイルで、REPLというよりスクリプト実行に近い使い方になります7

2.2. Replit

Replit では Common Lisp のテンプレートを選択してプロジェクトを作れます。
ファイルを保存しながら試せるのでコードが少し長くなっても困りません。
無料プランでも動きます。

3. どれを使うか

言語の雰囲気を掴みたいだけなら、JSCLのデモページが最速です。
ページを開いてすぐ打てます。
SBCLの挙動を確認したいならAttempt This Onlineが向いています。
ファイルを保存しながら書きたい場合はReplitを使うとよいでしょう。

もちろん、本格的に使い込むなら、ローカルにSBCLをインストールしてEmacsとSLIMEを設定する環境が快適です8
ただ「まず動かしてみる」という段階では、インストールは後回しにして構いません。

  1. REPLはRead-Eval-Print Loopの略で、入力した式を読み取り、評価し、結果を表示するサイクルを繰り返す対話型の実行環境です。Lispはその仕組みを最初期から言語設計に組み込んでいた言語であり、REPLという用語自体もLispに由来します。 – Read–eval–print loop – Wikipedia
  2. JSCLのGitHubリポジトリは2026年現在も活発にメンテナンスされており、スター数は900を超えています。ソースコードの97%以上がCommon Lispで書かれています。 – jscl-project/jscl – GitHub
  3. CLOSはCommon Lisp Object Systemの略で、ANSI Common Lisp仕様に組み込まれたオブジェクト指向プログラミングの仕組みです。多重継承とジェネリック関数を持ち、メソッドがクラスに属するのではなくジェネリック関数として独立している点が他の多くのOOP言語と異なります。 – Common Lisp Object System – Wikipedia
  4. 2025年時点のnpmでの最新バージョンは0.9.0-alpha.0です。npmレジストリからインストール後、node dist/jscl-node.js で起動できます。Deno向けの配布物も同梱されています。 – jscl – npm
  5. コンパイラがそのコンパイラ自身を使ってコンパイルされることを「ブートストラップ」と呼びます。SBCLもこの設計を採用しており、理論上はANSI準拠の任意のCommon Lisp処理系からビルドできます。 – Steel Bank Common Lisp – Wikipedia
  6. SBCLはANSI Common Lisp標準に準拠した高性能なオープンソースの処理系で、ネイティブコードへのコンパイル、デバッガ、プロファイラなどを備えています。Linux、macOS、Windowsなど複数のプラットフォームで動作します。 – About – Steel Bank Common Lisp
  7. Attempt This Onlineは、Try It Onlineの後継として作られた、様々なプログラミング言語を実行できるオンラインのサンドボックス環境です。個人が開発・運営しているプロジェクトで、GitHubでソースコードが公開されています。 – Attempt This Online
  8. SLIMEはSuperior Lisp Interaction Mode for Emacsの略で、動作中のCommon Lispプロセスに接続してコードの評価、コンパイル、デバッグ、ドキュメント参照などをEmacs上から行えるようにするモードです。2003年に開発が始まり、現在も活発にメンテナンスされています。 – SLIME – GitHub