>>10年後も職を失わない「求められる人材」になる

2018年に、誕生25周年を迎えた日本生まれのプログラミング言語「Ruby」。

英語でコードを書いているような、直感的で生産性の高い文法が最大の魅力。楽しくプログラミングができることから、スタートアップ企業のエンジニアやプログラミング初心者の間で圧倒的な支持を集めている言語です。高評価を受けるRubyの文法は、他のプログラミング言語にも強く影響を与えています。

文法のエッセンスを抽出した上で、Rubyには無い新たな要素を追加した新たなプログラミング言語も登場しています。それらの言語はRubyエンジニアには非常に馴染みやすく、かつスキルの幅を広げる意味で魅力的なものです。

今回はそんなRubyライクな言語を5つ紹介します！

Rubyの文法がわかれば、簡単なコードであればすぐに試し、実行する事ができます。気になる言語があればまずはインストールし、コードを書いてみてください。

そして、書いていて楽しい言語があれば、是非本格的なアプリケーション開発に向け、記事内で紹介している参考書籍を手に取ってみてください！

2018年4月9日更新：Goby開発者のStan Lo氏のRubykaigiでのプレゼンテーション「I quit my job to write my own language: Goby」のYoutube動画を、記事内に追加しました。

Elixir（エリクサー）

Ruby on Railsのコアメンバーが生み出した新言語

ElixirはErlangの文法をRubyライクで、分かりやすいものにアップデートしたプログラミング言語。





Elixirの文法はRubyに極めて近いため、Rubyエンジニアにとっては、他の言語を学ぶより学習コストが小さいです。ただしElixirで本格的な開発を行うには、Erlangの知識も必要になります。

Erlangはハイパフォーマンスでスケーラブルなアプリケーションの開発に用いられる機会が多く、落ちづらいシステムを作るのには最高の言語です。つまり大量のユーザーが長時間に渡って使用し続け、かつユーザー数の継続的な増加が見込まれるような高負荷なアプリケーションの開発に適しています。





日本ではドワンゴやLINEがサーバーサイドの開発に採用しています。また海外ではより積極的に採用されており、メッセージアプリ「WhatsApp」やeSports種目として有名な「League of Legends」のチャットシステムに使われています。

Erlangは1986年に登場し、1998年にオープンソースとなりました。大変古い言語であり、文法には古めかしさや使い勝手の悪い部分があるのも事実です。

独特の言語仕様の悪影響もあり、ベテランエンジニアが現役でコードを書き、若手が育ちづらい現状もあります。



そうした現状を受け、Erlangの長所はそのままに、評価の高いRubyの文法を取り入れた新言語として開発されたのがElixirです。開発者のJosé ValimはRuby on Railsのコアメンバーです。

Elixirは非常に完成度の高いプログラミング言語です。RubyやPython、PHPといった言語に比べると知名度は低いですが「落ちにくいWebアプリ」を開発するなら、Elixirは採用すべき言語の代表格になりつつあると言えます。

リアルタイムWebとの高い親和性

Elixirの最大の美点は、リアルタイムWebとの親和性の高さです。リアルタイムWebとはtwitterやfacebookのように、情報がリアルタイムに更新され、ユーザー同士が交流を行うことを指します。

こうしたWebアプリケーションは実行速度の高速性と安定的な稼働が必須の要件です。現在、Webアプリケーション開発のスタンダードとなっているRuby on Railsはスピーディーな開発ができる反面で、その重さが課題となっています。

そこでRuby on RailsのコアメンバーであるJosé Valimが開発した新言語であるElixirに注目が集まっているのです。

Erlangの仮想環境上で実行

ElixirはErlangの仮想環境上で実行される言語です。Erlangの関数の呼び出しも可能です。

Elixirのインストール方法

Elixirの公式ウェブサイトにインストール方法が解説されています。

・公式サイト

Mac OS Xの場合はHomebrewを最新版にした上で「brew install elixir」を実行すれば、インストール完了です。

Windowsの場合はインストーラーが用意されています。

Discordでメイン言語の1つとして採用

ElixirはRubyライクな文法の言語としては、最も普及が進んでいると言っても過言ではありません。

