「今、Elixirが熱い!Fusicをリードする若手が語るElixirの魅力・メリット」
株式会社Fusicは、テクノロジーコンサルティング・ソフトウェア開発・クラウドインフラ構築などのIT関連サービスを中心に事業を展開しています。
顧客の幅は広く、抱えている問題も様々。顧客とのコミュニケーションを大切にしながら、Fusicの強みである高い技術力と提案力をもって、顧客の問題解決を第一に考えたシステムを構築しています。
今回は「Elixirで仕事をするのは夢がある!」と語る、技術開発部門の精力的な若手エンジニア5名にお話を伺いました。
(写真左上から吉武さん、金子さん、古賀さん、手前左から清家さん、小原さん)
――Elixirを知ったきっかけは何でしたか?
古賀:弊社の会議室をコミュニティのイベント会場として利用していただいた際に、fukuoka.exの森さんと知り合いました。
いろんなイベントを経て、Elixirに興味を持ったのですが、一番大きかったきっかけは、量子コンピュータの勉強会で、森さんがElixir製の量子コンピュータシミュレータのLTをしていたときですね。「この言語イケてる!」と感じました。
吉武:私や清家は、チームの中では、Elixir後発組なんですが、古賀や小原が「Elixirがいい!」とゴリ押ししてきた(笑)のがきっかけです。
清家:2人とも若手の中で勢いがあり、ちゃんと考えられる社員ですので、じゃぁ自分たちもやってみようか、と。
少し前に金子が、GoからElixirに置き換える、というタスクを、技術顧問で参画された森さん支援の元で実施する様を見て、Elixirのdoctestを使った、テストとロジック開発を並行するTDD(Test Driven Development)の開発スタイルと、「既存コードをより良い設計のコードに変えていく」、この流れが良さそうだな、と感じました。
その他にも、Elixirのメリットを聞いていたので、Elixirを触ってみたい、自分のアプリに置き換えてみたい、というモチベーションが生まれました。現在、既存PHPアプリケーションを全面的にElixirに置き換えている段階で、今後どこかで発表しようと考えています。
古賀:言語仕様的なところがElixirはいいですよねぇ〜。
清家:…というのを、やはり若手がすごく推してくるんですよ(笑)。
特に小原は、色んな言語を触っているんですが、その中でも「自分はElixirをやっていく」と言っていて。彼とは、「Goいいよね〜」という話を以前していたんですが、そんな彼がElixirをやりたいと言っているので、きっとElixirには何か良いものがあるのだろう、と思い、Elixirを覚えたい。
少なくとも自分で判断ができるところまでもっていきたい、と思っています。
――実際に使用して感じたElixirの魅力を教えてください。
小原:僕はまず、ElixirがErlangVM上で動いているところに魅力を感じました。
Erlangという言語自体が、昔の電話交換機で使われていた言語でした。特徴として落ちないシステム、1つのプロセスを小さく動かすのが得意だったりします。そんなErlangVM上で動くのと、Erlangより書きやすくて馴染みやすい。
実際にElixirで書いてみると、すごく楽しいです。
今まで書いてきた言語と書き方が全然違うから、学習コストはそれなりにありますが、慣れてくるとこう書くとすごく短くなる、こう書けば読みやすくなるなどの発見もあったりして。GoとElixirで実際に同じ処理を書いたときに、Elixirの方がコード量が圧倒的に短く、読みやすくなりましたね。そういったところもElixirの魅力の一つですかね。
古賀:僕はずっとPHPを使用していました。「オブジェクト指向言語」と「関数型言語」では、コードの書き方が根本的に違いますが、関数型言語の方がより直感的でした。
僕はまだ2年目で、いろんな言語をマスターしている訳ではないですが、だからこそ逆に、エンジニアリングの経験が少ない人でも、「とっつきやすくて直感的に書ける」という魅力をすぐに実感してもらえる、と感じますね。
金子:僕は、実際に少しだけ仕事でやってみて、Elixirは、JavaやPHPと比べてテストコードが書きやすいと感じました。
なぜそう感じたのか、うまく言語化できない部分があるのですが…
自然とテストがしやすくなっている気がしています。
吉武:そこは、doctestが使えるのでテストコードが書きやすいんじゃないかな? あと、おそらく、古賀が言っていた「直感的に書ける」というところがポイントですね。 だから金子もTDDをやりながら、直感的にテストコードをイメージしやすいのではないかな、と。
私はテストをすることが専門なので、仕事上ではコードをほぼ書いていません。基本的には、できたものをテストする、という仕事です。
そんな私自身が「Elixirがいい!」と感じた部分は、やはりdoctestです。
doctestのない言語だと、いざテストコードを書こうとしたときに、ファイルが分かれてしまったりすので、割と面倒臭そうなイメージがあるんです。
それと比べて、コードを書いているところにそのままテストコードを書いて、すぐにテスト実行できるのがすごく簡単で、いいな〜と感じました。
doctestが使えるElixirでTDDを行うと、テストコードも「直感的に書きやすく」なり、「つくる」ことに集中できる、というのがElixirの特徴なんじゃないかな、という気がしています。
金子:それが言いたかったんです(笑)。
通常、ソースコードとテストコードは別ファイルになっていることが多いです。
開発中にファイルを行き来するので、ついやらなくなってしまうとか、更新を忘れてしまう、というのがあるんですが、それを一箇所にまとめておける、というのがElixirの1個の特徴としてあります。
それで、より使いやすくなってるんじゃないかな、というのはあります。
古賀:あと、書いたdoctestが、そのままドキュメント化されるのも魅力的ですよね。
書いたテストが、関数リファレンスになって、カンタンに公開できる…みたいな流れがカッチリしているので、他の人が作ったライブラリも同じフォーマットで読むことができる。
このサイクルがあるお陰で、プロダクト開発だけで無く、OSS活動やOSSコミュニティ自体も支えられている感触があり、全体的にまとまりがあるな、という感じがしていて、そこがまた魅力かな、と思っています。
――Elixirを今後どのように活用していきたいですか?
古賀:今まさに、清家や吉武と同じチームでプロダクトを作ろうとしていて、Elixirの魅力として、「データの加工が得意」とか、「他のデータを受け取って、違う形にして返す」というのが得意ということがあるので、アクセスログなど、弊社が運用するシステムのログを貯める基盤を作ろうと考えています。
様々なシステムが、どんどん立ち上がって納品されていくので、統一したログ収集基盤を構築したい。
Elixirには信頼性というか、落ちにくいというメリットがあるので、まさにマッチしていると思います。
そこで、社内でプロダクトを作っていきたい、という思いがあり、ちょうど今動き始めた、というところです。
吉武:今日のお昼、ちょうどその夢を、チームみんなで語り合っていました(笑)。
清家:一般的にある必要なデータであったり、欲しいデータを集めて、Fusic全体で一つのものを作ろう、といった感じです。
それに近い領域のソフトウェアは、一応、出回ってはいるんですが、それを「Elixirのメリットを最大限に活かして、自分たちで作りたい」というところに高いモチベーションがあって、目標にしたいと考えています。
小原:僕は、とりあえず最初は社内で使ってみて、「Elixirでこういったシステムが作れる」というのを、色んな人に知ってもらいたい。 そして、Fusicから新しいサービスをElixirで書きたいと考えています。
吉武:自分はテストコードの領域で、Elixirを使いたいと考えています。
それには理由が2つあり、まずは純粋にElixirを書くのが楽しそう、ということ。
もう1つは、Elixirは、TDDと凄くマッチしていそうな言語だから、ということです。 私の仲間には、テストはやるけどプログラム書かない人、そもそもプログラムを書いたことない人もいます。
そうした人達にも、「開発者側は、こういうテストをやったりしているんだ」ということを知ってもらいたくて、「プログラム書かないテストエンジニア向けのTDDワークショップ」とか、Elixirなら凄くやりやすいんじゃないかな、と思っています。
ただ、私はそもそもプログラムを書くスキルが低いので…(笑) まずは、自分もElixirをもっと書けるようになりたい、と思っています。
――最後に一言!
古賀:福岡のElixirはとても熱いです!!
fukuoka.exが定期的に開催するイベントを通じた、エンジニア同士のコミュニケーションも活発だし、弊社に限らず、福岡でElixirを導入する企業も着々と増え続けています。
少し前、東京のElixirカンファレンスに金子と参加したのですが、そこでも「福岡は最近、色々とやっているね!」と言われました。
fukuoka.ex以外の福岡コミュニティでも、ElixirのLTや登壇を見るようになりました。
せっかく福岡にいるなら、「このビッグウェーブに乗るしかない」って感じますね。