はじめに
Hylangって何という話については、すでにいくつかの記事がありますので、そちらを参照してください。
簡単に言うとpythonの資産をフル活用できるLispです。
フォーマッターのインストール
HylangはClojureライクな記述スタイルなので、以下のClojure用のフォーマッターが利用できます。
Hylangが公式で提供している拡張機能だと保存時にファイル全体のフォーマットができないので、以下のコマンドをインストールします。
- cljfmt
以下のコマンドを実行してインストールする
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/weavejester/cljfmt/HEAD/install.sh)"
実行環境構築
Hylangはpythonのライブラリとして公開されているので、venvを利用してライブラリ管理の仮想環境を構築してからインストールを行います。
まずhylang
という名前でライブラリ管理の仮想環境を作成します。
python -m venv hylang
次にvenvの仮想環境を有効化します。
これはシェルを起動する度に実行する必要があるので注意してください。
. hylang/bin/activate
最後に以下のライブラリをインストールします。
- hy
- hylangの実体を提供するライブラリ
- hyrule
- hylangのユーティリティを提供するライブラリ
pip install hy
pip install hyrule
vscode拡張機能のインストール
vscodeで実行するに当たって以下の拡張機能をインストールします。
-
vscode-hy (hylang official)
- hylangの公式が提供している全体的なサポート機能
-
Save and Run
(wk-j)- 保存時に特定のコマンドを実行するための拡張機能
vscodeの設定ファイル変更
まず、設定ファイルは以下の手順で開きます。
-
Command + Shift + p
を押下する -
Preferences: Open User Settings (JSON)
を選択する
以下の内容を追加して、ファイルの保存時にcljfmt
を実行して、ファイル全体のフォーマットが行われるようにします。
"saveAndRun": {
"commands": [
{
"match": "\\.hy$",
"cmd": "cljfmt fix ${file}",
"useShortcut": false,
"silent": true
}
]
}
ショートカットキーの追加設定
まず、ショートカットキーの設定ファイルを以下の手順で開きます。
-
Command + Shift + p
を押下する -
Preferences: Open Keyboard Shortcuts (JSON)
を選択する
デフォルトの設定だと、コメント行でEnterを押下する度にコメント行が増えるので、以下の設定を追加して抑制します。
{
"key": "enter",
"command": "-hy.continueComment",
"when": "editorTextFocus && hy:cursorInComment && hy:keybindingsEnabled && editorLangId == 'hy'"
}
実行ファイル
実行ファイルの拡張子は.hy
にします。
以下の内容でtest.hy
という名前でファイルを作成します。
(print "Hello world.")
コマンドラインから以下コマンドを実行するとHylangプログラムが実行されます。
hy test.hy
いちいちコマンドラインからプログラムを実行するのはめんどくさいので、vscodeの機能でデバッグ&実行を行いたいところなのですが、Hylangには対応するデバッガーが存在しないっぽいので自分で実行したほうが速いです。
また、関数単位の実行であれば、後述のREPL経由での実行が速くて便利です。
REPL経由での実行
まず、vscode上でREPL実行をするためには、以下の手順を踏む必要があるので注意してください。
- vscodeのターミナル上で
venv
の仮想環境をアクティブにする- 今回の場合は
. hylang/bin/activate
で行います
- 今回の場合は
- プログラムファイル上の実行したい関数にカーソルをあわせておく
-
Alt + Enter
を押下する
以下のように関数の上にカーソルをあわせておき、Alt + Enter
を押下すると
REPLに関数を読み込み、実行までを行ってくれます。
初回実行時はREPLのプロセスを起動するので時間がかかりますが、2回目以降の場合は、すでに起動しているREPLに対して関数の読み込み&実行を行うので、直ぐに実行結果を得ることができます。
最後に
今回はHylangの環境構築までを行いました。
数年ぶりにHylangを触ったのですが、知らないうちに色々と変わっていたので、次回は、そのあたりをまとめられると良いかなと思っています。