Elixirの採用事例として、最も先進的なものの1つがDiscordです。

Discordは端的に言うと「Webブラウザで軽量に動作する、SlackとSkypeのいいところ取りをしたVoIPアプリケーション」です。Slackのチャット機能に、ボイス通話機能を組み込んだものとイメージすると非常に分かりやすいです。

同じような通話機能を持つアプリには、Skypeが存在します。Skypeに比べると、Discordは遥かに軽量な上、Slackと同等の直感的で分かりやすいグループ管理機能を持ちます。また通話品質にも定評があり、Skypeから乗り換えるユーザーも少なくありません。

Discordではメッセージ配信などの裏側の処理を、Elixirで開発しています。

おすすめ書籍

Elixirについて日本語で書かれた書籍は非常に少ないのが現状です。

その中で、Dave Thomas氏の「プログラミングElixir」はElixirのバイブルと言っても過言では無い網羅性を誇っています。

Elixirの開発思想や「RubyとErlangの合いの子」とも言える文法の特徴を把握するには、最適な一冊です。

Crystal（クリスタル）

Rubyとの高い互換性

CrystalはRubyとの高い互換性を保ちつつ、高速な処理を可能としたコンパイラ言語です。

Cのように高速で、Rubyのように柔軟な言語と形容される機会が多い言語です。



Rubyとの互換性の高さは、Elixir以上であり「Rubyのコードがそのまま動く！」と一時は噂になったほどです。実際にCrystalでは、Rubyのコードが動作することもあります。

もちろん複雑なWebアプリケーションを、Rubyのコードをそのままペーストするだけで作る・・・のは不可能です。ですが、Rubyエンジニアであれば、Crystalを習得するのは容易です。

2018年3月時点でCrystalは「アルファ版」であり、言語仕様のアップデートが続いています。Crystalのコンパイラは既に完全にCrystalで書かれており、Webアプリケーション開発向けのフレームワークとして「amber」も公開されています。

アルファ版ということもありまだ大企業による導入事例は無く、ライブラリも充実しているとは言えないのが現状です。しかし「静的型付けを持つRuby」として今後本格的なアップデートが行われていくと見られ、要注目の言語です。

・公式ウェブサイト

・GitHub

静的型付けが行われる

Crystalの特徴は動的型付け言語であるRubyの文法を持ちながら、静的型付けが可能なことです。

静的型付けとは、そのプログラムが実行される前に全ての変数の型が決まっていることを指します。もっと分かりやすく、端的に言うならば「プログラムが実行される前に、コンパイルでエラーを洗い出せる」ことです。

動的型付け言語にはコンパイルという段階が存在せず、エラーの有無はプログラムの実行時に初めて確認されます。動的型付け言語のデメリットは、この実行時に「本当はコードに文法ミスが含まれているにも関わらず、見た目上は正しく動いてしまう」ケースがあることです。

一方、静的型付け言語ではコード内で全ての変数の型を宣言しておくのがルールです。そして書いたコードは、コンパイルを行います。コンパイルを行うことで、コードに含まれるエラーは実行前に洗い出されます。

つまりエラーの修正を経てコンパイルされ、完成したコードは非常に品質の高いものとなるのです。静的型付けを持つ言語の代表格は、Javaです。大企業のシステム開発など、開発スピード以上に安定的な動作が優先される案件ではこうした言語を使うのが望ましいです。

CrystalはRubyの分かりやすさと、静的型付け言語の安定性を併せ持つ言語になり得る存在なのです。

C言語、C++のライブラリの使用が可能

CrystalではC言語とC++のライブラリをよびだせるという特徴があります。

C言語とC++は共にコンパイラ言語であり、実行速度が高速なことで知られます。「主な処理は分かりやすい文法を持つCrystalで書きつつ、少しでも高速な処理を実現したい箇所はC言語のライブラリを使う」など、用途に応じて様々な活用ができます。

実行速度が高速

Crystalの処理は、Rubyに比べて非常に高速なことで知られます。

