Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JuliaでApp(仮) for JuliaTokai #23
Search
GOTOH Shunsuke
November 08, 2025
Technology
0
21
JuliaでApp(仮) for JuliaTokai #23
JuliaでApp(仮)
JuliaTokai #23 発表資料
GOTOH Shunsuke
November 08, 2025
Tweet
Share
More Decks by GOTOH Shunsuke
See All by GOTOH Shunsuke
関数型まつりレポート for JuliaTokai #22
antimon2
0
220
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
1.2k
FP in Julia « SIDE: J » for JuliaTokai #21
antimon2
1
180
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
310
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末 LT 大会 2024
antimon2
0
140
Julia 新 LTS v1.10 解説 for JuliaTokai #20
antimon2
1
340
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
1
260
Julia クイズ ~API編~ for JuliaTokai #19
antimon2
1
220
Julia でどうしても super().hoge みたいなことしたい人へ for JuliaTokai #18
antimon2
1
410
Other Decks in Technology
See All in Technology
The Twin Mandate of Observability
charity
1
380
メタプログラミングRuby読書会の活用
willnet
0
100
re:Inventに行くまでにやっておきたいこと
nagisa53
0
1k
SREのキャリアから経営に近づく - Enterprise Risk Managementを基に -
shonansurvivors
1
740
[re:Inent2025事前勉強会(有志で開催)] re:Inventで見つけた人生をちょっと変えるコツ
sh_fk2
2
1.3k
20251102 WordCamp Kansai 2025
chiilog
1
550
CLIPでマルチモーダル画像検索 →とても良い
wm3
2
800
Kotlinで型安全にバイテンポラルデータを扱いたい! ReladomoラッパーをAIと実装してみた話
itohiro73
3
260
ソフトウェアエンジニアとデータエンジニアの違い・キャリアチェンジ
mtpooh
0
200
re:Invent 2025の見どころと便利アイテムをご紹介 / Highlights and Useful Items for re:Invent 2025
yuj1osm
0
700
進化する大規模言語モデル評価: Swallowプロジェクトにおける実践と知見
chokkan
PRO
3
470
AWSが好きすぎて、41歳でエンジニアになり、AAIを経由してAWSパートナー企業に入った話
yama3133
2
230
Featured
See All Featured
Bash Introduction
62gerente
615
210k
Rails Girls Zürich Keynote
gr2m
95
14k
BBQ
matthewcrist
89
9.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Speed Design
sergeychernyshev
32
1.2k
Scaling GitHub
holman
463
140k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Docker and Python
trallard
46
3.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Transcript
JuliaでApp(仮) 2025/11/08 JuliaTokai #23 antimon2(後藤 俊介)
お品書き • お前誰よ? • 簡単な Julia の紹介 • イベント宣伝×2 •
Julia でコマンドラインアプリ作りやすくなった話
お前誰よ?
自己紹介 • 名前:後藤 俊介 • 所属:有限会社 来栖川電算 • コミュニティ:🌟JuliaTokai, 🌟JuliaLangJa, JuliaTokyo,
🌟JuliaLang Japan 2025🆕… • 言語:Julia, Python, Ruby, … • SNS等: (@antimon2) • SNS等(2): (@antimon2.jl) • 著書:実践Julia入門
簡単な Julia の紹介
None
Julia とは?(1) • The Julia Language • 最新 v1.12.1(2025/10/17)🆕 ◦
LTS:v1.10.10(2025/06/27) ◦ Upcoming:v1.13.0-DEV • 科学技術計算に強い! • 動作が速い!(LLVM JIT コンパイル)
Julia とは?(2) • Rのように中身がぐちゃぐちゃでなく、 • Rubyのように遅くなく、 • Lispのように原始的またはエレファントでなく、 • Prologのように変態的なところはなく、
• Javaのように硬すぎることはなく、 • Haskellのように抽象的すぎない ほどよい言語である 引用元:http://www.slideshare.net/Nikoriks/julia-28059489/8
Julia とは?(3) • C のように高速だけど、 Ruby のようなダイナミズムを併せ持っている • Lisp のような真のマクロを持ちながら、
MATLAB のような直感的な数式表現もできる • Python のように総合的なプログラミングができて、 R のように統計処理も得意で、 Perl のように文字列処理もできて、 MATLAB のように線形代数もできて、 shell のように複数のプログラムを組み合わせることもできる • 超初心者にも習得は容易でありながら、 ハッカーの満足にも応えられる • インタラクティブな動作環境もあって、コンパイルもできる (Why We Created Julia から抜粋・私訳)
要するに • 動的言語なのに速い! • 文法も覚えやすい! • 数値計算に強い!
Julia の主な特徴 • 多重ディスパッチ • 動的型システム • 並行・並列処理、コルーチン • 組込パッケージマネージャ
JuliaLang Japan 2025
https://julialangja.github.io/julialangja2025
• 2025/12/13(土) 開催 • 内容: Julia言語に関連することであれば内容不問 ◦ 学術・データサイエンスなど幅広い分野での事例紹介・議論等(予定) • 参加対象:
所属・立場関係なくどなたでも! • 参加方式: オンサイト/Zoom(ハイブリッド開催) • 会場: 東京科学大学 大岡山キャンパス • 詳しくは 公式サイト を! JuliaLang Japan 2025
NGK2026S
https://ngk.connpass.com/event/373265 (昼の部 LT大会)
• 2026/1/24(土) 開催 • 概要: 名古屋近郊のIT系コミュニティ合同大新年会イベント ◦ 今年で18回目! JuliaTokai も毎年コミュティとして参加!
• イベント内容 ◦ 昼の部:LT大会(https://ngk.connpass.com/event/373265/) ◦ 夜の部:懇親会(https://ngk.connpass.com/event/373524/)(有料) • 参加対象: どなたでも! ◦ コミュニティ・スポンサー等は東海地区にゆかりのある方の参加優先となります • 参加方式: オンサイト/Youtube(配信視聴) • 会場: 株式会社エイチーム セミナースペース NGK2026S
Julia v1.12
Julia v1.12 • 2025/10/08 最新安定版リリース! ◦ 現在は v1.12.1(2025/10/17) • Release
Note ◦ https://github.com/JuliaLang/julia/blob/release-1.12/NEWS.md • Julia 1.12 Highlights ◦ https://julialang.org/blog/2025/10/julia-1.12-highlights/
Julia v1.12 注目機能(主観) • @atomic マクロの機能拡張 • 定数(構造体)の再定義 • デフォルトワーカースレッド
• waitany()/waitall() (by mrkn) • ワークスペース • Apps • juliac サポート
Julia v1.12 注目機能(主観) • @atomic マクロの機能拡張 • 定数(構造体)の再定義 • デフォルトワーカースレッド
• waitany()/waitall() (by mrkn) • ワークスペース • Apps • juliac サポート
Apps
@main() • Julia をアプリ化(コマンドラインか ら実行時等)したときのエントリーポ イント ◦ 必ず function @main(ARGS)
~ end の形にする ◦ 従来は if abspath(PROGRAM_FILE) == @__FILE__ ~ end とかしたり、 サードパーティのパッケージ使ったりする 必要があった module HelloWorld function @main(ARGS) Core.println("Hello World!") end end
julia -m 《モジュール名》 • 実行時に julia -m 《モジュール 名》 とすることでそのモジュールを
実行できる。 ◦ ↑のモジュールに先述の @main() 関数 が定義されている必要あり • パッケージとして登録されていなく ても julia --project 《Project.tomlの場所》 -m 〜 等とすればローカルのものを実行可 能 HelloWorld$ julia -m JuliaC # 事前に `add JuliaC` されている必要あり juliac - compile Julia code into an executable, library, sysimage, object or bitcode :《以下略》 HelloWorld$ find . . ./src ./src/HelloWorld.jl ./Project.toml HelloWorld$ julia --project -m HelloWorld Hello World! HelloWorld$
App として登録 (1) Project.toml • -m 《モジュール名》 で実行できる Julia パッケージは
App として登 録できる • STEP1: Project.toml に [apps] エントリーを記述 ◦ エントリー名がコマンド名になる ◦ サブエントリー({} の中身)に各種設定を 記述追加出来る(詳細割愛) ◦ 右の例の場合 helloworld という名前 で実行できるようになる、設定はデフォ ルト name = "HelloWorld" uuid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" version = "0.1.0" authors = ["GOTOH Shunsuke <
[email protected]
>"] [apps] helloworld = {}
App として登録 (2) app add • -m 《モジュール名》 で実行できる Julia
パッケージは App として登 録できる • STEP1: Project.toml に [apps] エントリーを記述 • STEP2: パッケージモードで app add 《パッケージ名》 または app dev 《パッケージの場所 (ローカルの場合)》 で登録する (HelloWorld) pkg> app st [acedd4c2] JuliaC v0.2.2 juliac ~/.julia/juliaup/julia-1.12.1+0.x64.linux.gnu/bin/julia (HelloWorld) pkg> app dev . # Generalに登録されている Appなら `app add JuliaC`などで OK Project No packages added to or removed from `~/.julia/environments/apps/HelloWorld/Project.toml` Manifest No packages added to or removed from `~/.julia/environments/apps/HelloWorld/Manifest.toml` [ Info: For package: HelloWorld installed apps: helloworld (HelloWorld) pkg> app st [7b2f2ce5] HelloWorld v0.1.0 `/path/to/HelloWorld` helloworld ~/.julia/juliaup/julia-1.12.1+0.x64.linux.gnu/bin/julia [acedd4c2] JuliaC v0.2.2 juliac ~/.julia/juliaup/julia-1.12.1+0.x64.linux.gnu/bin/julia (HelloWorld) pkg>
App として登録 (3) 実行 • -m 《モジュール名》 で実行できる Julia パッケージは
App として登 録できる • STEP1: Project.toml に [apps] エントリーを記述 • STEP2: パッケージモードで app add 《パッケージ名》 (ry • STEP3: パスが通っていれば登録 したコマンド名でコマンドラインで実 行可能 HelloWorld$ helloworld Hello World! HelloWorld$
App として登録 (2.5) app add 補足 • App 登録時に↑のような警告が出たら、適切な方法で環境変数 PATH(Path)に
~/.julia/bin を追加すること。 ◦ linux/macos なら、お使いの shell 環境に合わせて .bashrc や .zshrc に記 述追加(詳細割愛) ◦ Windows なら 設定→システムのプロパティ→環境変数→ユーザ環境変数 →Path に追加 • ※パス追加されていなくても ~/.julia/bin/《登録したコマンド名》 で一応実行可能 [ Info: For package: HelloWorld installed apps: helloworld ┌ Warning: App 'helloworld' was installed but is not available in PATH. │ Consider adding '/path/to/home_dir/.julia/bin' to your PATH environment variable. └ @ Pkg.Apps ~/.julia/juliaup/julia-1.12.1+0.x64.linux.gnu/share/julia/stdlib/v1.12/Pkg/src/Apps/Apps.jl:78
JuliaC
JuliaC 概要 • Julia の App をコンパイルして実行可能ファイルを作成 ◦ (Julia v1.12
以降) Apps 機能で app add JuliaC で追加しておくと以降 juliac コマンド が使える! • PackageCompiler などを利用
JuliaC を App として登録 • パッケージとして add JuliaC の 必要はない(app
add JuliaC は 別管理) ◦ もちろん両方やっといても別にOK (@v1.12) pkg> app add JuliaC Updating `~/.julia/environments/apps/JuliaC/Project.toml` : 《中略》 [ Info: For package: JuliaC installed apps juliac (@v1.12) pkg> app st [7b2f2ce5] HelloWorld v0.1.0 `/path/to/HelloWorld` helloworld ~/.julia/juliaup/julia-1.12.1+0.x64.linux.gnu/bin/julia [acedd4c2] JuliaC v0.2.2 juliac ~/.julia/juliaup/julia-1.12.1+0.x64.linux.gnu/bin/julia (@v1.12) pkg>
@main()(追加) • @main() 関数の最後に return 0 の行を追加する module HelloWorld function
@main(ARGS) Core.println("Hello World!") return 0 # ←ココ! end end
コンパイル • juliac --output-exe 《実行 ファイル名》 --bundle build --trim=safe --experimental
《場所またはファイル名》 でコン パイル ◦ (2025/11/07 現在) HelloWorld$ juliac --output-exe hello_world --bundle build --trim=safe --experimental . Project No packages added to or removed from `/path/to/HelloWorld/Project.toml` Manifest No packages added to or removed from `/path/to/HelloWorld/Manifest.toml` ✓ Compiling... PackageCompiler: bundled libraries: ├── Base: │ ├── libLLVM.so.18.1jl - 105.521 MiB │ ├── libjulia-codegen.so.1.12.1 - 77.409 MiB ├── Stdlibs: Total library file size: 182.930 MiB HelloWorld$
実行 • build ディレクトリ内に実行可能 ファイルができるので、直接指定して 実行(例 :./build/bin/hello_world) • メリット:ネイティブコードを直接実 行するので
App より高速! HelloWorld$ find ./build/ ./build/ ./build/bin ./build/bin/hello_world ./build/lib : 《中略》 HelloWorld$ ./build/bin/hello_world Hello World! HelloWorld$
補足 • return 0 がなくてもコンパイルで きてしまうけれど、実行時にエラー が出るので注意! HelloWorld$ ./build/bin/hello_world Hello
World! fatal: error thrown and no exception handler available. Core.MethodError(f=Base.var"#convert"(), args=(Core.Int32, nothing), world=0x000000000000975c) HelloWorld$
JuliaC 注意点 • @main() の最後に return 0(整数値を返す)のを忘れずに ◦ 0 以外を返すと「何かしらの失敗」を意味する(リターンコード)
• 型不安定なコードはコンパイルに失敗しがち なので注意 ◦ 例:関数に多重定義がたくさんありコンパイル時に特定できないような場合 ▪ 特に print() は鬼門。できる限り Core.print() を使うと良い。 ◦ 例:try/catch で不特定の Exception を捕捉するような場合 ▪ 型不安定になりがち。後処理に工夫が必要なことも。 • その他(まだあると思うけれど検証中)
みんなの疑問…
App / JuliaC の疑問 Q: Julia って最初のロード時間かかる(からコマンドラインで julia XXX.jl しない方が良い)っていう意見もあるよね?…
• A1: それはそう ◦ App の登録は↑形式の実行を簡便にするだけのものだから、その点の解 決はしてない • A2: それを解決するのが JuliaC ◦ ただし julia -m XXX で動作するものなら何でもコンパイルできるわけで はない(先述の注意点参照)のでコンパイルできるようになるまで調整等必 要
まとめ
まとめ • Julia のコードを(コマンドラインアプリとして)実行しや すくなった! • JuliaC 使えば高速でストレスのないアプリも作れる! ◦ いずれもまだまだ課題はあるけれど
• Julia 楽しいよ!
参考リンク等
参考リンク等 (1): Julia 関連 • julialang.org ◦ https://julialang.org/ • Julia
Documentation ◦ https://docs.julialang.org • Release Note ◦ https://github.com/JuliaLang/julia/blob/release-1.12/NEWS.md • Julia 1.12 Highlights ◦ https://julialang.org/blog/2025/10/julia-1.12-highlights
参考リンク等 (2): App / JuliaC 関連 • 6. Apps ·
Pkg.jl ◦ https://pkgdocs.julialang.org/dev/apps • JuliaLang/JuliaC.jl ◦ https://github.com/JuliaLang/JuliaC.jl
ご清聴ありがとうございます。