ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Genie.jl とは
Genie は Julia 言語向けの フルスタック Web フレームワーク です。Ruby on Rails や Django の設計思想を Julia 流に落とし込み、データサイエンスのモデルを Web アプリ化することに強みがあります。
機械学習モデルの予測結果を Web API として公開したり、Plots.jl のグラフをリアクティブにダッシュボード化したりするケースで広く採用されています。
インストールと最初のアプリ
# Julia REPL で
using Pkg
Pkg.add("Genie")
# 新規アプリ生成
using Genie
Genie.Generator.newapp("MyApp")
# → MyApp/ ディレクトリが作られ自動で起動
# 起動 (既存プロジェクト)
cd("MyApp")
using Genie
Genie.loadapp()
Genie.up() # デフォルト http://127.0.0.1:8000
ディレクトリ構造
| パス | 役割 |
|---|---|
routes.jl | ルーティング定義 |
app/resources/ | Controller / Model / View |
app/layouts/ | 共通レイアウト HTML |
config/ | 環境設定 (dev / prod / test) |
public/ | 静的ファイル (CSS / JS / 画像) |
db/migrations/ | DB マイグレーション |
bin/ | server / repl 起動スクリプト |
ルーティング
# routes.jl
using Genie.Router
route("/") do
"Hello, Genie!"
end
route("/hello/:name") do
name = params(:name)
"Hello, $(name)!"
end
# GET / POST 明示
route("/items", method = POST) do
title = postpayload(:title)
"Created: $title"
end
# JSON レスポンス
using Genie.Renderer.Json
route("/api/users") do
json([Dict("id" => 1, "name" => "Alice")])
end
Controller
# app/resources/users/UsersController.jl
module UsersController
using Genie.Renderer.Html
function index()
users = [Dict("id" => 1, "name" => "Alice"),
Dict("id" => 2, "name" => "Bob")]
html(:users, :index, users = users)
end
function show()
id = params(:id)
html(:users, :show, id = id)
end
end
# routes.jl
using UsersController
route("/users", UsersController.index)
route("/users/:id", UsersController.show)
View (Flax テンプレート)
HTML テンプレートは Julia コードを <% %> で埋め込む形式です。
<!-- app/resources/users/views/index.jl.html -->
<h1>ユーザー一覧</h1>
<ul>
<% for user in users %>
<li><a href="/users/<%= user["id"] %>"><%= user["name"] %></a></li>
<% end %>
</ul>
ORM: SearchLight.jl
Active Record 風の ORM パッケージです。
using SearchLight, SearchLight.SQLite
# モデル定義
@kwdef mutable struct User <: AbstractModel
id::DbId = DbId()
name::String = ""
email::String = ""
end
# マイグレーション
import SearchLight.Migrations: create_table, column
function up()
create_table(:users) do
[
column(:id, :primary_key)
column(:name, :string)
column(:email, :string)
]
end
end
# クエリ
all_users = SearchLight.all(User)
user = SearchLight.findone(User, name = "Alice")
alice = User(name = "Alice", email = "a@example.com")
SearchLight.save!(alice)
Stipple.jl: リアクティブ UI
Vue.js を裏で動かしつつ Julia 側でモデルを宣言する仕組みです。ダッシュボードを少ない行数で構築できます。
using Genie, Stipple, StippleUI, StipplePlotly
@app begin
@in number_of_points = 100
@out plot_data = []
@onchange number_of_points begin
plot_data = [PlotData(
x = 1:number_of_points,
y = rand(number_of_points),
mode = "lines"
)]
end
end
function ui()
[
slider(1:1000, :number_of_points)
plot(:plot_data)
]
end
@page("/", ui)
Genie.up()
Rails / Django との比較
| 項目 | Genie (Julia) | Rails (Ruby) | Django (Python) |
|---|---|---|---|
| 得意分野 | データ科学 / 数値計算 | 業務 Web 全般 | 業務 Web / ML 周辺 |
| ORM | SearchLight.jl | ActiveRecord | Django ORM |
| テンプレート | Flax / Markdown | ERB / HAML | Django Templates |
| リアクティブ | Stipple.jl | Hotwire | HTMX (外部) |
| 速度 | 非常に速い (JIT) | 中 | 中 |
| エコシステム | 小〜中 | 非常に大きい | 非常に大きい |
本番デプロイ
# 環境変数
export GENIE_ENV=prod
export PORT=8000
export HOST=0.0.0.0
# 起動
julia --project bin/server
# Docker
FROM julia:1.10
WORKDIR /app
COPY . .
RUN julia --project -e 'using Pkg; Pkg.instantiate()'
CMD ["julia", "--project", "bin/server"]
FAQ
Q: Julia 初学者でも Genie で Web 開発できる?
A: 可能。基本構文 (関数定義 / モジュール) と Pkg の使い方を理解していれば、Rails 経験者なら数日でキャッチアップできます。
Q: 大規模本番運用に耐える?
A: Genie 自体は Rails / Django ほど枯れてはいませんが、機械学習モデル提供 API や中規模ダッシュボードでは十分採用されています。
Q: Python の Flask との比較は?
A: Flask は最小フレームワーク、Genie はフルスタック。データ計算速度・型推論で Julia が優位、エコシステムは Python 圧勝。
📸 参考画像
※ 旧バージョンから引き継いだ参考画像です。手順・図解の補助としてご覧ください。

ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?