PythonでiRIC上で動作するプログラムを開発する？！

# 概要
iRICソフトウェアにMiniconda環境が導入されたことで、iRICソフトウェア上でPythonで記述されたプログラムが動作するようになりました。事例として、土木研究所自然研究共生センターさんが開発された[EvaTRiP Pro](https://www.pwri.go.jp/team/kyousei/jpn/events/m5_r3_02.htm)があります。

「おいらも、PythonでiRIC上で動くプログラムを作ってみたい！」という方に向けて、ここではその開発方法を紹介したいと思います。

# 前提知識
本記事では、iRIC上で動くPythonプログラムの開発方法を紹介しますので、Pythonについてある程度知識がある方を対象とします。またプログラム開発にはVS codeを利用します。PythonやVS codeについては以下などを参考に学習してください。

https://www.python.jp/python_vscode/windows/setup/install_python.html

https://www.python.jp/python_vscode/windows/setup/install_vscode.html

# 環境設定・準備
まずは以下の手順でiRIC用のMinicondaをインストールします。

## 1.iRICのMiniConda環境をインストールする
iRICを起動し、「メニューバー＞オプション＞メンテナンス」を起動します。以下の画面が表示されますので、「iRICを閉じてiRIC Maintainanceを起動」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90108/d5749a55-13f0-37be-6370-3455f4857aad.png)

以下画面が表示されます。「コンポーネントの追加または削除」を選択し、「次へ」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90108/dae5426d-dd09-1db5-ce2c-00f3efdb4090.png)


「Miniconda 3」を選択し、「次へ」をクリックします。Minicondaにチェックが入っている方は、インストール済ですのでそのまま「キャンセル」をクリックして終了してください。

次に表示される画面で「更新」をクリックすると更新が開始されます。更新完了すればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90108/f8ab9f61-8b08-dfc8-e72d-428206b08501.png)


## 2.【準備】自作ソルバー用のフォルダを作成する
エクスプローラを開き、iRICソフトウェアをインストールしたフォルダを開てください。デフォルトでは、以下にインストールされていますので、以下をエクスプローラーのアドレスバーに貼り付けてください。

%USERPROFILE%\iRIC

iRICのインストールフォルダに名称："private"とフォルダを作成してください。"private"フォルダを作成したら、"private"フォルダを開いてください。次に"solvers"フォルダを作成します。自作ソルバーは"solvers"フォルダに格納します。

### 3. サンプルプログラムのダウンロード

https://github.com/kazutake/mysolver.git

上記githubのページにアクセスし、"Code > Download ZIP"からファイル一式を名称を変更せずにダウンロードしてください。"mysolver-master.zip"がダウンロードされるはずです。zipファイルを解凍するといくつかファイルが格納された"mysolver-master"というフォルダが作成されると思います。"mysolver-master"フォルダをフォルダごとコピーして、先ほど作成した"solvers"フォルダにペーストしてください。

フォルダ構成が以下となっていることを確認してください。

```
%USERPROFILE%\iRIC\PRIVATE
├─solvers
    └─mysolver-master
        └─main.py・・・・・・・・・pythonのサンプルプログラム
        └─definition.xml・・・・・iRIC用　計算条件入出力定義ファイル
        └─LICENSE・・・・・・・・・ライセンスファイル
        └─README.md・・・・・・・・readmeファイル
        └─sampledata.ipro・・・・サンプルプログラム："main.py"用のサンプルデータ
        └─sample_data・・・・"sampledata.ipro"を解凍したフォルダ
```

以上で、設定および準備は完了です。


# Pythonプログラムを確認・実行する
## 1. VS codeで"mysolver-master"フォルダを開く
VS codeを起動し、「メニューバー＞ファイル＞フォルダを開く」から、上で作成した"%USERPROFILE%\iRIC\PRIVATE\solvers\mysolver-master"を開きます。フォルダを開いたら"main.py"を開いてください。

## 2. Python実行環境をiRIC/Miniconda3に設定する
VS codeの画面左下に表示されたPythonX.X.Xをクリックし、**"~/iRIC/Miniconda3/envs/iric/python.exe"**を選択してください。このリストは、あなたのコンピュータにインストールされているPythonの実行環境です。複数存在しているかと思いますので、しっかりパス表記を確認して選択してください。Pythonの実行環境の選択を間違えるとプログラムが正しく動作しません。気を付けてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90108/1dec8fd0-c32f-0aad-d74e-89087a8e85d9.png)

