MIT発の高度な数値処理をプログラミングできるJuliaの最新情報を紹介

2020年8月20日(木)
松下 康之 - Yasuyuki Matsushita
Pythonに替わろうとする新しいプログラミング言語、Juliaの最新情報を紹介する。

プログラミング言語Julia

MITの研究者が開発したプログラミング言語Juliaのコミュニティは、オンラインカンファレンスとなる「JuliaCon 2020」を開催した。Juliaは、ハイレベルな数値演算やデータ解析など利用されるPythonの「遅い」という問題を克服するために作られた言語だ。2009年にMITの数理研究者4名によって開発が始められ、2012年にオープンソースとして公開された。プログラミング言語としては、まだ若いほうと言える。IT業界の他のカンファレンスと同様に、2020年のカンファレンスは7月29日から31日にかけてオンラインイベントとして実施された。今回はその中から「State of Julia」と呼ばれるキーノートセッションと、対話型の実行環境を実装するPluto.jlを解説したセッションを紹介する。

前述のとおり、Juliaは2009年に当時MITに在籍していた4人の研究者が開発を始めたプログラミング言語で、2012年にはオープンソースソフトウェアとして公開が始まった。数値解析などの複雑な数式をシンプルに記述できることに加えて、C言語に劣らない高速性を売りにしており、Pythonに次ぐデータサイエンティスト向けの言語としてシェアを徐々に伸ばしている。

言語そのもののイントロダクションはコミュニティが翻訳した日本語のドキュメントサイトを参照されたい。

日本語サイト:JuliaTokyo

最新の情報は英語のサイトから参照してほしい。

英語のドキュメントサイト:Julia Documentation

Juliaの概要をかいつまんでまとめると、以下のようになる。

  • 高速であること
  • 動的型付けを採用していること
  • Packageという外部のモジュールを通してさまざまな拡張が可能であること
  • ハイレベルな記述が可能であること
  • オープンソースソフトウェアであること

またJupyter NotebookやVisual Studio Codeなどのエディターを通して、インタラクティブに実行できることも大きな優位点だろう。

最新版となるJulia 1.5の特徴

今回のセッションはそのJuliaの最新バージョンに関する解説となる。スピーカーはMIT時代からJuliaの開発を継続して行っているJeff Bezanson氏とStefan Karpinski氏だ。二人はともにJulia Computingの創業メンバーである。Julia ComputingはJuliaに対するサポートサービスを提供するベンチャーで、Juliaに関連する製品やサポートをエンタープライズ企業などに提供している。

Julia Computingのプロダクト概要:Products Overview - Julia Computing

State of Julia(Juliaの現在)を解説

State of Julia(Juliaの現在)を解説

動画:JuliaCon 2020 | State of Julia | Jeff Bezanson & Stefan Karpinski

まずは最新バージョンのトピックとして、モダンなプログラミング言語であれば避けて通れないマルチスレッディングについて解説を行った。これはバージョン0.5の段階でも実装されていたが、1.3以降でまったく新しい形で実装されたということを説明した。特に「スレッド数が変化した後に使わなくなったCPUコアをシステムに返すための機能」が強化されていると語った。

マルチスレッディングに関する解説

マルチスレッディングに関する解説

またマルチスレッディングに関するベンチマークとして1.3、1.4、そして最新の1.5において徐々に性能が高くなっていることを紹介した。

マルチスレッディングに関するベンチマーク結果

マルチスレッディングに関するベンチマーク結果

ただ次のトピックであるLatency(遅延)についてはまだまだ改善の余地があるとして、1.4までは性能が落ちていたが、1.5になってようやく改善できたと語った。

Latencyについてはまだ改善の余地がある

Latencyについてはまだ改善の余地がある

その後、Debuggerについて紹介した後に言及したのは、Packageに関するアップデートだ。PackageはJuliaを拡張するための仕組みで、Rustで言うところのCrateと呼ばれるライブラリーと同等のものを指す。

Packageの概要。すでに3回ゼロから書き直されている

Packageの概要。すでに3回ゼロから書き直されている

ただ、Package自体も何度もスクラッチから書き直されているそうで、現在のPackageは3つ目の仕様であるという。プロジェクトごとに実行環境を作ること、依存関係をすべて記録できること、バージョン管理が行えること、どの環境でも実行できる再実行性を保持すること、などがデザインゴールであるという。

Packageの過去の履歴

Packageの過去の履歴

Packageについては、DockerHubやGitHubのようにユニバーサルに利用できるリポジトリーの実装を計画しているとして、AWSのインフラストラクチャーを利用して世界各地に複数のリポジトリーを実装する予定であることが説明された。

Packageリポジトリーの実装

Packageリポジトリーの実装

サーバーサイドのコンポーネントもJuliaで実装されており、すでに10ヶ所にデプロイされていることが解説された。

世界に拡がるPackageのリポジトリー

世界に拡がるPackageのリポジトリー

またエコシステムについても、CSVファイルからデータを読み込むPackageやGitHubが開発を推進していたAtomエディターでの拡張機能、JunoやVisual Studio Code上の拡張機能などが紹介された。

Juliaを拡張するエコシステムの一部を紹介

Juliaを拡張するエコシステムの一部を紹介

特に会話型でリアクティブな開発環境であるPluto.jlにも触れ、Jupyter Notebookの代替となり得る有力なコンテンダーとして開発が進められていることを紹介した。

会話型の開発環境Pluto.jl

ここからはPluto.jlについて解説したセッションを紹介して、Pluto.jlについて簡単に触れていこう。

Pluto.jlは「インタラクティブノートブック」と称されているように、Juliaを対話型で実行デバッグするための環境であり、Pluto自体がJuliaで書かれているというものだ。

動画:JuliaCon 2020 | Interactive notebooks ~ Pluto.jl | Fons van der Plas

GitHub:https://github.com/fonsp/Pluto.jl

Pluto.jlのリポジトリーは開発者であるFons Van Der Plas氏個人のリポジトリー内に存在するということからも分かるように、コミュニティの由来のソフトウェアである。単にコードを入れて実行するだけではなく、変数の依存関係なども理解する機能も備え、Jupyter Notebookの弱点を補完する意味で大きなアドバンテージを持っていると言えるだろう。

Pluto.jlの説明を行うFons Van Der Plas氏とMikolaji Bochenski氏

Pluto.jlの説明を行うFons Van Der Plas氏とMikolaji Bochenski氏

GitHubのProfileによればVan Der Plas氏はドイツのベルリン、Bochenski氏はスウェーデンに住むデベロッパーだ。

Jupyter Notebookの弱点を挙げて説明

Jupyter Notebookの弱点を挙げて説明

実際にPluto.jlがどう動くのかは動画を確認されたいが、単に入力をキーボードから受けるだけではなくHTMLのウィジェットを利用できるところが見てとれる。

Pluto.jlでCSVを読み込みグラフ化した後にデータをスライドバーから変化させるデモ

Pluto.jlでCSVを読み込みグラフ化した後にデータをスライドバーから変化させるデモ

そしてリアクティブなプログラミングパラダイムを実装するために重要なポイントは、コードとして教示されている内容がすべて評価されていること、そのためには入力されたセルの内容が常に再評価されて実行されること、消去されたコードや変数も常に反映されることを挙げ、これらの機能が実装されていることを説明した。

リアクティブなノートブックを実装するためのポイント

リアクティブなノートブックを実装するためのポイント

実際に値を変えたり、コードを変えたりした際にどのようにそれが評価されるのかについては、Pluto.jlが静的コード解析を行っているということだ。

この例では最初にaに10が代入され、次にaを二乗したものがbに代入、その後bに5を加えたものがcに代入されるという順番が定義される

この例では最初にaに10が代入され、次にaを二乗したものがbに代入、その後bに5を加えたものがcに代入されるという順番が定義される

最後に開発したコードを共有するための仕組みとして、URLを送るだけで誰でも環境設定をせずに実行ができるというデモを行った。

グラフを書くコードを共有しても即座に実行できる

グラフを書くコードを共有しても即座に実行できる

これは教育の現場では非常に重宝する機能で、グループでコードを共有するような場合には大きな力を発揮するだろう。

実際にPluto.jlを教育の現場で使うことが実践されており、ベルリン工科大学とMITでは2020年秋から試行が始まることが説明された。

Juliaはまだ1.5というバージョンでまだまだ安定した状態ではないかもしれないが、これからデータサイエンティストを目指すエンジニアはPythonだけではなくJuliaの動向にも注目するべきだろう。またAndroidでJuliaを開発実行できるツールや、Webサーバーの実装などのインフラストラクチャーやモバイル周りの拡張も加速していることから、要注目のテクノロジーと言えるだろう。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

システム開発イベント

OpenShift Commons Gatheringで語られたOpenShiftに最適なCI/CDとは

2021/3/2
レッドハット株式会社のクラウドソリューションアーキテクト、北山晋吾氏によるCI/CDのセッションを紹介。
働き方イベント

オンラインならではの工夫でリアル開催を凌ぐ盛り上がりに! 「3年後の未来を描け! 悩み爆発 クリエイター1000人祭り」レポート

2021/2/9
2020年12月にオンラインで開催された「3年後の未来を描け!悩み爆発クリエイター1000人祭り」を紹介します。
ITインフライベント

ビルドからリリースまでを抽象化するWaypointにディープダイブ

2021/2/4
HashiCorpがリリースしたWaypointの内部構造など詳細について解説されたセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています