2. 始めましょう

2.1. Erlangシェル

Erlangではたいていのものはエミュレータ内でテストできます。エミュレータはスクリプトがコンパイルの後にデプロイされたときに実行しますが、コードをその場で編集することもできるようになっています。 LinuxでErlangシェルを起動するには、ターミナルを開いて $ erl とタイプします。 設定がちゃんとされていれば、次のようなテキストが表示されるでしょう:

Erlang R13B01 (erts-5.7.2) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.2  (abort with ^G)

おめでとう、Erlangシェルが起動しています!

Windowsユーザの場合は、 erl.exe で起動するシェルでもいいですが、代わりに werl.exe を使うことをおすすめします。スタートメニューから探してみてください。(プログラム > Erlang で見つかります) WerlはWindows限定のErlangシェル実装で、独自のスクロールバーがついたウィンドウがあり、コマンドラインでの編集もサポートしています。(Windows標準の cmd.exe シェルで面倒だったコピー&ペーストなどができます) それでも、erlシェルは標準入力または標準出力をリダイレクトしたい場合、あるいはパイプラインを使う場合に必要となります。

エミュレータ内でコードを編集し実行することもできます。しかしまずはどうやってErlangシェルを使うか見てみましょう。

2.2. Erlangシェルコマンド

Erlangシェルには70年代から人気のテキストエディタであるEmacsのサブセットの組み込みラインエディタが搭載されています。 Emacsを知っていれば、使い心地はいいと思います。知らなくてもどちらにしろ使い心地はいいでしょう。

../_images/shell1.png

最初に、なにか文字を入力してから ^A (Ctrl+A) を押してみると、カーソルが行頭に移動するのが確認できると思います。 ^E (Ctrl+E) を押すと行末に行きます。矢印キーを使って前後上下に移動することもできます。

li と入力してからタブキーを押すと、シェルは lists: と補完してくれます。もう一度タブキーを押すと、シェルがあとに続く関数の候補をたくさん表示してくれます。 これはErlangがモジュール名 lists を補完して、それからそのモジュール内の関数から候補を提示してくれている例です。 この表記が気持ち悪いと思うかもしれませんが、心配しないでください。すぐに十分慣れます。

これでもうシェルの機能は十分見たのでバッチリだと思います。ただ1つだけ忘れています:どうやってErlangシェルを終了するかまだ見てません!それを見つける手っ取り早い方法があります。 help() と入力するのです。するとシェルの中で使えるたくさんのコマンドが表示されるはずです。 いくつかは後でまた使うとして、Erlangシェルから出るのに注目する行はこれです。

q() -- quit - shorthand for init:stop()

というわけで、これが1つ目の方法です。(実は2つ方法があります)しかしこの方法ではシェルがフリーズしてしまった時に意味がありません! シェルを起動したときに注意深く見ていると ‘aborting with ^G ‘( ^G で終了します)というコメントがあったことに気がつくでしょう。 では ^G を打ってから、 h を打ってヘルプを見てみましょう!

User switch command
--> h
c [nn]            - connect to job
i [nn]            - interrupt job
k [nn]            - kill job
j                 - list all jobs
s [shell]         - start local shell
r [node [shell]]  - start remote shell
q        - quit erlang
? | h             - this message
-->

i を入力してから c を入力すると、Erlangは現在実行しているコードを停止して、応答可能なシェルにもどることが出来ます。 j は実行中のプロセス一覧を表示します。(数字のあとに米印が付いているものは現在実行中のジョブを示しています) j で表示されたプロセス番号を i に続いて入力すると、そのプロセスを中断することができます。 k を使うとシェルを単に中断する代わりに殺すことが出来ます。 s を押すことで新しいシェルを起動できます。

Eshell V5.7.2  (abort with ^G)
1> "OH NO THIS SHELL IS UNRESPONSIVE!!! *hits ctrl+G*"
User switch command
--> k
--> c
Unknown job
--> s
--> j
2* {shell,start,[]}
--> c 2
Eshell V5.7.2  (abort with ^G)
1> "YESS!"

ヘルプの文章を読み返すと、リモートシェルを起動できることに気がつくはずです。すぐにはその詳細は紹介しませんが、この機能は、Erlang VMは実行しているコードから離れて何ができるのかというアイデアを連想させます。 それでは、(本当にこれから)始めましょう!