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
Pythonのじゃないけれど 本を書いた話
Search
GOTOH Shunsuke
July 08, 2023
Technology
0
390
Pythonのじゃないけれど 本を書いた話
Pythonのじゃないけれど
本を書いた話
GOTOH Shunsuke
July 08, 2023
Tweet
Share
More Decks by GOTOH Shunsuke
See All by GOTOH Shunsuke
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
190
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末 LT 大会 2024
antimon2
0
72
Julia 新 LTS v1.10 解説 for JuliaTokai #20
antimon2
1
200
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
1
190
Julia クイズ ~API編~ for JuliaTokai #19
antimon2
1
170
Julia でどうしても super().hoge みたいなことしたい人へ for JuliaTokai #18
antimon2
1
370
『実践Julia入門』 で 割愛したネタ for JuliaTokyo #11
antimon2
2
630
勉強会を主催したら 本を出して技術顧問になった話 for NGK2024S
antimon2
0
330
Julia本を書いたら技術顧問になった話 for JuliaTokai #17
antimon2
0
590
Other Decks in Technology
See All in Technology
【Developers Summit 2025】プロダクトエンジニアから学ぶ、 ユーザーにより高い価値を届ける技術
niwatakeru
2
890
『AWS Distinguished Engineerに学ぶ リトライの技術』 #ARC403/Marc Brooker on Try again: The tools and techniques behind resilient systems
quiver
0
130
Culture Deck
optfit
0
330
Larkご案内資料
customercloud
PRO
0
600
Classmethod AI Talks(CATs) #15 司会進行スライド(2025.02.06) / classmethod-ai-talks-aka-cats_moderator-slides_vol15_2025-02-06
shinyaa31
0
170
技術的負債解消の取り組みと専門チームのお話 #技術的負債_Findy
bengo4com
1
1.2k
インフラをつくるとはどういうことなのか、 あるいはPlatform Engineeringについて
nwiizo
5
2.1k
SA Night #2 FinatextのSA思想/SA Night #2 Finatext session
satoshiimai
1
100
スクラムのイテレーションを導入してチームの雰囲気がより良くなった話
eccyun
0
110
開発スピードは上がっている…品質はどうする? スピードと品質を両立させるためのプロダクト開発の進め方とは #DevSumi #DevSumiB / Agile And Quality
nihonbuson
1
1.3k
MC906491 を見据えた Microsoft Entra Connect アップグレード対応
tamaiyutaro
1
480
オブザーバビリティの観点でみるAWS / AWS from observability perspective
ymotongpoo
7
1k
Featured
See All Featured
BBQ
matthewcrist
86
9.5k
Facilitating Awesome Meetings
lara
51
6.2k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Unsuck your backbone
ammeep
669
57k
Making Projects Easy
brettharned
116
6k
Gamification - CAS2011
davidbonilla
80
5.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Into the Great Unknown - MozCon
thekraken
35
1.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
99
18k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Transcript
Pythonのじゃないけれど 本を書いた話 2023/07/08 Python東海 第43回勉強会 antimon2(後藤 俊介)
お品書き • お前誰よ? • Juliaの紹介 • 書籍を執筆しました! • 経緯 •
公開サンプルコードに JupyterLab を採用した 理由
お前誰よ?
自己紹介 • 名前:後藤 俊介 • 所属:有限会社 来栖川電算 • コミュニティ:🌟機械学習名古屋, 🌟JuliaTokai,
⭐Python東海, ⭐jl.dev, … • 言語:Julia, Python, Scala(勉強中), … • SNS等: (@antimon2) • SNS等(2): (@antimon2.jl) • Julia 本 執筆しました!🆕
https://www.kurusugawa.jp
https://twitter.com/antimon2/status/1632998963505938432
簡単な Juliaの紹介
None
Julia とは?(1) • The Julia Language • 最新 v1.9.2(2023/07/05) ◦
LTS:v1.6.7(2022/07/19) ◦ 次期:v1.10.0-α1(2023/07/06) • 科学技術計算に強い! • 動作が速い!(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 の主な特徴 • 多重ディスパッチ • 動的型システム • 並行・並列処理、コルーチン • 組込パッケージマネージャ
2020/07/10
発端 • 突然編集者の方から Twitter DM が届く • Qiita や Twitter
で Julia の 記事書いたり質問に答えていた のが目にとまった(らしい)
企画概要(当初の先方からの提案) • Juliaの入門的解説書。日本語でまとまった情報があまり提供されていない Juliaの仕様や特徴を理解してもらう。 • 前半ではリファレンス的に基本的な文法の解説をして、Juliaの仕様やコンセプ トを理解してもらう。 • 後半では数値計算や機械学習などをJuliaの長所を活かせる活用例を題材に、 効率的・実践的なコードの書き方を解説する。
• 「実は標準関数を使えば一発で解決できる問題に、面倒臭い書き方で対応して いる」ということがよくあるので、書籍全体を通じてそうした 誤解を解く知識 を随所に織り交ぜていく。
こちらからの逆提案 • Juliaの入門的解説書。日本語でまとまった情報があまり提供されてい ないJuliaの仕様や特徴を理解してもらう。(ここまでは同意) • 3部構成: ◦ 入門編:Juliaの仕様やコンセプトを理解してもらい、基本的な文法 の解説をして「Julia を使える」ようになってもらう
◦ 基本編:Julia の標準ライブラリ関数や固有の機能を詳解(>紹介) し、Julia を Juliaらしく使いこなす ことを目指す ◦ 実践編:実際の応用として執筆時点でホットな話題に着目し、より具 体的で実用的な実践への発展を目標とする
なんやかんや • 2023/03/15 刊行! https://twitter.com/antimon2/status/1635765451220459520
本日の本題はここから…
サンプルコード公開 • 刊行直前頃に、作り貯 めておいた Jupyter Notebook 形式のサ ンプルコードを Github で公開
https://github.com/antimon2/JuliaBook2023Samples.jl
サンプルコード公開 • 刊行直前頃に、作り貯 めておいた Jupyter Notebook 形式のサ ンプルコードを Github で公開
• (『“py”がつく』実績解除) https://github.com/antimon2/JuliaBook2023Samples.jl
JupyterLab • ご存じ Python ベースの Notebook 環境(IDE) • 言語カーネルを追加することで Python
以外の言語も扱える • もちろん Julia 用のカーネルも 存在(IJulia.jl) • てか Jupyter は 「Julia」+「Python」+「R」 から命名されたのは有名な話 ◦ “t” と “r” の間の “e” はどこから来 たの? 突っ込むところまでがセット w https://jupyter.org/
Pluto.jl • Pure Julia の Notebook 環 境 • シンプル・軽量を謳っている
• Julia の本だからこっちでも良 かったんじゃないの? ◦ というツッコミが入る可能性も当然 あったのですが… https://plutojl.org/
公開サンプルコードに JupyterLab を 採用した理由
JupyterLab vs Pluto.jl (1) JupyterLab (Jupyter Notebook) • セルごとの実行もできる(REPLと同じ感 覚)し、一括で実行もできる
• セルタイプを「Code」「Markdown」など と切り替えができる • 多機能で、多くの機能がキーボードショート カットでも操作できる 個人的にはセルのコピー機能が重宝してい る • ファイル形式は .ipynb 形式(各種メタ情報 や出力結果なども保持するJSON形式) Pluto.jl • セルの変更が、依存する他のセルに影響し 自動で再実行される (ノートブックを開いた直後は全て再実行が 走るので重い処理が書いてあると重い) • セルはJuliaの有効な式が入力できるだけ、 ただし `md”~”` で markdown を入力 できる(markdown文字列オブジェクト) • シンプルすぎてセルのコピー機能すらない (自分が知らないだけかもしれない…) • ファイル形式は .jl 形式(普通のJuliaソー スファイル形式、メタ情報はコメントとして 埋め込まれる) 基本機能の比較
JupyterLab vs Pluto.jl (2) JupyterLab (Jupyter Notebook) • セルの実行結果が特殊なオブジェクトの場 合は適切なレンダリング(例:画像(グラフプ
ロット含む)、表形式、Markdown等) • セルの先頭文字によって特殊入力(“?” で ヘルプ、“]” でパッケージモード等) • 『REPL でできることはほぼなんでもでき る』環境 ◦ module 定義できる ◦ ソフトスコープ(だったと思う、要確認) ◦ 複数行入力等 Pluto.jl • セルの実行結果が特殊なオブジェクトの場 合は適切なレンダリング(例:画像(グラフプ ロット含む)、表形式、Markdown等) • 特殊入力システムはない(“using XXX” 等 としたときそのパッケージが未導入なら勝 手に導入してくれる便利機能はあり) • 色々制限あり: ◦ module 定義できない ◦ ハードスコープ(だったと思う、要確認) ◦ 複数行入力したかったら明示的にブロック (begin~end)を記述する必要あり Julia の実行環境としての機能比較
JupyterLab vs Pluto.jl (3) • module が定義できない ◦ Julia の入門書として「module」の定義は当然必要になってくるがそれがサン
プルコードとして提供できない • 標準出力が直感的に表示できない(できなかった) ◦ 執筆時点 ◦ こちらは昨年辺りのバージョンで改善され普通に `println()` の結果がセル の下に表示されるようになった • REPL との感覚があまりに違いすぎる ◦ 書籍内のコードはほぼ全て「REPL に打ち込んで動かしてみる」という体で記述 していたのでそれに全く合わない Pluto.jl を採用しなかった決定的な理由
JupyterLab vs Pluto.jl (4) • REPL との感覚の差があまりない ◦ 書籍内のコードはほぼ全て「REPL に打ち込んで動かしてみる」という体で記述
していたのでそれとかなりよくマッチする • プレイグラウンドも充実している ◦ MyBinder、Google Colab、Studio Lab 等でオンラインで実行できる ◦ MyBinder と Studio Lab についてはリポジトリトップに launch ボタンも ◦ (なお Pluto.jl 形式のノートブックも MyBinder で実行できる) • REPL で実行する用の .jl ファイルも簡単に出力できた ◦ jupytext を利用 JupyterLab を採用した建設的な理由
結論 • Jupyter notebook (JupyterLab) やっぱよくできてる • 今回の要件には Jupyter notebook
形式が最適
補足(弁護) • Pluto.jl も「実験結果の共有」には便利だよ ◦ ノートブック編集画面の見た目そのままHTML化 ◦ HTML 形式で出力すると 元の
.jl ファイル (Pluto.jl ノートブック形式)のダウンロードもでき る • 要は目的による使い分け・棲み分け
まとめ
まとめ • Jupyter 良い! • Julia も良いよ!
おまけ
数学と物理における Juliaの活用 • 7/10-12 九州大学(福岡)に 行ってきます • Julia のチュートリアル講演して きます(3コマのうち後ろ2コマ、
約2時間(!)) • オンライン視聴できる(まだ申込 受け付けている)そうなので、ご 興味があればぜひ! https://akio-tomiya.github.io/julia_imi_workshop2023/
実践Julia入門 • 2023/03/15 刊行! • ご興味があればぜひ! https://twitter.com/antimon2/status/1635765451220459520
ご清聴ありがとうございます。