下記のブログによれば、フィボナッチ数を求める計算処理でRuby、Crystal、C言語の実行スピードを比較したところCrysalとC言語はほぼ変わらない速度であったとのことです。

・Ruby風の文法でかけるcrystalが面白そうだったので、ベンチマークしてみた

おすすめ書籍

Crystalはまだ発展途上の言語であり、残念ながら文法やサンプルコードがまとまった書籍は発刊されていないのが現状です。

そのため日本語でCrystalを学ぶには、日本語版のドキュメントを参照するのが最適です。

・プログラミング言語 Crystal

CoffeeScript（コーヒースクリプト）

JavaScriptをRubyライクに記述可能

CoffeeScriptはRubyライクな文法でコードが書けるJavaScriptです。Rubyの他、PythonやHaskellに影響を受けた文法が特徴です。



CoffeeScriptが一番最初に公開されたのは2009年。2010年12月に最初の安定版である1.0.0がリリースされました。Rubyライクな言語としては比較的長い歴史を持ち、Ruby on Railsでもサポートされるなど学習資料と開発環境が共に充実しています。

・公式ウェブサイト

コンパイルすると素のJavaScriptが生成される

CoffeeScriptは「AltJS」の1つとして公開以来、大きな注目と支持を集めてきた言語です。

AltJSとは、コンパイルすることでJavaScriptが生成される言語を指します。JavaScriptは非常に便利な言語で、用途が幅広く、複雑な環境構築も不要な反面「文法がいまいち整備されていない」「書きづらい」という声も大きな言語です。これにはブラウザだけで実行できるフロントエンドの言語がJavaScriptだけであるにも関わらず、Web業界の発展のスピードが著しく早く、JavaScriptに求められることが複雑化したという面もあります。

またJavaScriptはそもそもタイプ数が多く、コードが長くなりやすい言語でもあります。

つまり、JavaScriptはその重要性と汎用性にも関わらず、苦手とする人が多い言語なのです。そこで台頭したのが、JavaScriptよりも直感的にコーディングできるAltJSです。AltJSを書くにはJavaScriptの最低限のスキルは必要です。しかし開発の度に、毎回「素のJavaScriptを書く」必要は無いというのがAltJSを使うメリットです。

CoffeeScriptは数あるAltJSの中でもRubyやPythonに近い分かりやすい文法と、コンパイルで生成されるJavaScriptの綺麗さが長所です

RailsではAsset Pipelineによって自動的にコンパイル

一見、面倒にも思えるCoffeeScriptのコンパイルですが、Ruby on RailsではCoffeeScriptをサポート。Asset Pipelineという機能によって、自動的にコンパイルが行われます。

シンプルで、短いコードが書ける

var宣言が不要

JavaScriptが一部の開発者から敬遠される理由には、JavaScriptの文法ルールの面倒臭さがあります。

その1つがvar宣言です。varとはJavaScriptで使う変数を宣言する際に必要な命令です。

var number = 123;

上のように書くと、numberという変数に123を代入したことになります。この「var」がCoffeeScriptでは不要です。

文末のセミコロンが不要

var number = 123;

上のコードでは、文末にセミコロンがついています。JavaScriptでは文末のセミコロンが必須です。しかし、CoffeeScriptではこのセミコロンも不要です。

おすすめ書籍

計算プログラムや時計、ゲーム、botの制作などを通じ、CoffeeScriptを習得できるのが「つくって覚えるCoffeeScript入門」です。

プログラミングの初歩から解説するため、RubyやJavaScriptの未経験者でも安心して入門できます。

Opal（オパル）

RubyのコードからJavaScriptにコンパイル

Opalは100パーセントRubyで書かれたコードを、JavaScriptへと変換するコンパイラです。Opalを使うことで、RubyのコードをWebブラウザ上で実行できるのです。

厳密にはOpalは「プログラミング言語」というより、上にも書いたように「コンパイラ」です。OpalはRubyのプログラムのため、Opalの利用にはRubyのインストールが必須です。RubyはMacであれば、プリインストールされています。

Opalはgemを使うことで簡単にインストールできます。Opalのインストールは「gem install opal」のコマンドで可能です。

・GitHub

