はじめに

大規模なシステム開発や小規模な開発などプログラミング言語は、用途に応じて種類が豊富です。

インタプリタ型プログラミング言語であるPythonやJavaScritpは開発に向いているといわれます。

しかし全ての開発に向いているとは限りません。

他にもソフトウェア開発などで古くから親しまれているC言語も同じく万能に対応することは困難です。

通信システム開発や分散システム開発に関しては上記の言語よりErlangが普及しています。

今回は、通信システム関連の開発で好まれるErlangの特徴や使い方などについて紹介します。


Erlangとは

Erlangは、並行処理思考のプログラミング言語になります。

通信大手のエリクソンによって開発されたプログラミング言語です。

1990年代にオープンソースが公開されてから、通信システムの開発やプロジェクトに広く普及しています。

エリクソンによって開発されたプログラム言語ということもあり通信システムに特化しています。

また、高いパフォーマンス構築が可能なプログラミング言語です。

Erlangは、オープンソースの類似製品があります。代表格は、ElixirやGO言語などになります。


Erlangの特徴

ここでは、Erlangの特徴について紹介します。Erlangの特徴は、有名なものが5つあります。

「関数」「処理」「プロセス」「分散処理」と「耐障害性」です。


関数

Erlangは、ベース文法が関数です。

Erlangは、デバックが容易に行えるだけでなく、関数の出力結果が予測しやすくなっています。

Erlangは、パラダイムが個々のブロックが一貫した出力値を作り出すことが可能です。

実行時にプログラミングにより機械語へ翻訳しながら実行を同時進行で行えます。

Erlangはこれが基本処理です。このことからErlangは、他のプログラミング言語とは異なっています。


処理

Erlangのもう一つの特徴は、並行処理です。

他のプログラミング言語と差別化できるアドバンテージとして、複数の命令の処理を並行して行えます。

これは、Erlangの大きな特徴です。


プロセス

Erlangのプロセスは、VMによって管理するため、OSのプロセスとは違います。

並行処理が可能なErlangは、プロセスの低下をせずに大量の処理を行うことが可能です。


分散処理

Erlangは、プロセスとプロセスの間を通信で連携できます。同期していなくてもメッセージを送受信することが可能です。

メッセージは、数値や関数だけでなく、文字やリストも取り扱うことができます。

ネットワークを介して他で実行されているプロセスへもアクセスすることができます。

そのため、複数のプロセスを連携することで分散処理が容易にできる流れを構築することが可能です。


耐障害性

Erlangは、プロセスで異常が発生したら、プロセスを制御して、迅速に終了することができます。

プロセスを制御するだけでなく、アラートを送ることも可能です。

Erlangは、エラーに対して高い耐障害性のため、ソースコードの保守性が高く、リスクヘッジができます。

また、Erlang関連のライブラリにあるアプリOTPは保守性と稼働率が高く人気です。


Erlangのメリット

Erlangのメリットは、大規模な分散システムの開発に向いているということです。

スクリプト型言語は線引きがされていて、目的に応じて柔軟にプログラミングができます。


OTPの存在

OTPの存在は分散システムを構築するのに大きなアドバンテージです。

Erlangのライブラリにあり、OTPがあるからErlangを採用した企業も少なくありません。

OTPは、Open Telecom Platformの略になります。

耐障害性の強い、柔軟かつ時間を節約して作るためのテレコムシステムです。

Erlang専用に多くのコンポーネントやプログラム用のデザインが用意されています。

Erlangに標準搭載されてからOTPよりErlang/OTPがより普及しているため、デフォルトはErlang/OTPです。


関数型要素

関数型プログラミング独特の関数型要素。

静的型言語に比べるとErlangは少ないところもメリットといえるでしょう。

Erlangは分散システム構築に最適とされています。

特に大量のトラフィック処理が必要なケースは、Erlangを選択する企業がほとんどです。

ただ、コードを短縮できる関数型プログラミングが持つ特徴は兼ね備えています。


Erlangのインストール方法

Erlangを入手する方法について紹介します。Erlangをインストールするためには、OS毎で手順が異なってくるため、OS毎での紹介です。

ただし、Unix/Linuxは、ディストリビューター毎に細かく分かれているため、代表的なものをピックアップしています。


Windowsの場合

Erlangをインストールするには、公式サイトからインストーラーをダウンロードします。

Windowsの場合は、インストーラーをダウンロードしたら、インストーラーを立ち上げて手続きの開始です。

手順に従ってnextを押して、規約同意してインストール完了になります。


Macの場合

Erlangをインストールするにはまず公式サイトからソースファイルを入手します。

Xcodeを立ち上げて、次のコマンドを入力するのですが、落としたファイル名を予めerlangに変更が必要です。

  1. ada:~ user?$ sudo mv desktop/erlang usr/local
  2. ada:~ user?$ cd / usr/local/erlang
  3. ada:/ur/local/erlang user?$ make
  4. ada:/ur/local/erlang user?$ make install


