(Photo by: mjtmail (tiggy))
このような方におススメ
- ここ数年で新しく登場した言語をざっとおさらいしたい。
- 次に勉強するプログラミング言語を探したい。
ここ数年で登場して注目を浴びている、使われ始めているオープンソースなプログラミング言語の特集です。それぞれ得意とする領域をもっており今はまだメジャーではありませんが5年後はどうなっているか分からない魅力があります。それでは紹介を始めて行きます。
Elixir
- 公式URL: http://elixir-lang.org/
- ライセンス: Apache License
- 実行環境: Erlang仮想環境上(BEAM)
2014年ぐらいから広く注目を集めはじめた言語です。ErlangVM上で動作するため平行処理に強く耐障害性高いというErlangの特徴を備えています。大規模ウェブアプリケーションやソーシャルゲームで求められる大量のリクエストを上手に捌く用途に向いています。
Elixirのキラーアプリケーションとして期待されるのがPhoenix Framework(URL:http://www.phoenixframework.org/)です。Elixirは関数型言語での構文がRubyに近く、DSLが得意な事もあり、Rails風に設計されているPhoenixのサンプルはRails経験者にとても分かり易いです。
実行環境の信頼性は十分にあるため、Elixir自身の信頼性が向上すればリアルタイム性が高いウェブアプリ用途での採用が増える可能性があります。さらに数年かけてライブラリが充実してくればRailsの代替えになり得る可能性も十分にありそうです。
Go(golang)
- 公式URL: http://golang.org/
- ライセンス: BSD
- 実行環境: 独自/GC
Google社が開発した汎用プログラミング言語です。タイプセーフでメモリセーフな静的言語でコンパイルが必要になります。以後GO言語をgolangと表記します。
golangにはGoroutineというモデルがあり、Goroutineの役割は「同一アドレス空間内で他のGoroutine同士を並列実行すること」です。平行処理をする上で煩雑になるプロセスとスレッドとメモリ管理、I/Oブロックなどの問題をGoroutineが解決します。このGoroutineによってElixirの実行環境ErlangVMのように並行処理が得意で大量のリクエストを上手く捌くのに向いています。
ウェブアプリケーション向けのフレームワークにはRails風のRevel(http://revel.github.io/)、Martini(https://github.com/go-martini/martini)などがあります。
堅牢なシンプルさを備えそして速いと評価が高く、汎用性な用途で利用されています。新しく登場したプログラミング言語ですが、あまり目新しさを感じない素朴で実直な印象です。
Scala
- 公式URL: http://www.scala-lang.org/
- ライセンス: BSD
- 実行環境: JavaVM
Scalaが振興なのか?と言われるとちょっと言葉を濁したくなりますがここでは新興言語として紹介します。ScalaはJavaVM上で動作する静的型付け関数型言語です。
2009年にTwitterがバックエンドをRubyからScalaに切り替えたのでニュースとなりました。他にもSNSのLinkedIn、Tumblrが利用しています。PHP/Rubyで開発されていた大規模システムのリプレイに使われる事が多く、日本国内では広告アドテクでの採用実績があります。
ウェブアプリケーション向けのフレームワークにはPlay Framework(https://www.playframework.com/)、Rails風のLift(http://liftweb.net/)などがあります。
JavaVMの特徴を活かした大規模運用が可能で、ハイパフォーマンス、採用難易度がそれほど高くない、Javaの既存資産が利用できアプリケーションサーバー回りもJavaで整備された環境をそのまま利用できます。
Dart
- 公式URL: https://www.dartlang.org/
- ライセンス: BSD
- 実行環境: dart2js/ウェブブラウザ
Google社が開発したウェブアプリケーション向けプログラミング言語で、JavaScriptの欠点を補い代替えする目的で開発されています。現状、ウェブブラウザにDart実行環境がないためdart2jsでJavaScriptにコンパイルされ実行されます。
2015/3月にDartVMについてアナウンスがあり、同じGoogle社のウェブブラウザChromeにDartVMは搭載されず、他ブラウザでの動作を強化するためJavaScriptへのコンパイル強化に注力する決定がされました。これによってDartはCoffeeScriptのようにJavaScriptを生成する中間言語の位置に固定されました。そのため開発効率の向上や保守メンテの強化のためにDartを採用する事はあるかも知れませんが、Dartでしか出来ない事のために採用される可能性はとても低くなりました。
さらに2015年6月にウェブ用新バイナリフォーマット「WebAssembly」の計画と主要ブラウザを開発しているグーグル、マイクロソフト、Mozillaの協力が発表されました。こうなるとブラウザ上でDartVMの存在が求められない可能性があるため、Dartを使った開発環境でDartVMが利用されるぐらいでJavaScriptの代替えとしてのDartの存在意義は風前の灯かも知れません。
Rust
- 公式URL: https://www.dartlang.org/
- ライセンス: MIT
- 実行環境: 独自/rustc
Rustは2015年5月にMozillaから正式版がリリースされたプログラミング言語です。golangやScalaなど新しく登場した人気プログラミング言語と同じ関数型の静的型付けです。
ウェブ目的で開発された言語としては珍しくポインタを利用できます。ヒープ/スタックの割り当てを意識でき、さらにインラインアセンブリをサポートしておりRustではC言語に近い事ができます。
ウェブアプリケーション向けのフレームワークにはIRON(http://ironframework.io/)があります。
ウェブアプリケーション開発ではメモリ管理やポイントを意識せずに利用できる言語が人気でした。暗黙的にウェブアプリケーション開発ではシステムレベルの設計がプログラマに求められない方が良いとされてきた側面もあります。しかしRustではウェブアプリケーション開発をハイレベルで行うためにはシステムレベルの設計が求められると言わんばかりにシステムレベルへの融通が効きます。
RubyやPerlやJavaを使ったウェブアプリケーション開発でC言語へのブリッジが面倒で非効率に感じたプログラマは多いと思います。RustはネイティブコードにコンパイルされるためC言語で書いてコンパイルされたオブジェクトファイルをそのまま利用できます。
まだ登場したばかりのプログラミング言語のためこれからどのように進化するか見えてきませんが、文字列の扱いは他ウェブアプリケーション開発で使われている言語と同じ用に分かり易い設計になっていますので、PHPやRubyやJavaを使ってパフォーマンスの心配をするぐらいなら最初からC/C++で開発すれば万事解決と言った潜在需要に答える事が出来る言語です。
要約・まとめ
5つほどウェブアプリケーションで利用される新興言語を紹介しました。人気ではScalaが抜けていて次にgolang、ElixirとDartはあまり注目されていません。Rustはこれからの評価になります。
GoogleトレンドのElixir/Dart/golang/Scala比較
Googleトレンドのgolang/Scala/Ruby/PHP比較
Elixir/DartをRuby/PHPに入れ替えて人気を見てみるとPHPと他3つで大きく差が付きました。
PHPはWordPressやJoomlaで使われているためプログラマ以外にも言語で検索するためGoogleトレンド上で人気なのは当然ですが、今回紹介した新興言語もキラーアプリケーション、キラーフレームワークがあるとシェアが伸びて行きますので今後登場するミドルウェアにも注目が集まります。
本ブログは、Git / Subversion のクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
開発の効率化をしたい!もっと便利なツールを使いたい!そんなお悩みをtracpathで解決!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments