【lFortran】JupyterでFortranを使う

:::note warn
私個人の話で恐縮ですが、「[ギークハウス新宿](https://geejuku.tokyo/)」というエンジニア中心のシェアハウスの運営に関わっています。

[勉強会・懇親会等のイベント](https://geejuku.connpass.com/)を開催しております。内見等興味ある方はお気軽に[こちら](https://x.com/geejuku)までご連絡ください。
:::

# JupyterLabでlFortranを使ってインタラクティブにFortran開発を始めよう

---
## はじめに

Fortranは科学技術計算の分野で長年使われている言語ですが，従来のワークフローではコンパイル・実行のサイクルが必要で，試行錯誤が少し面倒でした．lFortranとJupyterLabを組み合わせることで，PythonのようにインタラクティブにFortranのコードを実行できる環境を構築できます．

この記事では，lFortranをJupyterLabで使用するための環境構築から基本的な使い方まで，実践的なガイドを提供します．

---
## lFortranとは？

[lFortran](https://lfortran.org/)は現代的なオープンソースのFortranコンパイラで，以下の特徴があります：

- インタラクティブなFortran実行環境（REPL）を提供
  - LLVMをコンパイラ基盤として利用することでJITコンパイルによって実現
- Jupyter対応のカーネルを搭載
- モダンなFortran機能をサポート
- 高速なコンパイルと実行

---
## 環境構築

ここでは，JupyterLabを使ってlFortranを動作させる方法について説明します．
（lFortranをインストールすればVSCodeのJupyter拡張機能をつかって，VSCode上でも動作させることが可能なはずです．）

---
## 必要なツール
以下のツールを準備します。

- **JupyterLab**: インタラクティブなノートブック環境
- **lFortran**: Fortranのインタラクティブ実行を可能にするオープンソースのコンパイラ
- **mambaまたはconda**: 環境構築と依存関係の管理ツール

---
## 手順

lFortranをJupyterLabで使えるようにする手順を説明します．

---

### 1. mamba/condaのインストール
まず，mambaとcondaをインストールします．[Miniforge](https://conda-forge.org/download/)を使うのがおすすめです．

MiniforgeはMinicondaと似ていますが，デフォルトのパッケージ取得元がAnacondaチャンネルの変わりにConda-forgeチャンネルに設定されていることが大きな違いです．

また，Miniforgeをインストールすると，`mamba`と`conda`の両方が使えるようになります．mambaはcondaのC++実装であり，処理がcondaに比べて高速です．

[インストール手順](https://github.com/conda-forge/miniforge?tab=readme-ov-file#install)に従ってMiniforgeをインストールします．

```shell
# UNIX系の場合
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
bash Miniforge3-$(uname)-$(uname -m).sh

# Homebrewの場合
brew install miniforge
```

インストール後、以下のコマンドでmambaが正しくインストールされていることを確認します。

```shell
mamba --version
```

---
### 2. 新しい環境の作成
次に、JupyterLabとlFortran用の環境を作成します。

```shell
mamba create -n lf jupyter lfortran
```

このコマンドは以下を行います．

- `lf`という名前の新しい仮想環境を作成
- JupyterとlFortranをインストール
    - lFortranをインストールすると自動的にlFortranカーネルがJupyterに登録される

環境を有効化します。

```shell
mamba activate lf
```

---
### 3. JupyterLabの起動
以下のコマンドでJupyterLabを起動します。

```shell
jupyter lab
```

ブラウザが自動的に開き、JupyterLabのLauncherページが表示されます。

問題なくlFortranカーネルが登録されていれば，下図のようにFortran(lFortran)のノートブックが選択できるようになっているはずです．

![JupyterLabのLauncher画面](https://private-user-images.githubusercontent.com/21062531/346835581-8152495d-491d-4d86-9804-1d97e86b5589.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzQ4ODMwNzYsIm5iZiI6MTczNDg4Mjc3NiwicGF0aCI6Ii8yMTA2MjUzMS8zNDY4MzU1ODEtODE1MjQ5NWQtNDkxZC00ZDg2LTk4MDQtMWQ5N2U4NmI1NTg5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjIyVDE1NTI1NlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTgwODNkYmE1MDlhOGE2ZTQ2MjRmZWYwMmJlNjEwMjgwOWE4MDFmODcwNzlhZTNkMTM2YWNlNzYxNzJjMjhiOWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.vjzmm7buej6FhZj4ZXuHy5G0Eho4pal2_xIa7Rt5Aw8)

これでFortranコードをインタラクティブに実行できる環境が整いました．

---
## Fortranコードの実行例

以下に，簡単なFortranコードを実行する例を示します．

---
### 基本的な計算
以下のコードをノートブックのセルに入力し，実行します．

```fortran
print *, "Hello, Fortran!"
end
```

出力:

```
 Hello, Fortran!
```

---
### 配列操作
次に，配列の操作を試します．

```fortran
program array_example
    implicit none
    integer, dimension(5) :: array
    integer :: i

    ! 配列に値を代入
    do i = 1, 5
        array(i) = i * i
    end do

    ! 配列の内容を表示
    print *, "Array values:", array
end program array_example
```

出力:

```
 Array values:  1  4  9  16  25
```

---
### 数値計算
次の例では数値積分を計算します．

```fortran
program integration_example
    implicit none
    real :: result

    result = 0.0
    result = result + (1.0 / 3.0) ! Integral of x^2 from 0 to 1

    print *, "Integral of x^2 from 0 to 1:", result
end program integration_example
```

出力:

```
Integral of x^2 from 0 to 1: 0.33333334
```

---
## トラブルシューティング

lFortranカーネルが見つからない場合は下記の点を確認してみてください．

- `conda`環境が正しく有効化されている。
- `jupyter --paths`を実行して、カーネルのディレクトリに`lfortran`が含まれていることを確認。

---

## まとめ

この記事では，JupyterLabでlFortranを使ってFortranコードをインタラクティブに実行する方法を解説しました．この環境を利用することで，Fortranのコードを効率的に試行錯誤したり，科学技術計算に応用することが可能になります．Fortranの学習やプロトタイピングにぜひ活用してみてください．

---
## 参考リンク
- [lFortran公式サイト](https://lfortran.org/)
- [Jupyter公式サイト](https://jupyter.org/)