この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:T
更新日時:2026-06-11 07:10:02

タイトル: ローカルのウェブアプリケーションサーバーの起動方法
SEOタイトル: Julia Genie ローカル開発サーバ起動完全ガイド

この記事の要点
  • Genie.jl は Julia 製の MVC Web フレームワーク。Rails / Laravel 系の DX を Julia で実現
  • インストールは using Pkg; Pkg.add("Genie")
  • サーバ起動は using Genie; Genie.up()。デフォルトポートは 8000
  • 自動リロードには Revise.jl を併用。using Revise を先に
  • 本番デプロイは Genie.config.run_as_server = true + systemd / PM2 / Docker
  • リアクティブ UI が必要なら Stipple.jl (Genie ベース) で SPA 風に

Genie.jl の概要

Genie は Julia で書かれた高生産性 Web フレームワーク。Ruby on Rails / Laravel と同じ MVC + ORM + ジェネレータ思想で、データサイエンス用途と Web アプリ用途を Julia 1 言語で完結できるのが強みです。

2026 年時点の主な構成:

  • Genie — ルーティング / コントローラ / ミドルウェア / HTTP サーバ
  • SearchLight — ORM (PostgreSQL / MySQL / SQLite)
  • Stipple — Vue.js + WebSocket ベースのリアクティブ UI
  • GenieFramework — 上記をまとめたメタパッケージ

1. Genie のインストール

# Julia REPL を起動
julia

# パッケージモード (] キー)
] add Genie

# または通常モードで
using Pkg
Pkg.add("Genie")

# 開発に便利なものまとめて
Pkg.add(["Genie", "Revise", "Stipple"])

# バージョン確認
Pkg.status("Genie")

2. 最小構成でサーバ起動

# server.jl
using Genie
using Genie.Router

route("/") do
    "Hello from Genie!"
end

route("/hello/:name") do
    "Hello, $(params(:name))!"
end

# サーバ起動 (デフォルト port 8000)
up()

# 別ポートを指定
up(8080)

# ホストも指定
up(8080, "0.0.0.0")

# 非同期起動 (REPL を解放)
up(async = true)
# 実行
julia --project=. server.jl

# 別ターミナルで動作確認
curl http://localhost:8000
# Hello from Genie!

curl http://localhost:8000/hello/Alice
# Hello, Alice!

3. 自動リロード (Revise.jl)

Julia は起動時間が長いため、コード修正のたびに REPL を再起動するのは非効率。Revise.jl を使うと保存時に再評価されます。

# Revise を Genie より先に読み込む (必須順)
using Revise
using Genie

includet("routes.jl")   # ★ includet (Revise 版 include)

up(async = true)

# routes.jl を保存すると自動で反映される

シェルから直接起動する場合は環境変数で有効化:

# REPL を起動して Revise 経由
JULIA_REVISE=on julia --project=. -e 'using Revise; using Genie; Genie.up()'

# bin/repl で起動 (newapp で生成される)
bin/repl

4. Genie アプリのフォルダ構成

後述の Genie.Generator.newapp() でスキャフォールドした場合、以下の構成になります:

MyApp/
├── bin/                 # 起動スクリプト (repl, server)
├── bootstrap.jl         # 起動ブートストラップ
├── config/
│   ├── env/             # 環境別設定 (dev.jl, prod.jl)
│   ├── initializers/    # 起動時に走らせる
│   ├── secrets.jl
│   └── routes.jl        # ★ ルーティング
├── app/
│   ├── controllers/
│   ├── models/
│   └── views/
├── public/              # 静的ファイル
├── db/
│   ├── migrations/      # SearchLight マイグレーション
│   └── seeds/
├── Project.toml         # 依存
└── Manifest.toml        # ロックファイル

5. 設定 (Genie.config)

using Genie

# 主要な設定値
Genie.config.server_port            = 8000
Genie.config.server_host            = "0.0.0.0"
Genie.config.run_as_server          = true     # ブロッキング起動
Genie.config.log_level              = :info    # :debug / :info / :warn / :error
Genie.config.log_to_file            = true
Genie.config.cache_duration         = 0
Genie.config.session_auto_start     = true
Genie.config.websockets_server      = true     # Stipple 用

# CORS 設定
Genie.config.cors_headers["Access-Control-Allow-Origin"] = "*"
Genie.config.cors_allowed_origins = ["http://localhost:3000"]

6. 本番デプロイ

systemd ユニット

# /etc/systemd/system/myapp.service
[Unit]
Description=My Genie App
After=network.target

[Service]
Type=simple
User=app
WorkingDirectory=/opt/myapp
Environment=GENIE_ENV=prod
Environment=JULIA_DEPOT_PATH=/opt/myapp/.julia
ExecStart=/usr/local/bin/julia --project=. bin/server
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo journalctl -fu myapp

Docker

FROM julia:1.10-slim

WORKDIR /app
COPY Project.toml Manifest.toml ./
RUN julia --project=. -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()'

COPY . .
ENV GENIE_ENV=prod \
    PORT=8000 \
    HOST=0.0.0.0

EXPOSE 8000
CMD ["julia", "--project=.", "bin/server"]

7. Stipple でリアクティブ UI

Genie 単体は SSR ですが、Stipple を組み合わせると Vue.js 互換のリアクティブ SPA に。

using Stipple, Stipple.ReactiveTools
using StippleUI

@app begin
    @in n = 0
    @out doubled = 0

    @onchange n begin
        doubled = n * 2
    end
end

@page("/", "view.html.jl")
up()

Julia エコシステムでの位置づけ

フレームワーク特徴
GenieRails ライクなフルスタック。最も成熟
StippleGenie ベースのリアクティブ UI
Oxygenマイクロフレームワーク (FastAPI 風)
HTTP.jl低レベル HTTP サーバ / クライアント
Pluto.jlノートブック (Web アプリではない)

FAQ

Q: 初回起動が遅い
A: Julia の JIT 特性。PackageCompiler.jl でシステムイメージを焼くと数秒で起動可能になります。

Q: ポートが既に使われている
A: lsof -i :8000 で確認し、別ポートで起動。up(9000)

Q: Genie は Python の Flask / Django とどう違う?
A: 性能 (Julia の JIT) と数値計算ライブラリ親和性。データサイエンスの結果をそのまま Web 化するときに強い。

Q: Production で本当に使える?
A: GenieFramework 社が商用サポート提供。中小規模なら十分実用、大規模事例はまだ少ない。