実行速度が速く、機械学習やデータサイエンスの分野で人気のプログラミング言語Juliaの使い方について、入門者向けにサンプルを交えて解説します。

インストール

Juliaの公式サイト(https://julialang.org/)でDownloadメニューをクリックして、Juliaのインストーラをダウンロードする。

Windows 10にインストール

JuliaをWindows 10にインストールする場合、ダウンロードしたインストーラをダブルクリックして実行する。

Juliaのインストーラはいたってシンプルで、インストール先のフォルダ名を聞いてくるだけである。

Juliaのスクリプト(*.jl)をエクスプローラでダブルクリックして起動したり、Windows PowerShellから起動するためには、Juliaの実行ファイル(julia.exe)のパスを環境変数PATHに含める必要がある。

環境変数PATHの設定は、Juliaのインストーラではやってくれないので、手動で設定する必要がある。

Windows 10で環境変数を設定するには、次の手順で操作する。

  1. スタートメニューから [Windows システムツール] - [コントロール パネル] をクリックしてコントロールパネルを開く。
  2. コントロールパネルで「システムとセキュリティ」をクリックする。
  3. 「システムとセキュリティ」画面で「システム」をクリックする。
  4. 「システム」画面の左ペインにある「システムの詳細設定」をクリックする。
  5. 「てシステムのプロパティ」ダイアログの「環境変数」ボタンをクリックする。
  6. 環境変数の一覧が表示されるので、変数「Path」を選択して「編集」ボタンをクリックする。
  7. 「(ユーザ名)のユーザー環境変数」の「新規」ボタンをクリックして、julia.exeがあるフォルダ(C:\Users\tsuka\AppData\Local\Programs\Julia-1.5.2\binなど)を入力して、OKボタンをクリックする。

環境変数

Linuxにインストール

UbuntuにJuliaをインストールするには、ダウンロードしたファイルをtarコマンドで展開する。

$ tar xzf julia-1.4.2-linux-x86_64.tar.gz

環境変数PATHにJuliaのbinディレクトリを追加する。

Juliaのバージョンアップ

既にインストールされているJuliaをアップデートするには、既存のJuliaをアンインストールしてから新しいバージョンのJuliaをインストールする。

Juliaのバージョンが変わるとインストール先のパスが変わるので、環境変数PATHも変更が必要になる。

Juliaの起動と終了

Windowsの場合、スタートメニューからJuliaをクリックするとJuliaのREPLが起動する。

JuliaのREPLを起動すると、バナーとコマンド入力を促すプロンプトが表示される。

Julia

Juliaを終了させるには、Ctrl + D または exit() とタイプする。

Windows PowerShellコマンドプロンプトからJuliaを起動するには、julia.exeを実行する。

ファイルの実行コードを非対話的に実行するには、julia.exeの引数に実行するスクリプトファイル名と引数を指定する。

C:> julia.exe script.jl arg1 arg2

スクリプトの名前はグローバル定数PROGRAM_FILE、スクリプトの引数はグローバル定数ARGSで参照できる。

グローバル定数 説明
PROGRAM_FILE スクリプト名
ARGS スクリプトの引数
# スクリプト名を表示
println(PROGRAM_FILE)

for arg in ARGS
  # スクリプトの引数を表示
  println(arg)
end

Juliaの起動オプションには次のものを指定できる。

オプション 説明
--banner={yes|no|auto} 起動時のバナーを有効化または無効化する。
--color={yes|no|auto} カラーテキストを有効化または無効化する。
-h ヘルプ情報を表示する。
--help
-q バナーを表示せず、REPL警告を抑制する。
--quiet
-v バージョン情報を表示する。
--version

REPL

REPLとはRead-eval-print loopの略称で、対話型評価環境のことである。Juliaを起動するとき、引数でソースコードを指定しないと、REPLが起動する。

REPLでは記号を簡単に入力できる機能がある。たとえば、\piと入力してタブキーを押すと、πに変換される。

julia> π
π = 3.1415926535897...

julia>

他にも次の文字を変換できる。

入力文字列 タブキーで変換できる記号
\Alpha Α
\alpha α
\beta β
\gamma γ
\delta δ
\delta δ
\epsilon ϵ
\zeta ζ
\eta η
\theta θ
\iota ι
\kappa κ
\lambda λ
\mu μ
\nu ν
\pi π
\rho ρ
\sigma σ
\tau τ
\upsilon υ
\phi ϕ
\chi χ
\psi ψ
\omega ω

Juliaを電卓として使う

Juliaのプロンプトに計算式を入力してEnterキーを押下すると、計算結果が表示される。

julia> 1 + 2 * 3
7

julia>

演算子

算術演算子

演算子 説明
x + y 加算
x - y 減算
x * y 乗算
x / y 除算
x ÷ y 整数除算
x ^ y
x % y 剰余

ブール演算子

演算子 説明
!x 否定

ビット演算子

演算子 説明
~x ビット否定
x & y 論理積
x | y 論理和
x ⊻ y 排他的論理和
x >>> y 論理右シフト
x >> y 算術右シフト
x << y 左シフト

代入演算子

演算子 説明
x = y 代入
x += y 加算代入
x -= y 減算代入
x *= y 乗算代入
x /= y 除算代入
x ÷= y 整数除算代入
x %= y 剰余代入
x ^= y 乗代入
x &= y 論理積代入
x |= y 論理和代入
x ⊻= y 排他的論理和代入
x >>>= y 論理右シフト代入
x >>= y 算術右シフト代入
x <<= y 左シフト代入

比較演算子

比較演算子とは2つの値の関係性を比較して、正しければ真(true)、間違っていれば偽(false)と評価する演算子であり、関係演算子とも呼ばれる。if文やwhile文で使われることが多い。

Juliaの比較演算子はPythonなど他のプログラミング言語と似ているが、Unicodeを使って数学の記号をそのまま使えるようにしているので、≠(ノットイコール)などが使えるのが特徴である。

演算子 説明
x == y 等しい
x != y 等しくない
x ≠ y
x < y 小さい
x <= y 小さいか等しい
x ≤ y
x > y 大きい
x >= y 大きいか等しい
x ≥ y

データ型

Juliaのデータ型には次のものがある。

整数型

符号 バイト数 最小値 最大値
Int8 あり 8 -27 27 - 1
UInt8 なし 8 0 2^8 - 1
Int16 あり 16 -2^15 2^15 - 1
UInt16 なし 16 0 2^16 - 1
Int32 あり 32 -2^31 2^31 - 1
UInt32 なし 32 0 2^32 - 1
Int64 あり 64 -2^63 2^63 - 1
UInt64 なし 64 -0 2^64 - 1
Int128 あり 128 -2^127 2^127 - 1
UInt128 なし 128 0 2^128 - 1
Bool N/A 8 false (0) true (1)

浮動小数点型

精度 バイト数
Float16 half 16
Float32 single 32
Float64 double 64

ローカル変数のデータ型

ローカル変数を宣言するときに、データ型を指定することができる。

local x::Int32

関数の引数や戻り値のデータ型

関数の引数や戻り値のデータ型を指定することができる。

function f(x::UInt32)::Float64
  return Float64(pi * x)
end

データ型の確認

Juliaのデータ型はtypeof関数で確認できる。

julia> typeof(1)
Int64

julia> typeof(1.0)
Float64

julia> typeof(true)
Bool

julia> typeof('A')
Char

julia> typeof('あ')
Char

julia> typeof("ABC")
String

julia>

データ型の変換

型変換関数を使ってデータ型を変換することができる。

julia> Float64(pi)
3.141592653589793

julia> Float64(pi * 2)
6.283185307179586

julia> BigFloat(pi)
3.141592653589793238462643383279502884197169399375105820974944592307816406286198

julia>

型変換関数を使う方法のほかに、データ型を指定してもよい。

julia> (pi * 2)::Float64
6.283185307179586

julia>

文字列

Julia言語で文字列リテラルを表すには、文字列を2重引用符で囲む。

str = "Hello, world!"

2重引用符を含む文字列の場合は、文字列を3つの2重引用符で囲む。

str = """Say "Hello, world!"."""

文字列を格納した変数や文字列リテラルは、配列として使うことができる。他の多くのプログラミング言語では配列の添字は0から始まるが、Juliaでは配列の添字は1から始まる。

println("Hello, world!"[1])

配列の添字は範囲指定することもできる。たとえば2文字目から4文字目までの場合は次のようにする。

println("Hello, world!"[2:4])

文字列の最後の文字を参照するには、配列の特殊な添字 end を使う。

str = "Hello, world!"
println(str[end])

Juliaで文字列を表示するには、printlnを使用する。

julia> println("Hello World!")
Hello World!

julia>

文字列の結合

Juliaで複数の文字列を結合するには、2通りのやり方がある。

stirng関数を使って文字列を結合する

string関数は、渡されたすべての引数を連結した文字列を返す。引数に文字列以外の数値などを渡しても、キャストされる。

url = "http://itref.fc2web.com/"

# "<loc>http://itref.fc2web.com/</loc>"
loc = string("<loc>", url, "</loc>")

*演算子を使って文字列を結合する

*」は文字列を結合する演算子である。被演算子(オペランド)に文字列以外を指定することはできない。

url = "http://itref.fc2web.com/"

# "<loc>http://itref.fc2web.com/</loc>"
loc = "<loc>" * url * "</loc>"

*演算子を使うとプログラムコードがすっきりして見やすくなるが、文字列以外は明示的にキャストする必要があることに注意する。

文字列の置換

Julia言語で文字列を置き換えるには、replace関数を使う

b = "Hello, world!"
a = replace(b, "world" => "Japan")
println(a)

変数

変数とは値に関連付けられた名前で、後で使用するために値を保存する場合に便利である。

Julia言語の変数に型宣言は不要で、変数名の大文字と小文字は区別される。

julia> x = 10
10

julia> x = "Hello World!"
Hello World!

julia>

多くのプログラミング言語では、変数に使える文字をASCII/ISO 8859-1 (Latin-1)の英数字記号に限っているが、Julia言語は変数名にUnicodeを使うことができるユニークな特徴がある。そのため、変数名に日本語やさまざまな記号を使うことができる。

長さ = 5
println(長さ)

♡ = "I love you"
println(♡)

配列

Julia言語における配列のインデックス(添字)は1から始まる。

a = [1, 2, 3]

println(a[1])
println(a[2])
println(a[3])

# 配列の要素数
println(length(a))

制御構造

制御構造とは、条件によって処理を分岐したり、条件を満たす間は処理を繰り返すなど、処理の流れを制御する構文である。

制御構造 説明
if 条件によって処理を分岐する。
while 条件を満たす間、処理を繰り返す。
for あらかじめ決まった回数分、処理を繰り返す。

関数

Juliaで関数を定義するための基本的な構文は次のとおり。

function f(x, y)
  x + y
end

関数は次のように簡潔な構文で記述することもできる。

f(x, y) = x + y

Juliaの関数では、評価された最後の式が関数の戻り値として返される。他の多くのプログラミング言語のように、戻り値を return で明示することもできる。

function f(x, y)
  return x + y
end

Juliaでは数式をそのまま記述できるようにする方針なので、関数によって返される値を return で明示する必要はない。しかし、関数の戻り値をソースコード上で検索しにくくなるため、あえて明示する方が望ましい。

引数の型を明示することもできる。

function f(x::Float64, y::Float64)
  x + y
end

Julia言語では、引数の型が異なれば、同じ名前であっても別の関数と見なされる。

function f(x::Int64, y::Int64)
  x + y
end

function f(x::Float64, y::Float64)
  x + y
end

可変長引数

Julia言語の関数は可変長引数を取ることができる。

可変長引数とは、関数における引数の個数が固定ではなく、関数呼び出しごとに引数の個数を変えることができるものである。

function add(x...)
  sum = 0
  for i=1:length(x)
    sum += x[i]
  end
  sum
end

# 1
println(add(1))

# 1 + 2
println(add(1, 2))

# 1 + 2 + 3
println(add(1, 2, 3))

Juliaであらかじめ定義されている定数

Juliaでは次の定数があらかじめ定義されている。

定数 説明
ARGS Juliaに渡されるコマンドライン引数の文字列としての配列
JULIA_HOME 実行可能ファイルjuliaを含むディレクトリのフルパス
PROGRAM_FILE コマンドラインからJuliaに渡されたスクリプト名
VERSION Juliaのバージョン
自然対数の底(ネイピア数)
Base.MathConstants.eulergamma オイラーの定数
Base.MathConstants.golden 黄金比
pi 円周率
π 円周率

ファイル

ファイルを開く

Juliaでファイルをオープンするには、open関数を使う。

try
  f = open("example.txt")
  close(f)
catch
  println("ファイルのオープンに失敗しました。")
end

ファイルのオープンに失敗すると、SystemError例外がスローされる。

ファイルに書き込むためにオープンするには、open関数の第2引数に"w"オプションを指定する。

f = open("example.txt", "w")

ファイルから読み込む

ファイルから行を読み込むには、readlines関数を使う。

try
  f = open("example.txt")
  lines = readlines(f)
  for l in lines
    println(l)
  end
  close(f)
catch
  println("ファイルのオープンに失敗しました。")
end

ファイルへ書き込む

ファイルへ1行書き込むには、write関数を使う。

try
  f = open("example.txt", "w")
  write(f, "Hello, world!")
  close(f)
catch
  println("ファイルのオープンに失敗しました。")
end

ファイルを閉じる

ファイルを使い終わったら、ファイルを閉じる必要がある。ファイルをクローズするには、close関数を使う。

try
  f = open("example.txt")
  close(f)
catch
  println("ファイルのオープンに失敗しました。")
end

ディレクトリ

作業ディレクトリを取得する

Juliaで現在の作業ディレクトリを取得するには、pwd関数を使う。

wd = pwd()

println(wd)

作業ディレクトリを変更する。

Juliaで作業ディレクトリを変更するには、cd関数を使う。

cd("/Users/tsuka/Documents")

ディレクトリ内のファイルとディレクトリの一覧を取得する

Juliaでディレクトリ内のファイルとディレクトリの一覧を取得するには、readdir関数を使う。

try
  dirent = readdir("/Users/tsuka/Documents")
  for i in dirent
    println(i)
  end
catch
  println("ディレクトリの読み込みに失敗しました。")
end

ディレクトリの読み込みに失敗すると、SystemError例外がスローされる。

ディレクトリ内のファイルとディレクトリの一覧を再帰的に取得する

Juliaでディレクトリ内のファイルとディレクトリの一覧を、その下層ディレクトリも含めて再帰的に取得するには、walkdir関数を使う。

try
  for (root, dirs, files) in walkdir("/Users/tsuka/Documents")
    println("$root 下のディレクトリ")
    for dir in dirs
      println(joinpath(root, dir))
    end
    println("$root 下のファイル")
    for file in files
      println(joinpath(root, file))
    end
  end
catch
  println("ディレクトリの読み込みに失敗しました。")
end

ディレクトリの読み込みに失敗すると、SystemError例外がスローされる。

辞書(連想配列)

Juliaでは辞書を使うことができる。辞書は連想配列やハッシュテーブルとも呼ばれ、キーと値のペアを格納できる。

Dict("foo"=>1, "bar"=>2)

キーと値の型を明示的に指定することもできる。

Dict{String, Int32}("foo"=>1, "bar"=>2)

辞書はジェネレータを使って作成することもできる。

Dict(i => f(i) for i = 1:10)

辞書に特定のキーに対するマッピングがあるかどうかを確認できる。

d = Dict('foo'=>2 'bar'=>3)

if haskey(d, 'foo')
  println(get(d, 'foo', 0))
end

パッケージ

パッケージとは、Juliaの機能を拡張するモジュールである。Juliaには、さまざまなパッケージが用意されている。

Juliaのパッケージ
パッケージ 説明
CSV JuliaからCSV形式のデータを扱うためのパッケージ
DataFrames データフレームを扱うためのパッケージ
Genie JJuliaのフルスタックMVC Webフレームワーク
HTTP JuliaからHTTP通信を行うためのパッケージ
JSON JuliaからJSON形式のデータを扱うためのパッケージ