1から始める Juliaプログラミング

1から始める Juliaプログラミング

  • 進藤 裕之 奈良先端科学技術大学院大特任准教授・MatBrain(株)代表取締役 博士(工学)
  • 佐藤 建太 理化学研究所

新しいプログラミング言語「Julia」を学ぶための1冊。基礎から実践まで,幅広く解説

ジャンル
発行年月日
2020/04/17
判型
A5
ページ数
206ページ
ISBN
978-4-339-02905-5
1から始める Juliaプログラミング
在庫あり
2営業日以内に出荷致します。

定価

2,970(本体2,700円+税)

カートに入れる

電子版を購入

購入案内

  • 内容紹介
  • まえがき
  • 目次
  • レビュー
  • 著者紹介
  • 書籍紹介・書評掲載情報
  • 広告掲載情報

「Pythonのように書けて,Cのように動く」新しいプログラミング言語Juliaの基本的な文法や使い方から,実践的な内容として,標準ライブラリには含まれない数値計算やデータの可視化などのパッケージの活用まで解説する。

◆対象者◆
* Juliaに興味を持ち,初めて触れるプログラミング学習者
* 科学技術計算を高速かつ手軽に行いたい学生や研究者

◆書籍の特徴◆
Juliaは2012年に開発版が公開され,2018年に安定版のバージョン1.0がリリースされた新しいプログラミング言語である。JuliaはPythonやRなどのスクリプト言語のように手軽に使用できながら,Cなどの高速なプログラミング言語にも匹敵する実行速度をもち,科学技術計算分野を中心に大きな注目を集めている。2019年には,米国の工業・応用数学に関する学会であるSIAM(Society for Industrial and Applied Mathematics)が4年ごとに選ぶJ. H. Wilkinson賞をJulia開発者らが受賞し,英国の科学誌NatureではJuliaの特集記事も組まれた。Juliaのダウンロード数も同年大きく数を伸ばし,人気は今後も高まっていくものと考えられる。

このように欧米ではJuliaが注目を集め,関連書籍が多数出版されている一方で,2020年初めの時点では,日本語で書かれたJuliaの書籍はほとんど出版されておらず,インターネット上でもJuliaを体系的に解説する日本語の資料は見つからない。本書は,Juliaを最初期から使用してきた二人の著者による,Julia初学者に向けた解説書である。内容はJuliaの初歩から実践的なテクニックまでをコンパクトにまとめている。まず1章でJuliaのセットアップと実行の仕方を説明し,2章では基本構文を始めとして,関数・データ型・メタプログラミング・パッケージなど,基礎的な言語機能を解説する。3章では,線形代数・入出力・PythonやRとの連携・可視化など,ライブラリの実用的な使い方を見る。最後の4章では,Juliaのプログラムを高速化するのに必要なプロファイリングの方法と最適化のポイントを確認する。

本書を読むに当たり,初歩的なコンピュータ操作の知識があれば十分ではあるが,PythonやMATLABなど,他のプログラミング言語の知識があれば大いに役立つだろう。特にMATLABやGNU Octaveとは構文的に共通する部分が多いので,Juliaの習得にかかるコストは低くなる。プログラミング学習者は,自分の使うプログラミング言語の不足を補うために本書を通じてJuliaを学習すると良いだろう。また,数値計算や機械学習などの科学技術計算を高速かつ手軽に行いたいと考えている学生や研究者には是非ともJuliaを試してほしい。本書はそのような読者にも大いに役立つと信じている。

世の中は第三次人工知能(AI)ブームを迎え,ビッグデータ,データサイエンス,機械学習などのワードが世間を賑わせている。そのような背景の中,PythonやMATLABなどのプログラミング言語や数値計算ソフトウェアが人気を集めており,手軽に扱えて高速に動作するプログラミング言語は,さまざまな分野で今後ますます重要性を増していくだろう。

あらゆるプログラミング言語には一長一短があり,どのプログラミング言語を選択するかは,つねに悩ましい問題である。スクリプト言語は,型を明示せず簡潔に記述できるが,場合によっては動作速度が十分でない。一方,コンパイル型の言語は型にうるさく,しばしば冗長な記述となるが,実行速度はスクリプト言語と比較して十分に速い。このようなジレンマを解消できるプログラミング言語の一つとして,近年ではJuliaが注目を集めている。

Juliaは,アメリカのマサチューセッツ工科大学(MIT)で開発された新しいプログラミング言語で,その最大の特徴は,簡潔な文法と高速な実行速度が両立している点にある。それ以外にも,Lispから影響を受けたと思われる多重ディスパッチやメタプログラミングなど,他のプログラミング言語にはあまりない魅力的な機能が満載である。

「Juliaっていう名前を最近よく聞くけれど,どんなプログラミング言語なんだろう?」
「PythonやMATLABとどこが違うの?」

そんな声も周囲からよく聞かれるようになってきた。

そこで,本書ではJuliaを初めて学ぶ人のために,Juliaの言語設計や基本的な文法について1から説明し,Juliaについて広く知っていただくことを第一の目的としている。また,後半では,Juliaをさらに使いこなすために,主要な外部パッケージの紹介や,高速化のためのプロファイリングやコード最適化など,やや高度な内容についても解説を行っている。そのため,すでにJuliaを使用しているユーザにとっても有益な情報となることを期待している。

私が最初にJuliaに出会ったのは2012年頃で,まだバージョンは0.2であった。基本的な機能は当時から備わっていたが,新しい文法の導入や仕様の改変に積極的であり,これまでは一部の企業やアカデミアでの利用に留まってきた。しかし,ここ数年でJuliaのバージョンは1.0に到達し,多くの外部パッケージが精力的に開発され,それに伴いユーザコミュニティも大きく拡大した。Juliaを学ぶなら,まさにいまが非常によいタイミングであると思う。

本書が,Juliaについて学ぶための入門書として,また,Juliaへの一層の興味をかき立てるための一助となれば幸いである。

最後に,貴重な時間を割いて執筆に協力していただいた共著者の佐藤建太氏,Juliaに関するさまざまな情報交換をさせていただいたJuliaTokyoのメンバー,そしてこの企画を実現していただいたコロナ社の方々に深く感謝する。

2020年2月    進藤裕之

1.Julia入門
1.1 次世代のプログラミング言語Julia
 1.1.1 Juliaとは
 1.1.2 本書の構成
 1.1.3 なぜJuliaが必要なのか?
1.2 インストール
 1.2.1 REPL
 1.2.2 Jupyter Notebook
 1.2.3 エディタとIDE
1.3 Juliaの情報
 1.3.1 Julia公式ページ
 1.3.2 Juliaのソースコード
 1.3.3 Julia Discourse
 1.3.4 JuliaCon
 1.3.5 JuliaTokyo

2.Juliaの言語機能
2.1 Juliaの基本
 2.1.1 変数
 2.1.2 プリミティブ型
 2.1.3 任意精度演算
 2.1.4 定数
 2.1.5 基本的な演算子
 2.1.6 更新演算子
 2.1.7 複素数
 2.1.8 文字列
 2.1.9 Unicode文字列
 2.1.10 文字列の関数
 2.1.11 正規表現
2.2 制御構文
 2.2.1 条件評価
 2.2.2 短絡評価
 2.2.3 ループ
 2.2.4 try/catch/finally
2.3 関数
 2.3.1 可変長引数
 2.3.2 オプショナル引数
 2.3.3 キーワード引数
 2.3.4 匿名関数
2.4 型
 2.4.1 型の宣言
 2.4.2 型の階層関係
 2.4.3 Nothing型
 2.4.4 複合型
 2.4.5 Union型
 2.4.6 パラメトリック型
 2.4.7 パラメトリック型の階層関係
 2.4.8 抽象型のパラメトリック型
2.5 コレクション
 2.5.1 タプル
 2.5.2 名前付きタプル
 2.5.3 リスト
 2.5.4 辞書
 2.5.5 集合
 2.5.6 コレクション共通の関数
 2.5.7 コレクションのイテレーション
2.6 多次元配列
 2.6.1 初期化
 2.6.2 基本的な操作
 2.6.3 インデクシング
 2.6.4 多次元配列の演算
 2.6.5 ブロードキャスティング
 2.6.6 map,reduce,filter
 2.6.7 サブ配列
2.7 モジュール
 2.7.1 モジュールの機能
 2.7.2 既存モジュールの利用
 2.7.3 using文の注意点
 2.7.4 新しいモジュールの定義
 2.7.5 モジュールの相対パス指定
 2.7.6 ファイルの分割
 2.7.7 他のモジュールで定義された関数の拡張
2.8 メタプログラミング
 2.8.1 シンボル
 2.8.2 構文木の表現
 2.8.3 構文木の補間
 2.8.4 構文木の評価
 2.8.5 マクロの機能
 2.8.6 標準ライブラリにあるマクロ
 2.8.7 マクロの定義
 2.8.8 識別子の変換規則
2.9 C言語の呼出し
 2.9.1 ccall構文
 2.9.2 ポインタの受渡し
 2.9.3 構造体の受渡し
2.10 外部プログラムの呼出し
 2.10.1 コマンドの作成・実行
 2.10.2 コマンド実行の注意点
 2.10.3 パイプライン処理
 2.10.4 より発展的なコマンドの作成方法
