「桁違いの性能がヤバい!
ベガコーポレーションR&Dチームが実証した、Elixirの圧倒的な可能性」
家具に特化した通信販売を主軸とする、株式会社ベガコーポレーション。自主企画商品や低価格商品が強み。EC事業で培った経験とノウハウを基に、海外への進出にも挑戦し続ける業界のリーディングカンパニー。
2016年に上場を果たし、Yahoo!ショッピングや楽天市場からも数多くの賞を受賞するベガコーポレーションのシステムを支えている、情報システム部 R&Dグループの3名(宮末さん、本田さん、主計さん)にお話を伺いました。
――普段の業務内容を教えてください。
宮末:R&Dを行うグループの責任者をしています。新しい技術を追いかけたり、論文などの学術的な研究内容を覗きながら、その内容をどうやってビジネスに活かしていくか、という提案をテーマに活動しています。
本田:宮末さんの下で、今後のサービスやビジネスで使っていけそうな技術を検証したり、プロトタイピングをやったり…そういったR&Dらしいことを日々やっています。将来的に使える技術の研究が、主な仕事です。
(写真左から宮末さん、本田さん、主計さん)
主計:R&Dの中でも、主にモバイル部分を担当しています。Swiftでクライアントアプリを開発することがメインです。
――Elixirを知ったきっかけは何でしたか?
本田:普段、「プロダクトを作りましょう!」となったとき、サーバーレスで作っていますが、最近はステートフルなサーバーサイドの必要性も増えてきました。
これまで会社的にはRuby on Railsがメインになっていたのですが、ECは市場規模も大きくなりつつあったので、今後アクセスが増えることを見込み、それでも耐えられる基盤を考えていきたいよね、という話をしていました。
「Rails以外で何にしよう?」という話をしていた中で、fukuoka.exの存在と、Elixirが福岡で活発なことがきっかけとなり、「Elixirを試してみようか」となりました。
その後、既にElixirを導入しているカラビナのゆじかわさんと食事をする機会があり、「Elixirを触ってみたい」とお話をしたところ、その日のうちに、fukuoka.exの森さんから連絡がきました(笑)。それが5月くらいのことです。
宮末:Elixirは、処理速度が速いと聞いてはいました。そこで、ベンチマークがてら、負荷テストのために一通り動くAPIを書いてもらい、テストをしてみたところ、「うーん…なんか、これ…数値、間違ってるのかな?なんか明らかに桁がヤバイぜ…」となりまして。
本田:結果が良すぎて、自分の書いたプログラムを疑いました。そんなバカな!って(笑)
宮末:今までに無いスペックの捌け方をしていたので、これは計測ミスか、APIが空振りなんだろう、と最初は勘違いする程でした。ここまでの圧倒的な性能なら、本格的に実務に落としていこうか、となりました。
――実務の中の、どういった場面でElixirの利用を考えていますか?
宮末:まずは、新しいプロダクトのサーバーAPI開発で、Elixirを活用しようと考えています。また、既存のプロダクトも定期的にリプレースのタイミングはあるので、そのタイミングで置き換えていくことも検討しています。
本田:現在はR&Dで、Elixirを使用していくための課題点の洗い出しや、知見を貯めている段階です。
主計:サーバサイドは、2人が言う通り良い感じですが、クライアントアプリとの接続については、これから検証開始となります。
宮末:うちは、100%自社サービスなので、R&Dで検証した知見が順次、プロダクト開発側に反映されていくため、次のサイクルでElixirのAPIが採用される可能性が出てきます。
――実際にElixirで開発してみた感触や課題を教えていただけますか?
宮本:ここまでお話した通り、Elixirの処理速度は桁が違う点が、大きなメリットです。また、安定性であったり、サーバメンテナンスの費用も下げることができる、という点も期待できます。
本田:私自身、関数型言語を触っていたというバックグラウンドもあり、言語としてのElixir自体は、キャッチアップしやすく、凄く使いやすいです。
ただ、ライブラリが成熟し切ってはいない部分があると感じています。
周辺のライブラリであったり、Elixirのコミュニティがもっと大きくなることが、ここから発展していく上で必要であり、今後使用する上での課題だな、と思います。
今、自分がそこの不足に苦しんでいるので(笑)。
宮末:某クラウドプラットフォームさんの公式SDKが無かったりとか、ありますね。
本田:足りない部分は自分で書いてカバーしている、というのが現状です。
宮末:オープンソースが増えていくと、もっともっと使いやすくなるかな、と。
本田:現状のライブラリ数で言えば、決して少ない訳では無いです。ベースになっているErlang自体は、通信でずっと使用されていたこともあり、データの暗号化のように標準で提供されているライブラリを使えばいい、という場面はかなり多いので。
今成長中の、新し目のWebサービスとの連携という面でライブラリの不足は確かにありますが、言語機能としては問題は無いと思います。
Elixir人口は、まだあまり多くないですが、利用が広がってきている今ならコミュニティの中でお互い連携をとって機能拡充はできると思います。入門用のElixirの本などはあるので、基本的な文法の勉強はできるんですが、もう少し実践に近い形の情報を探そうと思ったら、ほぼ英語文献です。
情報を探そうとすると、fukuoka.exの人たちが書いたQiita Advent Calendarの記事が上がってきたり、ということも多々あります(笑)。調査していると、だいたい見覚えのあるアイコンの人が書いた記事にヒットして…日本語情報は、ほぼそんな感じです(笑)。
加えて、スタイルガイド以外の「こういう処理を書くときは、こう書いたほうがいいよ」等の情報が無いことも、今後の課題ですね。
「本当にこの書き方でいいんだろうか?」という疑問を持ちながら書いている現状です。今後、実践的なプロダクトの書き方の参考が増えることを期待しています。
――それでは今度は、Elixirの魅力を教えてください。
本田:Elixirは元々は通信用ではありますが、世の中のニーズが大量アクセスのWebや、データ処理といったElixirが得意とするところと合致していて、これからこういった分野での利用にちょうど良いんじゃないかと思います。徐々に注目度が上がっているのも、そういう背景があると思います。
宮末:各サービスが、ユーザビリティに重点を置くようになり、触っていて遅いとイラっとするじゃないですか。それを解消するには、やはり速くないといけない。そこで処理速度のレベルが高いElixirの需要が高まっています。
本田:インターネットが普及して、アクセスが増えたり、処理が必要なデータがかなり多くなっています。そういった中で、Elixirの特性はかなり有利ですね。
宮末:弊社が主軸とするECは特に、1つ1つの動作が遅いと、お客さんは離れていってしまうため、そこはすごく重要なポイントです。
「0.01秒、速くするには、どうすればいいか?」を考えているところに、Elixirのような、そもそも桁が違うレベルの処理能力を持つ言語が出てくると、もう使うしか無い、となりますね。Elixirは、ものすごく有用です。
本田:「根本的な設計仕様が変わりそう」という位、性能が凄いです。結果が良すぎて、自分のプログラムミスを疑ってコードを2〜3回、見直したぐらいですから(笑)。それが間違いで無いと分かったあの時は、かなりテンション上がりましたね。
宮末:まじ!?これミスってない!?データ全部入って無いんじゃない!?とか(笑)。今までの常識からいくと、この速さは無いな、という位の速度です。
本田:プログラミングの側面では、Elixirで書くコードは非常に短く、今まで如何に無駄な抽象化を挟んでいたのかを実感しました。クラスを使わざるを得ないが故の不要な抽象化が入っていて、コードが長くなっていたんだろうな、というのは実感としてあります。
抽象化がいらない、とまでは言いませんが、不要な抽象化が大幅に省ける分Elixirのコードは短くなります。そうやって短くかかれたElixirのコードは、シンプルで読みやすいな、と思います。
宮末:他の人でも書けるか、という点ではどうだろう?
本田:個人的には、関数型言語の中では、一番、簡単だと思います!関数型界隈の方は、割と学術的な話をしたがるんですが、今のところ、Elixirのコミュニティだと、そういったことが無いので、入りやすいです。
宮末:プログラマが使用しやすいレイヤーまで関数型言語が降りてきた、って感じ?
本田:そうですね。本当に実用的な言語だと思います。
Erlang好きだけど、Rubyのように文法を書きやすくしたい!というJoseの発想は正しいですよね。
――最後に一言!
宮本:ベガコーポレーションでは、Elixirに触れてみたい!というエンジニアを募集しています!
チームも分け隔てなく、のびのびとした環境の中で作業ができます。
本田:私たちR&Dの仕事は、Elixirに限らず、新技術に突入していく仕事ですので、予期せぬことが起こったり、地雷を踏むことも多々あります。
主計:モバイルでもそこは同様ですね。
本田:それでもプログラムが完成すると、キツかったことも忘れてしまうほどの達成感があります。めげずに柔軟に対応していける方と、一緒にお仕事をしたいです!