コンテンツにスキップ

1. はじめに

このチュートリアルは Julia プログラミング言語と分光学への応用を紹介します。 プログラミング未経験の読者、あるいは他言語で少しだけプログラミングを経験したことのある読者を想定しています。 Julia によるプログラミングの基礎を学び、分光学におけるデータ解析と可視化に Julia を使う例を示すことが目的です。 網羅的な Julia 入門ではなく、自分の分光学の研究プロジェクトで Julia を使い始めるための出発点として書かれています。

Julia プログラミング言語 は、高性能な数値計算・科学技術計算のために設計された、高水準の汎用プログラミング言語です。 標準では JIT (just-in-time) コンパイル方式を採用しており、必要に応じてコードをコンパイルします。

Julia のコミュニティは小さいながらも、科学技術計算という分野で確固たる地位を築いています。 CERN では大型ハドロン衝突型加速器のデータ解析に、NASA のジェット推進研究所 (JPL) では宇宙機のモデリングとデータ解析に使われています。 また、多くの製薬会社が創薬や薬剤開発に Julia を利用しています。

データ解析に使えるソフトウェアはたくさんあります。 そもそも、なぜプログラミング言語を学ぶ必要があるのでしょうか。 まず、プログラミング言語は GUI ベースのプログラムや表計算ソフトよりもはるかに強力です。 繰り返し作業を自動化したり、別の文脈で再利用できるコードを書いたりできます。 独自の解析ソリューションを開発し、他の人と共有することも可能です。 プログラミング言語は GUI ベースのプログラムや表計算ソフトよりも柔軟でもあります。 私が特に Julia 言語を選ぶ理由はいくつかあります。

  1. 最初から数値計算・科学技術計算のために設計されており、充実した科学計算ライブラリを備えています。
  2. Python や Lisp などの良いアイデアを取り入れていて、学びやすい言語です。
  3. 反応が良く、対話的に使えます。Jupyter notebook やコマンドラインの REPL (Read Evaluate Print Loop) で利用できます。VS Code 用の Julia 拡張機能も、コードを書いて実行するための対話的な環境を提供します。
  4. 最新の技術 (JIT と LLVM) を使い、最初から性能を意識して設計されています。速度は C や Fortran に匹敵します。性能が目標であれば、Julia ひとつで完結し、第二の言語を学ぶ必要はありません。
  5. 科学技術ソフトウェアは非常に高価になりがちです。Julia は無料かつオープンソースで、親切なコミュニティ があります。
  6. 再現性が重視されており、コードの共有と結果の再現を容易にするパッケージ管理システムが組み込まれています。科学のためのコードを設計するうえでこれは欠かせません。
  7. 優れたプロットライブラリ Makie.jl の存在が決め手でした。高速で対話的、API も洗練されています。

Visual Studio Code (VS Code) は、Microsoft が開発した無料・オープンソースのコードエディタです。 軽量でクロスプラットフォームに対応しており、Julia を含む多くのプログラミング言語をサポートしています。 ここで VS Code のすべての機能を扱うわけではありませんが、ぜひご自身で触ってみて、公式ドキュメント の動画やチュートリアルもチェックしてください。 言語別のチュートリアルもあり、Julia in VS Code もそのひとつです。

Julia と Visual Studio Code のインストール

Section titled “Julia と Visual Studio Code のインストール”
  1. 公式サイト の手順に従って、最新版の Julia をインストールします。
  2. Visual Studio Code をダウンロードしてインストールします。
  3. 拡張機能マーケットプレイス で “Julia” を検索し、VS Code 用の Julia 拡張機能をインストールします。

最初はターミナル上で Julia の REPL (Read-Eval-Print Loop) を使います。VS Code は後ほど使います。 コードエディタは多数ありますが、無料で多くの言語で広く使われている VS Code を採用します。

VS Code の コマンドパレット について簡単に説明し、使い方を見せます。

  1. ターミナルで julia と入力して Julia REPL を開いてみましょう。
  2. REPL で versioninfo() と入力し、Julia が正しくインストールされていることを確認します。
  3. Julia で最初のプログラムを書いてみましょう。REPL で print("Hello, world!") と入力し、コンソールに “Hello, world!” を表示します。

この節ではファイルとフォルダの概念を復習し、Visual Studio Code を一通り紹介します。 チュートリアル用ファイルや今後の実験コードを保管するためのプロジェクトフォルダを作り、データ保管と解析の方法を一貫した形に保ちます。 また、Julia の環境 (environment) を扱い、プロジェクトごとに新しい環境を作る方法を学びます。これは再現性の確保とパッケージの衝突回避のために重要です。

コンピュータ上のファイルとフォルダ

Section titled “コンピュータ上のファイルとフォルダ”

コンピュータでは、ファイルはフォルダ (ディレクトリ) に保存されます。フォルダはファイルだけでなく他のフォルダを含むこともできます。 後で目的のものを見つけやすく、また複雑なコードを書きやすくするために、ファイルとフォルダの整理方法を意識しましょう。 科学では、再現性のためにデータとコードを整理しておくことが重要です。

次の手順でチュートリアルと実験用のプロジェクトフォルダを作りましょう。

  1. macOS では ~/Documents/ に移動して projects という新しいフォルダを作ります。Windows では C:\Users\<username>\Documents\ に移動して同じく projects というフォルダを作ります。ここに自分のプロジェクトを保存していきます。

  2. projects の中に tutorials という新しいフォルダを作ります。ここにチュートリアル用のコードを保存します。(後で projects の中に自分のプロジェクト用の別のフォルダを作っても構いません。)

  3. Visual Studio Code を起動し、今作った tutorials フォルダを開きます (メニューから File → Open Folder…)。

  4. 新規フォルダのアイコンをクリックし、programming などの名前で新しいフォルダを作ります。ここにプログラミングチュートリアルのコードと練習問題を保存します。

  5. programming フォルダの中に次のレッスン用のファイルを作りましょう。名前は variables.jllesson1.jl など、好きなもので構いません。

ここまでで、tutorials フォルダの構造は次のようになります。

projects
└── tutorials
└── programming
└── variables.jl

将来的にはいくつかのプロジェクトを抱え、こんな構造になるかもしれません。

projects
├── tutorials
│ └── programming
│ ├── variables.jl
│ └── plotting.jl
└── experiments
├── FTIR
│ ├── data/
│ ├── figures/
│ └── analysis.jl
├── raman
│ ├── data/
│ ├── notes.md
│ └── analysis.jl
└── pump_probe
├── data/
├── figures/
└── analysis.jl

構造の詳細は自由ですが、後から自分でも見つけやすく、他の人にもコードと解析の流れが伝わるように、一貫した構造を保つことが大切です。

プロジェクトフォルダができたので、このプロジェクト用の環境を作りましょう。 Julia における環境とは、特定のプロジェクトで使うパッケージとそのバージョンの集合のことです。 これは再現性の確保とパッケージ衝突の回避のために重要です。 環境を使わずにいると、不要なパッケージが大量にインストールされたり、異なるバージョン間で衝突が起きたりします。 すると、その解決のためにデバッグに時間を取られることになり、楽しくありません。 Julia ではパッケージマネージャを使って環境を作成・管理できます。 先ほど作った tutorials フォルダ用に環境を作ります。 実験を始めたら、プロジェクトごとに別のフォルダで新しい環境を作ることになります。

まず、Visual Studio Code ウィンドウの左下を見てください。 “Julia env: v1.12” のような表示があるはずです。 最初の “Julia env:” の部分が、Julia 環境にいることを表しています。 次の “v1.12” の部分は、現在使用している Julia のバージョンです。 これはデフォルトの Julia 環境、つまりグローバル環境を使っているという意味です。 一般的には、プロジェクトでグローバル環境は使いたくありません。 私自身、簡単なテストにはグローバル環境を使うこともありますが、プロジェクトでは常に新しいフォルダと環境を作るようにしています。

前節で作った tutorials フォルダ用に環境を作りましょう。 まだ開いていなければ、Visual Studio Code で tutorials フォルダを開きます。 そして、以下の手順で新しい環境を作成します。

  1. コマンドパレット (Ctrl+Shift+P) を開き、Julia: Start REPL を選んで Visual Studio Code 内で Julia REPL を起動します。

  2. REPL で ] を入力してパッケージマネージャモードに入ります。 ここでも (@v1.12) pkg> のように表示され、グローバル環境にいることがわかります。

  3. activate . と入力して、現在のフォルダに新しい環境を作ります (. は現在のフォルダを意味します)。 表示が (tutorials) pkg> に変わり、新しい環境に切り替わったことがわかります。

  4. 後ほど使うプロットパッケージ GLMakieCairoMakie を追加しましょう。これらが何なのかは、実際に使うときに説明します。

tutorials フォルダに Project.tomlManifest.toml という 2 つのファイルが新しく作られました。 これらのファイルには、この環境で使われているパッケージとそのバージョン情報が記録されています。 Julia はこれらのファイルを使って、利用しているパッケージのバージョンを正確に管理し、将来も同じ環境でコードが動くことを保証します。 再現性の確保や、他の研究者とコードを共有するうえでとても重要です。

今後このフォルダを Visual Studio Code で開くと、この環境が自動的に有効になります。 試してみましょう。 VS Code を一度閉じて開き直してください。 左下の環境表示が “Julia env: v1.12” ではなく “Julia env: tutorials” になっているはずです。 そうなっていなければ、環境表示をクリックし、VS Code ウィンドウ上部に出てくるドロップダウンから tutorials 環境を選んでください。

Makie とその依存パッケージのインストールとコンパイルが終わったら、パッケージマネージャモードで status または st と入力して、この環境にインストールされているパッケージ一覧を確認できます。

セットアップ後の環境とファイル構造は以下のようになるはずです。

  1. VS Code 用の日本語拡張機能をインストールしてみましょう。
  2. コマンドパレットから VS Code のテーマを変更する設定を探してみましょう。
  3. コマンドパレットからフォルダを開いてみましょう。
  1. tutorials フォルダに “hello_world.jl” というファイルを作り、println("Hello, world!") と入力します。Shift+Enter でその行を実行しましょう。
  2. Julia 公式ドキュメント docs.julialang.orgprintln 関数のドキュメントを探してみましょう。シグネチャはどうなっていて、print とはどう違うでしょうか?