InterSystems公式 Seisuke Nakahashi · 7月 22, 2025 10m read

InterSystems IRIS 2025.2 から、セキュリティデータが格納される IRISSECURITY データベースが導入されます。これまでセキュリティデータが格納されていた IRISSYS とは異なり、IRISSECURITY データベースは暗号化することが可能です。これにより機密データをより安全に保管することができるようになります。将来のバージョンでは、IRISSECURITYはミラーリングもサポートされる予定です。

このバージョンではあわせて、セキュリティ管理タスク用の %SecurityAdministrator ロールも導入されます。 

0
0 58
お知らせ Rie Tokue · 7月 17, 2025

こんにちは。 

7月16日~18日に東京ビックサイトで開催された「国際モダンホスピタルショウ」のインターシステムズのブースにて様々なミニセッションを行いました。

その中で弊社製品の最新情報についてご紹介したミニセッションを”モダンホスピタルショウ「おさらいウェビナー」として、2回にわたり、お届けしています。

展示では伝えきれなかった技術や背景、導入効果などをご紹介します。第2回の本ウェビナーでは以下のトピックを取り上げます

日時:9月3日(水)午後1時30分~2時

テーマ:「~FHIR×OMOP CDMで広がる医療データの価値~InterSystems OMOPのご紹介」

参加費無料・事前登録制

ご登録はこちらから

第2回「~FHIR×OMOP CDMで広がる医療データの価値~InterSystems OMOPのご紹介」

【概要】
OMOP CDM(Observational Medical Outcomes Partnership Common Data Model)は、医療データの二次利用、特に臨床研究やリアルワールドエビデンスの創出において強力な基盤となる、国際的な標準データモデルです。OMOP CDMの概要をご紹介するとともに、FHIRからOMOP CDMへの変換を実現する「InterSystems OMOP」ソリューションについて、デモを交えてご紹介いたします。

0
0 63
お知らせ Rie Tokue · 7月 17, 2025

    

こんにちは。

716日~18日に東京ビックサイトで開催された「国際モダンホスピタルショウ」のインターシステムズのブースにて様々な展示やミニセッションを行いました。その中で弊社製品の最新情報について”モダンホスピタルショウ「おさらいウェビナー」”と題して、2回にわたりお届けします。

1回は86日(水) 「ホスピタルショウ注目技術をざっくり解説!インターシステムズの最新情報」と題し、展示では伝えきれなかった技術や背景、導入効果などをご紹介します。第一回の本ウェビナーでは以下のトピックを取り上げます。

  • 地域医療連携プラットフォーム「HealthShare」を用いたデータ統合と可視化
  • InterSystems OMOP:世界標準のデータフォーマットを使用した分析基盤に必要なサービスのご紹介
  • シリンジポンプ/電子カルテ/ナースコール/ME機器管理システムとのリアルタイム連携

【こんな方にお勧め】
医療機関でICTやデータ利活用を推進されているご担当者
地域連携・医療デバイスの統合に関心のある方

<お申し込みはこちら>

第1回 86日 「ホスピタルショウ注目技術をざっくり解説!インターシステムズの最新情報」

ホスピタルショウに来場された方、されなかった方、どちらも歓迎です!是非ご視聴くださいますよう、ご案内いたします。

0
0 50
記事 Megumi Kakechi · 7月 15, 2025 4m read

これは InterSystems FAQ サイトの記事です。
IRISのプロセスを終了したい場合、管理ポータルから行う方法と、ターミナルからユーティリティやコマンドを使用して行う方法があります。

こちらのトピックでは、以下の3つの方法で停止する方法をご紹介します。

【プロセスの停止方法】
1.管理ポータルから停止する方法2.ユーティリティーで停止する方法(RESJOB、JOBEXAM)3.プログラムで停止する方法


【注意】
IRIS外から(Windowsならタスクマネージャーなど)、プロセスの終了は絶対に行わないでください。

IRIS外からプロセス終了してしまうと、IRIS内部ではプロセスの削除を検知できなかったりすることで、IRISの動作が不安定になったり、システム全体がハングする危険性がありますので、ご注意ください。

外部から停止の例外が一つだけあります。
$ZF コマンドによって起動された子プロセスが、何らかの問題で応答を返さなかった場合、$ZF コマンドを実行した親プロセスはそのまま残り続けます。
そのような親プロセスを終了したい場合、通常の上記1~3の方法では停止できません。
その際は、先に外部から子プロセスを停止する必要があります。子プロセスを特定するためには、以下の方法があります。

0
0 76
記事 Mihoko Iijima · 7月 14, 2025 6m read

これは InterSystems FAQ サイトの記事です。

InterSystems 製品の Windows 版インストールキットでは、IIS に対して Web ゲートウェイをインストールするインストールキットの提供はありますが、Windows にインストールした Apache に対するインストールキットが提供されていないため、以下の手順で Web ゲートウェイを構成します。

1、InterSystems 製品のインストール

2、Apache for Windows のインストール

3、Windows 版 Web ゲートウェイのインストール(※)

4、https.conf の修正

5、Apache を Windows サービスにインストールし開始する

6、Web ゲートウェイ管理画面で各種設定

(※)Windows 版 Web ゲートウェイのインストールキットは WRC よりダウンロードいただけます。

以下、手順詳細です。

インストール時、インスタンス名を IRISTEST、インストールディレクトリを c:\InterSystems\IRISTEST に設定した流れでの図解で解説しています。

例では、http://Webサーバ/インスタンス名/csp/sys/UtilHome.csp で管理ポータルへアクセスできるようにするための設定例で記載しています。

0
0 65
記事 Mihoko Iijima · 7月 10, 2025 1m read
0
0 51
お知らせ Mihoko Iijima · 7月 9, 2025

開発者の皆さん、こんにちは!

開発者の方々の業務を効率化する有用なツールの開発を目的とした、InterSystems のオンラインプログラミングコンテストの開催が決定しました!📣

🏆 InterSystems Developer Tools コンテスト 🏆

期間:2025年7月14日~8月3日

賞金総額: $12,000


0
0 43
記事 Mihoko Iijima · 7月 7, 2025 3m read

これは InterSystems FAQ サイトの記事です。

一般的に、500番台はサーバー側で発生したエラーを表していて、503番エラーはサーバーが何らかの理由で機能を停止していてクライアントの要求に回答できない場合に出現するエラーです。

外部サイトの説明:503エラー 【HTTP 503 Service Unavailable】

以下、InterSystems 製品の使用で発生する503エラーの考えられる原因について一覧します。

 

REST/CSPページにアクセスできない

原因:ライセンスが割り当てられない場合に発生します(ライセンスが「同時接続ユーザ」での購入である場合、ユーザ数が制限を迎えたためライセンスが割り当てられずこのエラーが発生します)。

アプリケーションが「認証なし」アクセスを使用している場合、以下の原因により503エラーが発生します。

0
0 66
記事 Megumi Kakechi · 7月 6, 2025 2m read

これは InterSystems FAQ サイトの記事です。
各InterSystems製品のサポートOS情報は、製品ドキュメントの「サポートプラットフォーム」情報で確認できます。

製品ドキュメントは、弊社ホームページ > サポート > ドキュメント よりご確認いただけます。

確認したい製品バージョンのドキュメント(例えば、InterSystems IRIS Version 2025.1)を開いていただき、「サポート対象プラットフォーム」リンクからご確認いただけます。

 

     ↓↓↓ 

 


※Cache & Ensemble の場合は(例えば、Cache & Ensemble Version 2018.1)、ドキュメント上部の Supported Platforms リンク 

0
0 36
記事 Mihoko Iijima · 7月 3, 2025 4m read

これは InterSystems FAQ サイトの記事です。

InterSystems 製品では、ファイルオープン時に文字コードを指定すれば指定の文字コードで正しくファイルの中身を処理できます。

文字コードを指定しない場合、InterSystems 製品をインストールした OS に合わせて設定されたファイル I/O 用文字コードを利用してファイルをオープンします(Linux 系は UTF8、Windows は SJIS)。

また、文字列については文字コードが判明していれば $ZCONVERT() 関数を使用して指定文字コードで文字列を処理することができます。

 例)$ZCONVERT(文字列,"I","IRIS内文字コード")

文字コードが不明な場合、残念ながら InterSystems 製品だけでそのコードを判別することができないため、例えば Embedded Python で Python の chardet パッケージを使用して文字コード判別し、IRIS 内文字コードを取得しファイルオープン、文字列の文字コード変換をすることができます。

chardetパッケージについては、外部サイトですが参考となります。ぜひご参照ください。

参考ページ:[解決!Python]テキストファイルのエンコーディングを調べて、その内容を読み込むには(chardetパッケージ)

0
1 92
InterSystems公式 Masahito Miura · 7月 1, 2025

インターシステムズは、以下の製品が Red Hat Enterprise Linux 10 に対応したことをお知らせします。

  • InterSystems IRIS Data Platform 2025.1.0.230.2
  • InterSystems IRIS for Health 2025.1.0.230.2
  • HealthShare Health Connect 2025.1.0.230.2

今回のリリースでは、Red Hat Enterprise Linux 10 オペレーティング・システムのサポートが追加されました。 RHEL 10 には、Linux カーネル 6.12.0、セキュリティの改善、パフォーマンスの最適化、および開発者ツールの改善が含まれています。

ソフトウェアの入手方法

インストール・パッケージは、 WRC Direct の 製品ダウンロードページ ページから入手できます。 また、評価用キットは、 評価サービス ウェブサイトからも入手できます。

0
0 28
記事 Mihoko Iijima · 6月 30, 2025 2m read

これは InterSystems FAQ サイトの記事です。

ObjectScript で日付の比較を行う場合、一旦 $HOROLOG 形式(内部数値)に変換することで算出しやすくなりますが、SQL 関数を利用して算出することもできます。

ObjectScript から SQL 関数を実行するには、%SYSTEM.SQL.Functions クラスを使用します。

※ 2021.1以前のバージョンでは、%SYSTEM.SQL クラスを使用します。

%SYSTEM パッケージは、システム・オブジェクトと呼ばれ ObjectScript では $SYSTEM 特殊変数を利用して以下の構文で実行します。

  $SYSTEM.サブパッケージ名.クラス名.メソッド名() または $SYSTEM.クラス名.メソッド名()

以下、SQL 関数 DATEDIFF を使用して日付の比較を行う例です。

USER>write$system.SQL.Functions.DATEDIFF("dd","2025-01-20","2025-03-20")
59

 

分での比較

USER>write$system.SQL.Functions.DATEDIFF("mi","2025-01-20","2025-03-20")
84960

 

秒での比較

0
0 28
記事 Mihoko Iijima · 6月 25, 2025 3m read

これは InterSystems FAQ サイトの記事です。

管理ポータルのシステム管理やシステムエクスプローラーなど最上位のメニューについては、事前定義ロールをユーザに付与することでアクセスを制限することができます。

最下位のメニュー、例えば [システム管理] > [構成] > [システム構成] > [ネームスペース] などは、事前定義ロールの %Manager を付与されたユーザであれば、全てのユーザが利用できてしまいます。

このページに対して、「%Manager ロールを持っているが、あるユーザは使用でき あるユーザは使用できない」のようにユーザ毎のアクセス制限を追加したい場合は、カスタムリソースを作成し再下位メニューに対して作成したカスタムリソースを付与することで制限を追加することができます。

手順は以下の通りです。

  1. カスタムリソースを任意名で作成する。この時パブリック許可は設定しない。
  2. 管理ポータルの任意の再下位メニューに 1 で作成したカスタムリソースを設定する。
  3. 新規でロールを作成し、1で作成したカスタムリソースに対する USE 許可を設定する。
  4. メニューを利用できるユーザを 3 で作成したロールのメンバーに設定する。

具体的な設定の流れは以下の通りです。

1. カスタムリソースを任意名で作成する。この時パブリック許可は設定しない。

0
0 30
記事 Mihoko Iijima · 6月 24, 2025 11m read

これは InterSystems FAQ サイトの記事です。

InterSystems 製品インストール時に用意されている事前定義ロールを利用して、ログインユーザ毎に管理ポータルメニュー(システム管理/システムエクスプローラー/システムオペレーション など)のアクセスを制限することができます。

管理ポータルメニューに対するアクセス制限を行うためには、管理ポータルへの「認証なし(UnknownUser)」アクセス(※1)を使用しない環境が必要です。

管理ポータル上部の「ログアウト」をクリックしてログイン画面が表示されない場合は、関連記事「管理ポータル/スタジオ/ターミナルにパスワード認証を設定するにはどうしたらいいですか?」をご覧いただき必要な設定を行ってください。

以下、インストールデフォルトで管理ポータルへのフルアクセスが許可されている事前定義ユーザ(※2): SuperUser や _SYSTEM アカウントを使用して管理ポータルにログインした状態の設定例でご説明します。

これらユーザのパスワードはインストール時に設定しています(インストール時の「初期セキュリティ」を「最小」でインストールした環境では、パスワードは大文字の SYS が設定されています)。

0
0 49
記事 Megumi Kakechi · 6月 20, 2025 5m read

これは InterSystems FAQ サイトの記事です。
こちらの記事では、非ミラー環境にミラー環境でオンラインバックアップしたバックアップファイルをリストアする方法をご紹介します。

手順は大きく分けて2つになります。

1.バックアップファイルからリストアを行う

2.データベースファイルのミラー属性を削除する


1.バックアップファイルからリストアを行う

以下は、^DBREST ユーティリティによる対話形式のリストア方法になります。

0
0 36
InterSystems公式 Seisuke Nakahashi · 6月 17, 2025

このたび InterSystems IRIS 2025.1 の日本語ドキュメントが完成しました。以下のURLでご参照いただけます。

0
0 80
InterSystems公式 Megumi Kakechi · 6月 16, 2025

概要

勧告 ID

影響を受ける製品と
バージョン

リスクカテゴリー &
スコア

明示的な発生条件

DP-439649

製品:

  • InterSystems IRIS®
  • InterSystems IRIS for Health
  • HealthShare® Health Connect

バージョン:

  • 2025.1.0.225.1
  • 2025.1.0.223.0
  • 2024.1.4
  • 2023.1.6
  • 2022.1.7

運用:
4 – 高リスク

 

システム安定性:
3 – 中リスク

 

この問題はセキュリティ上の脆弱性ではありません。ユーザーの権限チェックを無効にしたり、承認されたネームスペース外のデータアクセスを可能にするものではありません。

暗黙のネームスペースの使用、管理ポータル または データベースに対する読み取り専用/読み取り書き込み混合アクセス。


上記にリストされたInterSystems製品において、以下の機能のいずれかを使用している環境で、ネームスペースを切り替えたりグローバル変数にアクセスしたりする際、予期しない <PROTECT> エラーが発生する可能性があります。

0
0 42
InterSystems公式 Megumi Kakechi · 6月 11, 2025

InterSystems は、以下のサポート対象製品バージョン 2025.1.0、2024.1.4、2023.1.6、および 2022.1.7 に影響する不具合を解決するために、新しいポイント アップデートをリリースしました。

  • InterSystems IRIS
  • InterSystems IRIS for Health
  • HealthShare Health Connect


この問題により、以下の機能を使用する際、予期しない <PROTECT> エラーやアクセス異常が発生する可能性があります:

  • 暗黙のネームスペース
  • データベースへの読み取り専用/読み取り書き込みの混合アクセス
  • 管理ポータルでのルーチンとグローバル一覧表示


含まれる症状:

  • ネームスペースの作成の失敗
  • ルーチンをリストするときに断続的に「アクセス拒否」エラーが発生する
  • 読み取り専用権限を持つユーザーに対してグローバル表示ページがデータを返さない

これらの問題によりアクセス制御やユーザー権限が損なわれることはありませんが、複数のシナリオにおいて、システムの想定された動作に影響を及ぼします
 

解決済みバージョン

修正は次のポイントリリースに含まれています。

  • 2025.1.0.230.2
  • 2024.1.4.516.1
  • 2023.1.6.810.1
  • 2022.1.7.116.1
0
0 51
お知らせ Mihoko Iijima · 6月 10, 2025

開発者の皆さん、こんにちは!

開発者コミュニティにスマートで積極的な新しい助っ人が誕生しました!

🤖 開発者コミュニティAIボット 通称 @DC AI Bot です! 🤖

DC AI assistant と同様に、IRIS のベクトル検索を搭載した @DC AI Bot は、さらに一歩進んでいます!

👉 新しく投稿されたすべての質問を自動的にスキャンし、関連する回答が見つかった場合、コメントに返信を残します。

メモ:現時点では、USコミュニティに投稿された質問に対して自動スキャンが行われています。日本語で質問を書いても英語でコメント欄に返信を残してくれるそうです!


0
0 27
お知らせ Rie Tokue · 6月 10, 2025

 

いつもお世話になっております。

連続3回シリーズでお届けしている開発者向けウェビナー、今回のテーマは「ベクトルであそぼう!」です。

以下の日時で開催いたしますので、是非ご参加ください。

日時:7月29日(火)13時半~14時10分(40分間)

参加費無料・事前登録制

ご登録はこちらから

【概要】

ベクトルは、生成AIや機械学習エンジンがデータを理解・処理するために使われる重要な概念です。AI時代の基本単位ともいえるベクトルをつかって、いろいろな実験をします。

  • 写真から魚の名前を当ててみる
  • ベクトルを“みえる化”してデータの集まりを探す
  • ちょっと変なデータ(=アノマリー)を見つける

AIモデルが「意味」をどう捉えているのか、ベクトル空間で探検しましょう!

【こんな方におすすめ】

・機械学習に興味のある方

・データに新しい価値を加えたいと考えている方

ご多用中とは存じますが皆様のご参加をお待ち申し上げております。

0
0 66
お知らせ Mihoko Iijima · 6月 9, 2025

開発者の皆さん、こんにちは!

次のアイデアコンテストの開催が決定しました!(InterSystems 社員も含め、すべての開発者コミュニティメンバーの皆さんが参加できます!)

💡 第 4 回 InterSystems アイデアコンテスト 💡

InterSystems IRISおよび関連製品・サービスを強化するための革新的なアイデアを募集しています。 あなたのアイデアが他のユーザにもたらす具体的なメリットや、開発者のインターシステムズの技術体験をどのように向上させるかを強調し、実際のユースケースに基づいたご提案をお待ちしています。

📅 期間: 2025年6月9日~7月6日

🏆 最優秀アイデアには賞品があります!+ランダム抽選も予定しています!

🎁 参加賞:コンテストに採用されたアイデアの投稿者には素敵な参加賞をご用意しています。

>> アイデアの登録はこちら! <<

0
0 25
記事 Andre Larsen Barbosa · 6月 9, 2025 3m read

image

相手に隙を与えないノックアウトパンチのように、オープンソースプラットフォームであるKubernetesは、その可用性(つまり、サポート、サービス、ツールの容易な入手性)により、無限の可能性を秘めています。Kubernetesはコンテナ内のジョブとサービスを管理できるプラットフォームであり、これらのプロセスの構成と自動化を大幅に簡素化します。

しかし、タイトルイメージにふさわしい、このツールに「正しい」名前、InterSystems Kubernetes Operatorを与えましょう。

原理は至ってシンプルです。サービスを選択し、ゲームのルールを定義するだけで(ここでもKnockoutを参照)、すべてが可能な限り透明性と効率性を高めて提供されます。これは、インストール、修復、そして事前定義された要件を満たさない場合の最終的な復旧にも適用されます。

では、IKOと他のオペレーターの違いは何でしょうか?Kubernetes API(ここではK8sと略します)の拡張機能であるIrisClusterカスタムコンポーネントは、ロックされたIRISクラスター、分散Cachéクラスター、さらには匿名インスタンスとしてデプロイするオプションを備えています。これらすべてを、最も多様なKubernetesプラットフォーム上で実行できます。最後に、InterSystemsのクラスタ管理機能も搭載されており、以前は手動でしか実行できなかったノードの追加によるタスクの自動化が可能になります。

これは非常に魅力的で、スポーツやゲームに例えられていますが、なぜ必要なのでしょうか?答えは比較的簡単です。InterSystems IRISをK8sに統合するためにIrisClusterは必要ありません。しかし、K8sはスタンドアロンアプリケーションであるため、これらのIRISインスタンスを構成するための定義とスクリプトを作成する必要があります。このように、IKOはこのプロセスを自動化し、メンテナンスを容易にします。コンテナを使用することは、必要な一連のアクティビティをパッケージ化する優れた方法です。

ところで、この機会を活用してみてはいかがでしょうか?コンテナとは何かご存知ですか?ヒント:単なるボードゲームではありません。

image

答えは、あるパッケージの「輸送」に大きく関係しています。アプリケーションとサービスをパッケージ化して分離し、他の部分とは独立して実行できるようにするためです。これにより、必要に応じて、ある環境から別の環境への「輸送」が容易になります。

InterSystemsの膨大なドキュメントを活用し、IKOのインストールとその後の設定および調整手順へのリンクを以下に示します。

https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls...

K8sというニックネームに誰も興味を持たないように。Kubernetesという名前はギリシャ語に由来し、水先案内人、つまり指揮官を意味します。そして、先頭の「K」と末尾の「S」の間の文字数は8です。つまり、「K8s」です。

0
0 35
お知らせ Mihoko Iijima · 6月 2, 2025

開発者の皆さん、こんにちは!

InterSystems FHIR とデジタルヘルスの相互運用性コンテスト 2025 の勝者が発表されました!

今回のコンテストには、11 の素晴らしいアプリケーション 🔥 が投稿されました。

ご応募いただきました参加者の皆さん、素敵な作品をありがとうございました!

それでは受賞者を発表します!

0
0 34
記事 Mihoko Iijima · 6月 1, 2025 7m read

これは InterSystems FAQ サイトの記事です。

InterSystems 製品では、ユーザが持つロールによって「InterSystems 製品内で何ができるのか」が決まります。

では、ロールには何が含まれているのでしょうか。

ロールには、複数の特権を含めることができます。特権とは、リソース(保護対象)に対する許可の設定を指しています。

本記事では、IRIS の開発者である山田さん(Yamada) を例に、以下の内容をご説明します。

1) ロールから付与される特権(=リソースに対する許可)について具体例を利用した確認方法

2) ロールを利用したセキュリティ設定について

《ご参考》

ビデオでの解説もあります。ラーニングパスの「InterSystems IRIS 管理の基本」の「4. セキュリティの構成と管理」をご参照ください。

ラーニングパスには、管理者ではないけれど管理概要も知っておきたい方向けの「開発者向け InterSystems IRIS の管理概要」もあります。ぜひご参照ください。

1) ロールから付与される特権(=リソースに対する許可)について具体例を利用した確認方法

0
0 56
記事 Megumi Kakechi · 6月 1, 2025 5m read

これは InterSystems FAQ サイトの記事です。
ロックテーブルを参照する方法として、主に以下の3つの方法が挙げられます。

1. 管理ポータルで参照する方法
 ⇒ 管理ポータル:システムオペレーション > ロック > ロックを表示(または管理)

2. ^LOCKTAB ユーティリティ を使用する方法
 ⇒ %SYS> do ^LOCKTAB

3. プログラムで参照する方法
 ⇒ プログラム内でロック情報を取得する方法


こちらの記事では、ロックテーブルで参照できる情報について、以下の3つのケースに分けて、かかるロックとその意味をご説明します。

1.トランザクションで更新クエリ実行時、他のプロセスで更新・参照した状態
2.デッドロックとなった状態
3.テーブルロックがかかった状態


目視で一番わかり易いのは、1の 管理ポータルで参照する方法 になるので、こちらで説明したいと思います。

最初に、
1.トランザクションで更新クエリ実行時、他のプロセスで更新・参照をすると、どのようなロックがかかるのか見ていきます。

a. プロセスA(PID=10044)にてトランザクションで、Sample.Personテーブルの ID=1 を更新します。    ⇒ Exclusive_e->Delock ロック

0
0 57
質問 Koji Yamamoto · 5月 5, 2025

次のようなプログラムです。

<a href=# onclick='Js_StageCNG(3)'>ステージ3に進む</a>
・・・
    Set Stage=%session.Get("STAGE")
    if Stage="" set Stage=1
   ・・・
if Stage=3 {
  動かなかったので、すべてコメントに変えたがやはり動かなかった
}
<script language=javascript>
  function Js_StageCNG(key) {
       ans=#server(..StageCNG(key))#
       window.location.href="...csp"
}
</script>
<script language=cache method="StageCNG" arguments="key:%Library.String" returntype="%Boolean">
    do %session.Set("STAGE",key)
    quit 1
</script>

この現象は、最近、突然に起こるようになりました。

3
0 67
記事 Megumi Kakechi · 5月 29, 2025 6m read

これは InterSystems FAQ サイトの記事です。

InterSystems製品では、複数のプロセスが同時に同じデータにアクセスする場合、排他制御を行うためにロックを使用できます。
ロックは、データの更新を正しく行い整合性を保つための仕組みで、あるデータに対する更新処理を制御するために使用します。
ロックを操作するには、LOCK(L)というコマンドが使用できます。

こちらの記事では、InterSystems製品で使用できるロックの種類、LOCKコマンドの使い方をご紹介します。


★ロックの種類

  増分 単純
排他(既定) LOCK +^A LOCK ^A
共有 LOCK +^A#"S" LOCK ^A#"S"


プラス記号 (+) をつけると、増分ロックになります。1つのプロセスで複数の増分ロックを追加できます。
プラス記号 (+) をつけないと、単純ロックになります。こちらは、1つのプロセスで1つのロックのみ所有できます。単純ロックコマンド実行時に既存のロックがあった場合、そのプロセスが保持している既存のロックをすべて削除し、新しいロックを追加します。

0
0 50
お知らせ Rie Tokue · 5月 28, 2025

    

ご好評をいただいておりますソリューションウェビナー、3回目は以下のテーマで開催します。是非ご参加ください!

日時:6月17日(火)13時半~14時半

タイトル:サイロ化されたデータを有効活用するには?  InterSystems Data Fabric Studioのご紹介 

参加費無料・事前登録制

ご登録はこちらから

【概要】

あらゆるステークホルダーが必要な時に必要なデータにアクセスするには、まずアプリケーション毎に異なる種類のデータを使いやすい、統一されたデータ形式の変換が不可欠です。データアクセスに関わる課題を弊社の新製品、InterSystems Dat Fabric Studioはどのように解決できるのか、ユースケースとデモを交えてお話します。

【こんな方にお勧め】

  • データの利活用方法を検討されている方
  • データサイロにお悩みの方

【前提知識】

リレーショナルデータベースの基礎知識があれば望ましいです。Data Fabric Studioはローコードツールです。

0
0 71
記事 Toshihiko Minamoto · 5月 27, 2025 14m read

次回の Python コンテストでは、Python を使用して IRIS をデータベースとして使用する簡単な REST アプリケーションを作成する方法についての小さなデモを作成しようと思います。 以下のツールを使用します。

  • FastAPI フレームワーク: 高パフォーマンス、学習しやすい、高速コーディング、プロダクション対応
  • SQLAlchemy: Python SQL ツールキットで、アプリケーション開発者が SQL の全性能と柔軟性を活用できるオブジェクトリレーションマッパーです。
  • Alembic: Python 用の SQLAlchemy データベースツールキットと使用する軽量のデータベース移行ツール。
  • Uvicorn: Python の ASGI ウェブサーバー実装。

環境の準備

バージョン 3.7 以降の Python がすでにインストール済みだと思います。 プロジェクトフォルダを作成し、その中に以下のコンテンツで requirements.txt ファイルを作成します。

fastapi==0.101.1
alembic==1.11.1
uvicorn==0.22.0
sqlalchemy==2.0.20
sqlalchemy-iris==0.10.5

Python で仮想環境を使用することをお勧めします。新しい環境を作成して有効化しましょう。

python -m venv env && source env/bin/activate

そして、依存関係をインストールします。

pip install -r requirements.txt

クイックスタート

FastAPI を使って最も単純な REST Api を作成しましょう。 これを行うには、app/main.py を作成します。

from fastapi import FastAPI

app = FastAPI( title='TODO Application', version='1.0.0', )

@app.get("/ping")asyncdefpong():return {"ping": "pong!"}

この時点で、アプリケーションを純分に起動して動作させることができます。 サーバーの起動には、uvicorn を使用します。

$ uvicorn app.main:app         
INFO:     Started server process [94936]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

ping リクエストを発行できます。

$ curl http://localhost:8000/ping
{"ping":"pong!"}

FastAPI には API をテストできる UI が用意されています。

Docker 化環境

IRIS をアプリケーションに追加するには、コンテナーを使用します。 IRIS イメージはそのままで使用できますが、Python アプリケーション用の Docker イメージを作成する必要があります。 また、Dockerfile が必要です。

FROM python:3.11-slim-buster

WORKDIR /usr/src/app RUN --mount=type=bind,src=.,dst=.
pip install --upgrade pip &&
pip install -r requirements.txt
COPY . . ENTRYPOINT [ "/usr/src/app/entrypoint.sh" ]

コンテナー内でアプリケーションを起動するには、簡単な entrypoint.sh が必要です。

#!/bin/sh
# Run SQL Migrations, to make DB Schema up to date
alembic upgrade head

# Start Python application uvicorn app.main:app
--workers 1
--host 0.0.0.0
--port 8000 "$@"

実行フラグを忘れずに追加しましょう。

chmod +x entrypoint.sh

docker-compose.yml で IRIS と組み合わせます。

version:"3"services:  iris:    image:intersystemsdc/iris-community    ports:      -1972    environment:      -IRISUSERNAME=demo      -IRISPASSWORD=demo    healthcheck:      test:/irisHealth.sh      interval:5s  app:    build:.    ports:      -8000:8000    environment:      -DATABASE_URL=iris://demo:demo@iris:1972/USER    volumes:      -./:/usr/src/app    depends_on:      iris:        condition:service_healthy    command:      ---reload

ではビルドしましょう。

docker-compose build

最初のデータモデル

アプリケーションに IRIS データベースへのアクセスを宣言し、app/db.py ファイルを追加しましょう。このファイルによって データベースにアクセスできるように SQLAlchemy が構成されます。これは docker-compose.yml によって渡される URL で定義されます。これには後でアプリで使用するハンドラーがいくつか含まれています。

import os

from sqlalchemy import create_engine from sqlalchemy.ext.declarative import DeclarativeMeta, declarative_base from sqlalchemy.orm import sessionmaker

DATABASE_URL = os.environ.get("DATABASE_URL") ifnot DATABASE_URL: DATABASE_URL = "iris://demo:demo@localhost:1972/USER" engine = create_engine(DATABASE_URL, echo=True, future=True)

Base: DeclarativeMeta = declarative_base()

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

definit_db(): engine.connect()

defget_session(): session = SessionLocal() yield session

では、初の唯一のモデルをアプリケーションに定義しましょう。 ファイル app/models.py を作成して編集します。SQLAlchemy を使用して、Todo と言う、id、title、description の 3 つ列を持つモデルを定義します。

from sqlalchemy import Column, Integer, String, Text
from app.db import Base

classTodo(Base):tablename = 'todo' id = Column(Integer, primary_key=True, index=True) title = Column(String(200), index=True, nullable=False) description = Column(Text, nullable=False)

SQL の移行の準備

変化し続ける世界では、アプリケーションは将来的に改善されると考えるため、テーブル構造は最終的なものではなく、さらにテーブル、列、インデックスなどを追加できるとわかっています。 この場合の最善のシナリオは、SQL Migration ツールを使用することです。これは、アプリケーションのバージョンに応じてデータベースの現在の構造をアップグレードできるツールであり、何かが誤ってしまった場合には、これらのツールを使用することでダウングレードすることもできます。 このプロジェクトでは Python と SQLAlchemy を使用していますが、SQLAlchemy の作者は Alembic というツールを提供しており、ここではそれを使用します。

IRIS と、アプリケーションを含むコンテナーを起動する必要がありますが、この時点では、コマンドを実行できるように Bash する必要があります。

$ docker-compose run --entrypoint bash app
[+] Creating 2/0
 ✔ Network fastapi-iris-demo_default   Created                                                                                                                                                        0.0s 
 ✔ Container fastapi-iris-demo-iris-1  Created                                                                                                                                                        0.0s 
[+] Running 1/1
 ✔ Container fastapi-iris-demo-iris-1  Started                                                                                                                                                        0.1s 
root@7bf903cd2721:/usr/src/app# 

コマンド alembic init app/migrations を実行します。

root@7bf903cd2721:/usr/src/app# alembic init app/migrations
  Creating directory '/usr/src/app/app/migrations' ...  done
  Creating directory '/usr/src/app/app/migrations/versions' ...  done
  Generating /usr/src/app/app/migrations/README ...  done
  Generating /usr/src/app/app/migrations/script.py.mako ...  done
  Generating /usr/src/app/app/migrations/env.py ...  done
  Generating /usr/src/app/alembic.ini ...  done
  Please edit configuration/connection/logging settings in '/usr/src/app/alembic.ini' before proceeding.
root@7bf903cd2721:/usr/src/app#

これにより Alembic 構成が準備されたため、アプリケーションのニーズに適合するように修正する必要があります。 これを行うには app/migrations/env.py ファイルを編集します。 これはファイルの始まりに過ぎないため、更新する必要があります。sqlalchemy.urltarget_metadata を更新することに専念しましょう。 その以下の変更はありません。

import os
import urllib.parse
from logging.config import fileConfig

from sqlalchemy import engine_from_config from sqlalchemy import pool

from alembic import context

# this is the Alembic Config object, which provides# access to the values within the .ini file in use. config = context.config

DATABASE_URL = os.environ.get("DATABASE_URL")

decoded_uri = urllib.parse.unquote(DATABASE_URL) config.set_main_option("sqlalchemy.url", decoded_uri)

# Interpret the config file for Python logging.# This line sets up loggers basically.if config.config_file_name isnotNone: fileConfig(config.config_file_name)

# add your model's MetaData object here# for 'autogenerate' supportfrom app.models import Base target_metadata = Base.metadata # target_metadata = None

すでにモデルが存在するため、コマンド alembic revision --autogenerate で移行を作成する必要があります。

root@7bf903cd2721:/usr/src/app# alembic revision --autogenerate
INFO  [alembic.runtime.migration] Context impl IRISImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'todo'
INFO  [alembic.autogenerate.compare] Detected added index 'ix_todo_id' on '['id']'
INFO  [alembic.autogenerate.compare] Detected added index 'ix_todo_title' on '['title']'
  Generating /usr/src/app/app/migrations/versions/1e4d3b4d51ca_.py ...  done
root@7bf903cd2721:/usr/src/app# 
 
生成された移行を見てみましょう。

では、これをデータベースに適用しましょう。コマンド alembic upgrade head を使用します。ここで、head は最新バージョンにアップグレードするためのキーワードです。

root@7bf903cd2721:/usr/src/app# alembic upgrade head
INFO  [alembic.runtime.migration] Context impl IRISImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 1e4d3b4d51ca, empty message
 
Downgrade
アプリケーションのアップグレード中に元に戻す必要があることが分かった場合に、例えば 1 つ前のリビジョンにデータベースをダウングレードするには head-1 とします。
root@7bf903cd2721:/usr/src/app# alembic downgrade head-1
INFO  [alembic.runtime.migration] Context impl IRISImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running downgrade 1e4d3b4d51ca -> , empty message

and to completely downgrade back to an empty state, use keyword base

現在の状態をいつでも確認できます。いくつかの移行が欠落している場合にはその情報を得られます。

root@7bf903cd2721:/usr/src/app# alembic check
INFO  [alembic.runtime.migration] Context impl IRISImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
No new upgrade operations detected.

データをアクセス可能にする

REST に戻り、実行させる必要があります。現在のコンテナーを終了し、アプリサービスを通常どおり実行すると、uvicorn には --reload フラグが設定されているため、Python ファイル内の変更をチェックし、変更がある場合には再起動されます。

$ docker-compose up app
[+] Running 2/0
 ✔ Container fastapi-iris-demo-iris-1  Running                                                                                                                                                        0.0s 
 ✔ Container fastapi-iris-demo-app-1   Created                                                                                                                                                        0.0s 
Attaching to fastapi-iris-demo-app-1, fastapi-iris-demo-iris-1
fastapi-iris-demo-app-1   | INFO  [alembic.runtime.migration] Context impl IRISImpl.
fastapi-iris-demo-app-1   | INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
fastapi-iris-demo-app-1   | INFO:     Will watch for changes in these directories: ['/usr/src/app']
fastapi-iris-demo-app-1   | INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
fastapi-iris-demo-app-1   | INFO:     Started reloader process [8] using StatReload
fastapi-iris-demo-app-1   | INFO:     Started server process [10]
fastapi-iris-demo-app-1   | INFO:     Waiting for application startup.
fastapi-iris-demo-app-1   | INFO:     Application startup complete.

FastAPI は Pydantic プロジェクトを使用してデータスキーマを宣言しているため、それも必要です。app/schemas.py を作成しましょう。列は models.py と同じですが、単純な Python フォームを使用します。

from pydantic import BaseModel

classTodoCreate(BaseModel): title: str description: str

classTodo(TodoCreate): id: int

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Config</span>:</span>
    from_attributes = <span class="hljs-keyword">True</span>

SQLAlchemy ORM を使ってデータベースを操作する app/crud.py で CRUD 操作を宣言します。

from sqlalchemy.orm import Session
from . import models, schemas

defget_todos(db: Session, skip: int = 0, limit: int = 100):return db.query(models.Todo).offset(skip).limit(limit).all()

defcreate_todo(db: Session, todo: schemas.TodoCreate): db_todo = models.Todo(**todo.dict()) db.add(db_todo) db.commit() db.refresh(db_todo) return db_todo

そして最後に、app/main.py を更新し、ToDo を読み取って作成するルートを追加できます。

from fastapi import FastAPI, Depends
from .db import init_db, get_session
from . import crud, schemas

app = FastAPI( title='TODO Application', version='1.0.0', )

@app.on_event("startup")defon_startup(): init_db()

@app.get("/ping")asyncdefpong():return {"ping": "pong!"}

@app.get("/todo", response_model=list[schemas.Todo])asyncdefread_todos(skip: int = 0, limit: int = 100, session=Depends(get_session)): todos = crud.get_todos(session, skip=skip, limit=limit) return todos

@app.post("/todo", response_model=schemas.Todo)asyncdefcreate_todo(todo: schemas.TodoCreate, session=Depends(get_session)):return crud.create_todo(db=session, todo=todo)

これに応じてドキュメント ページが更新され、実際に操作できるようになりました。

 
試してみましょう。
新しい ToDo を追加します。

その内容を確認しましょう。

IRIS で確認してみましょう。

─$ docker-compose exec iris irissqlcli iris+emb:///
Server:  IRIS for UNIX (Ubuntu Server LTS for ARM64 Containers) 2023.2 (Build 227U) Mon Jul 31 2023 17:43:25 EDT
Version: 0.5.4
[SQL]irisowner@/usr/irissys/:USER> .tables
+-------------------------+
| TABLE_NAME              |
+-------------------------+
| SQLUser.alembic_version |
| SQLUser.todo            |
+-------------------------+
Time: 0.043s
[SQL]irisowner@/usr/irissys/:USER> select * from todo
+----+-------+---------------------+
| id | title | description         |
+----+-------+---------------------+
| 1  | demo  | it's really working |
+----+-------+---------------------+
1 row in set
Time: 0.004s
[SQL]irisowner@/usr/irissys/:USER> select * from alembic_version
+--------------+
| version_num  |
+--------------+
| 1e4d3b4d51ca |
+--------------+
1 row in set
Time: 0.045s
[SQL]irisowner@/usr/irissys/:USER>

 

REST の作成において Python と FastAPI を簡単に使用していただけたなら幸いです。 このプロジェクトのソースコードは、GitHub の https://github.com/caretdev/fastapi-iris-demo にあります。

0
0 45