ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?