ペパ研 会議参加報告

Code BEAM STO 2018 参加報告

ペパ研 会議参加報告

ペパボ研究所客員研究員の力武健次(りきたけ・けんじ)です。この記事では5月31日〜6月2日にスウェーデンのストックホルムで行われたCode BEAM STO 2018の参加報告をします。(文中敬称略)

Code BEAM STO 2018

Code BEAMは、ErlangやElixirといったErlang VM上の並行プログラミングシステムのコンサルティングを行っているErlang Solutions社によるErlang/OTPやElixirなどの仮想マシンBEAMに関するカンファレンスの総称です。Code BEAM STOは、かつてはErlang User Conferenceと呼ばれていました。その名の通り、Erlangの利用者、そして現在はElixirなどその後作られたBEAMを使う言語の開発者や利用者が集う国際会議として、1994年以来1996年を除いてスウェーデンのストックホルムにて毎年開かれています。

Code BEAMはストックホルムだけでなく、米国サンフランシスコでもかつてはErlang Factory、そして今年はCode BEAM SF 2018として会議が定期的に開催されています。昨年のサンフランシスコの会議の様子はこのブログでも参加報告の記事として紹介しています。今年は力武の業務の都合等で、サンフランシスコではなく、ストックホルムの会議に参加することとなりました。力武は2016年のErlang User Conferenceに参加しており、今回は2度目の参加となります。

Erlang発祥の地ストックホルム

Erlangは1986年にEricsson社の当時のComputer Science Laboratory (CSLAB) で生まれました(現在は解散しています)。途中1998年にオープンソース化されたり、OTPと呼ばれる各種ミドルウェアが製品に取り込まれてErlang/OTPと名前が変わったりしていますが、同社の製品として現在もOTP Teamによって引き続き開発が続けられています。かつてのCSLAB、そして現在のOTP Teamも本拠地はストックホルム近郊のKista(シースタと読みます)のEricssonのオフィスにあり、その意味ではストックホルムはErlang発祥の地といえるかもしれません。

ストックホルムの人口は2018年現在91万人、近郊を含めれば140万人、都市圏としては220万人を占め、推計人口が999万人のスウェーデンの首都として同国および北欧諸国を代表する大都市となっています。とはいえ、東京都世田谷区で生まれ育ち、現在は大阪府豊中市に住む力武から見ると、ストックホルムは東京や大阪の大都市圏に比べると小さな感じがします。

スウェーデンの公用語はスウェーデン語であり、ストックホルムでも街の標識や掲示にはスウェーデン語しか書かれていません。人々の文化もアメリカ合衆国とは大きく違い、エンジニアの人達も寡黙かつ静かな人達が多いように思います。そういった気質は、Erlang/OTPのドキュメントやコミュニティに、如実に現れているように思います。技術以外でも、いろいろ勉強することの多い旅でした。今回の旅のErlang関連以外のことに関する感想は、力武個人のNoteの記事として記しています

Erlang/OTPを作ったEricssonとオープンソース化に至る歴史

世界を代表する通信企業のひとつであるEricssonがErlangという並行プログラミングシステムを開発した主な目的は、高い耐障害性を持たせなければならない通信機器のために不可欠である並行分散処理のための効率が良く信頼性も高いソフトウェア開発実行環境の実現でした。その成果は、1986年の開発開始から12年後、同社の非同期スイッチングモード(ATM)交換機AXD301(リンクはCiteseerにあるEricsson ReviewのPDF記事)として結実します。

しかし、Ericsson内部のErlang/OTPの評価は決して芳しいものではありませんでした。それまでの交換機用プログラミング言語と大きく違う文法やプログラミングパラダイムを警戒したEricsson内部の批判的な人達により、一時はErlang/OTPが同社内で新規採用禁止となるなどErlang/OTPにとっては厳しい状況が続きました。この厳しい状況を打破するために、Erlang/OTPの開発者たちはErlangを1998年にオープンソース化するという賭けに出ます。この賭けは、Erlang/OTPの特徴が当時活発だったインターネットベンチャー企業の各種サービス提供にも活かされることによって、結果として大成功となりました。