## 3. 動作確認：サンプルプログラムの実行
iric用のpythonプログラムが適当に動作することを確認するため、"main.py"をF5ボタンを押すなどして実行してみてください。適当に実行できれば適当に環境が設定できていることになります。


# iRICソフトウェア上で実行確認してみる
iRICソフトウェアを起動して、「プロジェクトを開く」から"sampledata.ipro"を開きます。"sampledata.ipro"はgithubからダウンロード・解凍したフォルダ（以下）に格納されています。

%USERPROFILE%\iRIC\PRIVATE\solvers\mysolver-master

ファイルが開けたらiRIC上で実行してみてください。正常に動作するはずです。正常に動作しなかった場合は、iRICの「メニューバー＞オプション＞設定」から設定画面を開いて、**Pythonのパス** が、**"C:\users\[ユーザー名]\iRIC\Miniconda3\envs\iric\python.exe"**になっていることを確認してください。%USERPROFILE%などは利用できないことに注意してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90108/9d2cc17e-d39c-0b17-52a0-47324b85dc1c.png)


# 注意事項
現状、iRICに同梱されたMinicondaには以下のモジュールがインストールされています。下記以外のモジュールを必要とするPythonプログラムを動作させるためには、別途モジュールをインストール必要があります。この点は課題と認識しており、今後仕様変更する可能性があります。


**conda環境**

```
>conda list
# packages in environment at C:\Users\riverlink\iRIC\Miniconda3\envs\iric:
#
# Name                    Version                   Build  Channel
blas                      1.0                         mkl
ca-certificates           2021.5.25            haa95532_1
certifi                   2021.5.30        py38haa95532_0
cycler                    0.10.0                   pypi_0    pypi
intel-openmp              2021.2.0           haa95532_616
kiwisolver                1.3.1                    pypi_0    pypi
matplotlib                3.4.2                    pypi_0    pypi
mkl                       2021.2.0           haa95532_296
mkl-service               2.3.0            py38h2bbff1b_1
mkl_fft                   1.3.0            py38h277e83a_2
mkl_random                1.2.1            py38hf11a4ad_2
numpy                     1.20.2           py38ha4e8547_0
numpy-base                1.20.2           py38hc2deb75_0
openssl                   1.1.1k               h2bbff1b_0
pillow                    8.2.0                    pypi_0    pypi
pip                       21.1.2           py38haa95532_0
pyparsing                 2.4.7                    pypi_0    pypi
python                    3.8.10               hdbf39b2_7
python-dateutil           2.8.1                    pypi_0    pypi
setuptools                52.0.0           py38haa95532_0
six                       1.15.0           py38haa95532_0
sqlite                    3.35.4               h2bbff1b_0
vc                        14.2                 h21ff451_1
vs2015_runtime            14.27.29016          h5e58377_2
wheel                     0.36.2             pyhd3eb1b0_0
wincertstore              0.2                      py38_0
```

**pip**

```
>pip list
Package         Version
--------------- -------------------
certifi         2021.5.30
cycler          0.10.0
kiwisolver      1.3.1
matplotlib      3.4.2
mkl-fft         1.3.0
mkl-random      1.2.1
mkl-service     2.3.0
numpy           1.20.2
Pillow          8.2.0
pip             21.1.2
pyparsing       2.4.7
python-dateutil 2.8.1
setuptools      52.0.0.post20210125
six             1.15.0
wheel           0.36.2
wincertstore    0.2
```


# まとめ
本記事では以下を紹介しました。

- iRIC上でPythonプログラムを動作させるための環境設定・準備
- サンプルのPythonプログラムをVScode上で確認・実行する方法
- iRIC上でプログラムを実行する方法

Pythonプログラム書き方について、また別の機会に紹介したいと思います。現段階では、以下を参考して記述してください。Pythonのプログラムを動かすためには、そのPythonプログラムに適した実行環境を整備することが重要になります。Pythonの実行環境設定に関する記事はWeb上にたくさんありますが、僕のほうでも機会を作って記述してみようと思います。


#【参考】関数リファレンス

https://iric-solver-dev-manual-jp.readthedocs.io/ja/latest/06/03_reference.html