0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Julia言語 を導入し人生を N ≥ 1 歩進める(2025 年 12 月 版)

Last updated at Posted at 2025-12-05

本日は

アドベントカレンダーの季節がやってまいりました.

この記事は プログラミング言語 Julia のアドベントカレンダー $N=6$ 日目の記事です.(体調が悪かったので初日に投稿することができませんでした.とほほ...)

投稿者を募集しています.The Julia Programming Languageに関する内容なら何でもどうぞ

過去のカレンダーはこちら:
Julia Advent Calendar 2024
Julia Advent Calendar 2023
Julia Advent Calendar 2022
Julia Advent Calendar 2021
Julia Advent Calendar 2020
Julia Advent Calendar 2019
Julia Advent Calendar 2018
Julia Advent Calendar 2017
Julia Advent Calendar 2016
Julia Advent Calendar 2015
Julia Advent Calendar 2014

Julia について

プログラミング言語の一つです.Python,Ruby のような高級言語のように記述でき,JIT コンパイルで動作し実行速度は(ちゃんと書けば) C/C++/Fortran のような性能を引き出すことができる言語です.

インストールしよう

Julia の公式サイトに行ってインストール方法を確認します.

macOS または Linux 環境であれば下記のコマンドを実行することで Julia をインストールすることができます.

$ curl -fsSL https://install.julialang.org | sh

Windows ユーザであれば PowerShell を開いて次を実行します.

PS> winget install --name Julia --id 9NJNWW8PVKMN -e -s msstore

確認

正常にインストールできれば juliajuliaup というコマンドが使えるようになります.

$ julia --version
julia version 1.12.2
$ juliaup --version
Juliaup 1.18.9

juliaup の役目

Julia は常に進化し続けます(ソフトウェアのバージョンが上がり続けます).juliaup は手元のマシンにある Julia のバージョンと最新安定版の Julia が出ているかを監視する役割を果たします.新しいバージョンが公式からリリースされればその旨を通知してくれます.

例えば,筆者のマシンには Julia 1.12.1 がインストールされています.本日 (2025/12/06 現在) では Julia 1.12.2 がリリースされています.パッチアップデートはいくつかの不具合の修正・パフォーマンス改善がされているので更新しておくべきです.

古いバージョンを使ってると下記のようなメッセージがやってきます.

        Info The latest version of Julia in the `release` channel is 1.12.2+0.aarch64.apple.darwin14. You currently have `1.12.1+0.aarch64.apple.darwin14` installed. Run:

  juliaup update

in your terminal shell to install Julia 1.12.2+0.aarch64.apple.darwin14 and update the `release` channel to that version.
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.12.1 (2025-10-17)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org release
|__/                   |

julia>

つまり,「君の環境は Julia 1.12.1 だ, 最新安定版は 1.12.2 があるぞ!, juliaup update を実行しろ」と教えてくれます.ターミナルで juliaup update をすると次のように出力されます.

$ juliaup update
    Checking for new Julia versions
    Checking for new version on channel 'nightly' is taking a while... This can be slow due to server caching
    Updating channel nightly
    Updating channel release
  Installing Julia 1.12.2+0.aarch64.apple.darwin14
Checking standard library notarization.................................................Precompi
Precompiling SuiteSparse finished.
  1 dependency successfully precompiled in 1 seconds
............done.
      Tidyup Removed Julia 1.12.1+0.aarch64.apple.darwin14

Hello World を実行

ターミナルで julia と入力すると下記のように 1.12.2 の Julia がインストールされている様子がわかります.

$ julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.12.2 (2025-11-20)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org release
|__/                   |

julia>

また,対話環境である REPL が使えるようになります.プログラミング言語入門でお馴染みの Hello World を入力してみましょう.

julia> # これはコメント

julia> println("Hello World") # 入力後エンターキーを押す
Hello World

julia>