user名$は、本来Macユーザーの名前が表示されます。


Linux/Unixの場合

Erlangをインストールするためには、LinuxやUnixの場合、各ディストリビューションによって異なります。

ここでは代表的にUbuntsuでのインストール方法の紹介です。

公式サイトからまずパッケージをダウンロードします。次にUbuntuを立ち上げて次のコードの入力です。

  1. sudo apt-get install erlang


Erlangの基本操作

Erlangの特徴やインストール方法がわかったところで実際の使い方について紹介します。

基本的な操作だけいくつかピックアップしての紹介です。

Erlangの基本操作でよく使われるのは、「リスト」、「シェル停止」になります。


リスト

リストを作成するためには、リストの理解をさせます。

ジェネレータのinteger(X)のフィルタを使って評価が可能です。

評価は、trueかfalseで判断されます。

次のコードをサンプルとして紹介です。

  1. [X || X <- [5,6,a,7,8,b,9,10], integer(X), X > 8].

この式から得られるのは、8よりも大きい整数のリストです。

  1. [9,10]


モジュール

Erlangは、モジュールにいくつかの機能をまとめたファイルがあります。

それがerlangモジュールです。

ファイルの拡張子を「.erl」とするとerlangモジュールを保存できます。

モジュール名の宣言とファイル名がモジュール名と合致させなければなりません。

Erlangでモジュールファイルを読み込むためにです。

例えば、Thankyou.erlというファイルがあります。これをモジュール展開すると次のようになります。

  1. module(thankyou).
  2. export([thankyou_all/0]).
  3. thankyou_all() ->
  4. ??io:format(“Thankyou, All!~n”, []).


シェル起動/停止

Unixシステムにおいては、Erlangのシェルを起動・停止するコマンドが必要です。


まず、erlangシェルを起動するためには、次のコマンドを入力します。

  1. $ erl
  2. Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
  3. Eshell V7.0 (abort with ^G)
  4. 1>

erlコマンドを入力するとerlangシェルが起動します。これは、Unixの場合です。


Windowsの場合は、スタートメニューからErlangアプリを起動すればErlangは立ち上がります。 

次にErlangのシェルを停止する方法です。Erlangのシェルを停止する方法は、2通りあります。1つは、q()と入力することです。

  1. Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
  2. Eshell V7.0 (abort with ^G)
  3. 1> q().

もしくはCtrl + BreakをWindowsなら押します。UnixやMacは、Ctrl + Cです。そうすると次の画面が表示されます。

  1. rlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
  2. Eshell V7.0 (abort with ^G)
  3. 1>
  4. BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
  5. ???????(v)ersion (k)ill (D)b-tables (d)istribution

この画面で(a)を選択するとすぐにシェルを終了することが可能です。


ErlangとElixir

ErlangとElixirの違いは、細かなものを除くとほぼ同じです。

それは、ElixirがErlangの仮想マシン上で動くプログラミング言語だからが理由になります。

Elixirが好まれている要因は、高い拡張性です。

加えて、Erlangの仮想マシン上で稼働するため、Erlangがもともと持つ耐障害性や分散システムが継承されています。

Erlangの関数を呼び出すこともできるのは、ErlangユーザーにとってますますElixirを使いやすくする原因です。


Elixirインストール方法

ここでは、先ほど説明したElixirのインストール方法について紹介します。

Erlangの仲間として認知されているElixirは、徐々に分散システム構築の現場で普及しているプログラミング言語の一つです。


Windowsの場合

Elixirをインストールするには、公式サイトからインストーラーをダウンロードします。

Windowsの場合は、インストーラーをダウンロードしたら、インストーラーを立ち上げます。

あとは、手順に従ってnextを押して、規約同意して完了です。


Macの場合

ElixirをインストールするにはErlang同様、Homebrewを介してインストールします。

Macの場合は、Homebrewがあれば簡単にインストールすることが可能です。

  1. $ brew install elixir


Linux/Unixの場合

Elixirをインストールするためには、LinuxやUnixの場合、各ディストリビューターによって異なります。

ここでは代表的にUbuntsuでのインストール方法の紹介です。

公式サイトからまずパッケージをダウンロードします。次にUbuntuを立ち上げて次のコードの入力です。

  1. sudo apt-get update

起動したら、次のコードを入力します。

  1. sudo apt-get install esl-erlang

最後にExlirをダウンロードするプロセスです。

  1. sudo apt-get install elixir


まとめ

今回は、通信システム開発や分散システム開発の現場で広く普及しているErlangについて紹介しました。

Erlangは、大きな開発に携わらないとあまり馴染みがないプログラミング言語です。

しかし、スウェーデンの通信大手エリクソンによって開発されたため、通信関連や分散システム開発に携わるエンジニアには有名です。

関数型プログラミング言語は、ややこしい印象から牽制されがちかもしれません。

しかし、実は目的があれば使いやすいプログラミング言語です。