タイトル: フレームワーク
SEOタイトル: Julia の主要フレームワーク完全ガイド (Genie / Pluto / Flux / DataFrames)
| この記事の要点 |
|
Julia とは
Julia は 2012 年に MIT で開発開始された高性能科学技術計算向けプログラミング言語です。「C 並の速度、Python 並の開発生産性」を掲げ、JIT (Just-In-Time) コンパイルにより動的型付け言語でありながら C / Fortran 並の実行速度を達成します。数値計算・統計・機械学習・最適化分野で急速に普及しています。
| 項目 | 内容 |
|---|---|
| 初回リリース | 2012 年 (1.0 は 2018 年) |
| 開発元 | JuliaLang コミュニティ / JuliaHub |
| ライセンス | MIT License |
| 主用途 | 数値計算 / 機械学習 / データ分析 / 物理シミュレーション |
| パッケージマネージャ | Pkg.jl (組込) |
| 競合 | Python (NumPy/SciPy) / R / MATLAB / Fortran |
パッケージ管理: Pkg.jl
Julia は標準でパッケージマネージャを内蔵しています:
# REPL で ] キーを押すと Pkg モードに入る
pkg> add Genie
pkg> add Flux
pkg> add DataFrames
# プロジェクト環境を切り替え
pkg> activate ./MyProject
# パッケージ更新
pkg> update
# 削除
pkg> rm Genie
# インストール状況確認
pkg> status
# スクリプトから
using Pkg
Pkg.add("Genie")
Pkg.activate(".")
Pkg.instantiate()
Genie.jl — フルスタック Web フレームワーク
Genie.jl はJulia の Ruby on Railsと呼ばれるフルスタック Web フレームワーク。MVC アーキテクチャ、ORM (SearchLight)、テンプレートエンジン、API 構築機能を備えます。
using Genie, Genie.Router, Genie.Renderer.Json
route("/") do
"Hello, Julia Web!"
end
route("/api/users/:id") do
user_id = parse(Int, params(:id))
json(Dict("id" => user_id, "name" => "User $user_id"))
end
# サーバ起動
up(8000, async = false)
# http://localhost:8000/api/users/42
特徴:
- Rails 風ジェネレータ (
Genie.newapp("MyApp")) - ORM (SearchLight.jl) で DB 操作
- HTML テンプレート (
views/) - WebSocket / リアルタイム通信対応
- JSON API / REST 構築
Stipple.jl — リアクティブ UI
Stipple は Genie 上に構築されたリアクティブ UI フレームワークで、Vue.js + Quasar Framework を Julia から制御します。データサイエンティストがフロント JS を書かずに対話的ダッシュボードを作れます:
using Stipple, StippleUI
@reactive mutable struct Counter <: ReactiveModel
count::R{Int} = 0
end
function ui()
[
h1("Reactive Counter"),
p("Count: {{count}}"),
btn("Increment", @click("count += 1")),
]
end
route("/") do
page(Counter |> init, ui()) |> html
end
up()
Pluto.jl — リアクティブノートブック
Pluto は Jupyter Notebook の対抗で、セル間の依存を自動追跡してリアクティブに再実行するのが特徴。教育・データ分析・プロトタイピングで人気急上昇:
using Pkg
Pkg.add("Pluto")
using Pluto
Pluto.run() # ブラウザが開く
# ノートブック内のセル:
# Cell A: x = 5
# Cell B: y = x * 2
# Cell A で x = 10 に変えると Cell B も自動で y = 20 に更新される
Flux.jl — 機械学習
Flux.jl はPure Julia 製のディープラーニングライブラリ。PyTorch / TensorFlow の Julia 版。Julia の自動微分 (Zygote.jl) と GPU 対応 (CUDA.jl) を組み合わせ、シンプルな記法で高性能なモデル構築が可能:
using Flux
# モデル定義
model = Chain(
Dense(28*28, 128, relu),
Dense(128, 64, relu),
Dense(64, 10),
softmax
)
# 損失関数
loss(x, y) = Flux.crossentropy(model(x), y)
# オプティマイザ
opt = Adam(0.001)
# 学習
for epoch in 1:10
Flux.train!(loss, params(model), data, opt)
end
# 推論
y_pred = model(x_test)
DataFrames.jl — データ分析
Pandas の Julia 版。データ操作・集計の標準ライブラリ:
using DataFrames, CSV
# CSV 読み込み
df = CSV.read("sales.csv", DataFrame)
# フィルタ
filter(row -> row.amount > 1000, df)
# 集計
using Statistics
by_region = combine(groupby(df, :region),
:amount => sum,
:amount => mean)
# 列追加
df.tax = df.amount .* 0.1
# pivot
unstack(df, :date, :region, :amount)
Plots.jl — 可視化
using Plots
# 折れ線グラフ
x = 1:10
y = x .^ 2
plot(x, y, title="y = x^2", xlabel="x", ylabel="y", lw=2)
# ヒストグラム
histogram(randn(1000), bins=50)
# 3D サーフェス
surface(-5:0.1:5, -5:0.1:5, (x,y) -> sin(sqrt(x^2 + y^2)))
# 保存
savefig("plot.png")
# バックエンド切替
gr() # GR (高速、デフォルト)
plotlyjs() # PlotlyJS (インタラクティブ)
pyplot() # matplotlib 経由
Franklin.jl — 静的サイト生成
Markdown + Julia コード評価で静的サイトを生成。技術ブログ・ドキュメントサイト向け:
using Franklin
# 新規サイト
newsite("my-blog", template="basic")
# ローカルプレビュー
cd("my-blog")
serve() # http://localhost:8000
# ビルド
publish() # _site/ に静的ファイル生成
主要ライブラリ一覧
| 分野 | ライブラリ | 用途 |
|---|---|---|
| Web (フルスタック) | Genie.jl | Rails 風フレーム |
| Web (UI) | Stipple.jl | リアクティブ UI |
| Web (API) | HTTP.jl / Oxygen.jl | HTTP サーバ・クライアント |
| ノートブック | Pluto.jl / IJulia.jl | 対話的ノート |
| 機械学習 | Flux.jl / MLJ.jl / Knet.jl | ディープラーニング統合 |
| データ分析 | DataFrames.jl / Query.jl | Pandas 相当 |
| 可視化 | Plots.jl / Makie.jl / Gadfly.jl | グラフ描画 |
| 統計 | StatsBase.jl / Distributions.jl | 統計関数群 |
| 最適化 | JuMP.jl | 数理最適化モデリング |
| 微分方程式 | DifferentialEquations.jl | ★ Julia の代表ライブラリ |
| 並列計算 | Distributed / CUDA.jl | GPU / 分散計算 |
| 静的サイト | Franklin.jl | Markdown サイト生成 |
Python との比較
| 項目 | Julia | Python |
|---|---|---|
| 実行速度 | ★ C 並 | 遅い (NumPy 等で補う) |
| 記法 | 数式に近い (1 始まりインデックス) | 0 始まり |
| エコシステム | 科学計算特化 | ★ 全方位 |
| Web 開発 | Genie のみ実用域 | ★ Django / FastAPI 等多数 |
| 学習コスト | 中 (型推論に慣れが必要) | 低 |
| JIT 起動時間 | ★ 初回が遅い (Time-to-First-Plot) | 軽量 |
使うべきシーン
- 大規模数値計算 — 微分方程式・最適化・MCMC など
- 研究プロトタイプ — 数式を直接コードに落とせる
- HPC (High Performance Computing) — GPU / 分散計算
- Web アプリ専業なら Python / Node.js を選んだほうが楽
- 機械学習の本番運用はPython が依然主流
FAQ
Q: Julia で Web アプリを作る価値はある?
A: 機械学習モデルの REST API 化など、Julia でしか動かないモデルをラップする用途には Genie/Oxygen が有効。汎用 Web は Python/Node が無難。
Q: Pluto と Jupyter どちらを使うべき?
A: Julia 限定なら Pluto がリアクティブで快適。複数言語 (Python/R/Julia) を切り替えるなら Jupyter。
Q: Flux と PyTorch どちらが速い?
A: 単純ベンチでは PyTorch のほうが成熟。Julia の優位性は独自損失関数や物理シミュレーションとの統合に出る。