「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年12月10日改訂)。

MENU

Juliaを使うときのTipsをまとめる(その07/X)

 \mathrm{Julia}を使うのに、今一度

で使い方を整理する。

前回

power-of-awareness.com

注意

 参照文献はかなり古い(2019年)ため、現在のバージョンでは動作しない関数などが多いとの評判がある。そこでそういった齟齬があった場合は随時コメントする。なお筆者の環境は、

アプリケーション バージョン
\mathrm{Julia} 1.8.0
\mathrm{Jupyter} \mathrm{Notebook} 6.5.2

である。

2. Juliaによるデータエンジニアリング

2.4 RESTfulサービスの作成

 \mathrm{HTTP}を用いてタスクや情報をコンピュータ館でやり取りするようにシステムを構築する方法を\mathrm{REST}と呼び、\mathrm{HTTP}経由でアクセスできるアプリケーションを\mathrm{Web}アプリケーションと呼ぶ。

############################
### RESTサービスを作成① ###
############################

using Sockets

# 8080番ポートで通信を待ち受けるサーバーを作成する
server = Sockets.listen(8080)

# 任意のJuliaコマンドを実行するWebサービスを作成する
while true
    sock = Sockets.accept(server)
    data = readline(sock)
    print("Got request:\n", data "\n")
    cmd = split(data, " ")[2][2:end]
    println(sock, "\nHTTP/1.1 200 OK\nContent-Type: text/html\n")
    println(sock, string("<html><body>", cmd, "=", eval(Meta.parse(cmd)),
            "</body></html>"))
    close(sock)
end
############################
### RESTサービスを作成② ###
############################

import JuliaWebAPI
import ZMQ

# Webサービスとして公開される関数
function testfn(arg1, arg2, optarg1 = "10", optarg2 = "20")
    println("T: ", arg1, " ", arg2, " ", optarg1, " ", optarg2)
    return parse(Int, arg1) + parse(Int, arg2) + parse(Int, optarg1) + parse(Int, optarg2)
end

# ZeroMQサーバのパラメータを定義
tr = JuliaWebAPI.ZMQTransport("tcp://127.0.0.1:9999", ZMP.REP, true)
apir = JuliaWebAPIResponder(tr, JuliaWebAPI.JSONMsgFormat())

register(apir, testfn; resp_json=true,
         resp_headers = Dict("Content-Type" => "application/json;charset=utf-8"))
process(apir)

# 以下、新しいJuliaのREPLを開いて以降を行なう
using JuliaWebAPI
const apiclnt = JuliaWebAPI.APIInvoker("tcp://127.0.0.1:9999")

JuliaWebAPI.run_http(apiclnt, 8888) # 左記コマンドは永遠に動作するため、Ctrl+Cで停止する


 \mathrm{Julia}では簡単にネットワーク接続できる。ネットワーク接続はファイルと同じように扱うことができる。一度ネットワーク接続を行なえば、後は他のデータストリームと同じように読み書きできる。\mathrm{Web}サービスを1から作成する場合、プログラマ\mathrm{HTTP}プロトコル固有のメッセージの送信を行わなければならない。同様に\mathrm{Web}サービスに対して低レベルな\mathrm{Socket} \mathrm{API}で接続する場合であっても、プログラマが適切なリクエストを送り、出力を読み込むようにしなければならない。
 \mathrm{JuliaWebAPI.jl}パッケージを用いれば簡単に\mathrm{Julia}の関数を\mathrm{Web}サービスとして公開できる。

2.5 JSONデータを処理する

 \mathrm{JSON}は人間にも読める形でコンピュータ間でデータを交換するためのデータ形式で、特に\mathrm{Web}では広く用いられている。
 \mathrm{Julia}では\mathrm{JSON}モジュールを用いればよい。

############################
### JSONデータを処理する ###
############################

using JSON

json_txt = """{
    "key":"value",
    "number":7,
    "array":[1,2,5],
    "dict":{"k1":"val1","k2":2}
}"""

println(json_txt)

# 定義した文字列をパースする
JSON.parse(json_txt)

# Juliaのデータ構造をJSONに変換することもできる
data = Dict{Int64, Union{Int64, String}}(1=>"text", 2=>999)

# JSONデータを書き込む
f = open("file.json", "w")
JSON.print(f, data)
close(f)

# JSONデータを読み込む
f = open("file.json", "r")
data2 = JSON.parse(f)
close(f)
プライバシーポリシー お問い合わせ