余談ですが,julia> の部分 (prompt) も含めて上記のコードをコピーして作業中の REPL に貼り付けても Julia の REPL は julia> の部分をうまく解釈して println("Hello World") の部分を認識して実行してくれます.

電卓

2 の平方根 $\sqrt{2}$ の値が欲しいとします.Julia のREPL は簡易電卓としても利用することができます.

julia> sqrt(2)
1.4142135623730951

これでも良いですが,\sqrt を入力して Tab キーを入力してみましょう.そうすると という文字が出るはずです.すかさず 2 を入力しエンターキーを押すと

julia> √2
1.4142135623730951

ジャーン.√2 で 2 の平方根を得ることができました.見た目が数式と似せるように書くことができる・入力支援の仕組みがあるのは Julia の良いところです.TeX を知っている読者であれば他の記号も打てるか確認してみましょう.

  • 円周率 $\pi$ は pi または \pi + タブキーで π で利用することができます
  • 自然対数の底 $e$ は \euler + タブキーで を入力して利用することができます.面倒であれば指数関数 exp を使って exp(1) を使えばいい気がします
  • 3 乗根は \cbrt の後,タブキーを押して を入力することができます.2 ^ (1/3), cbrt(2) などでも良いです

ヘルプモード

たまに という記号が出てきます.これは左辺と右辺がほぼ等しいことを表す isapprox 関数のエイリアスです.

julia>? # ? を入力
help?> # プロンプトが変化する
help?> # ≈ を入力する
help?> 
"≈" can be typed by \approx<tab>

search: 

  isapprox(x; kwargs...) / (x; kwargs...)

  Create a function that compares its argument to x using , i.e.
  a function equivalent to y -> y  x.

  The keyword arguments supported here are the same as those in
  the 2-argument isapprox.

   Julia 1.5
  
    This method requires Julia 1.5 or later.

  ────────────────────────────────────────────────────────────────

  isapprox(x, y; atol::Real=0, rtol::Real=atol>0 ? 0 : √eps, nans::Bool=false[, norm::Function])

  Inexact equality comparison. Two numbers compare equal if their
  relative distance or their absolute distance is within tolerance
  bounds: isapprox returns true if norm(x-y) <= max(atol,
  rtol*max(norm(x), norm(y))). The default atol (absolute
  tolerance) is zero and the default rtol (relative tolerance)
  depends on the types of x and y. The keyword argument nans
  determines whether or not NaN values are considered equal
  (defaults to false).
  (長いので省略)

このようにしてマニュアルを参照することができます.また の入力する方法もわかりますね.

ライブラリの利用

「与えられた整数,例えば,$2011$ って素数だっけ?」と確かめたくなる時がたまにあります.Julia 標準ではその機能がないのでライブラリの力を借ります.Primes.jl というパッケージがその機能を持っているのでインストールします.

REPL を開いて次を実行します.

julia> using Pkg; Pkg.add("Primes")
   Resolving package versions...
   Installed IntegerMathUtils  v0.1.3
    Updating `~/.julia/environments/v1.12/Project.toml`
  [27ebfcd6] + Primes v0.5.7
    Updating `~/.julia/environments/v1.12/Manifest.toml`
  [18e54dd8] + IntegerMathUtils v0.1.3
  [27ebfcd6] + Primes v0.5.7

いろいろログが出てきますが,Primes パッケージがインストールされます.続けて下記のように REPL に入力します:

julia> using Primes

julia> isprime(2011)
true

using Primes によって isprime 関数が利用できるようになります.これは Primes.jl パッケージの中で isprimeexport すると宣言してるからです.

同様の理由により素因数分解する factor 関数も使えます.

julia> factor(345)
3 * 5 * 23

julia> 3 * 5 * 23 # 検算
345

このように using Primes をすることで使える名前が増えてきます.が,名前空間を不必要に汚染したくない, 必要な名前だけを導入したい場合は一旦 REPL を再起動 (REPL に exit() を入力してセッションを終了してから julia をターミナルで実行)して下記を試してください.

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.12.2 (2025-11-20)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org release
|__/                   |

julia> using Primes: isprime

julia> isprime
isprime (generic function with 4 methods)

julia> factor
ERROR: UndefVarError: `factor` not defined in `Main`
Suggestion: check for spelling errors or missing imports.
Hint: a global variable of this name also exists in Primes.

上記の例は isprime のみを Primes.jl からロードする例です.factor などは使えません.このようにして Main セッションに導入する必要かつ十分な名前をロードすることができます.

セミコロン ; で一行で表現する.

読者の中にはワンライナーやシェル芸が好きな人がいるかもしれません.Julia ではセミコロン ; で式をつなげることができます.例えば,上記でやったような

  • Primes.jl パッケージをインストール
  • Primes をロード
  • factor 関数を使って数を素因数分解する

を一行で書くことができます.

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.12.2 (2025-11-20)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org release
|__/                   |

julia> using Pkg; Pkg.add("Primes"); using Primes; factor(345)
   Resolving package versions...
     Project No packages added to or removed from `~/.julia/environments/v1.12/Project.toml`
    Manifest No packages added to or removed from `~/.julia/environments/v1.12/Manifest.toml`
3 * 5 * 23

REPL を起動する必要もなくターミナルから直接 -E option を使って文字列をJuliaの式として解釈させることもできます.

$ julia -e 'using Pkg; Pkg.add("Primes"); using Primes; display(factor(345))'

下記のような出力が得られます.

   Resolving package versions...
     Project No packages added to or removed from `~/.julia/environments/v1.12/Project.toml`
    Manifest No packages added to or removed from `~/.julia/environments/v1.12/Manifest.toml`
3 * 5 * 23

julia -e "..." のような使い方は GitHub Actions などの CI パイプラインを構築するときによく使うので覚えておくと良いでしょう.

グラフを描いてみよう

Plots.jl パッケージを入れます.

julia> using Pkg; Pkg.add("Plots")

としてもOKですが,Pkg REPL を使って入れることもできます.

julia>] # ここで ] を入力する
(@v1.12) pkg> # prompt が変化する
(@v1.12) pkg> add Plots

ここでは閉区間 $[0, 1] \subset \mathbb{R}$ の範囲で 関数 $x \mapsto x ^ n$ の様子を描画してみましょう.複素関数論の講義で関数列の一様収束を扱うときに出てくる例ですね.

using Plots

# 実際には collect はつけなくても良いが説明の都合上つけている.
# x = 0:0.01:1
#
xs = collect(0:0.01:1) 
f(x, n) = x ^ n
y1 = f.(xs, 1)
y2 = f.(xs, 2)
y3 = f.(xs, 3)
y10 = f.(xs, 10)
y100 = f.(xs, 100)
plot(xs, hcat(y1, y2, y3, y10, y100), aspectratio=:equal)

実行すると下記のような画像が出てくると思います.電卓にもなるし描画も簡単にできちゃいますね.

image.png

0:0.01:1 は 0 から 0.01 刻みで 1 までの値を表すレンジオブジェクトです.collect(0:0.01:1) とすると下記のような配列が生成されます.

0.0, 0.01, 0.02, 0.03, 0.04, 0.05 ...

f(x, n) = x ^ nxn を入力として xn 乗である x ^ n を計算する関数を定義しています.一般に,Juliaの関数の定義は下記のようにfunction キーワードを使って定義します.

function f(x, n)
    return x ^ n
end

ただし,今回は一行で定義できるので f(x, n) = x ^ n のようにして f を定義することができます.

f.(xs, 2) の右下にあるドット . は誤植ではなく,ブロードキャストしていることを表しています.つまりy2 = f.(xs, 2) によって xs の各要素 x に対して x ^ 2 を計算をしています.もしかしたら下記の方が理解しやすいかもしれません.

# これでも良い
y2 = [f(x, 2) for x in xs]

REPL上だと y2 は下記のように出力されます.

julia> y2
101-element Vector{Float64}:
 0.0
 0.0001
 0.0004
 0.0009
 0.0016
 0.0025000000000000005
 0.0036
 0.004900000000000001
 0.0064
 0.0081
 
 0.8464
 0.8649000000000001
 0.8835999999999999
 0.9025
 0.9216
 0.9409
 0.9603999999999999
 0.9801
 1.0

hcat(y1, y2, y3, y10, y100) によって縦ベクトル y1, y2, y3, y10, y100 たちを横方向に結合します.REPL では次のようになります.

julia> hcat(y1, y2, y3, y10, y100)
101×5 Matrix{Float64}:
 0.0   0.0     0.0       0.0          0.0
 0.01  0.0001  1.0e-6    1.0e-20      1.0e-200
 0.02  0.0004  8.0e-6    1.024e-17    1.26765e-170
 0.03  0.0009  2.7e-5    5.9049e-16   5.15378e-153
 0.04  0.0016  6.4e-5    1.04858e-14  1.60694e-140
 0.05  0.0025  0.000125  9.76563e-14  7.88861e-131
 0.06  0.0036  0.000216  6.04662e-13  6.53319e-123
 0.07  0.0049  0.000343  2.82475e-12  3.23448e-116
 0.08  0.0064  0.000512  1.07374e-11  2.03704e-110
 0.09  0.0081  0.000729  3.48678e-11  2.65614e-105
 
 0.92  0.8464  0.778688  0.434388     0.000239212
 0.93  0.8649  0.804357  0.483982     0.000705172
 0.94  0.8836  0.830584  0.538615     0.00205487
 0.95  0.9025  0.857375  0.598737     0.00592053
 0.96  0.9216  0.884736  0.664833     0.0168703
 0.97  0.9409  0.912673  0.737424     0.0475525
 0.98  0.9604  0.941192  0.817073     0.13262
 0.99  0.9801  0.970299  0.904382     0.366032

読者が伝統的な数学の線形代数学の講義を受けている場合,実ベクトル空間 $\mathbb{R}^n$ の要素は縦ベクトルであると習うと思います.それを横に並べた行列を扱うことはよくあることだと思いますが,hcat はまさにその役目を果たしています.

Plots.jl では y 座標に相当するデータが Matrix 型で来た場合,列ごとに数値データを解釈しそれをシリーズ(series)とみなしプロットします.

逐次プロットしたい場合は下記のようにして plot! 関数を使う方法もあります.

using Plots

xs = collect(0:0.01:1) 
f(x, n) = x ^ n
y1 = f.(xs, 1)
y2 = [f(x, 2) for x in xs]
y3 = f.(xs, 3)
y10 = f.(xs, 10)
y100 = f.(xs, 100)
p = plot(aspectratio=:equal)
plot!(p, xs, y1)
plot!(p, xs, y2)
plot!(p, xs, y3)
plot!(p, xs, y10)
plot!(p, xs, y100)

最初に p = plot(aspectratio=:equal) で何も描画されない空のキャンバスを用意して plot!p オブジェクトにグラフを追加していく感じです.

最後に ! があるのは副作用がある関数であることを表します.この表記はJuliaの慣習です.例えば,配列をソートする sort, sort! 関数は典型的な例です.ヘルプモードで調べてみてください.

まとめ

Julia の導入から,REPL での操作を通じていろいろ例を出してきました.
簡易電卓だけでなく,グラフの描画もできる便利ツールとして使うこともできます.

もちろん Python, R のように Jupyter Notebook で対話的環境で本格的にコーディングすることもできます.国内の計算物理の領域では Julia を使うユーザが増えているので計算機を通じて物理を理解したい方は Julia を学ぶと良いでしょう.また,数学を学んできた人もちょっと何か触ってみたいという場合に便利だと思います.代数学,数論パッケージもあります.

皆さんも Julia を導入して人生を N ≥ 1 進めてみてはいかがでしょうか?

(ちなみに \geq で入力できます.)

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?