IRISにおけるPythonファーストアプローチ入門

このセクションでは、IRISでPythonを主要言語として使用する方法について紹介します。これにより、IRISの強力な機能を活用しながら、Pythonでアプリケーションのロジックを書くことができます。
使用方法(irispython)
まずは、正式な方法から始めましょう。irispython インタープリターを使用します。
irispython インタープリターを使って、IRISで直接Pythonコードを実行できます。 これにより、IRISアプリケーション環境内でPythonコードを書いて、実行することが可能になります。
irispythonとは?
irispython は、IRISインストールディレクトリ(<installation_directory>/bin/irispython)内にあり、IRIS環境でPythonコードを実行するために使用されます。
これを使用すると、次を行うことができます。
sys.pathを設定して、IRIS Pythonライブラリとモジュールを含める。site.pyファイルによって設定されます。このファイルは<installation_directory>/lib/python/iris_site.pyにあります。- 詳しくは、モジュールについての記事、Pythonモジュール入門をご覧ください。
- ObjectScriptのクラスをPythonから呼び出したり(その逆も可能)など、IRISの各種機能へのアクセスを提供する特別なモジュール、
irisモジュールをインポートする。 - 権限の問題と、IRISカーネルライブラリの動的ロードに関する問題を修正する。
irispythonの使用例
コマンドラインから irispython インタープリターを実行できます。
<installation_directory>/bin/irispython
簡単な例を実行してみましょう。
# src/python/article/irispython_example.py
import requests
import iris
def run():
response = requests.get("https://2eb86668f7ab407989787c97ec6b24ba.api.mockbin.io/")
my_dict = response.json()
for key, value in my_dict.items():
print(f"{key}: {value}") # print message: Hello World
return my_dict
if __name__ == "__main__":
print(f"Iris version: {iris.cls('%SYSTEM.Version').GetVersion()}")
run()
irispython インタープリターを使って、このスクリプトを実行できます。
<installation_directory>/bin/irispython src/python/article/irispython_example.py
出力が表示されます。
Iris version: IRIS for UNIX (Ubuntu Server LTS for x86-64 Containers) 2025.1 (Build 223U) Tue Mar 11 2025 18:23:31 EDT
message: Hello World
これは、irispython インタープリターを使って、IRIS環境でPythonコードを実行する方法を具体的に示しています。
メリット
- Pythonファースト:Pythonでアプリケーションロジックを書くことができ、Pythonの機能とライブラリを活用できます。
- IRISの統合:PythonコードをIRISの各種機能と簡単に統合できます。
デメリット
- 限られたデバッグ:
irispythonでのPythonコードのデバッグは、専用のPython環境ほど単純ではありません。- とはいえ、不可能ではありませんが、専用のPython環境ほど簡単ではありません。
- 詳しくは、ボーナスセクションをご覧ください。
- 仮想環境:
irispythonでPythonコード用に仮想環境を設定することは困難です。- 不可能というわけではなく、仮想環境は通常、
pythonやpython3という名前のインタープリターをデフォルトで参照するため、IRISではそれが当てはまらず、実行が難しくなります。 - 詳しくは、ボーナスセクションをご覧ください。
- 不可能というわけではなく、仮想環境は通常、
まとめ
まとめると、irispython を使用することにより、IRISの強力な機能を活用しながら、Pythonでアプリケーションロジックを書くことが可能になります。 しかし、デバッグと仮想環境の設定に制限があります。
WSGIの使用
このセクションでは、WSGI(Web Server Gateway Interface)を使ってIRISでPythonのWebアプリケーションを実行する方法について説明します。
WSGIは、WebサーバーとPython Webアプリケーションまたはフレームワーク間の標準インターフェースです。 WSGIにより、Webサーバー環境でPython Webアプリケーションを実行できます。
IRISはWSGIをサポートしており、組み込みWSGIサーバーを使ってIRISでPython Webアプリケーションを実行できます。
使用方法
IRISでWSGIを使用するには、WSGIアプリケーションを作成して、IRIS Webサーバーに登録する必要があります。
詳しくは、公式ドキュメントをご覧ください。
WSGIの使用例
完全なテンプレートはこちらをご覧ください:iris-flask-example。
メリット
- Python Webフレームワーク:FlaskやDjangoなどの人気のPython Webフレームワークを使って、Webアプリケーションを構築できます。
- IRISの統合:Python WebアプリケーションをIRISの各種機能と簡単に統合できます。
デメリット
- 複雑さ:WSGIアプリケーションの設定は、Python Webフレームワークで
uvicornまたはgunicornをただ使用するよりも、より複雑になる可能性があります。
まとめ
まとめると、IRISでWSGIを使用することで、IRISの各種機能を活用しながら、Pythonを使用してパワフルなWebアプリケーションを構築できます。
DB-API
このセクションでは、IRISデータベースとのやり取りにPython DB-APIを使用する方法について説明します。
Python DB-APIは、Pythonでデータベースに接続するための標準インターフェースです。 SQLクエリを実行し、データベースから結果を取得することができます。
使用方法
pipを使ってインストールできます。
pip install intersystems-irispython
インストール後、DB-APIを使用してIRISデータベースに接続してSQLクエリを実行できます。
DB-APIの使用例
他のPython DB-APIと同じように使用できます。こちらが例です。
# src/python/article/dbapi_example.py
import iris
def run():
# Connect to the IRIS database
# Open a connection to the server
args = {
'hostname':'127.0.0.1',
'port': 1972,
'namespace':'USER',
'username':'SuperUser',
'password':'SYS'
}
conn = iris.connect(**args)
# Create a cursor
cursor = conn.cursor()
# Execute a query
cursor.execute("SELECT 1")
# Fetch all results
results = cursor.fetchall()
for row in results:
print(row)
# Close the cursor and connection
cursor.close()
conn.close()
if __name__ == "__main__":
run()
任意のPythonインタープリターを使って、このスクリプトを実行できます。
python3 /irisdev/app/src/python/article/dbapi_example.py
出力が表示されます。
(1,)
メリット
- 標準インターフェース:DB-APIは、データベースに接続するための標準インターフェースを提供し、 異なるデータベース間で簡単に切り替えることができます。
- SQLクエリ:Pythonを使ってSQLクエリを実行し、データベースから結果を取得できます。
- リモートアクセス:DB-APIを使って、リモートIRISデータベースに接続できます。
デメリット
- 限られた機能:DB-APIはデータベースへのSQLアクセスのみを提供するため、ObjectScriptやPythonコードなどの高度なIRIS機能を使用することはできません。
代替手法
DB-APIコミュニティエディションもあり、こちらからご覧いただけます:intersystems-irispython-community。
SQLAlchemy、Django、langchain、またはDB-APIを使用する他のPythonライブラリへの対応がより優れています。
詳しくは、ボーナスセクションをご覧ください。
まとめ
まとめると、IRISでPython DB-APIを使用すると、データベースとシームレスにやり取りできる強力なアプリケーションをビルドできます。
Notebook
IRISでPythonを使用する方法を説明しました。次にIRISでJupyter Notebooksを使用する方法を見ていきましょう。
Jupyter Notebookは、Pythonコードを対話的に書き、実行するのに最適な方法で、機能を活用するためにIRISで使用できます。
使用方法
IRISでJupyter Notebookを使用するには、notebook と ipykernel パッケージをインストールする必要があります。
pip install notebook ipykernel
インストール後、新しいJupyter Notebookを作成し、Python 3 カーネルを選択できます。
ノートブックの使用例
新しいJupyter Notebookを作成して、以下のコードを書きます。
# src/python/article/my_notebook.ipynb
# Import the necessary modules
import iris
# Do the magic
iris.system.Version.GetVersion()
Jupyter Notebookを使って、このノートブックを実行できます。
jupyter notebook src/python/article/my_notebook.ipynb
メリット
- インタラクティブ開発:Jupyter NotebookではインタラクティブにPythonコードを記述して実行でき、データ分析と探索に最適です。
- 豊富な出力:チャートやテーブルなど、豊富な出力をノートブック内で直接表示できます。
- ドキュメント:コードと一緒にドキュメントや説明を追加できます
デメリット
- 扱いにくい設定:IRISでのJupyter Notebookの設定はやや扱いにくい場合があります。特にカーネルの構成は複雑になることがあります。
まとめ
まとめると、IRISでJupyter Notebookを使用すると、IRISの機能を活用しながら、インタラクティブにPythonコードを書いて実行できます。 しかし、設定は特にカーネル構成において複雑になることがあります。
ボーナスセクション
このセクションから、Pythonコードのリモートデバッグ、仮想環境の使用など、IRISでのPythonに関連する高度なトピックをいくつか探ります。
これらのトピックのほとんどがInterSystemsにより正式にサポートされていませんが、IRISでPythonを使用したい場合に知っておくと役立ちます。
ネイティブインタープリターの使用(irispython 以外)
このセクションでは、irispython インタープリターの代わりにネイティブPythonインタープリターを使用する方法について説明します。
そうすることで、すぐに仮想環境を使用でき、使い慣れたPythonインタープリターを使用できます。
使用方法
ネイティブPythonインタープリターを使用するには、お使いのマシンにIRISをインストールし、iris-embedded-python-wrapper パッケージをインストールする必要があります。
pipを使ってインストールできます。
pip install iris-embedded-python-wrapper
次に、IRISインストールにポイントするように、環境変数をいくつか設定する必要があります。
export IRISINSTALLDIR=<installation_directory>
export IRISUSERNAME=<username>
export IRISPASSWORD=<password>
export IRISNAMESPACE=<namespace>
設定後、ネイティブPythonインタープリターを使ってPythonコードを実行できます。
python3 src/python/article/irispython_example.py
# src/python/article/irispython_example.py
import requests
import iris
def run():
response = requests.get("https://2eb86668f7ab407989787c97ec6b24ba.api.mockbin.io/")
my_dict = response.json()
for key, value in my_dict.items():
print(f"{key}: {value}") # print message: Hello World
return my_dict
if __name__ == "__main__":
print(f"Iris version: {iris.cls('%SYSTEM.Version').GetVersion()}")
run()
詳しくは、iris-embedded-python-wrapperドキュメントをご覧ください。
メリット
- 仮想環境:自分のネイティブPythonインタープリターで仮想環境を使用でき、依存関係をより簡単に管理できます。
- 馴染みのあるワークフロー:使い慣れたPythonインタープリターを使用でき、既存のワークフローとより簡単に統合できます。
- Debugging:
pdbやipdbなどのお気に入りのPythonデバッグツールを使用して、IRIS内でPythonコードをデバッグできます。
デメリット
- 設定の複雑さ:環境変数と
iris-embedded-python-wrapperパッケージの設定は、特に初心者にとっては複雑かもしれません。 - 公式にサポートされていない:このアプローチはInterSystemsによって公式にサポートされていないため、ドキュメントされていないか、サポートされていない問題が発生する場合があります。
DB-API Community Edition
このセクションでは、GitHubで利用できるDB-APIコミュニティエディションについて説明します。
使用方法
pipを使ってインストールできます。
pip install sqlalchemy-iris
これにより、DB-APIコミュニティエディションがインストールされます。
特定のバージョンをインストールすることも可能です。
pip install https://github.com/intersystems-community/intersystems-irispython/releases/download/3.9.3/intersystems_iris-3.9.3-py3-none-any.whl
インストール後、DB-APIを使用してIRISデータベースに接続し、SQLクエリまたはSQLAlchemy、Django、langchain、pandasなどのDB-APIを使用する他のPythonコードを実行できます。
DB-APIの使用例
他のPython DB-APIと同じように使用できます。こちらが例です。
# src/python/article/dbapi_community_example.py
import intersystems_iris.dbapi._DBAPI as dbapi
config = {
"hostname": "localhost",
"port": 1972,
"namespace": "USER",
"username": "_SYSTEM",
"password": "SYS",
}
with dbapi.connect(**config) as conn:
with conn.cursor() as cursor:
cursor.execute("select ? as one, 2 as two", 1) # second arg is parameter value
for row in cursor:
one, two = row
print(f"one: {one}")
print(f"two: {two}")
任意のPythonインタープリターを使って、このスクリプトを実行できます。
python3 /irisdev/app/src/python/article/dbapi_community_example.py
またはsqlalchemyを使うこともできます。
from sqlalchemy import create_engine, text
COMMUNITY_DRIVER_URL = "iris://_SYSTEM:SYS@localhost:1972/USER"
OFFICIAL_DRIVER_URL = "iris+intersystems://_SYSTEM:SYS@localhost:1972/USER"
EMBEDDED_PYTHON_DRIVER_URL = "iris+emb:///USER"
def run(driver):
# Create an engine using the official driver
engine = create_engine(driver)
with engine.connect() as connection:
# Execute a query
result = connection.execute(text("SELECT 1 AS one, 2 AS two"))
for row in result:
print(f"one: {row.one}, two: {row.two}")
if __name__ == "__main__":
run(OFFICIAL_DRIVER_URL)
run(COMMUNITY_DRIVER_URL)
run(EMBEDDED_PYTHON_DRIVER_URL)
任意のPythonインタープリターを使って、このスクリプトを実行できます。
python3 /irisdev/app/src/python/article/dbapi_sqlalchemy_example.py
出力が表示されます。
one: 1, two: 2
one: 1, two: 2
one: 1, two: 2
メリット
- より優れたサポート:SQLAlchemy、Django、langchain、またはDB-APIを使用する他のPythonライブラリへの対応がより優れています。
- コミュニティ主導:コミュニティによって維持されており、時間の経過とともに、更新および改善される可能性が高いです。
- 互換性:InterSystemsの公式DB-APIと互換性があるため、公式のエディションとコミュニティのエディションとの間で簡単に切り替えることができます。
デメリット
- スピード:コミュニティエディションは公式エディションほど最適化されていない可能性があり、シナリオによってはパフォーマンスが低下する可能性があります。
IRISでのPythonコードのデバッグ
このセクションでは、IRISでのPythonコードをデバッグする方法を説明します。
デフォルトでは、IRISで(objectscriptで言語タグまたは %SYS.Python を使って)Pythonコードをデバッグできませんが、IRISでPythonコードをデバッグできるコミュニティのソリューションが存在します。
使用方法
最初に、IoP(Interoperability on Python)をインストールします。
pip install iris-pex-embedded-python
iop --init
これにより、IoPと、IRISでPythonコードをデバッグできるようにする新しいObjectscriptクラスがインストールされます。
インストール後、Pythonコードをラップしてデバッグを有効化する IOP.Wrapper クラスを使用できます。
Class Article.DebuggingExample Extends %RegisteredObject
{
ClassMethod Run() As %Status
{
set myScript = ##class(IOP.Wrapper).Import("my_script", "/irisdev/app/src/python/article/", 55550) // Adjust the path to your module
Do myScript.run()
Quit $$$OK
}
}
launch.json ファイルに以下の構成を追加して、IoP デバッガーを使用するようVsCodeを構成してください。
{
"version": "0.2.0",
"configurations": [
{
"name": "Python in IRIS",
"type": "python",
"request": "attach",
"port": 55550,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}/src/python/article",
"remoteRoot": "/irisdev/app/src/python/article"
}
]
}
]
}
これで、PythonモジュールをインポートするObjectScriptを実行し、VsCodeのデバッガーをポート 55550 に添付できます。
以下のコマンドを使ってこのスクリプトを実行できます。
iris session iris -U IRISAPP '##class(Article.DebuggingExample).Run()'
Pythonコード内にブレークポイントを設定でき、デバッガーはそれらのブレークポイントで停止し、変数の中身を確認したり、コードをステップ実行できます。
実際にリモートでデバッグしているビデオはこちらです(これはIoPですが、概念は同じです)。
Pythonコードをトレースバックすることもでき、デバッグに非常に役立ちます。
トレースバックが有効になっている場合:

トレースバックが無効になっている場合:

メリット
- リモートデバッグ:IRIS内で実行しているPythonコードをリモートでデバッグできます。個人的な意見ですが、これは非常に画期的です。
- Pythonのデバッグ機能:ブレークポイント、変数の確認、コードのステップ実行など、すべてのPythonのデバッグ機能を使用できます。
- トレースバック:Pythonコードのエラーを完全にトレースバックできます。これはデバッグに非常に役立ちます。
デメリット
- 設定の複雑さ:IoPとデバッガーの設定は、特に初心者にとっては複雑かもしれません。
- コミュニティのソリューション:これはコミュニティのソリューションであるため、公式ソリューションほど安定しておらず、または十分にドキュメント化されていない可能性があります。
まとめ
まとめると、IoPコミュニティソリューションを使用して、IRISでPythonコードをデバッグすることができます。このソリューションにより、Pythonデバッガーを使用して、IRISで実行しているPythonコードをデバッグできます。 しかし、いくつかの設定が必要で、公式ソリューションほど安定していない可能性があります。
IoP(Interoperability on Python)
このセクションでは、IoP(Interoperability on Python)ソリューションを説明します。このソリューションにより、PythonファーストアプローチでIRISでPythonコードを実行できます。
このソリューションは、以前から開発を続けてきたもので、私にとって非常に思い入れのあるプロジェクトです。この記事シリーズで見てきたすべてのポイントを解決し、改善しようとしています。
IoPの主なポイント:
- Pythonファースト:Pythonでアプリケーションロジックを書くことができ、Pythonの機能とライブラリを活用できます。
- IRISの統合:PythonコードをIRISの各種機能と簡単に統合できます。
- リモートデバッグ:IRISで実行しているPythonコードをリモートでデバッグできます。
- トレースバック:Pythonコードのエラーを完全にトレースバックできます。これはデバッグに非常に役立ちます。
- 仮想環境:仮想環境はサポートされており、依存関係をより簡単に管理できます。
IoPの詳細については、公式ドキュメントをご確認ください。
以下の記事を読むと、IoPへの理解をさらに深めることができます。
🐍❤️ ご覧のとおり、IoPはIRISとPythonを統合するパワフルな方法を提供し、より簡単にアプリケーションを開発・デバッグできるようにします。
もう irispython を使用する必要はありません。sys.path を手動で設定する必要もありません。仮想環境を使用して、IRISで実行しているPythonコードをデバッグすることもできます。
まとめ
IRISでのPythonに関するこの記事シリーズを楽しんでいただけたなら幸いです。
この記事シリーズについてご不明な点やフィードバックがあれば、ぜひお気軽にお知らせください。
IRISでのPython、GLHF(よろしく)!