14.

Julia 言語入門 — JIT / 多重ディスパッチ / Python・R との比較

編集
この記事の要点
  • Julia は MIT 発の高速数値計算特化動的言語。2012 年初公開、2018 年に 1.0
  • JIT (LLVM) コンパイルにより Python / R より圧倒的に速く、C / Fortran に迫る性能
  • 言語特徴: 動的型付け + 多重ディスパッチ (multiple dispatch) + マクロ
  • REPL は julia コマンド。パッケージモードは ] キーで切り替え
  • パッケージマネージャ Pkg: ] add Plots で追加、Project.toml / Manifest.toml で再現性
  • 用途: 科学計算 / 数値最適化 / 機械学習 (Flux.jl) / 量子計算 / 微分方程式 (DifferentialEquations.jl)

Julia とは

Julia は MIT で 2009 年から開発が始まり、2012 年に公開された高水準・高速な動的プログラミング言語。「Python のように書きやすく、C のように速い」を設計目標としています。2018 年に 1.0 リリース、2024 年時点で 1.10 系が安定版です。

科学計算・データ分析・機械学習・微分方程式の数値解法・最適化問題などの数値処理に強く、研究者や金融クオンツ、保険数理士などに使われています。

主な特徴

特徴意味
JIT コンパイル関数を初回呼び出し時に LLVM でネイティブコードへ。2 回目以降は機械語実行で高速
動的型 + 型推論型宣言は任意。書かなくても内部で推論され速い
多重ディスパッチ関数オーバーロードを引数のすべての型で選択。OOP より柔軟
マクロLisp 風のメタプログラミング
1 ベースインデックスMATLAB / Fortran と同じ。a[1] が最初
Unicode 識別子α = 2π のような数学記法が書ける

インストールと REPL

# 推奨: juliaup(バージョン管理ツール)
curl -fsSL https://install.julialang.org | sh

# Linux マニュアル
wget https://julialang-s3.julialang.org/bin/linux/x64/1.10/julia-1.10.7-linux-x86_64.tar.gz
tar xzf julia-1.10.7-linux-x86_64.tar.gz
sudo ln -s $PWD/julia-1.10.7/bin/julia /usr/local/bin/julia

# 確認
julia --version

# REPL 起動
julia

# REPL モード切替
# julia>          通常モード
# pkg>     (])    パッケージモード
# shell>   (;)    シェルモード
# help?>   (?)    ヘルプモード

基本構文

# Hello World
println("Hello, Julia!")

# 変数(型注釈は任意)
x = 42
y::Float64 = 3.14
name = "Alice"

# 関数定義(複数の書き方)
function add(a, b)
    return a + b
end

# 簡潔記法
square(x) = x^2

# 型シグネチャ付き
greet(name::String) = "Hello, $name!"

# 多重ディスパッチ
area(r::Number) = π * r^2          # 円
area(w::Number, h::Number) = w * h  # 長方形

# 配列(1 ベース)
a = [1, 2, 3, 4, 5]
a[1]      # 1
a[end]    # 5
a[2:4]    # [2,3,4]

# 行列
M = [1 2 3; 4 5 6; 7 8 9]
M[1, 1]   # 1
M * M     # 行列積

# Broadcasting (要素ごと演算)
[1, 2, 3] .* 2    # [2, 4, 6]
sin.([0, π/2, π]) # [0.0, 1.0, 0.0]

多重ディスパッチの威力

# 関数を引数の型ごとに別実装
encounter(a::String, b::String) = "$a meets $b"
encounter(a::Int, b::Int) = a + b
encounter(a::Number, b::String) = "$b says hi to number $a"

encounter("Alice", "Bob")   # "Alice meets Bob"
encounter(1, 2)             # 3
encounter(3.14, "pi")       # "pi says hi to number 3.14"

# 自分の型を作る
struct Animal
    name::String
    legs::Int
end

# 既存関数を拡張
import Base: show
show(io::IO, a::Animal) = print(io, "$(a.name) ($(a.legs) legs)")

println(Animal("Cat", 4))   # Cat (4 legs)

パッケージマネージャ Pkg

# REPL で ] を押すとパッケージモードに入る
julia> ]
(@v1.10) pkg> add Plots
(@v1.10) pkg> add DataFrames CSV
(@v1.10) pkg> status        # インストール済一覧
(@v1.10) pkg> update
(@v1.10) pkg> remove Plots
(@v1.10) pkg> activate .    # プロジェクト環境作成
(@v1.10) pkg> instantiate   # Project.toml から復元

# プログラム内から
using Pkg
Pkg.add("Plots")
Pkg.status()

# 環境ファイル
# Project.toml      ← 依存パッケージリスト(人が書く)
# Manifest.toml     ← バージョン固定(自動生成、再現性確保)

有名パッケージ

パッケージ用途
Plots.jlプロット(複数バックエンドの統一インターフェース)
DataFrames.jlpandas 相当のデータフレーム
CSV.jlCSV 読み書き
Flux.jl機械学習・ディープラーニング
DifferentialEquations.jl常微分・偏微分・確率微分方程式の数値解法
JuMP.jl数理最適化モデリング(線形・整数・非線形)
Pluto.jlリアクティブノートブック (Julia 専用)
IJulia.jlJupyter で Julia を使うカーネル

プロットと DataFrames の例

using DataFrames, CSV, Plots

# CSV 読み込み
df = CSV.read("sales.csv", DataFrame)

# フィルタ・集計(DataFrames.jl のマクロ風 API)
using Statistics
agg = combine(groupby(df, :month), :amount => sum => :total)

# プロット
plot(agg.month, agg.total, label="Monthly Total",
     xlabel="Month", ylabel="Amount", lw=2)
savefig("monthly.png")

Python / MATLAB / R との比較

項目JuliaPythonMATLABR
速度非常に速い遅い (NumPy 経由なら速)遅い
ライセンスMIT (無料)OSS商用OSS
エコシステム成長中巨大商用ツールボックス統計分野で巨大
1 ベース配列×
主流分野科学計算・最適化機械学習・汎用制御・工学統計・バイオ

Jupyter で Julia

# Julia REPL で
using Pkg
Pkg.add("IJulia")

# Jupyter 起動
using IJulia
notebook()
# → ブラウザで Jupyter が開く
# → New → Julia 1.10 で Julia カーネルのノートブック

FAQ

Q: Julia が遅いと言われるのはなぜ
A: 初回コンパイル時間 (TTFX = Time to First X) が長いためです。同じ関数を 2 回目に呼ぶと高速。Julia 1.9+ では事前コンパイル機能が大幅改善されました。

Q: Python から Julia を呼べるか
A: pip install julia + PyJulia で可能。逆に Julia から Python は PyCall.jl で呼べます。

Q: 機械学習なら Python と Julia どちらか
A: 既存資産・人材豊富な Python が無難。微分方程式系・最適化・大規模数値計算では Julia (Flux.jl / DifferentialEquations.jl) が圧倒的に有利です。

編集
Post Share
子ページ
  1. Julia単体のインストール
  2. JuliaProを用いたインストール
  3. フレームワーク
  4. Pkg REPL modeの起動
同階層のページ
  1. Java
  2. PHP
  3. Python
  4. C#
  5. C++
  6. Ruby
  7. Go
  8. HTML
  9. CSS
  10. JavaScript
  11. TypeScript
  12. VBA
  13. Google Apps Script
  14. Julia
  15. Swift
  16. オブジェクト指向言語共通
  17. Gen