Windows Dev. Site

Erlang Riak & Excel

XLLoopというExcelのアドインとサーバの組み合わせで、Excelのユーザ定義関数からサーバロジックを呼び出せる面白いものをみつけたのでテストしてみました。

http://xlloop.sourceforge.net/

サーバには、なんと最近勉強をはじめたErlangがあったので、これを使ってみました。
Erlanの分散データベースRiakのデータをExcelに表示させます。
残念ながら、RiakクライアントがWindowsでうまく動いてくれなかったので、HTTPクライアントによる接続にしました。

環境 XLLoop ver 0.3.2, Excel 2010 / Windows 7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-module(server_example).
-export([start/0, stop/0, function/3]).
-behaviour(xlloop_server).
-define(PORT, 5454).
 
start() ->
    Pid = xlloop_server:start(?PORT, ?MODULE),
    io:format("server port : ~p~n", [?PORT]),
    register(server_example_pid, Pid),
     
stop() ->
    server_example_pid ! stop.
 
function(_Context, _Name, _Args) ->
    io:format("name : ~s~n", [_Name]),
    io:format("args : ~w~n", [_Args]),
 
    case _Name of
        "riak" ->
            [H|T] = _Args,
            io:format("arg : ~s~n", [H]),
            Url = string:concat("http://192.168.11.11:8098/buckets/spam/keys/", H),
            {ok, {{V,200,R},Head,Body}} = httpc:request(Url),
            {str, Body};
        _ -> {str, "default"}
    end.

ソースはxlloop付属のものを参考にしました。
(io:formatはデバック用です。)

xlloop-0.3.2.iniにErlangサーバ用の設定を加えます。

[Erlang]
server=localhost:5454
function.name=ER

以下Erlangシェルで実行します。

inets:start().
c(server_example).
server_example:start().

xlloop-0.3.2.xllをExcelシートにドラッグ&ドロップします。

RiakはWindowsをサポートしていないので、Mac版を使いました。

http://basho.co.jp/riak/

環境 riak ver 1.4.7 / MacOSX 10.9
IPアドレス192.168.11.11

ulimit -n 4096
sudo ./riak start

Riakについは、SoftwareDesignPlus「データベースエンジニア養成読本」を参考にしました。

Excelからは、=ER(“riak”, “キー値”)で呼び出します。
raik

Erlangはちょっと文法的に好きになれない点がありますが、小さなプロセスを組み合わせてメッセージ通信で動かすしくみがとてもユニークで、いろいろとプログラムを作っているところです。たくさんの言語、環境がありますが、どれに絞るというより、それぞれが他に比べて得意とするところをうまく利用していきたいと思っています。
学習コストはかかりますが、モノの見方の多様性を養うことができるのでは、と思っています。