検索

クリアフィルター
記事
Toshihiko Minamoto · 2022年12月8日

InterSystems IRIS における一意のインデックスと null 値

一意のインデックスにまつわる興味深いパターンが最近持ちあがったので([isc.rest](https://openexchange.intersystems.com/package/isc-rest) に関する内部ディスカッション)、コミュニティ向けに強調したいと思います。 動機付けのユースケースとして: ツリーを表すクラスがあるとします。各ノードには名前があるため、名前と親ノードでノードを一意にしたいと考えています。 各ルートノードにも一意の名前を持たせます。 この場合の自然な実装は以下のようになります。 Class DC.Demo.Node Extends %Persistent { Property Parent As DC.Demo.Node; Property Name As %String [ Required ]; Index ParentAndName On (Parent, Name) [ Unique ]; Storage Default { <Data name="NodeDefaultData"> <Value name="1"> <Value>%%CLASSNAME</Value> </Value> <Value name="2"> <Value>Parent </Value> <Value name="3"> <Value>Name </Value> </Data> <DataLocation>^DC.Demo.NodeD</DataLocation> <DefaultData>NodeDefaultData</DefaultData> <IdLocation>^DC.Demo.NodeD</IdLocation> <IndexLocation>^DC.Demo.NodeI</IndexLocation> <StreamLocation>^DC.Demo.NodeS</StreamLocation> <Type>%Storage.Persistent</Type> } } 以上です! ただし、落とし穴があります。現状のこの実装では、複数のルートノードに同じ名前を付けることができます。 なぜでしょうか? Parent は必須プロパティでない(また、そうすべきではない)ため、**IRIS は null を一意のインデックスの個別の値として処理しない**からです。 一部のデータベース(SQL Server など)はそうしていますが、SQL 標準では、それらが誤っていると述べています(出典が必要です。このことについては StackOverflow のどこかで見かけましたが、それは出典になりません。以下にある、これについてとインデックスと制約の違いについての @Daniel.Pasco のコメントをご覧ください)。 これを回避する方法は、参照されたプロパティが null である場合に、非 null 値に設定される計算プロパティを定義し、そのプロパティに一意のインデックスを設定することです。 以下に、例を示します。 Property Parent As DC.Demo.Node; Property Name As %String [ Required ]; Property ParentOrNUL As %String [ Calculated, Required, SqlComputeCode = {Set {*} = $Case({Parent},"":$c(0),:{Parent})}, SqlComputed ]; Index ParentAndName On (ParentOrNUL, Name) [ Unique ]; これにより、$c(0) を ParentAndNameOpen/Delete/Exists に渡して、親(存在しない)と名前でルートノードを一意に識別することもできます。 この動作が非常に役立つ動機付けの例として、https://github.com/intersystems/isc-rest/blob/main/cls/_pkg/isc/rest/resourceMap.cls をご覧ください。 多くの行は、2 つのフィールド(DispatchOrResourceClass と ResourceName)に対して同じセットの値を持つことができますが、最大でもその内 1 つを「デフォルト」として扱いたいと考えており、一意のインデックスはこれを行う上で最適です。「デフォルト」フラグを 1 または null に設定できると言う場合は、フラグと他の 2 つのフィールドに一意のインデックスを付けることができます。 --------- @Dan Pasco さんのコメント Nullや一意制約について、私の意見と、可能性のあるいくつかの事実を記載します。 IRISユニークインデックス - これは単なるインデックスだけでなく、インデックスキーに一意性制約を定義する構文的なショートカットです。多くのSQLの実装は、この2つの概念を融合せず、SQL標準はインデックスを定義していません。標準SQLは一意制約を定義しています。IDKEYとPRIMARYKEYの両方が一意制約の修飾子であることに留意してください(そして、我々の世界では、IDKEYとして定義されたインデックスもまた特別なものである)。IDKEYとしてフラグが立てられたインデックスとPRIMARYKEYとしてフラグが立てられたインデックスは、最大で1つずつ存在することができます。インデックスはPRIMARYKEYとIDKEYの両方になることができます。 かつて、"ユニークインデックス "と "ユニーク制約 "の構文を異なる規則で定義したSQL実装がありました。両者の違いは単純で、インデックスが完全に入力されていない場合(テーブルのすべての行がインデックスに表示されていない場合、これを条件付きインデックスと呼びます)、一意インデックスはインデックスで表される行の一意性をチェックするだけです。一意制約はすべての行に適用されます。 また、インデックスは、クエリのサブセットのパフォーマンスを向上させるという、唯一の目的のために存在することに留意してください。どのようなSQL制約もクエリとして表現することができます。 標準SQLは、NULLの動作に関して、少し一貫性がありません。フレームワークのドキュメントでは、次のように定義されています。 一意制約とは、テーブルの1つまたは複数の列を一意列として指定するものです。一意制約は、テーブル内の2つの行が一意列の同じ非NULL値を持たない場合にのみ満たされます。 基本文書では、F291とF292という2つのオプション機能があります。これらの機能は、ユニークな述語(291)とユニークなNULL処理(292)を定義しています。これらの機能は、ユーザがNULLの "区別性 "を定義できる構文を提供するように見えます。どちらもオプションの機能で、比較的最近(2003年?2008年?)のものです。これらの機能がサポートされていない場合のルールは、実装者に委ねられています。 IRISは、フレームワーク文書ステートメントと一致しており、すべての制約は、NULLでないキーにのみ適用されます。「NULL」キーは、すべてのキーカラム値がNULLであるキーと認識されます。
お知らせ
Mihoko Iijima · 2022年9月15日

★投票開始!★ InterSystems Interoperability コンテスト: サステナブルなソリューションの構築

開発者の皆さん、こんにちは! サステナブルなソリューションの構築をテーマとした Interoperability プログラミングコンテストの投票が開始されました! 🔥 ベストアプリケーションはこれだ! 🔥 と思う作品にぜひ投票お願いします! 投票方法は以下ご参照ください。 Experts nomination: インターシステムズの経験豊富な審査員がベストアプリを選び、Expert Nominationで賞品をノミネートします。 ⭐️ @Alexander.Koblov, Support Specialist⭐️ @Alexander.Woodhead, Technical Specialist⭐️ @Guillaume.Rongier7183, Sales Engineer⭐️ @Alberto.Fuentes, Sales Engineer⭐️ @Dmitry.Zasypkin, Senior Sales Engineer⭐️ @Daniel.Kutac, Senior Sales Engineer⭐️ @Eduard.Lebedyuk, Senior Cloud Engineer⭐️ @Steve.Pisani, Senior Solution Architect⭐️ @James.MacKeith, Principal Systems Developer⭐️ @Nicholai.Mitchko, Manager, Solution Partner Sales Engineering⭐️ @Timothy.Leavitt, Development Manager⭐️ @Benjamin.DeBoe, Product Manager⭐️ @Robert.Kuszewski, Product Manager⭐️ @Stefan.Wittmann, Product Manager⭐️ @Raj.Singh5479, Product Manager⭐️ @Jeffrey.Fried, Director of Product Management⭐️ @Evgeny.Shvarov, Developer Ecosystem Manager Community nomination: 開発者コミュニティのメンバーは、お好みのアプリケーションに対して1位~3位を指定しながら投票できます。 開発者コミュニティでのあなたの状態 順位 1位 2位 3位 開発者コミュニティに記事を掲載したり、OpenExchange(OEX)にアプリをアップロードしたことがある方 9点 6点 3点 開発者コミュニティに1つの記事を掲載した、または 1アプリケーションを OEX にアップロードしたことがある方 6点 4点 2点 開発者コミュニティへコメントや質問を投稿したことがある方 3点 2点 1点 エキスパートレベル 順位 1位 2位 3位 グローバルマスターズの VIP レベル または、InterSystems Product Managers 15点 10点 5点 グローバルマスターズの Ambassador レベル 12点 8点 4点 グローバルマスターズの Expert レベル または DC モデレーター 9点 6点 3点 グローバルマスターズの Specialist レベル 6点 4点 2点 グローバルマスターズの Advocate レベル または インターシステムズの従業員 3点 2点 1点 今回も「ブラインド投票」とします 各応募作品への投票数は、誰にも分らないようになっています。1日1回、この記事のコメント欄に投票数を公開する予定です。 コンテストページ の表示順は、コンテストに応募した時期が早ければ早いほど、上位に表示されます。 メモ:新しいコメントの通知を受けるために、この投稿を購読することをお忘れなく!(記事末尾の ベルのアイコンをクリックするだけ!) 投票に参加するには Open Exchange へのサインインします(開発者コミュニティのアカウントを使用してください)。 投票ボタンは、開発者コミュニティ内で、質問/回答/記事の掲載/投稿に対するコメント など 記載いただいた方に対して有効になります。 ボタンが押せない場合は、コミュニティへのコメントやオリジナルの記事など、書き込みお願いします!詳細は、こちらの記事をご参照ください。 気が変わった場合は? - 選択をキャンセルして別のアプリケーションに投票できます。 ぜひ 🔥これだ🔥 と思う作品に投票お願いします! メモ:コンテストへ応募された作品は、投票週間中にバグを修正したり、アプリケーションを改良したりすることができますので、アプリケーションのリリースを見逃さずに購読してください。
お知らせ
Mihoko Iijima · 2022年9月19日

★受賞者発表!★ InterSystems Interoperability コンテスト: サステナブルなソリューションの構築

開発者の皆さん、こんにちは! InterSystems Interoperability コンテスト: サステナブルなソリューションの構築 の勝者が発表されました! この記事ではコンテスト受講者を発表します 📢​​​​​​ Experts Nomination 🥇 1位 - $5,000 は、Sustainable Machine Learning を開発された @Lucas.Enard2487 に贈られました。 🥈 2位 - $3,000 は、iris-energy-isodata を開発された @Muhammad.Waseem に贈られました。 🥉 3位 - $1,500 は、iris-megazord を開発された @José.Pereira に贈られました。 🏅 4位 - $750 は、n8n-nodes-iris を開発された @Dmitry.Maslennikov に贈られました。 🏅 5位 - $500 は、samba-iris-adapter を開発された @Yuri.Gomes に贈られました。 さらに! 🏅 $100 は、Recycler を開発された @Oleh.Dontsov に贈られました。 🏅 $100 は、interoperability-test を開発された @Oliver.Wilms に贈られました。 🏅 $100 は、interoperability-soap を開発された @Oliver.Wilms に贈られました。 🏅 $100 は、production-monitor を開発された @Oliver.Wilms に贈られました。 🏅 $100 は、appmsw-banks-ru を開発された @MikhailenkoSergey に贈られました。 Community Nomination 🥇 1位 - $1,000 を開発された iris-megazord を開発された @José.Pereira に贈られました。 🥈 2位 - $750 を開発された Sustainable Machine Learning を開発された @Lucas.Enard2487 に贈られました。 🥉 3位 - $500 を開発された iris-energy-isodata を開発された @Muhammad.Waseem に贈られました。 🎊 受賞者の皆様、おめでとうございます!👏 今回も、コンテストにご注目いただきありがとうございました! では、また、次のコンテストをお楽しみに!😎
記事
Megumi Kakechi · 2022年10月3日

InterSystems IRIS は 2フェーズコミットをサポートしていますか?

これは InterSystems FAQ サイトの記事です。 Question: InterSystems IRIS は 2フェーズコミットをサポートしていますか? Answer: サポートしていません。 2フェーズコミットはデータベースシステムがサポートしているだけでは十分ではなく、アプリケーションサーバ等の各実装が定めている2フェーズコミットのプロトコルを駆使して、アプリケーションを構築する必要があります。 また関連するシステムの全てのコンポーネントが対応している必要がある、ロングトランザクションには向いていないなど、現実に実装する局面では様々な制約事項があります。 2フェーズコミットは、技術面、設計および実装面、コスト面、性能面などハードルが非常に高いため、実際には限られた領域での利用に留まっています。
記事
Toshihiko Minamoto · 2023年5月30日

InterSystems IRIS 開発リポジトリで Docker を使用する

コミュニティの皆さん、こんにちは! 最近では、誰もが [Github](http://github.com)、[GitLab](http://gitlab.com)、[bitbucket](http://bitbucket.org) などのリポジトリにプロジェクトのソースコードを保管していると思います。 InterSystems IRIS プロジェクトについても同様で、Open Exchange にチェックされています。 InterSystems Data Platform で特定のリポジトリの操作を開始または継続するたびに、何をしているでしょうか? ローカルの InterSystems IRIS マシン、プロジェクト用の環境のセットアップ、ソースコードのインポートが必要です。 つまり、すべての開発者は以下を実行しています。 1. リポジトリからコードをチェックアウトする。 2. ローカル IRIS インストールをインストール/実行する。 3. プロジェクト用の新しいネームスペース/データベースを作成する 4. コードをこの新しいネームスペースにインポートする。 5. すべての残りの環境をセットアップする。 6. プロジェクトのコーディングを開始/継続する。  リポジトリを Docker 化すると、この手順は次の 3 つのステップに短縮できます。 1. リポジトリからコードをチェックアウトする。 2. docker-compose build を実行する。  3. プロジェクトのコーディングを開始/継続する。  メリット: 実行に数分かかる上、頭が痛くなるようなステップ 3、4、5 を行わなくて済みます。 次の数ステップで、(ほぼ)すべての InterSystems リポジトリを Dcoker 化できます。 では、やってみましょう! **リポジトリを Docker 化する方法は?その意味は? ** 基本的に、マシンに Docker をインストールし、コードと環境をコンテナに構築し、そのコンテナを Docker で実行すれば、最初に開発者が導入した方法で動作するようにするという考えです。 「OS のバージョンは何?」や「この IRIS インストールには他に何かあった?」といった疑問はありません。 毎回、クリーンなページ(またはクリーンな IRIS コンテナ)を使用して環境(ネームスペース、データベース、ウェブアプリ、ユーザー/ロール)がセットアップされ、作成したばかりのクリーンなデータベースにコードがインポートされます。 この「Docker 化」手順によって、現在のリポジトリに大きな悪影響が及ぶでしょうか?  及びません。 リポジトリのルートに独自にセットアップできるいくつかのツールに従った 2~3 個の新しいファイルを追加する必要があります。 **前提条件** [docker](http://docker.com) をダウンロードしてインストールします。 IRIS docker イメージをダウンロードしてインストールします。 この例では、[WRC-preview](https://wrc.intersystems.com/wrc/coDistPreview.csp) からダウンロードできる完全な InterSystems IRIS プレビュー(iris:2019.1.0S.111.0)を使用します。[詳細をご覧ください。](https://community.intersystems.com/post/intersystems-iris-20191-preview) キーを必要とするインスタンスを操作する場合は、常に使用する場所に iris.key を配置します。  私の場合は、Mac の Home ディレクトリに置きました。 **リポジトリの Docker 化** リポジトリを Docker 化するには、リポジトリのルートフォルダに 3 つのファイルを追加する必要があります。 こちらは、ISC-DEV プロジェクトの [Docker 化されたレポジトリ](https://github.com/intersystems-community/isc-dev)の例です。これは、IRIS データベースからソースコードをインポート/エクスポートするのに役立ちます。  このリポジトリには、以下に説明する追加の Dockerfile、docker-compose.yml、および installer.cls が含まれています。 まず、[Dockerfile](https://github.com/intersystems-community/isc-dev/blob/master/Dockerfile) です。これは、docker-compose build コマンドで使用されます。   Dockerfile FROM intersystems/iris:2019.1.0S.111.0 # インストールされたものと同じイメージである必要があります  WORKDIR /opt/app COPY ./Installer.cls ./ COPY ./cls/ ./src/ RUN iris start $ISC_PACKAGE_INSTANCENAME quietly EmergencyId=sys,sys && \     /bin/echo -e "sys\nsys\n" \             # ユーザー管理者に %ALL を付与             " Do ##class(Security.Users).UnExpireUserPasswords(\"*\")\n" \             " Do ##class(Security.Users).AddRoles(\"admin\", \"%ALL\")\n" \             # インストーラのインポートと実行             " Do \$system.OBJ.Load(\"/opt/app/Installer.cls\",\"ck\")\n" \             " Set sc = ##class(App.Installer).setup(, 3)\n" \             " If 'sc do \$zu(4, \$JOB, 1)\n" \             # OS レベルの認証を導入(コンテナのログイン/パス プロンプトを削除するため)             " Do ##class(Security.System).Get(,.p)\n" \             " Set p(\"AutheEnabled\")=p(\"AutheEnabled\")+16\n" \             " Do ##class(Security.System).Modify(,.p)\n" \             " halt" \     | iris session $ISC_PACKAGE_INSTANCENAME && \     /bin/echo -e "sys\nsys\n" \     | iris stop $ISC_PACKAGE_INSTANCENAME quietly CMD [ "-l", "/usr/irissys/mgr/messages.log" ]       この Dockerfile は installer.cls とソースコードをリポジトリの [/](https://github.com/intersystems-community/isc-dev/tree/master/cls)[cls](https://github.com/intersystems-community/isc-dev/tree/master/cls) フォルダから /src フォルダ、そしてコンテナにコピーします。 また、いくつかの構成設定も実行します。これにより、管理者ユーザーに %All ロールと無期限のパスワード「SYS」が付与され、OS レベルの認証が導入され、%Installer が実行されます。  [%Installer](https://github.com/intersystems-community/isc-dev/blob/master/Installer.cls) とは何でしょうか? Class App.Installer { XData MyInstall [ XMLNamespace = INSTALLER ] {                                         } ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 3, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger) As %Status [ CodeMode = objectgenerator, Internal ] {   Return ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "MyInstall") } }   これは、ネームスペース/データベース ISCDEV を作成し、ソースフォルダである -/src からコードをインポートします。 次は、[docker-compose.yml](https://github.com/intersystems-community/isc-dev/blob/master/docker-compose.yml) ファイルです。これは、docker-compose up コマンドでコンテナを実行するときに使用されます。 version: '2.4' services: iris: build: . restart: always ports: - 52773:52773 volumes: - ~/iris.key:/usr/irissys/mgr/iris.key この構成によって、Docker に対し、ホストのどのポートで IRIS の動作が期待されるかを指示します。 最初(52773)はホスト、2 つ目はコンテナのコンテナ内部ポート(52773)です。 volumes セクションでは、docker-compose.yml は、IRIS が検索するコンテナ内でマシン上の iris キーへのアクセスを提供します。 - ~/iris.key:/usr/irissys/mgr/iris.key このリポジトリでコーディングを始めるには、以下を実行します。 1. 任意のローカルディレクトリに[リポジトリ](http://github.com/intersystems-community/isc-dev)を Clone/git pull します。  2. このディレクトリでターミナルを開き、以下を実行します。 user# docker-compose build これによりコンテナがビルドされます。 3. プロジェクトで IRIS コンテナを実行します。 user# docker-compose up -d お好きな IDE を開いて、localhost://52773 のサーバーに接続し、InterSystems IRIS Data Platform で作業を始めましょう!;) この 3 つのファイルを使用して、リポジトリを Docker 化できます。 Dockerfile のソースコードに適切な名前、Installer.cls に適切なネームスペースを付けて、docker-compose.yml に iris.key を配置するだけで、InterSystems IRIS を使った日常の開発で、Docker コンテナを活用することができます。  
お知らせ
Mihoko Iijima · 2023年5月30日

InterSystems グランプリ・コンテスト 2023開催!

開発者の皆さん、こんにちは! 毎年恒例の InterSystems IRIS開発者向け「グランプリ・コンテスト」の開催が決定しました! 今年のお題は「InterSystems IRIS data platformを利用してオープンソースを作成する」です。 🏆 InterSystemsグランプリ・コンテスト2023 🏆 期間: 2023年6月12日~7月2日 賞金総額: $26,000 コンテストのテーマ InterSystems グランプリ・コンテストは、InterSystems IRISを使用して作成された優れたアプリケーションを発掘する、毎年恒例のプログラミング・コンテストです。どんなテーマでもご応募可能です! InterSystems IRISをバックエンド( APIやデータモデル)として使用するアプリケーションであれば、InterSystems IRIS のAPIやデータモデルの種類を問わずご応募いただけます。 また、昨年開催したInterSystems のコンテストシリーズにご応募いただいた作品を改良したものをグランプリコンテストにご応募いただくこともできます。もちろん、新規アプリケーションのご応募も大歓迎です。 一般的な応募条件: 応募可能なアプリケーション Open Exchange アプリケーションの新規作成、または既存アプリケーションであっても大幅に改善されているものであればご応募いただけます。 コミュニティの担当チームは、コンテストへの応募を承認する前に申請された全アプリケーションをレビューします。 全てのアプリケーションは IRIS Community Edition 、 IRIS for Health Community Edition 、 IRIS Advanced Analytics Community Edition のいずれかで動作する必要があります。 アプリケーションはオープンソースであり、GitHubで公開されている必要があります。 アプリケーションの README ファイルは、英語で記述してください(日本語で記述したものがあればそのまま掲載いただき、英文の追記をお願いします。翻訳アプリを使用しますが翻訳をお手伝いすることもできますのでお気軽にお知らせください!)。また、インストール手順や、アプリケーションがどのように動作するかの説明、またはビデオデモを含めてください。 1人の開発者の方からのご応募は3件までとします。 優勝特典: 1. Experts Nomination – 審査員から多く票を集めたアプリケーションには、以下の賞金が贈られます。 🥇 1位 - $7,000 🥈 2位 - $5,000 🥉 3位 - $3,000 🏅 4位 - $2,000 🏅 5位 - $1,000 🌟 6-10位 - $200 🌟 11-20位 - $100 2. Community winners – 開発者コミュニティで多く票を集めたソリューションには、以下の賞金が贈られます。 🥇 1位 - $3,000 🥈 2位 - $2,000 🥉 3位 - $1,000 ✨ 受賞者全員にグローバルマスターズ・バッジをプレゼントします!! 複数の参加者が同数の票を獲得した場合、全参加者が勝者となり賞金は勝者間で分配されます。 スケジュール: 🛠 アプリケーション開発と応募期間: 2023年6月12日 (00:00 EST): コンテスト開始! 2023年6月25日 (23:59 EST): 応募締め切り ✅ 投票期間(1週間) 2023年6月26日 (00:00 EST): 投票開始! 2023年7月2日 (23:59 EST): 投票終了 応募、投票期間中、アップロードしたアプリケーションは改良できます。 参加資格: どなたでもご参加いただけます!(InterSystems 開発者コミュニティのアカウントを作成するだけでご応募いただけます) 👥 開発者がチームを組んで共同でアプリケーションを作成し、応募することもできます! 1チーム 2~5名 までご参加いただけます。 チームでご応募いただく場合は、アプリケーションの README にチームメンバー名の記載をお忘れなく!!(開発者コミュニティのプロファイルのリンクもお願いします) Helpful Resources: ✓ IRIS初心者向け情報 Build a Server-Side Application with InterSystems IRIS Learning Path for beginners 【はじめての InterSystems IRIS】セルフラーニングビデオ 索引 ✓ For beginners with ObjectScript Package Manager (ZPM): How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS Package First Development Approach with InterSystems IRIS and ZPM ✓コンテストへの応募方法 ✓ Sample IRIS applications: intersystems-iris-dev-template iris-embedded-python-template interoperability-embedded-python isc-cloud-sql-python-demo rest-api-template integratedml-demo-template iris-fhir-template iris-fullstack-template iris-interoperability-template iris-analytics-template テンプレート一覧ご紹介ページ Need Help? ご質問がある場合は、この投稿へコメントいただくか、InterSystems の Discord server チャンネルにご参加ください! 皆様からのアプリケーションのご応募、お待ちしております!👍 ❗️ コンテストに参加された場合、こちらに記載されているコンテスト規約に同意したものとみなされます。ご応募の際、ご一読いただきますよう、お願い申し上げます❗️ ご応募方法について 以下の応募方法ビデオをご参照ください。 以下、コンテストに応募する迄の手順をご説明します。 コンテスト応募までの流れは以下の通りです(※ビデオでは、3番以降の内容をご紹介しています)。 1、IRISプログラミングコンテスト用テンプレートを使用して、開発環境を準備します。 2、コンテスト用アプリケーションを作成します。 3、コンテストの準備が完了したら、ソースコードをローカルのGitリポジトリへコミットします。 初回コミット時に、Gitの初期設定がないためコミットが失敗することがあります。その場合は、以下のコマンドでGitユーザ名とEmailを設定します。 git config --global user.name "ここにユーザ名" git config --global user.email "ここにメールアドレス” 4、ローカルのGitリポジトリのコミットが完了したら、リモートのGitリポジトリを作成します。 リポジトリ作成後、リモートリポジトリのURLをコピーします。 5、リモートのGitリポジトリへPushします。 git push ここにリモートのリポジトリのURL 6、OpenExchangeにログインし、アプリケーションを追加します。 ※事前にDeveloper communityでユーザアカウントを作成する必要があります。ログイン後、Profile→Applications から Application をクリックし、4 でコピーしたリモートのGitリポジトリのURLを設定します。 アプリケーションを登録すると、画面右上に「Send Approval」のボタンが表示されるので、クリックします。 再度作成したアプリケーションを開くと、「Apply for Contest」ボタンが表示されるので、クリックすると応募が完了します。
記事
Mihoko Iijima · 2020年6月28日

【はじめての InterSystems IRIS】セルフラーニングビデオ 索引

この連載記事では、InterSystems IRIS をはじめて操作される方を対象に、IRIS のインストールから、開発環境作成、各種言語からのアクセス方法についてご紹介していきます。 以下3つのビデオは、基本操作をご紹介するビデオです。既にご存知の内容が多い場合は、各種アクセス方法をご紹介するビデオからぜひご参照ください。 基本操作編ビデオシリーズ その1:InterSystems IRIS Community Edition をインストールしてみよう! Windows、Linux、クラウドのマーケットプレイス、インターシステムズのプライベートクラウド での InterSytems IRIS Community Edition インストール方法を解説しています。 その2:InterSystems IRIS で開発をはじめよう! IRIS で開発を始めるために必要な準備(管理ポータルの使い方、ネームスペースの作成、IDEからIRISへ接続する方法)をご説明しています。 IDE は VS Code /スタジオの両方の操作方法をご紹介しています。 その3:IRIS でクラス定義を作ろう(オブジェクト操作の練習) IRIS でのクラス定義の作成方法、ObjectScript でインスタンスの生成と永続化(保存)の方法について解説しています。 このビデオでも、VS Code /スタジオ 両方の操作方法をご紹介しています。 以下、各種アクセス方法を利用して IRIS へ接続する方法を解説するビデオです。近日公開予定のビデオもあり、これからどんどん増やしていく予定です! アクセス編ビデオシリーズ Python の NativeAPI に挑戦 Python から InterSystems IRIS へ接続する方法の1つである「Native API」(※) の利用方法ご説明します。 (※) Python からのアクセスは、Native API の他に、PyODBC を利用した接続方法もあります。PyODBC の利用についてはもう1つのビデオでご紹介しています。 Python から PyODBC を使って IRIS に接続してみよう Python から InterSystems IRIS へ接続する方法の1つである「PyODBC」(※) の利用方法をご説明します。 (※) Python からのアクセスは、PyODBCの他に、Native API を利用した接続方法もあります。Native APIを利用してIRISのグローバル変数にアクセスする方法については、もう1つのビデオでご紹介しています。 IRIS で REST サーバを作ってみよう! IRIS で作成する REST サーバを仕組みの解説、2種類(手動/APIファースト)のディスパッチクラス作成方法の解説、 また IRIS での JSON 操作方法についての解説ビデオをご用意しています。 (近日公開予定)Java から IRIS に接続してみよう (近日公開予定).NET から IRIS に接続してみよう Embedded Python シリーズ InterSystems IRIS のデータベースに組み込まれたPython(=Embedded Python)の機能概要から使い方を解説するセルフラーニングビデオとサンプルコードをご用意しています。 詳細は 【はじめてのInterSystems IRIS】Embedded Python セルフラーニングビデオシリーズ公開! の記事をご参照ください。 お好みの場所、お好みのIDE、お好みの内容から IRIS を始めてみてください!
ディスカッション
Akio Hashimoto · 2020年9月3日

InterSystems ObjectScript エクステンションでルーチンをインポートしようとするとname is invalidエラーになるときの解決方法

## 前提条件 * InterSystems ObjectScriptエクステンション 0.9.0 * Visual Studio Code でローカルにルーチンのファイルを作成している。 ## 問題点 ルーチンをGit等でバージョン管理する等の理由で、IRIS(/Cache)サーバー間でファイル連携している場合に、新規ルーチンをファイルから作成し、サーバーへ「Import and Compile」等を実行するとエラーが出てインポートに失敗する事がある。(xxxxxxxxxxはルーチン名) ``` ERROR #16006: Document 'xxxxxxxxxx' name is invalid ``` ## 解決方法 先にサーバーからインポートした事があればお気づきの方もいるかもしれないが、InterSystems ObjectScript エクステンションを使用してルーチンをインポートする場合、ルーチンの先頭行に以下のように1行必要となっている。これが無いと上記のようにエラーとなってしまう。 ``` ROUTINE xxxxxxxxxx ``` INTやINCファイルの場合は、Type属性が必要。Type属性を省略するとMACファイルとしてインポートされる。 ``` ROUTINE xxxxxxxxxx [Type=INC] ``` インポートされたサーバー側では上記の1行は追加されたままだが、消してもエクスポートすると自動で付加されるので、一度インポート出来てしまえば心配ない。但し、ローカル側でこの1行を消してしまうと再びエラーとなってしまうので注意して欲しい。 @Akio.Hashimoto 橋本さん、貴重な情報ありがとうございます。 クラス定義の場合は発生しませんが、ルーチンの場合に現象が起きるようです。 そうですね。クラス定義の場合はこの仕様が無いので、気付くのに時間がかかってしまいました。
記事
Seisuke Nakahashi · 2023年6月8日

InterSystems サポートプラットフォーム最新情報 Q2-2023

InterSystems IRIS data platform がサポートするプラットフォームやフレームワークを取り巻く変更点について、みなさまから良く質問をいただきます。この記事では、サポート対象プラットフォームで最近おこなわれた変更点や今後予定されている変更点に関する情報を共有させていただきます。ただ、将来の予測は難しい側面があり、ロードマップは約束されたものではないということを十分ご理解くださいませ。 IRIS 本番環境用オペレーティングシステムと CPU アーキテクチャ Red Hat Enterprise Linux 最近の変更点 RHEL 9.2 と RHEL 8.8 が 2023年5月にリリースされました。Red Hat はこれらのリリースを4年間サポートする予定としています。InterSystems は「マイナーOSバージョン認証」と呼ぶ新しいプロセスにより、RHEL 9.2 で IRIS の動作検証を行う予定です。このプロセスでは、マイナーOSのアップデートによって弊社製品の動作に明確な違いは見られないことを確認いたします。 RHEL 9.2 がリリースされたことで, Red Hat は RHEL 9.1 のサポートを終了しました。 これは RHEL 8.0以降、Red Hat が採用している "奇数/偶数" のサポートサイクルに沿っています。 RHEL 8.4 の延長サポートは 2023年5月31日で終了します。これにあわせて、IRIS もこのバージョンのサポートを終了しました。 今後予定されている変更点 RHEL 9.3 リリースが 2023年後半に予定されています。 このリリースは Red Hat のルールでは短期間サポートになると思われるので、本番運用に採用されることはお勧めしません。 過去の変更点 IRIS 2022.1.2 で RHEL 9.0 のサポートを追加しました。 9.0 は Linux Kernel 5.14、Open SSL 3.0、Python 3.9 にそれぞれ更新されたメジャーOSリリースになります。 IRIS 2022.2.0 から RHEL 7.x のサポートを終了しました。 RHEL 7.9 はそれより前の IRIS バージョンでは今もサポート対象です。 Red Hat のリリースライフサイクルについては こちら をご覧ください。 Ubuntu 最近の変更点 Ubuntu 22.04.02 LTS が 2023年2月22日にリリースされました。InterSystems は現在、「マイナーOSバージョン認証」と呼ばれる新しいプロセスを通じて、Ubuntu 22.04.02 上で IRIS の動作検証を行っております。現時点の結果は良好です。 今後予定されている変更点 Ubuntu の次期メジャーバージョンは 2024年4月に予定されています。 過去の変更点 IRIS 2022.1.1 で Ubuntu 22.04 のサポートを追加しました。 22.04 は Linux Kernel 5.15、Open SSL 3.0.2、Python 3.10.6 にそれぞれ更新されたメジャーOSリリースになります。 IRIS 2022.2.0 で Ubuntu 18.04 のサポートを終了しました。 Ubuntu 18.04 はそれより前の IRIS バージョンでは今もサポート対象です。 IRIS 2022.1.1 およびそれ以降のコンテナは Ubuntu 22.04 をベースとしています。 Ubuntu のリリース履歴については こちら をご覧ください。 SUSE Linux 最近の変更点 SUSE Linux Enterprise Server 15 SP5 は現在パブリックベータです。私たちは SUSE が 15 SP5 を Q2後半から Q3前半にリリースされると予測しています。リリースされた後に IRIS のサポートリストに追加予定です。SP5では、Linux Kernel 5.14.21、Open SSL 3.0.8、Python 3.11 となる予定です。 SUSE for Linux Enterprise Server 15 SP3 の一般サポートは 2022年12月31日で終了しましたが、延長サポートは 2025年12月まで継続される予定です。 過去の変更点 IRIS 2022.3.0 で SUSE Linux Enterprise Server 15 SP4 のサポートを追加しました。 15 SP4 は、Linux Kernel 5.14、OpenSSL 3.0、Python 3.9 にそれぞれ更新されたメジャーOSになります。 SUSE ライフサイクルについては こちら をご覧ください。 Oracle Linux 今後予定されている変更点 過去の経歴から、Oracle Linux 9 は RHEL 9.2 をベースとし、2023年後半にリリースされると予測されます。 過去の変更点 IRIS 2022.3.0 で Oracle Linux 9 のサポートを追加しました。 Oracle Linux 9 は、RHEL 9 をベースとしていますので、 Linux Kernel 5.14、OpenSSL 3.0、Python 3.9 にそれぞれ更新されたメジャーOSになります。 Oracle Linux のサポートポリシーについては こちら をご覧ください。 Microsoft Windows 今後予定されている変更点 Windows Server 2012 の延長サポートは 2023年10月で終了します。このプラットフォームをまだ利用されていれば、ぜひ移行の計画をよろしくお願いします。Windows Server 2012 は IRIS 2023.2 ではサポートされません。 過去の変更点 Windows のサポートに関しては、IRIS 2022.1 で Windows Server 2022 を追加して以降、変更はありません。 Microsoft のライフサイクルについては、 こちら をご覧ください。 AIX 今後予定されている変更点 InterSystems は OpenSSL 3.0 のサポートに関して、IBM と密接に連携しています。OpenSSL 3.0 は、IBM がさらに先の TL リリースに含める意向のため、IRIS 2023.2.0 には含まれません。IBM は AIX 7.2 および 7.3 向けに OpenSSL 3.0 のリリースを検討しています。Open SSL 3.0 のために、IRIS 2023.3 のリリースのタイミングを同時期にあわせることができそうです。 過去の変更点 AIX のサポートに関しては、IRIS 2022.1 で AIX 7.3 を追加し、AIX 7.1 を終了して以降、変更はありません。 AIX のライフサイクルについては、こちら をご覧ください。 コンテナ 今後予定されている変更点 IRIS コンテナのタグは "2023.2" のように「年+リリース」のタグのみになる予定です。以前はコンテナのタグにビルド番号が使われていました。これにより、みなさまのアプリケーションでは、リリース時の最新メンテナンスビルドを利用することが可能となります。 あわせて新しいタグ “latest-em” と “latest-cd” を追加しました。それぞれ、最新の EM および CD のバージョン情報が含まれます。これらのタグは、デモやサンプルコード、開発環境に便利にお使いいただけます。 また、プレビューコンテナに新しいタグ “-preview” を追加予定です。これにより、どれが最新 GAリリースかが分かりやすくなります。 これらの変更は 2023.2 リリースから適用されます。 詳細な情報は 6月にあらためてお知らせいたします。 過去の変更点 IRIS コンテナにおけるマルチ・アーキテクチャの公開を始めました。これにより、例えば 2022.3.0.606.0 のタグを持つコンテナをプルすると、お使いの CPU アーキテクチャ (Intel/AMD/ARM) にあわせた正しいコンテナがダウンロードされます。 IRIS 開発環境用オペレーティングシステムと CPU アーキテクチャ MacOS 最近の変更点 IRIS 2023.1 で MacOS 13 のサポートを追加しました。 今後予定されている変更点 MacOS 14 が間もなく発表され、今年後半のリリースが予定されています。 CentOS CentOS/CentOS Stream のサポート終了を検討しています。 これは以下の理由によるものです。 Red Hat はここ数年、開発者プログラムを運用しており、本番環境以外には無料ライセンスを開発者に提供しています。CentOS を利用中の開発者は、このプログラムを利用して RHEL に変更することが推奨されています。 CentOS Stream は現在 RHEL の "アップストリーム" となっているため、RHEL には含まれないバグや機能が存在します。これらは日々更新されるため、このプラットフォームでビルドを行う開発者の問題となります (私たちのテストメンバーを含みます)。 CentOS のサポートに関しては、IRIS 2022.1 で CentOS 8-Stream を追加し、CentOS 7.9 を終了して以降、変更はありません。 InterSystems コンポーネント InterSystems API Manager (IAM) IAM 3.2 はこの四半期にリリースされました。本バージョンから、コンテナイメージのベースが Alpine から Amazon Linux に変更されています。 Caché ならびに Ensemble 本番環境用オペレーティングシステムと CPU アーキテクチャ 過去の変更点 Cache 2018.1.7 で Windows 11 のサポートを追加しました。 InterSystems サポート・プラットフォームに関するドキュメント InterSystems サポート・プラットフォームに関するドキュメントにて、サポートリストの正式な情報を入手いただけます。 IRIS 2020.1 サポート対象プラットフォーム IRIS 2021.1 サポート対象プラットフォーム IRIS 2022.1 サポート対象プラットフォーム IRIS 2023.1 サポート対象プラットフォーム Caché & Ensemble 2018.1.7 サポート対象プラットフォーム 以上になります。もし追加で知りたい情報がございましたら、ぜひコメントなどを通じてお知らせください。
お知らせ
Mihoko Iijima · 2023年7月11日

★受賞者発表!★ InterSystems グランプリ・コンテスト 2023

開発者の皆さんこんにちは! InterSystemsグランプリコンテスト 2023 の勝者が発表されました! この記事では、コンテスト受賞者を発表します。 今回は、20 の応募 🔥 がありました! Experts Nomination 🥇 1位 - $7,000 は、iris-fhir-generative-ai を開発された @Henrique.GonçalvesDiasさん、@Henry.HamonPereira さん、@José.Pereira さんに贈られました。 🥈 2位 - $5,000 は、IRIS FHIR Transcribe Summarize Export を開発された @Ikram.Shah3431 さん、@Sowmiya.Nagarajan さんに贈られました。 🥉 3位 - $3,000 は、irisChatGPT を開発された @Muhammad.Waseem さんに贈られました。 🏅4位 - $2,000 は、ZProfile を開発された @Dmitry.Maslennikov さんに贈られました。 🏅5位 - $1,000 は、FHIR - AI and OpenAPI Chain を開発された @Ikram.Shah3431 さん、@Sowmiya.Nagarajan さんに贈られました。 🌟 $200 は、oex-mapping を開発された @Robert.Cemper1003 さんに贈られました。 🌟 $200 は、RDUH Interface Analyst HL7v2 Browser Extension を開発された @Rob.Ellis7733 さんに贈られました。 🌟 $200 は、fhir-chatGPT を開発された @davimassaru.teixeiramuta さんに贈られました。 🌟 $200 は、interoperability_GPT を開発された @davimassaru.teixeiramuta さんに贈られました。 🌟 $200 は、password-app-iris-db を開発された @Oleksandr.Zaitsev さんに贈られました。 ⭐️ $200 は、irisapitester を開発された @Daniel.Aguilar さんに贈られました。 ⭐️ $100 は、IntegratedMLandDashboardSampleを開発された @珊珊.喻 さんに贈られました。 ⭐️ $100 は、IntegratedML-IRIS-PlatformEntryPrediction を開発された @Zhang.Fatong さんに贈られました。 ⭐️ $100 は、DevBox を開発された @Sean.Connelly さんに贈られました。 ⭐️ $100 は、oex-vscode-snippets-template を開発された @John.Murray さんに贈られました。 ⭐️ $100 は、appmsw-warm-home を開発された @MikhailenkoSergey さんに贈られました。 ⭐️ $100 は、FHIR Editor を開発された @Yuri.Gomes さんに贈られました。 ⭐️ $100 は、iris-user-manager を開発された @Oliver.Wilms さんに贈られました。 ⭐️ $100 は、Recycler を開発された @Oleh.Dontsov さんに贈られました。 ⭐️ $100 は、IRIS Data Migration Manager を開発された @Oleh.Dontsov さんに贈られました。 Community Nomination 🥇 1位 - $3,000 は、iris-fhir-generative-ai を開発された @Henrique.GonçalvesDias さん、@Henry.HamonPereira さん、@José.Pereira さんに贈られました。 🥈 2位 - $2,000 は、IntegratedMLandDashboardSample を開発された @珊珊.喻 さんに贈られました。 🥉 3位 - $1,000 は、IntegratedML-IRIS-PlatformEntryPrediction を開発された @Zhang.Fatong さんに贈られました。 受賞された開発者の皆さん、おめでとうございます!🎊 では、また、次のコンテストをお楽しみに!😎
お知らせ
Seisuke Nakahashi · 2023年5月7日

2017.1 以前の InterSystems Caché と InterSystems Ensemble のドキュメントは PDF フォーマットのみになります

5月16日以降、 バージョン 2017.1 以前のInterSystems Caché® と InterSystems Ensemble® のドキュメントは、弊社ドキュメントウェブサイトで PDF フォーマットのみ公開されるよう変更となります。ご理解いただけますよう、どうぞよろしくおねがいします。もちろん、お手元の Caché / Ensemble のドキュメントについては、これまで通りのフォーマットでブラウザからご覧いただけます。
記事
Mihoko Iijima · 2020年6月28日

【はじめての InterSystems IRIS】セルフラーニングビデオ:基本その1:InterSystems IRIS Community Edition をインストールしてみよう!

基本操作編ビデオシリーズ:その1 Windows、Linux、クラウドのマーケットプレイスでの InterSystems IRIS Community Edition インストール方法を解説しています。 コミュニティエディションのインストールキット入手方法については、「InterSystems IRIS/InterSystems IRIS for Health コミュニティエディションのダウンロード方法」をご参照ください。 2025/4/8 追記:バージョン2025.1以降 コンテナ以外のインストールキットを使用したインストールでは、初期セキュリティ設定のオプションデフォルトが「ロックダウン(Locked down)」に変更されました。詳しくは👉「バージョン2025.1インストール時に指定する初期セキュリティオプションのデフォルトが「ロックダウン」に変わりました」をご参照ください。 コンテナ版IRISの利用方法については、「InterSystemsコンテナレジストリの使い方とコンテナ開始までの流れ(解説ビデオ付き)」をご参照ください。 もくじ 0:00 ~ IRIS community Edition インストール方法概要 1:36 ~ WindowsでのIRISインストール 11:24 ~ LinuxでのIRISインストール 20:50 ~ マーケットプレイス(Azure) 29:45 ~  Docker Hub (Docker for Windows) ※2023/7/14追記:コンテナ版IRISは「InterSystemsコンテナレジストリ」に公開するように変更となりました。使い方について詳しくは以下記事をご参照ください。「InterSystemsコンテナレジストリの使い方とコンテナ開始までの流れ(解説ビデオ付き)」 36:18 ~ TRY-IRIS(インターシステムズプライベートクラウド) ※2023/2/20追記:TRY-IRISページが大幅にリニューアルされ、ユーザ登録が不要となりました。使い方について詳細は、「Developer Hub:チュートリアルのご紹介」をご参照ください。 ※YouTubeでご覧いただくと、もくじの秒数にジャンプできます。 ビデオの最後にご紹介している「TRY-IRIS」を開始する流れが少し変わりました。 詳細は「【GettingStarted with IRIS】無料体験環境:Sandbox 開始手順について」をご参照ください。 ビデオの 29:45 ~ ご紹介しているコンテナ版IRISの使い方ですが、InterSystemsコンテナレジストリ の登場により、pull する際ご参照いただくページが変わりました。 詳細は「InterSystemsコンテナレジストリの使い方とコンテナ開始までの流れ(解説ビデオ付き)」をご参照ください。
記事
Toshihiko Minamoto · 2020年10月13日

InterSystemsデータプラットフォームのGraphQL

![](https://pp.userapi.com/c849024/v849024561/cea1/ayx4tJnAKRE.jpg) [GraphQL](http://graphql.org/)は、クライアントとサーバー間のミドルウェア層として機能する、データ構造とデータアクセスのメソッドを選択するための標準です。 GraphQLについて聞いたことがない方は、[ここ](https://medium.freecodecamp.org/so-whats-this-graphql-thing-i-keep-hearing-about-baf4d36c20cf)と[ここ](https://blog.apollographql.com/graphql-vs-rest-5d425123e34b)と[ここ](https://blog.apollographql.com/the-anatomy-of-a-graphql-query-6dffa9e9e747)にある、有用なオンラインリソースをご覧ください。 この記事では、InterSystemsテクノロジーに基づいて、プロジェクトでGraphQLを使用する方法を説明します。 InterSystemsプラットフォームは現在、クライアント/サーバーアプリケーションを作成する方法をいくつかサポートしています。 - REST - WebSocket - SOAP では、GraphQLのメリットは何でしょうか。 たとえばRESTと比較した場合、どのようなメリットが提供されるのでしょうか。 GraphQLのリクエストにはいくつかの種類があります。 - **クエリ** - RESTを使用してデータをフェッチするために推奨されるGETリクエストに類似する、データ取得用のサーバーリクエスト。 - **ミューテーション** - RESTのPOST(PUT、DELETE)リクエストに類似する、サーバー側データ変更を担う。 ミューテーションとクエリはともにデータを返すことができます。ミューテーションを実行した直後に、サーバーに更新済みのデータをリクエストする場合に便利です。 - **サブスクリプション** - データを出力する同じクエリタイプ。 唯一の違いは、ミューテーションによってサブスクリプションがアクティブ化される間に、クライアント側でレンダリングされたページでクエリが発行されることです。 ## GraphQLの主な機能とメリット ### どのデータが返されるかはクライアント次第 GraphQLの主な機能の1つに、返されるデータの構造とボリュームがクライアントアプリケーションによって定義されることがあります。 クライアントアプリケーションは、JSON 形式によく似た宣言的なグラフのような構造を使用して、受信するデータを指定します。 レスポンス構造は、クエリの構造に対応しています。 簡単なGraphQLクエリは次のようになります。 ```json { Sample_Company { Name } } ``` JSON形式のレスポンス: ```json { "data": { "Sample_Company": [ { "Name": "CompuSoft Associates" }, { "Name": "SynerTel Associates" }, { "Name": "RoboGlomerate Media Inc." }, { "Name": "QuantaTron Partners" } ] } } ``` ### 単一エンドポイント GraphQLを使ってデータを操作する場合、必ず単一の**エンドポイント**であるGQLサーバーに接続し、クエリの構造、フィールド、パラメーターを変更して異なるデータを取得します。 RESTは、それとは対照的に、複数のエンドポイントを使用します。 簡単な例を使用して、RESTとGraphQLを比較してみましょう。 ![](https://pp.userapi.com/c845124/v845124781/5d6c7/pOFLQsSnzk0.jpg) ユーザーのコンテンツを読み込む必要があるとします。 RESTを使用している場合、サーバーに3つのクエリを送信する必要があります。 1. IDでユーザーのデータを取得する 2. ユーザーのIDを使用してその投稿を読み込む 3. ユーザーのIDを使用してフォロワー/サブスクライバーのリストを取得する 以下は、上記のクエリに対応するRESTマップです。 ``` ``` 新しいデータセットを取得するには、このRESTマップを新しいエンドポイントで更新する必要があります。 GraphQLはこれを1つのクエリで処理します。 リクエストの本文に次のように指定してください。 ``` { operationName: null, //a query can have a name ( query TestName(...){...} ) query: "query { User(id: "ertg439frjw") { name posts { title } followers(last: 3) { name } } }", variables: null // initialization of the variables used in the query } ``` このクエリに対応するRESTマップ: ``` ``` これがサーバーの唯一のエンドポイントです。 ## GraphQLとGraphiQLのインストール GraphQLを使用し始めるには、いくつかの手順を完了する必要があります。 1. GitHubから[最新リリース](https://github.com/intersystems-ru/GraphQL/releases)をダウンロードし、必要なネームスペースにインポートします。 2. システム管理ポータルに移動し、InterSystemsデータプラットフォーム製品(Caché、Ensemble、またはIRIS)に基づいて、新しいWebアプリケーションを作成します。 - 名前 - **/** - ネームスペース - **SAMPLESなど** - ハンドラクラス - **GraphQL.REST.Main** 3. GraphiQL — GraphQLクエリをテストするためのシェルです。 [最新ビルド](https://github.com/intersystems-ru/GraphQL/releases)、または独自のソースの[ビルド](https://github.com/graphql/graphiql)をダウンロードします。 4. 新しいWebアプリケーションを作成します。 - 名前 - **/graphiql** - ネームスペース - **SAMPLESなど** - CSPファイルへの物理パス - **C:\InterSystems\GraphiQL\** ## 結果を見てみましょう ブラウザで、**http://localhost:57772/graphiql/index.html**(localhost — サーバー、57772 — ポート)に移動します。 ![GraphiQL](https://pp.userapi.com/c848736/v848736070/20e2d/Ca1U73N455w.jpg) **クエリ**と**レスポンス**のネームスペースについて明確に説明できたでしょうか。 **スキーマ**は、ネームスペースに格納されているすべてのクラスに対して生成されるドキュメントです。 スキーマには次の項目が含まれます。 - クラス - プロパティ、引数、それらの型 - コメントから生成される上記すべての説明 **Sample_Company**クラスのスキーマを詳しく見てみましょう。 ![](https://habrastorage.org/webt/x6/vs/np/x6vsnpq7seel9ndzdvsn1nyzcys.jpeg) GraphiQLは、**Ctrl + Space**キーを押してアクティブ化できる自動コード補完機能もサポートしています。 ![](https://habrastorage.org/webt/8h/51/wz/8h51wz5ccdiabmsn06n9sve_mce.jpeg) ## クエリ クエリは、単純なクエリや、複数のデータのセットで使用する複雑なクエリであったりあします。 以下は、**Sample_Person**と**Sample_Company**という異なるクラス間でのサンプルクエリです。 ![](https://pp.userapi.com/c845221/v845221237/55384/TS0QwWXpurI.jpg) ## フィルタリング 現在のところ、厳密な等価のみがサポートされています。 ![フィルタ](https://pp.userapi.com/c845221/v845221849/5045f/Q0kUiLLXXPQ.jpg) ## ページネーション ページネーションは、必要な結果を得るために組み合わせて子よできる4つの関数を通じてサポートされています。 - **after: n** – nより大きいidを持つすべてのレコード - **before: n** – nより小さいidを持つすべてのレコード - **first: n** – 最初のn件のレコード - **last: n** – 最後のn件のレコード ![ページネーション](https://pp.userapi.com/c845221/v845221237/553cd/_g6sZTZ5qpA.jpg) ## 可視領域 ほとんどの場合、アプリケーションのビジネスロジックは、特定クライアントのみに特定のネームスペースクラスへのアクセスを与えています(ロールベースの許可)。 それに基づき、クライアントのクラスの可視性を制限する必要がある場合があります。 - ネームスペースのすべてのクラス(**GraphQL.Scope.All**) - スーパークラスから継承されたクラス(**GraphQL.Scope.Superclass**) - 特定のパッケージに属するクラス(**GraphQL.Scope.Package**) 可視性制限のメソッドを変更するには、Studioを開き、必要なネームスペースに切り替えて、**GraphQL.Settings**クラスを開きます。 これには、**GraphQL.Scope.All**というデフォルト値を使用する**SCOPECLASS**パラメーターがあります。これがネームスペースのクラスの可視性制限の説明が含まれるクラスです。 ![scope](https://pp.userapi.com/c830109/v830109849/fc892/fYFBSE-q2Ws.jpg) クラスの可視性制限を変更するには、上記に示されるいずれかの値(**GraphQL.Scope.Package**または**GraphQL.Scope.Superclass**)に設定する必要があります。 **GraphQL.Scope.Package**を選択した場合、そのクラスに移動して、**Package**パラメーターの値を必要なパッケージの名前(**Sample**など)に変更する必要があります。 これにより、このパッケージのすべての格納済みクラスを完全に利用できるようになります。 ![](https://pp.userapi.com/c830109/v830109849/fc8d9/i2yDROI61Ys.jpg) **GraphQL.Scope.Superclass**を選択した場合は、もう一度必要なクラスで、このクラスから継承します。 ![](https://pp.userapi.com/c830109/v830109437/fbc84/xPpHmCKd0g4.jpg) ## 現在のサポート状況 クエリ: - 基本 - 埋め込みオブジェクト - 多対1の関係のみ - 単純な型のリスト - オブジェクトのリスト ## 現在開発中 クエリ: - 埋め込みオブジェクト - すべての型のリレーションのサポート - フィルタリング - 不等価のサポート ## 今後の予定 - ミューテーション - [エイリアス](https://graphql.github.io/learn/queries/#aliases) - [ディレクティブ](https://graphql.github.io/learn/queries/#directives) - [フラグメント ](https://graphql.github.io/learn/queries/#fragments) → プロジェクトリポジトリへの[リンク](https://github.com/intersystems-community/GraphQL) → デモサーバーへの[リンク](http://37.139.6.217:57773/graphiql/index.html) ぜひプルリクエストを発行してください。 今後のプロジェクト情報にご期待ください!
記事
Toshihiko Minamoto · 2020年11月16日

InterSystems API Management を使用して API の負荷を分散する

InterSystems API Management(IAM)は、IT インフラストラクチャ内の Web ベースの API との間のトラフィックを監視、制御、および管理できる InterSystems IRIS Data Platform の新機能です。 アナウンスを見逃した方は、[こちらのリンク](https://community.intersystems.com/post/announcing-release-intersystems-api-manager)を参照してください。 また、[IAM](https://community.intersystems.com/post/introducing-intersystems-api-manager) の使い方を説明した記事もあります。 この記事では、InterSystems API Management を使用して API の負荷を分散します。 この例では、2 つの InterSystems IRIS インスタンスを使用し、クライアントに `/api/atelier` REST API を公開したいと思います。 そのようにしたいと思う理由は、次のようにさまざまです。 * 負荷分散により、サーバー間でワークロードを分散する。 * ブルーグリーンデプロイの実践。片方を「本番用」、もう片方を「開発用」とする 2 台のサーバーを用意し、それらを切り替えられるようにする。 * カナリアデプロイの実践。1 台のサーバーでのみ新しいバージョンを公開し、クライアントの 1 %をそこに移動する。 * 高可用性構成の実現。 * その他。 しかし、いずれの場合も実行する必要のある手順は同じようなものです。 ### **前提条件** * 2 つの InterSystems IRIS インスタンス * InterSystems API Management インスタンス   ### **作業開始** 必要な作業を以下に掲載します。 **1. アップストリームの作成** アップストリームは仮想ホスト名を表し、複数のサービス(ターゲット)で着信リクエストの負荷を分散するために使用されます。 例えば、`service.v1.xyz` という名前のアップストリームはホストが `service.v1.xyz` であるサービスのリクエストを受け付けます。 このサービスのリクエストは、アップストリーム内で定義されたターゲットにプロキシされます。 アップストリームには、リクエストを処理する能力の有無に基づいてターゲットを有効または無効にできるヘルスチェッカーも含まれています。 はじめに、次の手順を実行します。 * IAM 管理ポータルを開く * ワークスペースに移動する * ワークスペースを選択する * アップストリームを開く * [New Upstream] ボタンをクリックする [New Upstream] ボタンをクリックすると、アップストリームに関する基本情報を入力できるフォームが表示されます(他にも多くのプロパティがあります)。 _name_ にサービスが使用する仮想ホスト名を入力します。 この値は DNS レコードとは無関係です。 混乱を避けるために、存在しない値に設定することをお勧めします。 残りのプロパティについて確認したい場合は、[ドキュメントを参照してください](https://docs.intersystems.com/irislatest/csp/docbook/apimgr/1.0.x/admin-api.html#upstream-object)。 スクリーンショットでは、新しいアップストリームに `myupstream` という仮の名前を付けています。   **2. ターゲットの作成** ターゲットは、リクエストを実行して結果をクライアントに送り返すバックエンドサーバーです。 アップストリームに移動し、作成したアップストリーム名をクリックします([Update] ボタンではありません)。 既存のすべてのターゲット(現時点では存在しません)と [New Target] ボタンが表示されます。 このボタンを押します。 そして、新しいフォームでターゲットを定義します。 ここで使用できるパラメーターは次の 2 つだけです。 * target - バックエンドサーバーのホストとポート * weight - このサーバーに与えられた相対的な優先度(wight の値が大きいほど、より多くのリクエストがこのターゲットに送信されます) ここでは次のように 2 つのターゲットを追加しました。     **3. サービスの作成** アップストリームを作成しましたので、今度はそのアップストリームにリクエストを送信する必要があります。 そのためにはサービスを使用します。 サービスエンティティは、その名前が示すように各アップストリームサービスを抽象化したものです。 サービスの例としては、データ変換、 マイクロサービス、課金 API などがあります。 IRIS インスタンスをターゲットとするサービスを作成してみましょう。[Service] に移動し、[New Service] ボタンを押します。 次の値を設定します。 | フィールド | 値 | 説明 | | -------- | ------------ | ------------ | | name | myservice | このサービスの論理名 | | host | myupstream | アップストリーム名 | | path | /api/atelier | 提供したいルートパス | | protocol | http | サポートしたいプロトコル |   上記以外はデフォルト値のままにしてください(port: 80 を含みます)。 作成したサービスは、サービスのリストに表示されます。 サービスの id をどこかにコピーしておいてください。後で必要になります。   **4. ルートの作成** ルートは、クライアントのリクエストに一致するルールを定義します。 各ルートはサービスに関連付けられ、サービスには複数のルートを関連付けることができます。 特定のルートに一致するすべてのリクエストは、関連するサービスにプロキシされます。 ルートとサービスを組み合わせる(およびそれらの関係を分離する)ことで強力なルーティング機構を実現し、インフラストラクチャのさまざまなアップストリームサービスにつながる IAM できめ細かなエントリポイントを定義することができます。 それでは、ルートを作成しましょう。 [Routes] に移動し、[New Route] ボタンを押します。 ルートの作成フォームで次の値を設定します。 | フィールド | 値 | 説明 | | -------- | ------------ | ------------ | | path | /api/atelier | 提供したいルートパス | | protocol | http | サポートしたいプロトコル | | service.id | 3のguid | サービス id の値(前のステップの guid) | 以上です! `http://localhost:8000/api/atelier/`(最後のスラッシュに注意)に送信されたリクエストは、2 つのバックエンドのいずれかによって処理されます。   ### **まとめ** IAM は詳細にカスタマイズ可能な API 管理インフラストラクチャを提供し、開発者と管理者が API を制御できるようにします。   ### **リンク** * [ドキュメント](https://docs.intersystems.com/irislatest/csp/docbook/apimgr/index.html) * [IAM のアナウンス](https://community.intersystems.com/post/announcing-release-intersystems-api-manager)  * [IAM を取り扱った記事](https://community.intersystems.com/post/introducing-intersystems-api-manager)   ### **質問** IAM を使用してどのような機能を実現してほしいですか?
お知らせ
Makiko Kokubun · 2021年1月28日

オンラインカンファレンス InterSystems Japan Virtual Summit 2021

開発者のみなさん、こんにちは! インターシステムズは、2/16(火)~ 2/18日(木)の3日間にかけて、オンラインカンファレンス「InterSystems Japan Virtual Summit 2021」を開催致します。 ⚡️ 現在、事前登録受付中です! ⚡️ テーマは「データプラットフォーム最前線 ニューノーマル時代に求められるアジリティとレジリエンス」です。InterSystems IRIS 、IRIS for Health の最新技術情報を多くのセッションを通してお届け致します。ぜひご参加ください。*本セミナーは日本語での開催となります。 InterSystems Japan Virtual Summit 2021 DAY1 2/16(火)10:00-11:40 基調講演:適応力と柔軟性を高めるデータプラットフォームの最新情報について DAY2 2/17(水)15:00-17:30 先進データテクノロジーセッション:既にインターシステムズ製品をお使いの方向けに、IRISへのマイグレーションやパフォーマンスについての技術セッション HL7® FHIR® によるインターオペラビリティセッション: FHIR の概要や最新情報と、IRIS for Healthでの医療データ共有、最新機能について DAY3 2/18(木)15:00-17:15 先進データテクノロジーセッション :Python、Kubernetes など、最新技術を活用した IRIS の運用と開発、IntegratedMLなどIRISの最新機能について 昨年行われた「InterSysetms Virtual Summit 2020」の技術セッションもオンデマンドで公開します(字幕付き)。 開催形式:オンライン配信 参加費:無料(事前登録制) 詳細・申込Webはこちらから 3日間で数多くの技術コンテンツをお届けいたします。ぜひご参加ください!