2.11 パッケージ
 2.11.1 パッケージ管理の基本
 2.11.2 プロジェクトのパッケージ管理
 2.11.3 プロジェクトの有効化
 2.11.4 パッケージの作成

3. Juliaライブラリの使い方
3.1 線形代数
 3.1.1 ベクトルの演算
 3.1.2 行列の演算
 3.1.3 行列の種類
 3.1.4 行列分解
 3.1.5 BLAS
3.2 ファイル入出力
 3.2.1 ファイルとストリーム
 3.2.2 シリアライズとデシリアライズ
 3.2.3 JLD2
 3.2.4 JSONファイルの入出力
 3.2.5 XMLファイルの入出力
3.3 他言語の呼出し
 3.3.1 Pythonの呼出し準備
 3.3.2 Python関数の呼出し
 3.3.3 Pythonモジュールの利用
 3.3.4 Rの呼出し準備
 3.3.5 R関数の呼出し
 3.3.6 Rオブジェクトの操作
 3.3.7 REPLのRモード
3.4 ドキュメンテーション
 3.4.1 docstringの読み方
 3.4.2 Markdown
 3.4.3 関数のdocstring
 3.4.4 関数以外のdocstring
 3.4.5 Documenter.jl
 3.4.6 Documenter.jlの使用例
3.5 可視化
 3.5.1 PyPlot.jlのインストール
 3.5.2 基本的なプロット
 3.5.3 プロットの編集
 3.5.4 サブプロットの作成
 3.5.5 オブジェクト指向インタフェース

4.Juliaの高速化
4.1 プロファイリング
 4.1.1 高速化の事前準備
 4.1.2 実行時間の計測
 4.1.3 実行時間のプロファイリング
 4.1.4 メモリ割当てのプロファイリング
4.2 最適化しやすいコード
 4.2.1 コードの書き方による性能差
 4.2.2 コンパイラの概要
 4.2.3 型に不確実性のあるコード
 4.2.4 グローバル変数への参照
 4.2.5 コレクションや構造体での型不確実性
 4.2.6 メモリレイアウト
4.3 メモリ割当ての削減
 4.3.1 配列のメモリ割当て
 4.3.2 配列の再利用
 4.3.3 ブロードキャスティングによるメモリ削減
 4.3.4 特殊な配列型の利用
4.4 コンパイラへのヒント
 4.4.1 境界チェックの省略
 4.4.2 浮動小数点数演算の高速化
 4.4.3 関数のインライン化
 4.4.4 @simdマクロによる並列処理

索引

読者モニタレビュー【ceptree様(大学院生,専門:EMC,数値計算)】

本書には,Juliaの環境構築(1章)から,言語仕様の説明(2章),ライブラリの使い方(3章),そして高速化の方法(4章)に至るまでの幅広い内容が,200ページ弱にコンパクトにまとまっており, 本書を読むだけでJuliaについて一通り要領よく学ぶことができる。
特に,4章では,具体例とサンプルコードを交えながらJuliaの高速化の方法が紹介されており,Juliaで科学技術計算を行いたい人にとっては必見の内容になっている。例えば,行列演算のメモリプロファイリングと配列の再利用による改善方法や,型推論において型の不確実性が起こる要因の具体例(ルンゲ・クッタ!)における詳細な解説とその解決の仕方など,まさにこれが見たかった! という情報が載っている。
はじめてJuliaを学ぶ人はもちろんのこと,ある程度Juliaを触ったことのある人にもおすすめできる一冊となっている。

読者モニタレビュー【高橋一博様(自動車業界,先行開発)】

Pythonを使っていると時折Juliaを勧めてくるコメントを見ていたため気になっていました。Julia開発者のコメントにもあるようにかなり欲張りな言語だと思います。C言語だけでなくPythonのプログラムも呼び出せる(かつ計算速度が早い)のは大変な強みです。さらに高速化するためのプロファイリングが標準で備わっているのは非常に魅力的です。これからJuliaに切り替えようと思っていた自分にはちょうど良い内容の1冊でした。今後、Juliaで行う数値解析などのより実用的な書籍も期待しております。

読者モニターレビュー【 QuantDeveloper 様(大手金融機関,専門:金融工学)】

Juliaを初めて使う人から中級者まで幅広く役立つ本といえるだろう。

比較的薄い本だがカバーされているトピックは広く,説明の仕方に無駄がないという印象だ。初心者向けとしては,環境構築に始まり言語仕様が網羅的に書かれているので,入門書として使える。サンプルコードはシンプルなので初心者でもついてこられるだろう。Julia初心者とはいっても他言語の経験がある人がほとんどと思われるため,Pythonなど他言語との違いに適宜言及しながら説明されているので理解しやすい。また,オブジェクト指向やメタプログラミングなどの基礎についても,Juliaに限った話ではない一般的な内容が,それぞれ簡潔に説明されているので,理解を深められるだろう。