今年2018年はErlangのオープンソース化20周年であり、Code BEAM STOのテーマの一つには"Open Source Erlang"という言葉が加えられました。会議ではこのオープンソース化を記念するパーティも開かれ、ストックホルムという土地柄もあり、当時の関係者の人達が多数集まって活況を呈していました。

Code BEAM STOへの参加の意義と力武の発表

スウェーデンは日本からの航空機の直行便がなく、空港に近い東京や大阪からストックホルムへの移動であっても片道実質20時間程度と移動には多くの時間を要します。それでもCode BEAM STOに参加する意義は何かといえば、以下の3点にまとめることができます。

  • ストックホルムはErlang/OTPの開発拠点であり、Erlang/OTPの現場の開発に携わっている人達と交流できる。
  • 欧州最大のBEAM関連会議であり、ErlangやElixirの開発状況についての最新のトピックを議論できる。
  • 米国西海岸(いささかピリピリしている空気に満ちている感じ)とは違った、よりゆっくりした感じでのコミュニティを体感できる。そもそも英語母語話者は多数派ではないので、会議も弾丸のように飛んでくるアメリカ英語とは違った感じであり、日本の人達には過ごしやすい。

いまやWebやインターネットの技術開発は国際連携なしにはできない時代ですが、世界中どこもかしこも米国西海岸のサンフランシスコやシリコンバレーのような雰囲気というわけではありません。Code BEAM STOに来る人達にはどちらかといえば日本でいう「Web系」の雰囲気ではなく、むしろエンタープライズ系の通信技術の延長として、耐障害性に優れたBEAMの関連技術を学んでいこうといった落ちついた雰囲気を感じます。サンフランシスコとストックホルムの街のノリの違いと言い切ってしまえばそれまでかもしれませんが。もっともスーツの人は多くなくて、会議全体はカジュアルな感じでした。

力武はErlang Solutions主催の会議に参加するときは何かしら発表するようにしているのですが、今年は趣味のアマチュア無線関連の発表をすることにしました。タイトルは“APRS-IS Servers on The BEAM"(リンクは発表スライド)としました。内容はAutomatic Packet Reporting System (APRS)に関するものです。

APRSは、位置情報やその他の各種メッセージをモバイルの移動局から地上局の支援を受けながらコンピュータ間でアマチュア無線のパケット通信を使って伝えあうという、現代のIoTのさきがけであり、非常災害時などの通信支援に使える本格的なものです。(アマチュア無線を営利目的で利用することは国際条約ならびに電波法で禁止されていますが、システム構築や通信に関する技術の学習を行うことは一切問題ありません。)APRSの運用は2000年代前半には確立しており、地上局間のインターネット接続を行うAPRS-ISというサーバシステムも現在まで継続して運用されています。APRSで何が起こっているかは、フィンランドの有志によるaprs.fiで、Google Mapsに投影しながら逐一知ることができます。

今回の力武の発表内容(リンクはYouTubeの録画ビデオ)は、APRSの紹介を兼ねて、簡単なErlang/OTPとElixirでPRS-ISからのパケット表示システムを作るというものでした。システムにはApresseという名前をつけており、内容はGitHubで公開しています。力武はかつて1985年からアマチュア無線のパケット通信を使った実験を1992年まで行っていたので、ある意味これは原点回帰であるとも言えます。さすがに発表はニッチな内容でもあるのでその場で多くの人には聞いていただけなかったのですが、Erlang/OTPの筆頭作者であるJoe Armstrongから質疑応答の時間に「この程度の帯域や処理量ならbinary matchingのプリコンパイルはいらない。最適化し過ぎている。もっとパターンマッチを使え」(リンクは関連のGitHub issue)というありがたい指摘をいただきました。こういう直球ド真ん中の指摘が来るところがカンファレンスの醍醐味でもあります。

Code BEAM STO 2018のハイライト

Code BEAM STO 2018の録画ビデオはYouTubeのプレイリストとして公開されています。以下、いくつか紹介していきます。

この会議では必ず行われているOTP TeamのマネージャKenneth LundinによるErlang/OTPのロードマップの発表、そしてElixirのコア開発チームメンバーの一人Andrea Leopaldiの発表は、最近のErlangやElixirの状況を知る上では必見でしょう。

言語技術に関連する発表としては、Josef Svenningssonによるgradual type system(漸進的型付けシステム)の実装が力武の興味を惹きました。ErlangやElixirは動的型付け言語ですが、関数やデータの型宣言をコード中に追記していくことで、DialyzerというErlang/OTPの一部である静的解析ツールを使って型のチェックをすることができるようになっています。Dialyzerはsuccess typing(成功型付け)という、型宣言の情報を使って実行時のクラッシュが避けられない型のエラーを検出することに重点を置く手法を採用しています。一方、この発表で提案されている漸進的型付けは、厳密な型の一致を要求する静的型付けで扱えないものに対し動的型付けを適用していくという手法を採用しています。発表者はプロトタイプの実装をGradualizerという名前で公開しています。

GradualizerとDialyzer、どちらの手法も厳格な静的片付けだけでは解決できない問題に対しての解法を示すという目的は同じですが、得られる結果はまったく違います。ErlangやElixirではプロセス間メッセージに型を適用することは現実的でないという問題もあるため、今後も現状同様に型付けを補助的情報として使いながらプログラム上の間違いを減らす手法を追求していくだろうと力武は予想します。その意味でGradualizerはDialyzerとは違った型宣言の活用を行うツールとして意義があるといえるでしょう。

また今年はOpen Source Erlang 20周年ということもあり、Erlang/OTPのセキュリティ関連モジュールの開発に携わってきたIngela Anderton AndinによるErlang/OTPの歴史を振り返る発表や、Miriam Penaによる過去Erlang/OTPやElixirの開発にかかわった女性達を紹介するクロージングキーノートなど、コミュニティの側面に光を当てる発表も目立ちました。

Erlang/OTPを組み込みに応用したGRiSPボード

力武はカンファレンス開催前にErlang/OTPを直接立ち上げることのできる組み込みボードGRiSPのハンズオンチュートリアルに参加しました。GRiSPはAtmel社のSAM V71というARM Cortex-M7ベースのCPUで動作し、Digilent社のPmodモジュールに準拠した各種入出力ボードを利用できます。ハンズオンでは、GitHubに公開されている手順に従い、rebar3_grispを使って開発環境を構築し、シリアルポートでの動作確認と、WiFiを通じたBEAM仮想マシン間の分散Erlangメッセージングを使った動作確認を行いました。ハンズオンはGRiSPを作った会社の創始者Peer StrizingerとエンジニアのAdam Lindbergによって行われ、力武もリアルタイムOSのRTEMSの介在だけで動くGRiSP上のErlangシステムに対して、リモートのMac上で動くErlangシェルからBEAM仮想マシン間の制御ができることを確認しました。

組み込みへのErlang/OTPやElixirの応用は2010年代前半から行われており、Nerves ProjectといったRaspberry PiやBeaglebone Blackなどを対象にしたElixir実行環境の開発が進められています。GRiSPはボードから開発しているという面でNervesとは違ったアプローチを取っていますが、その分システム資源の消費も軽く、並行処理の得意なErlang/OTPから直接各種装置を制御できるという特徴は、今後Erlang/OTP関連技術の応用分野を広げていく上で大きな意義があると感じました。

おわりに

力武が2008年に初めてErlang/OTPに触れてからすでに10年が経過しました。この間に、Web向けにより洗練された言語であるElixirの出現、Nintendo Switch向けの大規模配信システムNPNS(リンクは時雨堂のV氏による解説)など、各種大規模メッセージングシステムでErlang/OTPやElixirが有効であることは十分証明されたように思います。

一方、Erlang/OTPやElixirが得意とする並行処理プログラミングの利点は、まだ世の中に十分理解が浸透しているとはいえない状況です。今回Code BEAM STOに参加して感じたのは、他の言語などのコミュニティへも積極的にアプローチして、Erlang/OTPやElixirの利点を知ってもらう活動が必要ということでした。このことは会議2日目のキーノートだったOsa GaiusによるErlangやElixirの言語的系譜を考察する発表でも強調されていました。

力武の所感としては、Erlang/OTPやElixirの技術を極めていくことは意義あることですが、そろそろErlang/OTPやElixir「で」何をするのか、どう使えばいいのか、どのように応用していくのかを考えていく必要があるというのを改めて感じました。


【PR】パートナー積極採用中!

ペパボ研究所では、新しいパートナーを求めています。詳細については、当研究所のトップページをご覧ください。