• トップ
  • ブログ一覧
  • 【Webフレームワーク編】Julia入門~高速な動的型付け言語~
  • 【Webフレームワーク編】Julia入門~高速な動的型付け言語~

    広告メディア事業部広告メディア事業部
    2020.11.03

    IT技術

    Webフレームワーク編~Juliaに入門してみよう~

    前回は、Julia の環境構築の方法や、文法などを紹介しました。

    【基礎編】Julia入門~高速な動的型付け言語~2020.10.27【基礎編】Julia入門~高速な動的型付け言語~「Julia」に入門してみよう!Julia は、Python に継ぐ高速な動的型付け言語として、MIT が開発している...

    今回は、Julia の Web フレームワークとして開発が行われている「Genie」を使ってみたいと思います!

    本記事で使用するのは、「Julia ver 1.5」となります。

    「Genie」をインストールしてみよう!

    Genieとは

    Genie とは、Julia のために開発されている、フルスタックな MVC Web フレームワーク

    Julia の強みである、

    1. high-level
    2. high-performance,
    3. dynamic
    4. JIT compiled

    を基に、構築されています。

    【 Genie 公式サイト】
    https://genieframework.com/

    Genie は、現在進行形で、積極的に開発が進んでいます。

    2020年9月執筆時点では、Julia 1.3以上を対象とした「v 1.1.0」が公開中です。

    インストール

    Genie の導入は、とても簡単!

    パッケージモードから追加するだけでOKです。

    1$ Julia
    2Julia> ]
    3(@v1.5) pkg> add Genie

    これだけです。

    念のため、しっかりとインストールされているかを、確認してみましょう!

    1(@v1.5) pkg> status
    2Status `~/.julia/environments/v1.5/Project.toml`
    3  [c43c736e] Genie v1.1.0

    大丈夫そうですね!

    動作確認

    それでは、実際に Genie の動作確認もしてみましょう。

    対話モードで確認します。

    1julia> using Genie
    2julia> using Genie.Router
    3julia> route("/") do
    4       "Hello, Genie!"
    5       end
    6
    7julia> up()

    これで実際に、「http://127.0.0.1:8000/」にアクセスして、「Hello, Genie!」と表示されればOKです。

    Genieプロジェクトを作成してみる

    次に、小さなアプリケーションを、実際に構築してみましょう!

    公式ドキュメントに従って、「MyGenieApp」という名前のプロジェクトを作ります。

    1julia> using Genie
    2julia> Genie.newapp_webservice("MyGenieApp")

    すると、自動的にディレクトリやファイルが生成され、サーバも立ち上がるはずです。

    1.
    2├── Manifest.toml
    3├── Project.toml
    4├── bin/
    5├── bootstrap.jl
    6├── config/
    7├── genie.jl
    8├── public/
    9│   └── welcome.html
    10├── routes.jl
    11└── src
    12    └── MyGenieApp.jl

    一部省略していますが、ディレクトリ構成は、おおよそ上のような形になっているはずです。

    そして、「http://127.0.0.1:8000/」で、以下のようなページが表示されると思います。

    Genieプロジェクトを作成してみる

    これは実際に、MyGenieApp > public > welcome.html  が表示されているため。

    他にも、エラーページなどのサンプルページは、最初から用意されています。

    試しに、「http://127.0.0.1:8000/hoge」にアクセスしてみると…?

    Genie 404ページ

    サンプルの404ページが表示されましたね!

    プロジェクトの中身を見てみる

    次に、この Genie プロジェクトの中身を、紐解いていきましょう。

    「Manifest.toml」と「Project.toml」

    Manifest.toml とProject.toml は、Julia がアプリの依存関係を管理するファイルで、基本はいじらないファイルです。

    「bin/」ディレクトリ内

    bin/ ディレクトリ内には、「Genie REPL」や「Genie サーバ」を起動させるための、スクリプトが入っています。

    「bootstrap.jl」「genie.jl 」と「src/」ディレクトリ内

    bootstrap.jl 」「 genie.jl 」「src/ ディレクトリ内のファイル」は、アプリを起動するために、Genie が管理するファイルです。

    これも、基本的にユーザがいじることはありません。

    「config/」ディレクトリ内

    config/ ディレクトリは、環境ごとの構成ファイルが管理されています。

    「log/」ディレクトリ内

    log/ ディレクトリはその名前の通り、ログファイル保存用です。

    「public/」ディレクトリ内

    public/ はドキュメントルートで、HTML ファイルなどの静的ファイルを管理します。

    「routes.jl」

    routes.jl は、URL ルーティングを管理するファイルです。

    プロジェクトでいじるファイルは?

    開発する側が編集するファイルは、主にroutes.jl」と「public/ディレクトリ内のファイル」です。

    その他は、ほとんどいじることがありません。

    Genieアプリを編集してみる

    それでは、自動生成された Genie アプリに、少しだけ手を加えてみましょう!

    と、その前に Genie アプリをいつでも立ち上げれるように、アクセス権限を変更しておきます。

    1$ chmod 755 bootstrap.jl
    2$ chmod 755 genie.jl
    3$ chmod 755 routes.jl

    コマンドラインから、Genie アプリを立ち上げるときは、

    1$ bin/server

    もしくは、

    1$ julia --color=yes --depwarn=no -q -i -- bootstrap.jl s "$@"

    で立ち上げます。

    URLルーティングを追加する

    試しに、以下のコードを、routes.jl に追記してみましょう。

    1route("/hello") do
    2    "Hello, Genie!"
    3end

    これで、「http://127.0.0.1:8000/hello」にアクセスしてみると、しっかりと反映されているはずです。

    とても簡単ですね!

    または、以下のような、ルーティング方法もあります。

    1goodbye() = "Good bye!"
    2route("/bye", goodbye)

    2つのルーティング記法の違い

    ここで、Julia における引数の扱い方に、疑問を持つ方もいるかもしれません。

    今紹介した2つの記法は、どちらも同じことをしています。

    ですが、do ... end 構文は、一体何を示しているのでしょうか?

    答えは、無名関数です。

    Swift でも、do_something(arg) { ... }という形で、同じような振る舞いをする関数が見受けられますね!

    動的なURLルーティング

    次に、URL パターンを解析し、動的に振る舞いを変えるようなルーティング方法も見ていきましょう。

    まずは、新しくGenie.Requests を追加で読み込みます。

    1using Genie.Router, Genie.Requests

    そしたら、以下のようにコーディングしてみましょう!

    1route("/booking/:customer_id/orders/:order_id") do
    2    "Order ID is \"$(payload(:order_id))\" for customer \"$(payload(:customer_id))\""
    3end

    これで例えば、「http://127.0.0.1:8000/booking/rightcode/orders/1234」にアクセスしてみると、

    動的なURLルーティング

    のように表示されるはずです。

    その他Genieの機能

    Genie では、シンプルな Web アプリだけでなく、MVC アプリケーションの開発もサポートしています。

    1julia> using Genie
    2julia> Genie.newapp_mvc("SampleMVC")

    のように、プロジェクトファイルを、簡単に作成できてしまいます!

    ただ、執筆現在では、Genie の MVC アプリに関するドキュメントは刷新中。

    そのため、本記事では詳しく紹介することはできませんが、Github のコードを見ればある程度は構築できそうな雰囲気でした。

    【 Genie の MVC アプリに関するドキュメント】
    https://genieframework.github.io/Genie.jl/dev/tutorials/4-1--Developing_MVC_Web_Apps.html

    例えば、

    1julia> Genie.Generator.newcontroller("Tasks")
    2[ Info: New controller created at /Users/araki/PycharmProjects/julia-samples/SampleMVC/app/resources/tasks/TasksController.jl

    で、コントローラを生成できます。

    これは、Github のソースコード内の「src/Generatir.jl」から読み解くことができます。

    【Github:src/】
    https://github.com/GenieFramework/Genie.jl/tree/master/src

    気になった方は、ソースファイルを読んで、ぜひ解読してみてくださいね!

    Jupyter Notebookを使ったグラフ描画編へつづく!

    今回は、Julia の Web フレームワークの代表格とも言える「Genie」を紹介しました。

    触った印象としては、かなり充実した機能が詰まっている感じ。

    Python でいう「Django」のような、ユーザフレンドリーなフレームワークだと思います。

    ただ、Julia も Genie も、まだ開発途上でドキュメントも多くはありません…。

    多くのエンジニアが本番環境で使うには、まだまだ時間がかかりそうですね!

    さて次回は、Julia を「Jupyter Notebook」を使って、コーディングしてみようと思います。

    ついでに、グラフ描画なども一緒に確認してみましょう!

    では次回も、お楽しみに!

    Jupyter Notebookを使ったグラフ描画編はこちら!

    Julia入門~高速な動的型付け言語~【Jupyter Notebookを使ったグラフ描画編】2020.11.10Julia入門~高速な動的型付け言語~【Jupyter Notebookを使ったグラフ描画編】Jupyter Notebookを使ったグラフ描画編~Juliaに入門してみよう~前回は、Julia の Web フレ...

    こちらの記事もオススメ!

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
    featureImg2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    広告メディア事業部

    広告メディア事業部

    おすすめ記事