【Webフレームワーク編】Julia入門~高速な動的型付け言語~
IT技術
Webフレームワーク編~Juliaに入門してみよう~
前回は、Julia の環境構築の方法や、文法などを紹介しました。
2020.10.27【基礎編】Julia入門~高速な動的型付け言語~「Julia」に入門してみよう!Julia は、Python に継ぐ高速な動的型付け言語として、MIT が開発している...
今回は、Julia の Web フレームワークとして開発が行われている「Genie」を使ってみたいと思います!
本記事で使用するのは、「Julia ver 1.5」となります。
「Genie」をインストールしてみよう!
Genieとは
Genie とは、Julia のために開発されている、フルスタックな MVC Web フレームワーク。
Julia の強みである、
- high-level
- high-performance,
- dynamic
- 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/」で、以下のようなページが表示されると思います。
これは実際に、MyGenieApp > public > welcome.html が表示されているため。
他にも、エラーページなどのサンプルページは、最初から用意されています。
試しに、「http://127.0.0.1:8000/hoge」にアクセスしてみると…?
サンプルの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」にアクセスしてみると、
のように表示されるはずです。
その他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を使ったグラフ描画編はこちら!
こちらの記事もオススメ!
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪、名古屋の4拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit