第2部: インデックス処理
クラスにどのようなインデックスが必要であるのか、それをどのように定義するのかについて理解できたので、 次に、どのように処理するのかについて確認しましょう。
クエリプラン
(注意: クラスに変更を適用する場合と同様に、ライブシステムにインデックスを追加する場合にもリスクが伴います。インデックスが入力されているときに、ユーザーがデータにアクセスしたり更新したりすると、クエリ結果が空になったり誤った結果が生じることがあります。また、構築中のインデックスが破損する場合もあります。 ライブシステムでインデックスを定義したり使用したりするには追加の手順があり、それについてはこのセクションで触れていますが、詳細はドキュメントに記載されています。)
新しいインデックスの準備ができたら、SQLオプティマイザが、クエリを実行する上で最も効率的に読み取れるインデックスであると判断するかどうかを確認できます。 プランを確認するために実際にクエリを実行する必要はありません。 クエリがあれば、プランをプログラムで確認することができます。
Set query = 1
Set query(1) = “SELECT SSN,Name FROM Sample.
これは InterSystems FAQ サイトの記事です。
システムクラス SYS.Lock のメソッド GetLockSpaceInfo() にてロックテーブルの空きサイズ、使用サイズが取得可能です。
4717392,4712512,1200
戻り値は、“AvailableSpace, UsableSpace, UsedSpace” になり、それぞれByte単位の値を表しています。
AvailableSpace:ロックテーブルサイズから使用サイズ(UsedSpace)を引いたサイズ
UsableSpace:AvailableSpaceよりロック管理のための内部データを引いたサイズ
→これがユーザの使用できるロックテーブル空き容量になります。
UsedSpace:使用サイズ
詳細は、クラスリファレンス をご覧ください。
これは InterSystems FAQ サイトの記事です。
Webアプリケーションの開発・運用には、高性能・高スケーラビリティ・開発生産性の良さが求められます。
IRIS Data Platformには、高性能で軽量なデータベースエンジンとそのエンジンの性能を最大限活用するアプリケーションサーバ機能、および、Webアプリケーションを迅速に開発するためのREST/JSON対応、API管理機能が用意されています。
さらに、マルチコア・マルチCPUシステムに最適化したアーキテクチャや、複数サーバでのスケールアウト手法による高スケーラビリティを提供するECP、シャーディングと呼ばれる技術を提供します。
これは、SQLインデックスに関する2部構成の記事の前半です。
第1部 - インデックスを理解する
インデックスとは?
最後に図書館に行った時のことを思い出してください。 通常そこには、分野別(そして作者順と題名順)に整理された本が並び、それぞれの棚には、本の分野を説明したコードが記載された本立てがあります。 特定の分野の本を収集する場合、すべての通路を歩いて一冊ずつ本の表紙を読む代わりに、目的の分野の本棚に直接向かって選ぶことができるでしょう。
SQLインデックスにもこれと同じ機能があります。テーブルの各行にフィールドの値へのクイック参照を提供することで、パフォーマンスを向上させています。
インデックスの設定は、最適なSQLパフォーマンスを得られるようにクラスを準備する際の主なステップの1つです。
この記事では、次のことについて説明します。
- インデックスとは何か。いつ、なぜそれを使用するか。
- どのようなインデックスが存在するか、どのようなシナリオに適しているのか。
- インデックスの例
- 作成方法
この記事では、Sampleスキーマのクラスを参照します。 このスキーマは以下に示すGitHubリポジトリにあります。
これは InterSystems FAQ サイトの記事です。
InterSystems IRISでは、サンプル定義の一部は、GitHub上に公開しています。
本FAQ内で登場する Sample.Person のクラス定義とサンプルデータについては、こちら からダウンロードいただけます。
手順は以下の通りです。
- Zipとしてダウンロード
- 1を展開
- 展開フォルダ内 以下階層のクラス定義をターミナルを利用してIRISへインポートし、インポート後 Build()メソッドを実行します。
Samples-Data-master\buildsample\Build.DataSample.cls をフルパスで指定してインポートします(Sample-Data-masterフォルダを c:\kit へコピーした状態での例です)。
do $system.OBJ.Load("C:\kit\Samples-Data-master\buildsample\Build.DataSample.cls","ck") データ生成のBuild() メソッド実行例は以下の通りです。
do ##class(Build.DataSample).Build()
実行例(全体):
USER>do $system.OBJ.Load("C:\kit\Samples-Data-master\buildsample\Build.*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。
国や地域のニーズに合わせて何のデータをどこにどのように格納するのかを定める共通ルールである FHIR プロファイルは、FHIR による標準化において、非常に重要な要素です。
この動画では、InterSystems IRIS for Health における FHIR リポジトリの構築・設定~ FHIR プロファイルの追加の方法を、最新バージョンおよび今後のバージョンでのサポート内容を含めてご紹介いたします。
この開発者コミュニティでは他にも IRIS の FHIR 機能に関連した多くの記事を公開しています。 FHIR にご興味ある方はぜひご覧ください。
開発者の皆さん、こんにちは!GW は、のんびりゆったり良いお休みになりましたでしょうか🎏?
休み明けにぴったりのコンテストテーマが発表されました!今回は 🔥 FHIR Accelerator 🔥 です!
🏆 InterSystems FHIR Accelerator Programming Contest 🏆
InterSystems FHIR-as-a-service on AWS を使用する、または、InterSystems IRIS FHIR Accelerator を使用したソリューションの開発に役立つアプリケーションを開発し、ご応募ください!
応募期間は 2021年5月10日~5月30日 です!
💰 賞金総額: $8,750 💰
(投票期間は 2021年5月31日~6月6日、勝者発表は 6月7日を予定しています)
優勝特典
1、審査員から多く票を集めたアプリケーションには、以下の賞金が贈られます。
🥇 1位 - $4,000
🥈 2位 - $2,000
🥉 3位 - $1,000
2、開発者コミュニティで多く票を集めたソリューションには、以下の賞金が贈られます。
🥇 1位 - $1000
🥈 2位 - $500
🥉 3位 - $250
複数の参加者が同数の票を獲得した場合、全参加者が勝者となり賞金は勝者間で分配されます。
参加資格
どなたでもご参加いただけます!
- ブロックチェーン
この記事を書いている時点(2019年2月)で、ビットコインの価値はそれが絶頂期だったころの 5 分の 1 未満に下落しています。 そのため、ブロックチェーンの私の体験について誰かに話すときに最初に耳にするのは、「今頃ブロックチェーンを欲しがる人がいるのか」という偽りなく懐疑的な言葉です。
その通り。ブロックチェーンの盛り上がりは衰退しています。 ところが、それが基づいているテクノロジーはここにとどまり、特定の分野で使用され続けるでしょう。一般的にインターネットではこのテクノロジーの使用方法が記述された資料でいっぱいです。
開発者の皆さん、こんにちは!
いよいよ 🏆 InterSystems FHIR Accelerator Programming Contest 🏆 への応募が開始されます!
今回のコンテストに参加するためには、InterSystems IRIS FHIR Accelerator Service (FHIRaaS) を AWS で利用する必要があります。
FHIRaaS の利用を開始するための最初の手続きとして、特別なコードを含めた URL を使用して ISC Dev FHIR Portal でユーザ情報を登録する必要があります。

「特別なコードを含んだ URL」って?
以下例のように「特別なコード」をクエリパラメータに指定して、ポータルサイトにアクセスします。
👉🏼 https://portal.trial.isccloud.io/account/signup?code=特別なコード
ポータルサイトを利用するための「特別なコード」は、以下いずれかの方法で入手できます!
- コミュニティ上で @Irina Podmazko へダイレクトメッセージを送付する
- DC Discord channel にアクセスして、またはプライベートメッセージでコンテスト担当者に連絡する
- このお知らせのコメント欄に「コード希望!
開発者の皆さん、こんにちは!
この記事では、Java から IRIS へ接続する方法の中から XEP(ゼップ)を利用して、GPS (GPX)データを高速に取り込むサンプルをご紹介します。
Java の実行環境や IRIS がお手元になくても大丈夫です!コンテナ 🐳 のビルド+開始で体験できる「実行環境テンプレート」をご用意しました。
ソースコードは コミュニティの Git で公開 していますので、docker、docker-compose 、git がインストールされた環境であれば、すぐにお試しいただけます(Javaの実行環境はコンテナでご提供するので準備不要です)。
操作方法は、Gitの README に記載しています。ぜひお試しください。
この記事の中では、コード解説を追加しています。ぜひ、最後までお付き合いください!
1)処理概要

GPX データを IRIS へ渡す迄の流れにリアクティブプログラミングが行える RxJava2 のライブラリを使用しています。
メモ:サンプルコードの中では、GPS データを直接受信するのではなく、Google マイマップやサンプル GPS データから GPX ファイルに変換したデータを入力に使用しています。
実行時、複数(数十~千)の GPS データが含まれる GPX ファイルを引数に指定し情報を入力します。
開発者の皆さん こんにちは。
開発者コミュニティの2021年4月の変更内容をお届けします。 主な機能は以下の通りです。
- ソースコードでのクリップボードへのコピーボタン
- 翻訳ページの投稿
- 投稿へのプライベートリプライ
- インターシステムズの公式リリース、アラートページ
詳細は以下をご覧ください


これは InterSystems FAQ サイトの記事です。
インターシステムズ オンラインラーニングでは、InterSystems IRIS 概要や IRIS の各機能について 2~5分でご覧いただける QuickStart ページ(説明ビデオと操作方法を解説、サンプル用 Git の使い方をまとめたページ)をご用意しています。
- InterSystems IRIS Data Platform について
- Multi-Model
- Embedded Python QuickStart
- Interoperability
- Java
- .NET
- Node.js
- Python
- SQL での開発
*日本語字幕をオンにする方法は こちらをご覧ください。
開発者向けまとめページでは、QuickStart 以外にもドキュメントや開発者コミュニティへのリンク、IRIS を簡単に始めることのできるクラウド(AWS/Azure/GCP)のマーケットプレイスへのリンクなどまとめています。
ぜひご活用ください。
開発者コミュニティにもサンプルコード付き記事の投稿があります。ぜひご参照ください。
中間データベースを使用して、Grafana と IRIS(または Cache/Ensemble)を使用する方法を説明した非常に有益な記事がコミュニティにいくつか掲載されています。
しかし私は、IRIS 構造に直接アクセスしたいと考えていました。 特にこのリンクで説明しているように、SQL でアクセス可能なCaché履歴モニターのデータにアクセスしたかったのです。
https://community.intersystems.com/post/apm-using-cach%C3%A9-history-monitor
また、データをいじりたくもありませんでした。
必要とするデータを返すクラスクエリはすでにあったので、それらを、JSON を返す REST クラスに埋め込むだけで良かったからです。 クラス Grafana.MonitorData はまだ含めていません。それでなければならないという理由があるわけではなかったためですが、要望があれば、含めることは可能です。
難しい点は 2 つだけでした。 1 つは、各ポイントで、現地時間と UTC 時間を確実に調整することでした。 もう 1 つは、Grafana は「.25」のようにゼロを省略した小数点数値を好まないため、JavaScript エラー「t.dataList.map is not a function 」が発生していたことです。
ObjectScriptには、エラー(ステータスコード、例外、SQLCODEなど)を処理する方法が少なくとも3つあります。 ほとんどのシステムコードにはステータスが使用されていますが、例外は、いくつかの理由により、より簡単に処理することができます。 レガシーコードを使用している場合、さまざまな手法の変換にいくらか時間が掛かりますが、 参考として、次のスニペットをよく使用しています。 皆さんのお役にも立てればと思います。
///SQLCODEのステータス: set st = $$$ERROR($$$SQLError, SQLCODE, $g(%msg)) //埋め込みSQL set st = $$$ERROR($$$SQLError, rs.%SQLCODE, $g(rs.%Message)) //動的SQL ///SQLCODEの例外: throw ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE,%msg) //埋め込みSQL throw ##class(%Exception.SQL).CreateFromSQLCODE(rs.%SQLCODE,rs.%Message) //動的SQL throw:(SQLCODE'=0)&&(SQLCODE'=100) ##class(%Exception.SQL).
これは InterSystems FAQ サイトの記事です。
監視対象プロセスについては以下の表をご参照ください。
※利用環境によって、出現しないプロセスもあります。
| ps コマンドによるプロセス名 | 管理ポータルプロセスの一覧のルーチン名 | プロセス数 |
|---|---|---|
| [IRISインストールディレクトリ]/bin/irisdb -cc -s. -B -C[IRISインストールディレクトリ]/iris. |
これは InterSystems FAQ サイトの記事です。
InterSystems のミラーリングを使用することで、以下2つの目的を達成できます。
- 自動フェイルオーバ
- ディザスタリカバリや、ビジネスインテリジェンスのためのデータベースの複製
1 については、2台の InterSystems 製品を利用し、プライマリサーバの InterSystems 製品に障害が発生した場合は、もう片方の InterSystems 製品に自動フェイルオーバが行えるミラーリング構成です。
2 については、1台のプライマリサーバである InterSystems 製品から、遠隔地も含め、任意の拠点にある複数台の InterSystems 製品へ(=非同期ミラーメンバ)データベースファイル(InterSystems IRISは「IRIS.DAT」、Caché/Ensemble/HealthShareは「CACHE.DAT」)のミラーリングを行います。
(また、複数のプライマリサーバから1台の非同期メンバのInterSystems 製品へのミラーリングも行えます。)
詳細は以下ドキュメントをご参照ください。
InterSystems IRIS ミラーリングについて【IRIS】
ミラーリングについて
数年ほど前、Caché Foundationsの講座(現「Developing Using InterSystems Objects and SQL」)において、%UnitTestフレームワークの基礎を講義していたことがあります。 その時、ある受講者から、ユニットテストを実行している間に、パフォーマンス統計を収集できるかどうかを尋ねられました。 それから数週間後、この質問に答えるために、%UnitTestの例にコードを追加したのですが、 ようやく、このコミュニティでも共有することにしました。
*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。
機械学習やAIの進歩が、社会的にも大きな話題になっています。 しかしながら、実際に機械学習を活用したシステムを開発し、ビジネスに生かすところに到達するまでには様々な課題があります。例えば、データサイエンティストと呼ばれる高度なスキルを持った人材の不足もその一つです。
InterSystems は、アプリケーション開発者の方々が、IRIS data platform に保存されているデータとSQLを用いて、機械学習を容易に利用できる仕組み「IntegratedML」を開発しました。この動画では、IntegratedML の仕組みや使い方について解説します。
間もなくリリース予定の InterSystems IRIS 2021.1 に、IntegratedML が含まれます。
現在 2021.1のプレビュー版を公開中です。 詳しくはこちらをご覧ください。
本動画ではデモを行っています。デモをご覧になりたい方は 16:36 からご覧ください。
開発者の皆さんこんにちは!
第11回 InterSystems IRIS プログラミングコンテスト(開発者ツール) への応募、投票が全て終了しました。コンテストへのご参加、またご興味をお持ちいただきありがとうございました。
今回のお知らせでは、見事受賞されたアプリケーションと開発者の方々を発表します!
🏆 Experts Nomination - 特別に選ばれた審査員から最も多くの票を獲得したアプリケーションに贈られます。
🥇 1位 - $4,000 は Server Manager for VSCode を開発された @John Murray さんに贈られました!
🥈 2位 - $1,500 は Config-API を開発された @Lorenzo Scalese さんに贈られました!
🥈 2位 - $1,500 は zpm-explorer を開発された @Henrique Dias Dias さんと @José Roberto Pereira さんに贈られました!
🏆 Community Nomination - 最も多くの票を獲得したアプリケーションに贈られます。
🥇 1位 - $750 は Server Manager for VSCode を開発された @John Murray さんに贈られました!

この記事には、IAM の基本概念を学習するための、教材、例、演習が含まれます。
すべてのリソースはこちらの git から入手できます: https://github.com/grongierisc/iam-training
ソリューションは training ブランチにあります。
この記事では、次の点について説明します。
インターシステムズは、以下のプレビューバージョンをリリースしました。
- InterSystems IRIS 2021.1 preview
- InterSystems IRIS for Health 2021.1 preview
- HealthShare Health Connect 2021.1 preview
来月に予定されている一般提供開始に先立ち、このプレビューリリースにて新製品の感想を皆様からお聞かせいただきたいと思います。
InterSystems IRIS Data Platform 2021.1 は、エクステンデッド・メンテナンス(EM)リリースです。前回のEMリリースである2020.1以降、継続的なデリバリー(CD)リリースで多くの重要な新機能や拡張機能が追加されています。
CDリリースの概要については、2020.2、2020.3、2020.4のリリースノートを参照してください。
このプレビューリリースのビルド番号は、2021.1.0.205.0 です。
【新機能のご紹介】
本リリースの機能強化により、開発者は選択した言語で高速かつ堅牢なアプリケーションをより自由に構築できるようになり、ユーザーは新しい高速な分析機能により大量の情報をより効果的に利用できるようになります。
InterSystems IRIS 2021.
みなさん、こんにちは。
今回はInterSystems Container Registryを発表できることをうれしく思います。 これはコンテナベースのリリースやプレビューにアクセスする新たな配布チャンネルです。すべてのコミュニティエディションのイメージはログイン不要の公開リポジトリにあります。すべてのリリースイメージ(IRIS, IRIS for Health, Health Connect, System Alerting and Monitoring, InterSystems Cloud Manager) やユーティリティイメージ(アービター、 Web Gateway、PasswordHash等) にはWRCアカウントの認証情報から生成されるログイントークンが必要です。
これは InterSystems FAQ サイトの記事です。
アプリケーションに求められる要件は日々複雑化しています。
しかし、複雑化するからといって開発のスピードおよび実行時のスピードが遅くなることは許されません。
複雑な要件を満たすために現在主流の手法ではソフトウェアスタック上の様々な部品(ミドルウェア、ライブラリ、フレームワークなど)を組み合わせる方法を取ります。
この方法は、様々なものを学習するための時間、それらを連携する方法、経年で様々なものが進化していくことに伴って各部品間の関係性が変化するためにそれらを維持管理していくための手間など様々な付帯的な作業が必要です。
結果として本来行いたいことに集中して取り組む前に付随する作業に忙殺されることになり開発生産性があがりません。
しかも実行時にも様々な部分が連携するためのオーバーヘッドを避けることができず期待する性能を確保することも困難になります。
一方インターシステムズのプラットフォームには上記要件を満たすのに必要十分な機能がひとつの首尾一貫した形で提供されており上記の様な手間がほとんど必要ありません。
さらにこのプラットフォームにはインターシステムズ独自の高性能、スケーラビリティの高いデータベースエンジンが内蔵されており様々なデータ処理を効率良く高速に処理します。
これは InterSystems FAQ サイトの記事です。
ユーザ定義エラーとして使用したいエラーコードと対応するメッセージを記述したXMLを用意します。
なお、エラーコードは負の整数で設定してください。
<?xml version="1.0" encoding="UTF-8" ?>
<MsgFile Language="ja">
<MsgDomain Domain="UserErrors">
<Message Id="-111" Name="MyError">エラーが発生しました</Message>
<Message Id="-222" Name="MyError2">エラーが発生しました2</Message>
</MsgDomain>
</MsgFile>
XML ファイルが作成できたら使用したいネームスペースにロードします。
set x=##class(%MessageDictionary).Import("error.xml")
ロード完了後、次のようなコマンドでユーザ定義エラーを取得、表示することができます。
USER>set error=$system.Status.Error(-111) // エラーコード -111 を指定してエラーを作成
USER>write $system.Status.これは InterSystems FAQ サイトの記事です。
ルーチン(*.mac)の場合
ソースプログラムのコンパイル後に生成される *.obj のみをエクスポート/インポートすることでソースの隠蔽化を実現できます。
コマンド実行例は、EX1Sample.mac と EX2Sample.mac のコンパイルで生成される EX1Sample.obj と EX2Sample.obj をエクスポート対象に指定し、第2引数のファイルにエクスポートしています。
別ネームスペースに移動したあと、エクスポートした XML ファイルを利用してインポートを実行しています。
USER>do $system.OBJ.Export("EX1Sample.obj,EX2Sample.obj","/opt/app/routine.xml")
XMLエクスポートの開始 04/22/2021 18:18:32
オブジェクトコードをエクスポート中: EX1Sample.obj
オブジェクトコードをエクスポート中: EX2Sample.obj
エクスポートが正常に完了しました。
USER>zn "test" // ネームスペース移動
TEST>do $system.OBJ.Load("/opt/app/routine.はじめに (および本記事を書いた動機) {#RobustErrorHandlingandCleanupinObjectScript-IntroductionandMotivation}
ObjectScript コードのユニット (ClassMethod など) を実行する場合、そのスコープ外にあるシステムの諸部分と対話するときに適切なクリーンアップを行えないことが原因で、様々な予期せぬ副作用が発生することがあります。 以下にその一部を紹介します。
- トランザクション
- ロック
- I/O デバイス
- SQL のカーソル
- システムフラグと設定
- $Namespace
- 一時ファイル
ObjectScript のこういった重要な機能を、クリーンアップのコーディングや防御的なコーディングを適切に行わずに使用すると、普段は正常に動作しても、予期せぬかたちで、またデバッグが困難なかたちで失敗し得るアプリケーションができてしまう可能性があります。 想定できるすべてのエラーケースにおいてクリーンアップコードが正常に動作することは、極めて重要です。表面的なテストではエラーを見落とす可能性が高いことを考えるとなおさらです。 この記事では、既知の落とし穴をいくつかご紹介し、信頼性の高いエラー処理とクリーンアップを実現するための 2 種類の対処法について説明いたします。
先日、永続クラスとシリアルクラスからSwagger仕様を生成する必要がありました。そこで、その時のコードを公開することにします(完全なコードではないため、アプリケーション固有の部分を変更する必要がありますが、まずは出発点として使用できます)。 こちらからご利用ください。
次のクラスがあるとしましょう。
*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。
ソフトウェア開発技術において、プロセスの自動化、サイクルの短縮による生産性の向上を目指す考え方が普及してきました(CI/CD)。CI/CDの中核をなす技術の一つが、Dockerに代表されるコンテナです。
InterSystemsでは、Dockerコンテナで動作するIRIS data platformをリリースして、いち早く最新機能を皆様にお届けしています。この動画をご覧になって、DockerコンテナでIRISをスムーズに利用する第一歩としてください。
セッションで紹介しているリリースサイクルについては、こちらの記事をご覧ください。
セッションではデモを行っています。デモをご覧になりたい方は 12:49 からご覧ください。
開発者の皆さん
こんにちは。
先日、RESTのクラスを使って、PDFなどのファイルをアップロード、ダウンロードするサンプルをお送りしたお客さんからご質問を頂きました。
ダウンロード機能を使ってmp4などの動画を表示させた場合、以下のようにvideoの画面下のスライダーを移動しても、再生を進めたり戻したりができませんでした 。
やはり、以下のようにスライダを動かすと、その時点の画像が表示されたほうが良いですね。
そこでgoogleで調べてみると、Http Range requestへの対応が必要ということですのでObjectScriptで作成してみました。
表示用html
ブラウザで動画を表示するための簡単なhtmlファイルは以下の通りです。sourceタグのURLにGETメソッドでアクセスし動画データを受信します。
<html> <head> <title>ストリーム再生 </title> </head> <body> ストリーム再生<br> <video controls width="800" > <source src="http://localhost:52773/csp/storage/River.mp4" type="video/mp4"> </video> </body> </html>
RESTクラス
RESTクラス(REST.