WebのフロントエンドをRubyで開発可能

OpalはRubyのコードをJavaScriptに変換することで、ブラウザ上でRubyを実行します。つまり一般的なエンジニアがJavaScriptで開発するフロントエンドのコードを、Rubyで書くことができるのです。DOM操作などJavaScriptでできることは、Opalを使えばRubyで書けます。

OpalをRuby on Railsで使用する際は、gemでインストールできます。gemfileに「gem ‘opal-rails’ 」と記載、bundle installを行います。また「gem ‘opal-jquery’」で、jQueryライクなライブラリも入れられます。

Reactも使用可能

OpalでReactを使えるフレームワークに「Hyperloop」があります。

Reactは、UIをコンポーネントと呼ばれる要素の組み合わせで構築。JSXと呼ばれる記法で、JavaScriptのコードの中にHTMLライクなコードを書きます。HTMLとjQueryの組み合わせでは後者が複雑化することが多いフロントエンドも、Reactを使えば分かりやすく、コードの再利用性が高い状態で開発できるのがメリットです。

そんなReactを、Rubyで使えるのが「Hyperloop」です。Hyperloopのセットアップは以下のコードです。

<head>

<!– React and JQuery –>

<script src=”https://unpkg.com/react@15/dist/react.min.js”></script>

<script src=”https://unpkg.com/react-dom@15/dist/react-dom.min.js”></script>

<script src=”https://code.jquery.com/jquery-2.1.4.min.js”></script> <!– Opal and Hyperloop –>

<script src=”https://rawgit.com/ruby-hyperloop/hyperloop-js/master/opal-compiler.min.js”></script>

<script src=”https://rawgit.com/ruby-hyperloop/hyperloop-js/master/hyperloop.min.js”></script>

</head> 出典：Hyperloop公式ウェブサイト

Hyperloopのセットアップが終わると、<script type=”text/ruby”>と指定するとRubyでコーディングが可能になります。

おすすめ書籍

日本語で書かれたOpalによるブラウザアプリケーション開発の解説書籍は、いまのところ「Pragmatic Opal Rubyで作るブラウザアプリケーション開発ガイド」のみです。

Opalの日本語資料はまだまだ数少なく、Rubyでのフロントエンド開発に興味がある方は必携です。

Goby（ゴービー）

100パーセントGO言語で実装された、Rubyライクな言語

Gobyは誕生したばかりの、Go実装によるRubyライクな言語です。GitHubのFirst Commitからまだ1年も経っておらず、バージョンは0.1.3。マイクロサービスの開発などに最適化された言語として開発が進められています。

・GitHub





Gobyの開発者・Stan lo氏のRubykaigiでのプレゼンテーション動画。

本格的な普及はこれから

Gobyは今回紹介した言語の中で、最も誕生から日が浅く、チュートリアルやドキュメントも未整備な状態が続いています。日本での普及もまだまだこれから。日本語資料の少なさは、日本の学習者にとってはやや不便なところです。

Rubyの文法を生かしつつ、Goのパッケージも使用できる言語として、今はまだ「カルト的」な注目を浴びている段階です。他のRubyライクな言語を超える人気を得ることになるのかは、これからの開発の進捗次第です。

まとめ

5つのRubyライクなプログラミング言語を紹介しました。

落ちにくいWebアプリを作るなら、Elixir。

高速かつ静的型付けがある言語を選ぶなら、Crystal。

AltJSで楽しくJavaScriptを書くなら、CoffeeScript。

100パーセントRubyでフロントエンドを開発するなら、Opal。

RubyとGoの合いの子に誰よりも早く触ってみたいなら、Goby。

いずれも個性に溢れた言語ばかり。そしてこれらの優れた言語が、いずれもRubyから影響を強く受けているというのは驚くべきことです。

Rubyエンジニアの方は、ぜひここで紹介した言語の中から気になるものをインストールしてみてください。

またプログラミング初心者の方は、まずはRubyのプログラミングを身につけてください。世界的に高く評価されるRubyの文法は、Elixirなど新世代の言語に引き継がれています。初心者にも覚えやすく、身につけておいて損はありません。