ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 コードを <% %> で埋め込む形式です。
ユーザー一覧
<% for user in users %>
- "><%= user["name"] %>
<% end %>
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アノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?