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

    メディアチームメディアチーム
    2020.11.03

    IT技術

    【Webフレームワーク編】Julia入門~高速な動的型付け言語~

    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機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background