一方,Julia経験者にとっても,本の後半ではライブラリの使い方や高速化について詳しく解説されているため,多くの新しい発見があるだろう。特に高速化については型不確実性やメモリレイアウトなど,若干高度な内容も詳細に解説されている。Juliaを使おうとしている人の目的はたいてい,簡潔さと高速化の両立であるため,高速化の方法がこれだけ詳しく書かれているのはありがたい。個人的に特に役に立った箇所は,短絡評価を使った簡潔なコーディング,ファイル入出力(JSON, XML),C/Python/Rなど他言語の呼び出し,などである。

読者モニターレビュー【ヴィンティー 様(医学生,専門:医療データ処理)】

待望のJulia入門書です。Juliaは使うだけなら簡単な言語ですが,その多機能さ,若さゆえの周辺情報の少なさから,使いこなすとなるとハードルの高い部分がありました。本書は「とりあえず使える」のレベルから「効率的なコードを書ける」のレベルまで読者を案内してくれます。

特に有益だった項目を挙げます。『2.8 メタプログラミング』はメタプログラミングという通常のプログラミングとは少し異なる考え方が必要となる分野について丁寧に解説しています。Juliaのパッケージはマクロを使ったものが多く,初心者にとってブラックボックスとなりがちですから,この節はありがたかったです。『3.4 ドキュメンテーション』はパッケージ作成などの他人に見せるコードを書くための助けとなります。4章の『Juliaの高速化』はプログラミングにおける高速化というプロセスそのものを学ぶことができます。テストを用いた動作保証から書いてあります。

これからJuliaを始める人だけでなく,Juliaを使えはするけど細かいところはわからないという人にもおすすめです。

読者モニタレビュー【澁谷拓巳 様(ベネッセ教育総合研究所・研究員,ご専門:教育測定,心理統計)】

本書は日本語で書かれたJulia言語に関する書籍の中でも,Julia言語の幅広い機能とその特徴を,最もていねい,かつコンパクトに記述できている本である。200ページ弱で,Julia言語に備わる基本的機能からメタプログラミング,コードの高速化まで,幅広い内容を取り扱っている。特に優れている点は,(1)公式ドキュメントを意識しつつ,その内容をコンパクトにまとめている,(2)単なるパッケージや機能のTipsではない,(3)パフォーマンスを意識した解説,の3点であろう。

Julia言語を学ぶ上で最も重要な文書は公式ドキュメントであることはよく知られているが,その量は膨大であり,必ずしも入門時点では必要としないような高度な内容が含まれていることもある。本書は,そのうちの入門に必要な内容に限定し,発展的な内容は公式ドキュメントなどを促しており,Juliaのステップアップへの橋渡しをしてくれる。

Julia言語はまだまだ成長・拡大中の言語であり,非標準のパッケージなどは仕様変更やアプデが頻繁におこなわれている。そのため,Julia言語を学び始めるにあたっては,(一部の頻繁に利用される,比較的成熟したものを除けば)特定のパッケージに依存した内容よりも,どんなプログラムを書いても汎用的に通じる知識のほうが必要とされるだろう。その点において,2章における丁寧な基本機能の説明はとても重要であると感じた。

すでにJuliaを頻繁に使う読者にとっても,本書は有用である。4章の高速化の章を読めば,Julia言語のパフォーマンスを十分引き出すための工夫をいかにすればよいのかが,よく分かると思う。

本書は,多機能な可視化パッケージ(PlotsやMakie)や統計分析,アプリケーション開発などにはほとんど触れていないが,それらの発展的なJulia学習の基礎となる知識をもたらしてくれることは間違いない。

amazonレビュー

進藤 裕之(シンドウ ヒロユキ)

佐藤 建太(サトウ ケンタ)

「電子情報通信学会誌」2021年4月号 掲載日:2021/04/02

掲載日:2020/11/02

「日本音響学会誌」2020年11月号広告

掲載日:2020/10/30

「電子情報通信学会誌」2020年11月号広告

掲載日:2020/10/20

日本シミュレーション学会誌「シミュレーション」39巻3号広告

掲載日:2020/07/15

情報処理学会誌「情報処理」2020年8月号広告

掲載日:2020/06/18

「自然言語処理」27巻第2号(2020年6月)

掲載日:2020/06/12

芸術科学会誌「DiVA」48号広告

掲載日:2020/05/08

「電子情報通信学会誌」2020年5月号広告