最近気になっているプログラミング言語の1つが Julia です:
Julia_prog_language.svg



高速で、使いやすくて(これは意見が分かれると思うけど、確かに if elseif などのコードを短く書けることは事実)、最近流行りの Python の関数を呼び出して使えるので機械学習ライブラリが豊富に使える、とのこと。インデントを使ったコード記述も Python っぽくて、なかなかに魅力を感じます。

なお高速性については公式サイトにベンチマークの比較が載っていたのでここにも載せておきます。このベンチマークによるとたしかに C 並のパフォーマンスを叩き出していて、Java や JavaScript、Python などよりは速そう・・・:
2018060601


Julia のインストール方法は様々用意されていますが、最新バージョンのインストールは公式サイトからの command line version ダウンロードが確実なようです(Ubuntu の場合、 $ sudo apt-get install julia でも導入できましたがバージョンが古く、後述のウェブフレームワークが使えなかったりする問題がありました):
2018060602


↑上記表から自分の環境にあったものを選択してダウンロード&インストールします。自分は Ubuntu 環境で試したので、"Generic Linux Binaries for x86 - 64-bit" から tar.gz ファイルをダウンロードし、展開してパスを通しました:
$ wget https://julialang-s3.julialang.org/bin/linux/x64/0.6/julia-0.6.3-linux-x86_64.tar.gz
$ tar xzvf julia-0.6.3-linux-x86_64.tar.gz
$ echo export PATH="$PATH:~/julia-d55cadc350/bin" >> ~/.bashrc
$ source ~/.bashrc
$ julia -v
julia version 0.6.3

これで Julia は使えるようになりました。ついでに Julia のウェブフレームワークである Genie も導入してしまいましょう:
2018060604


まずは対話モードで Julia を起動します:
$ julia

2018060603


julia> というプロンプトが表示されれば、Julia を対話モードで起動できました。ここに Julia の構文を入力して実行することもできますが、今回はこの対話モードを使って Genie を導入していきます。

まず、最初の一回目だけはパッケージの更新を行っておきます:
julia> Pkg.update()

次に Genie の前提動作に必要な Flex パッケージを導入します:
julia> Pkg.add( "Flex" )

そして改めて Genie を以下のコマンドで導入します:
julia> Pkg.clone( "https://github.com/essenciary/Genie.jl" )

ここまでの作業で Genie が導入できました! では実際に Genie を使ってウェブアプリケーションを作ってみます。まずはこの対話モードのまま Genie を有効にします:
julia> using Genie

そしてアプリケーション名(以下では "my_genie")を指定して Genie アプリケーションを作成します:
julia> Genie.REPL.new_app( "my_genie" );

このコマンドを実行して成功すると、プロンプトが genie> に変わり、julia コマンドを実行した時のフォルダに my_genie フォルダが作られ、その中に Genie フレームワークに必要な一通りのファイルやコマンドが生成されます:
2018060607


そのファイルを確認する前にまず一回このまま実行してみます。プロンプトから以下のように入力してアプリケーションサーバーを起動します:
genie> AppServer.start()

これで 8000 番ポートでアプリケーションが起動します。ウェブブラウザからこのホストの 8000 番ポートを指定して HTTP リクエストし、ここまでの作業が成功してデフォルトの初期画面が表示されることを確認します:
2018060605


とりあえず動いているようです。では最後にちょっとしたカスタマイズを加えます。そのためには一度コマンドラインに戻る必要があるため、Genie と Julia の対話モードを終了します。いずれも quit() で終了します(Genie と Julia 両方の対話モードを終了するので2度実行する必要があります):
genie> quit()

julia> quit()

$

元のプロンプトに戻ったら Genie が生成したファイルを改良します。元のフォルダから my_genie/config/routes.jl ファイルをエディタで開き、以下の赤字部分を追加します:
using Router

route("/") do
  Router.serve_static_file("/welcome.html")
end

route("/hello") do
  "Hello Julia - Welcome to Genie!"
end

ルート( "/" )にアクセスした場合は上記の初期画面(/welcome.html)が表示されるよう設定されていますが、その下に "/hello" にアクセスがあった場合の処理を加えました。この例では "Hello Julia - Welcome to Genie!" という文字列が表示されるようにしています。

改めてカスタマイズしたアプリケーションを実行します。アプリケーションフォルダ(my_genie/)に移動して、今度は対話モードではなく直接アプリケーションサーバーを起動します:
$ cd my_genie
$ bin/server

2018060608


そしてウェブブラウザで、今度は /hello パスを指定して読み込みます。期待通りのメッセージが表示されれば成功です:
2018060606


テンプレートエンジンとか、ファイルアップロードをどう処理するかとか、データベース連携とか、まだ調べないといけないことはあるけど、ウェブフレームワークとしては使えそうです。


いくつか heroku 用の Julia ビルドパックが見つかる(Julia のバージョンは低そうだけど)ので、次はこいつを IBM Cloud 上で動かすことに挑戦予定です。