SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

イベントレポート

「Elixir Conf Japan 2017」全セッションレポート ~ 日本での活用事例が増えているElixir/Erlang


「Phoenixで作るスケーラブルなリアルタイムゲームサーバー」

株式会社ミクシィ/XFLAG STUDIO 古城秀隆さん
株式会社ミクシィ/XFLAG STUDIO 古城秀隆さん

 株式会社ミクシィ/XFLAG STUDIO古城秀隆さんによる「Phoenixで作るスケーラブルなリアルタイムゲームサーバー」という発表です。XFLAG STUDIOでは2015年からElixirを徐々に利用しはじめて、現在プロダクション環境でもいくつか利用されているそうです。

 さらに次回リリースとなるゲーム開発では、モバイルゲームサーバーとして必要な以下のような特徴を備えているために、Elixir製のWebアプリケーションフレームワークであるPhoenixを用いたアプリケーション開発を採用しているそうです。

  • 突発的なリクエストに対応できる
  • 双方向な通信を取り扱える
  • 継続的デプロイが可能
  • 学習コストが高すぎない

 具体的には、例えばイベント開始直後の突発的なアクセスの増加に耐えるため、1秒で最大限1000リクエストを処理できるサーバーを持っている場合、1秒あたり2000リクエストが来た場合に2秒かかってかまわないので、線形に(2倍のアクセスが来たら2倍の時間で)異常なくレスポンスを返したい。

 最近のゲームではサーバーからクライアントへ素早く伝えたいことが多いため、クライアントがサーバーにリクエストして、レスポンスを取得する従来の方式だけでなく、サーバーとクライアントを常に接続した状態におき、何かあればサーバーからクライアントへすぐに通知できるようにしたい。しかしモバイルクライアントは移動しながら通信を行うため、ネットワークは頻繁に、かつ様々な理由で切断される。そのときにサーバー側に残った接続の後始末や、クライアントとの再接続を容易に行いたい。

 Rubyエンジニアの多い環境では、RubyとElixirのシンタックスが似ていることは触ってみる心理的な障壁を下げることに寄与し、学習のきっかけが作りやすいなどを挙げられていました。

 次に、現在のAPIサーバーの構成と設計のときに考えたことや、工夫しているところを紹介されました。クライアントとサーバーのやりとりは定義ファイルからC#とElixirのコードを自動生成しているそうです。

 最後に、シンプルな構成に必要なツールは揃いつつあり、Erlang製のライブラリはElixirから簡単に利用できるため、Erlangに同梱されている便利な標準ライブラリであるOTPをElixirから利用すると、やりたいことの多くがすぐ解決できる。なにより書いていて楽しめる言語なので、みんなでElixirを盛り上げていければ嬉しいという言葉でまとめられました。

「Elixirから始める関数型言語」

クロードテック株式会社 ペレスダニエルさん
クロードテック株式会社 ペレスダニエルさん

 クロードテック株式会社 ペレスダニエルさんによる「Elixirから始める関数型言語」という発表です。 ダニエルさんはElixirを1年くらいプロダクションで使っているそうです。

 今回は、プログラミングの経験はあるが関数型言語には馴染んでいない方へ、関数型言語とはどんなものなのか、そしてElixirは関数型言語のどんな特徴を持つのかということについてお話いただきました。

 プログラミングでは、ある問題を解決するために、その問題をどう捉えるかということをパラダイムと呼んでいます。これまでさまざまなパラダイムが提唱されており、例えば命令型、オブジェクト指向、プロセス指向などで、その中に関数型もあります。これらのパラダイムは排他的ではない部分も多く、一つのプログラミング言語の中に複数のパラダイムが取り入れられることもあります。例えば関数型を標榜していないプログラミング言語でも、関数型プログラミングの特徴である高階関数を用いた問題解決が取り入れられているものが多いです。今回は命令型というパラダイムと、関数型というパラダイムを対比させて、関数型の特徴や、メリット/デメリットの説明がありました。

 さて、そのなかでElixirが持っている関数型言語の特徴は以下があるそうです。

  • パターンマッチング
  • 再帰
  • 高階関数
  • イミュータブルなデータ構造

 現実世界でよくある、状態を持った方が解きやすい問題を取り扱うためにはElixirではAgentというライブラリを用意しており、これを使うと状態を上手に扱うことができるそうです。発表の最後に、Agentでは使いやすいようにユーザーから隠されている、状態を持つための仕組みの概要をダニエルさんはspawnとreceiveというElixirの基本的な関数を用いて説明しました。

次のページ
「Elixir導入提案」

この記事は参考になりましたか?

イベントレポート連載記事一覧

もっと読む

この記事の著者

北村 大助|DIGGLE株式会社 Devチーム Director(キタムラ ダイスケ)

 DIGGLE株式会社に勤務する開発者。 インターネット上では「にく(niku)」という名前で活動していることもあります。 手に馴染んでいる言語はRuby。 組織が「儲かる」と組織の中の人が「楽しい」を両立させて仕事を進めていくのが好き。 地元である北海道のスポーツチーム、特に北海道コンサドーレ札幌...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10071 2017/04/25 16:37

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー