クリアフィルター
お知らせ
Mihoko Iijima · 2025年9月9日
開発者の皆さん、こんにちは!
今年で 3 回目となりますが、✍ 技術文書ライティングコンテスト✍ 開催します!
テーマはいつもと同じで InterSystems IRIS/InterSystems IRIS for Health に関連した内容であればどのような内容でもご応募いただけます。
🎁 参加賞:投稿いただいた方全員に、今年もちょっとしたプレゼントを計画中です。
🏆 特別賞:選ばれた3作品に、今年も特別賞あります!
※ 参加賞、特別賞の内容については、コミュニティの記事で後日発表いたします!📣
コンテストへの応募はとても簡単です。2025年10月1日(水)~11月17日(月)までの期間に開発者コミュニティに「IRISに関連した記事」を投稿してください。
もちろん!今年も🍆ボーナスポイント🍆あります!こちらをご参照ください!
参加資格
どなたでもご参加いただけます(InterSystems 開発者コミュニティのアカウントを作成するだけでご応募いただけます)。
記事の案
どのような内容でもご応募いただけますが、例えば以下の内容などはいかがでしょうか😉
IRISを使ったTo-Doリストアプリ
シンプルなタスク管理アプリを IRIS データベースに実装。タスクの追加、編集、削除ができるようにし、AI を使ってタスクの優先順位を自動で提案する機能を追加。
IRISを使ったレシピ管理システム
食材を入力すると、その食材に基づいたレシピを生成 AI で提案するシステムを作成。IRIS はレシピの管理と検索に使用。
ベクトル検索を使った簡単な画像検索システム
ユーザーがアップロードした画像に基づいて、IRIS データベース内の類似画像を検索するシステム。ベクトル検索を使った画像検索の基本的な仕組みを学べる。
AIを使った基本的な天気予報システム
天気予報のデータを取得し、AI を使ってユーザーに日々の天気予報を通知するシステム。IRIS はデータの保存と管理を行い、簡単なAIによる予測を試す。
コンテストスケジュール
📝 応募期間
2025年10月1日(水)0時0分0秒 :応募開始日
2025年11月17日(月)23時59分59秒:応募締切日
✅ 投票期間
2025年11月18日(火)0時0分0秒 :投票開始日
2025年11月25日(火)23時59分59秒:投票終了日
※ 開発者コミュニティメンバーは、公開された記事に対して「いいね!👍」をクリックすることで投票したことになります。※ 記事の投稿が早ければ早いほど、「いいね!👍」を集める期間が長くなります。
応募条件
❗️ コンテスト期間中に書かれた記事で以下の条件を満たすものは、自動的にコンテストに応募することができます。
InterSystems IRIS または InterSystems IRIS for Health に関する内容の記事を日本語で投稿してください。
800 文字以上の記事でご応募ください。(エディタの右下に表示される文字数をご確認の上ご応募下さい)
記事を投稿するときは、タグに「コンテスト」を必ず設定してください。(付け忘れた場合、投稿いただいた記事がコンテスト対象記事と認識されません)
同じテーマや似た内容であっても著者が異なる場合はご応募いただけます。
複数の記事を投稿いただけます。
他国のコミュニティに公開されている記事の翻訳記事でのご応募は対象外となります。
投稿内容はコミュニティチームにより審査されます。予めご了承ください。
記事投稿方法、エディタの使い方について詳しくは👉「記事の投稿方法:第 1 回技術文書ライティングコンテスト」をご参照ください。
賞品情報🎁
審査員投票とコミュニティメンバーからの「いいね」の数の合計で順位を決定します。
※賞品詳細は後日発表します!
🥇 1位
🥈 2位
🥉 3位
審査方法
以下の合計得点で順位を競います。
開発者コミュニティメンバーからの「いいね」の数(1いいね=1点)
ボーナスポイント(詳細は後日発表します)
審査員による投票(1位5点、2位3点、3位2点)
審査員はコミュニティチームが選出いたします。
表彰式について
12月3日開催のミートアップで行う予定です!ミートアップ詳細は、後日ご案内いたします。
ボーナスポイント
🎯 以下の内容を満たす記事を投稿すると、ボーナスポイントを獲得できます。
記事で書かれた内容を説明するビデオを公開する:4点
記事に関連した説明ビデオ(10分未満)をご用意いただくと 4 点獲得できます。
投稿された記事にサンプルコードがある場合は、コード実行の流れをビデオで公開いただく
パワーポイントのスライド表示を利用して記事の内容を説明いただく
などなど
※作成が完了されましたらコミュニティのダイレクトメッセージを利用して @Mihoko.Iijima までお知らせください。作成いただいたMP4はコミュニティのYouTubeに公開する予定です。
生成 AI 関連の記事:3点
InterSystems IRIS または InterSystems IRIS for Healthを使用した生成AIに関連する内容であれば、どのような内容でも対象となります。 生成AI をIRISと組み合わせて使ってみた例や感想など共有してください。
参考となる記事:#Generative AI
ウェビナー:「RAG+生成AIであそぼう!」 ※9/17現在、ウェビナーのオンデマンド配信中です。
IRIS のベクトル検索を利用した記事:3点
InterSystems IRIS または InterSystems IRIS for Health のベクトル検索を使用している内容であれば、どのような内容でも対象となります。
参考となる記事:#vector-search
ウェビナー:
2024/5/30開催「ベクトル検索機能のご紹介」
2025/6/10開催「IRISのベクトル検索を使って テキストから画像を検索してみよう」
2025/7/29開催「ベクトルであそぼう!」
コードの記述が含まれる/動作するコードサンプルをGitに公開する:2点
試されたコード例を記事に含めた場合、または、ご自身の Git リポジトリにコードサンプルを公開し記事内にリポジトリのURLを含めていただくと、2点獲得できます。
IRIS 2025.1以降の新機能を使っている:1点
2025.1以降のリリースで追加された新機能に関する内容であれば、どのような内容でも対象となります。使用された感想や利用前の準備で気を付ける点などあれば、ぜひ共有してください。
記事にわかりやすい図解/Gif アニメがある:1点
分かりやすい図解が含まれている、または Gif アニメを利用して解説している内容が対象となります。
この後も、コンテスト最新情報を投稿していきます。👀お見逃しなく!
皆様からのご応募、お待ちしております!
お知らせ
Toshihiko Minamoto · 2023年2月1日
この度、InterSystems IRIS Data Platform、InterSystems IRIS for Health、HealthShare Health Connect、および InterSystems IRIS Studio の 2022.3 をリリースしました。
2022.3 は、継続的デリバリー(CD)リリースです。2022.3では、SQL管理、クラウド統合、KafkaおよびJMSアダプタ、SQL Loaderなどの分野にて、多くのアップデートや機能強化が実施されました。 新たにFHIR SQL BuilderとColumnar Storageの機能が含まれていますが、いずれもまだ実験的な機能です(本番用ではなく、アクティブなEarly Access Programが実施されています)。
リリース・ハイライト
プラットホームの更新
InterSystems IRIS Data Platform 2022.3 では、実運用ワークロード向けに以下のOSのサポートが追加されます。
Oracle Linux 9
SUSE 15 SP4.
SQL 機能強化
InterSystems IRIS SQL では、システムで読み取り可能なクエリ・プランの形式を提供するようになりました。この新しいオプションを使用すると、$SYSTEM.SQL.Explain() メソッドは、アクセスするテーブルとインデックスに関する詳細な情報を含む JSON ベースのクエリプランを生成するようになりました。以前のXMLベースの形式では、異なるステップを記述するために簡単な英語のフレーズを使用していましたが、新しい形式は、より徹底した分析やクエリプランのグラフ表示を行いたいツールから利用しやすくなっています。
このリリースでは、SQL文のランタイムパラメータをサンプリングするオプトイン機能を導入しています。ステートメントインデックスはすでに、詳細なランタイム統計や各SQL文のクエリプランなど、豊富なメタデータを記録しており、通常、キャッシュドクエリのコードをパラメータ化するプレースホルダに任意のリテラルを代入しています。現在、ステートメントインデックスは、これらのパラメータの実行値のサンプリングで拡張することができます。これらを正規化されたSQL文と組み合わせることができ、例えば、別の環境に対して実行される代表的な負荷を構築したり、新たなハードウェア環境のベンチマークや異なるインデックスセットでの実験などが可能です。
InterSystems IRIS SQL は、CREATE SCHEMA および DROP SCHEMA コマンドをサポートし、アプリケーション環境の設定と消去のスクリプトに含めることができるようになりました。
スピード・スケール・セキュリティ
このリリースでは、InterSystems IRIS シャードクラスタに対して完全な弾力性が提供されます。DBA は API メソッドを呼び出して、シャードを削除するようにマークできるようになりました。このメソッドが発行されると、指定されたシャードからクラスタ内の他のデータノードにデータが直ちにオフロードされ、すべてのデータバケットが他のシャードに正常に移動されると、そのノードが自動的に切断されます。このプロセスはオンラインリバランシングと同じメカニズムを利用しているため、ユーザーはデータの移動中もシャードされたテーブルへの問い合わせやデータの取り込みを継続することができます。
アナリティクス・AI
InterSystems Reports (Logi Report 19.2)のバージョンを更新しました。 主な改善点は以下の通りです。
ブックマーク機能 - Webレポート上のパラメータやフィルタを保存可能
Report Studio は、Report Server 上で利用でき、Server から直接レポートの追加編集が可能です。
Adaptive Analytics(AtScale2022.3)の更新版 主な改善点は以下の通りです。
Microsoft Excel のタイムライン機能をサポート
データカタログベンダーにAtSCale Semantic Layerを公開するためのData Catalog API
これらの機能の詳細については、以下のリンクから入手できます。
InterSystems IRIS 2022.3 documentation and release notes
InterSystems IRIS for Health 2022.3 documentation and release notes
HealthShare Health Connect 2022.3 documentation and release notes
ソフトウェアの入手方法
通常通り、CDリリースには、サポートされているすべてのプラットフォーム用の古典的なインストール・パッケージと、Dockerコンテナ形式のコンテナ・イメージが付属しています。 完全なリストについては、サポートされるプラットフォームに関するドキュメントを参照してください。
インストール・パッケージとプレビュー・キーは、WRC の Continuous Delivery Releases サイトまたは評価サービスの Web サイトから入手できます。
InterSystems IRIS Studio は、コンポーネント配布ページで入手できます
InterSystems IRIS および IRIS for Health の Enterprise Edition と Community Edition の両方、および対応するすべてのコンポーネントのコンテナ・イメージは、新しい InterSystems Container Registry の Web インターフェースから入手できます。
docker コマンドについての詳細は、こちらの投稿をご覧ください: Announcing the InterSystems Container Registry web user interfaceこのリリースのビルド番号は 2022.3.0.606.0 です。
FHIR SQL Builder
先に説明した通り、 FHIR SQL Builder 実験的な機能であり、アクティブな EAP (Early Access Program) の一部です。この機能をご試用いただくには IRIS for HealthのプロダクトマネージャであるPatrick Jamieson (patrick.jamieson@intersystems.com) までご連絡ください。
記事
Makiko Kokubun · 2021年3月23日
*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。
この動画では、Caché/EnsembleからInterSystems IRISへの移行プロセスについてご説明しています。
Caché/Ensembleから InterSystems IRIS への移行を考えられている方は、まずこちらをご覧ください。「移行する際の注意点」、「移行の方法」、「必読ドキュメント」、「キットや評価ライセンスの入手方法」など、IRIS移行の際に必要となる情報をまとめてご案内しています。
もくじ 0:50~ InterSystemsIRIS の簡単な紹介 2:05~ サポートプラットフォームについて 2:55~ 移行方法について(インプレース変換のご紹介) ⇒インプレース変換:Caché/Ensembleから直接アップグレードが可能です(2016.2~) 5:35~ 各種ドキュメントのご紹介 7:10~ キットや評価ライセンスの入手方法10:50~ 新しいリリースサイクル(EM/CDリリース)12:25~ InterSystems IRIS 導入ガイドについて ⇒レガシー機能の取り扱いや注意点など、内容を簡単にご紹介15:40~ インプレース変換の手順とデモ(デモは19:15~)
開発者向けまとめページでは、QuickStarts、ドキュメントや開発者コミュニティへのリンク、IRIS を簡単に始めることのできるクラウド(AWS/Azure/GCP)のマーケットプレイスへのリンクなどまとめています。こちらも是非ご覧ください。
記事
Toshihiko Minamoto · 2021年4月26日

この記事には、IAM の基本概念を学習するための、教材、例、演習が含まれます。
すべてのリソースはこちらの git から入手できます: https://github.com/grongierisc/iam-training
ソリューションは [training ブランチ](https://github.com/grongierisc/iam-training/tree/training)にあります。
この記事では、次の点について説明します。
- [1. 入門](#1-introduction)
- [1.1. IAM とは?](#11-what-is-iam-)
- [1.2. API 管理とは?](#12-what-is-an-api-management-)
- [1.3. IAM ポータル](#13-iam-portal)
- [1.4. このトレーニングの流れ](#14-flow-of-this-training)
- [2. インストール](#2-installation)
- [2.1. インストールには何が必要?](#21-what-do-you-need-to-install)
- [2.2. IAM と IRIS の連携の仕組み](#22-how-iam-works-with-iris)
- [2.3. セットアップ](#23-setup)
- [2.4. IAM のインストール](#24-install-iam)
- [2.4.1. Iris イメージ](#241-iris-image)
- [2.4.2. IAM イメージ](#242-iam-image)
- [2.4.3. Docker ファイルを更新する](#243-update-the-docker-file)
- [2.4.4. docker-compose を更新する](#244-update-the-docker-compose)
- [2.4.5. オプション: .env として IRIS_PASSWORD を追加する](#245-option--add-iris_passward-as-env)
- [2.4.6. テストしよう!](#246-test-it-)
- [3. その 1: サービス/ルート](#3-first-serviceroute)
- [3.1. サービスを作成する](#31-create-a-service)
- [3.2. ルートを作成する](#32-create-a-route)
- [3.3. テストしよう!](#33-test-it-)
- [4. その 2: プラグインの使用](#4-second-go-further-with-plugin)
- [4.1. プラグインをサービスに追加する](#41-add-a-plugin-to-the-service)
- [4.2. テストしよう!](#42-test-it-)
- [5. その 3: 独自認証の追加](#5-third-add-our-own-authentication)
- [5.1. コンシューマを追加する](#51-add-consumers)
- [5.2. Basic 認証プラグインを追加する](#52-add-basic-auth-plugin)
- [5.3. ACL プラグインを追加する](#53-add-acl-plugin)
- [5.4. ACL とログイン情報で USER を構成する](#54-configure-user-with-acl-and-credentials)
- [5.5. テストしよう!](#55-test-it-)
- [6. 演習: レート制限](#6-exercice-rate-limiting)
- [6.1. ソリューション](#61-solution)
- [7. 開発者ポータル](#7-dev-portal)
- [7.1. 概要](#71-overview)
- [7.2. 有効にしよう!](#72-enable-it-)
- [7.3. 最初の仕様を追加する](#73-add-your-first-spec)
- [7.4. テストしよう!](#74-test-it-)
- [7.5. 演習](#75-exercise)
- [7.5.1. ソリューション](#751-solution)
- [8. 開発者ポータル(その 2): 認証](#8-dev-portal-part-two-authentication)
- [8.1. Basic 認証を有効にする](#81-enable-basic-auth)
- [8.2. アクセスを制限する](#82-limit-access)
- [8.2.1. ロールを作成する](#821-create-a-role)
- [8.2.2. 仕様にロールを追加する](#822-add-role-to-spec)
- [8.2.3. テストしよう!](#823-test-it-)
- [8.2.3.1. 新しい開発者を登録する](#8231-register-a-new-developer)
- [8.2.3.2. この開発者を承認する](#8232-approve-this-developer)
- [8.2.3.3. この開発者のロールを追加する](#8233-add-role-for-this-developer)
- [8.3. 開発者の Oauth2 を追加する](#83-add-oauth2-for-developer)
- [8.3.1. その 1: Basic 認証を削除する](#831-first-remove-basic-auth)
- [8.3.2. その 2: application-registration プラグインを追加する](#832-second-add-application-registration-plugin)
- [8.3.3. リンクサービスとドキュメント](#833-link-service-and-documentation)
- [8.3.3.1. テストしよう!](#8331-test-it-)
- [9. 安全な管理ポータル](#9-secure-management-portal)
- [9.1. 管理者を作成する](#91-create-an-admin)
- [9.2. Kong Manager の Basic 認証を有効にする](#92-enable-basic-auth-for-kong-manager)
- [9.3. RBAC で Kong Admin API を使用する](#93-use-kong-admin-api-with-rbac)
- [9.3.1. トークンで管理者ユーザーを作成する](#931-create-and-admin-user-with-a-token)
- [10. プラグイン](#10-plugins)
- [10.1. コミュニティプラグインをインポートする](#101-import-a-community-plugin)
- [10.1.1. コミュニティプラグインで新しい Kong/IAM docker イメージを構築する](#1011-build-a-new-kongiam-docker-image-with-the-community-plugin)
- [10.1.2. テストしよう!](#1012-test-it-)
- [10.1.2.1. 使ってみよう!](#10121-use-it-)
- [10.2. 新しいプラグインを作成する](#102-create-a-new-plugin)
- [10.2.1. ファイル構造](#1021-file-structure)
- [10.2.1.1. handler.lua](#10211-handlerlua)
- [10.2.1.1.1. 例](#102111-example)
- [10.2.1.2. schema.lua](#10212-schemalua)
- [10.2.1.3. *.rockspec](#10213-rockspec)
- [10.2.2. 構築しよう](#1022-build-it)
- [10.2.3. ヒント](#1023-tips)
- [11. CI/CD](#11-cicd)
- [11.1. postman コレクションを作成する](#111-create-the-postman-collection)
- [11.1.1. IAM が起動しているか](#1111-is-iam-startup-)
- [11.1.2. 古いデータを削除する](#1112-delete-old-datas)
- [11.1.3. サービス/ルートを作成する](#1113-create-serviceroute)
- [11.1.3.1. ヒント](#11131-tips)
- [11.2. newman で実行する](#112-run-it-with-newman)
# 1. 入門

## 1.1. IAM とは?
IAM は、InterSystems API Manager の略で、**Kong Enterprise Edition** が土台となっています。
このため、Kong Open Source エディションの他に、次の機能にアクセスすることができます。
* 管理者ポータル
* 開発者ポータル
* 高度プラグイン
* Oauth2
* キャッシング
* ...

## 1.2. API 管理とは?
API 管理は、Web アプリケーションプログラミングインターフェース(API)の作成と公開、その使用ポリシーの適用、アクセスの制御、サブスクライバーコミュニティの育成、使用統計の収集と分析、およびパフォーマンスのレポート作成を行うプロセスです。 API 管理コンポーネントは、開発者とサブスクライバーのコミュニティをサポートする仕組みとツールをもたらします。

## 1.3. IAM ポータル
Kong と IAM は第一に API として設計されています。つまり、Kong/IAM で行われることすべては Rest 呼び出しまたは管理者ポータルで行えるということです。
この記事の中では、すべての例や演習は次のようにして提示されています。
| IAM ポータル | Rest API |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
|  |  |
## 1.4. このトレーニングの流れ
この記事では、IAM を IRIS Rest API のプロキシとして使用することを狙いとしています。
この Rest API の定義は、次の場所にあります。
```url
http://localhost:52773/swagger-ui/index.html#/
```
または次の場所にあります。
```url
https://github.com/grongierisc/iam-training/blob/training/misc/spec.yml
```
この記事は main ブランチから始めてください。
記事の最後に到達すると、training ブランチと同じ結果が得られるはずです。
# 2. インストール

## 2.1. インストールには何が必要?
* [Git](https://git-scm.com/downloads)
* [Docker](https://www.docker.com/products/docker-desktop)(Windows をお使いの方は、Docker インストールで「Linux コンテナ」が使用されるように設定してください)。
* [Docker Compose](https://docs.docker.com/compose/install/)
* [Visual Studio Code](https://code.visualstudio.com/download) と [InterSystems ObjectScript VSCode 拡張機能](https://marketplace.visualstudio.com/items?itemName=daimor.vscode-objectscript)
* InterSystems IRIS IAM 対応のライセンスファイル
* IAM Docker イメージ
## 2.2. IAM と IRIS の連携の仕組み
Kong/IAM の起動時に、コンテナは curl 呼び出しによって、Kong/IAM のライセンスをチェックします。
この呼び出しのエンドポイントは、IRIS コンテナの Rest API です。
参考: Kong ライセンスは IRIS のライセンスに組み込まれています。

## 2.3. セットアップ
Git clone によって、次のリポジトリのクローンを作成します。
git clone https://github.com/grongierisc/iam-training
次のようにして、最初の Rest API を実行します。
docker-compose up
テストを行います。
```url
http://localhost:52773/swagger-ui/index.html#/
```
ログイン/パスワード: SuperUser/SYS
## 2.4. IAM のインストール
### 2.4.1. Iris イメージ
まず、Community エディションをライセンスエディションに切り替える必要があります。
これを行うには、InterSystems Container Registry へのアクセスをセットアップして、アクセス制限付きの IRIS イメージをダウンロードする必要があります。
[開発者コミュニティ](https://jp.community.intersystems.com)の「[InterSystems Container Registry のご紹介](https://jp.community.intersystems.com/node/496571)」をご覧ください。
* WRC ログイン情報を使って https://containers.intersystems.com/ にログインし、*トークン*を取得します。
* コンピュータに Docker ログインをセットアップします。
```bash
docker login -u="user" -p="token" containers.intersystems.com
```
* InterSystems IRIS イメージを取得します。
```bash
docker pull containers.intersystems.com/intersystems/irishealth:2020.4.0.524.0
```
### 2.4.2. IAM イメージ
[WRC Software Distribution](https://wrc.intersystems.com/wrc/coDistribution.csp) を使用します。
* コンポーネント > ダウンロードに移動して *IAM-1.5.0.9-4.tar.gz* ファイルをダウンロードし、解凍(unzip & untar)してイメージを読み込みます。
```bash
docker load -i iam_image.tar
```
### 2.4.3. Docker ファイルを更新する
IRIS Community エディションをライセンスエディションに変更します。
* containers.intersystems.com/intersystems/irishealth:2020.4.0.524.0
* key フォルダにある iris.key を追加します。
dockerfile を編集して、その上に次の部分を追加します。
```dockerfile
ARG IMAGE=containers.intersystems.com/intersystems/irishealth:2020.4.0.524.0
# 第 1 ステージ
FROM $IMAGE as iris-iam
COPY key/iris.key /usr/irissys/mgr/iris.key
COPY iris-iam.script /tmp/iris-iam.script
RUN iris start IRIS \
&& iris session IRIS < /tmp/iris-iam.script \
&& iris stop IRIS quietly
# 第 2 ステージ
FROM iris-iam
```
この部分では、マルチステージの dockerfile を作成します。
* 第 1 ステージでは、IRIS が IAM ライセンスを提供できるようにします。
* 第 2 ステージは、REST API ビルド用です。
新しい IRIS イメージを構築して IAM エンドポイントとユーザーを有効にする新しい iris-iam.script ファイルを作成します。
```objectscript
zn "%SYS"
write "Create web application ...",!
set webName = "/api/iam"
set webProperties("Enabled") = 1
set status = ##class(Security.Applications).Modify(webName, .webProperties)
write:'status $system.Status.DisplayError(status)
write "Web application "_webName_" was updated!",!
set userProperties("Enabled") = 1
set userName = "IAM"
Do ##class(Security.Users).Modify(userName,.userProperties)
write "User "_userName_" was updated!",!
halt
```
### 2.4.4. docker-compose を更新する
docker-compose ファイルを次のように更新します。
* db
* IAM の postgres データベース
* iam-migration
* データベースのブートストラップ
* iam
* 実際の IAM インスタンス
* 永続データ用のボリューム
次の部分を docker-compose ファイルの最後に追加します。
```yml
iam-migrations:
image: intersystems/iam:1.5.0.9-4
command: kong migrations bootstrap up
depends_on:
- db
environment:
KONG_DATABASE: postgres
KONG_PG_DATABASE: ${KONG_PG_DATABASE:-iam}
KONG_PG_HOST: db
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-iam}
KONG_PG_USER: ${KONG_PG_USER:-iam}
KONG_CASSANDRA_CONTACT_POINTS: db
KONG_PLUGINS: bundled,jwt-crafter
ISC_IRIS_URL: IAM:${IRIS_PASSWORD}@iris:52773/api/iam/license
restart: on-failure
links:
- db:db
iam:
image: intersystems/iam:1.5.0.9-4
depends_on:
- db
environment:
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: '0.0.0.0:8001'
KONG_ANONYMOUS_REPORTS: 'off'
KONG_CASSANDRA_CONTACT_POINTS: db
KONG_DATABASE: postgres
KONG_PG_DATABASE: ${KONG_PG_DATABASE:-iam}
KONG_PG_HOST: db
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-iam}
KONG_PG_USER: ${KONG_PG_USER:-iam}
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_PORTAL: 'on'
KONG_PORTAL_GUI_PROTOCOL: http
KONG_PORTAL_GUI_HOST: '127.0.0.1:8003'
KONG_ADMIN_GUI_URL: http://localhost:8002
KONG_PLUGINS: bundled
ISC_IRIS_URL: IAM:${IRIS_PASSWORD}@iris:52773/api/iam/license
volumes:
- ./iam:/iam
links:
- db:db
ports:
- target: 8000
published: 8000
protocol: tcp
- target: 8001
published: 8001
protocol: tcp
- target: 8002
published: 8002
protocol: tcp
- target: 8003
published: 8003
protocol: tcp
- target: 8004
published: 8004
protocol: tcp
- target: 8443
published: 8443
protocol: tcp
- target: 8444
published: 8444
protocol: tcp
- target: 8445
published: 8445
protocol: tcp
restart: on-failure
db:
image: postgres:9.6
environment:
POSTGRES_DB: ${KONG_PG_DATABASE:-iam}
POSTGRES_PASSWORD: ${KONG_PG_PASSWORD:-iam}
POSTGRES_USER: ${KONG_PG_USER:-iam}
volumes:
- 'pgdata:/var/lib/postgresql/data'
healthcheck:
test: ["CMD", "pg_isready", "-U", "${KONG_PG_USER:-iam}"]
interval: 30s
timeout: 30s
retries: 3
restart: on-failure
stdin_open: true
tty: true
volumes:
pgdata:
```
ルートフォルダに .env ファイルを追加します。
```env
IRIS_PASSWORD=SYS
```
ちなみに、Kong ポートの定義は次のようになっています。
| ポート | プロトコル | 説明 |
| ----- | ----- | -------------------------------------------------------- |
| :8000 | HTTP | コンシューマからの HTTP 着信トラフィックを取り、上流のサービスに転送します。 |
| :8443 | HTTPS | コンシューマからの HTTPS 着信トラフィックを取り、上流のサービスに転送します。 |
| :8001 | HTTP | 管理 API。 HTTP によるコマンドラインからの呼び出しをリスンします。 |
| :8444 | HTTPS | 管理 API。 HTTPS によるコマンドラインからの呼び出しをリスンします。 |
| :8002 | HTTP | Kong Manager(GUI)。 HTTP トラフィックをリスンします。 |
| :8445 | HTTPS | Kong Manager(GUI)。 HTTPS トラフィックをリスンします。 |
| :8003 | HTTP | 開発者ポータル。 開発者ポータルが有効になっていることを前提に、HTTP トラフィックをリスンします。 |
| :8446 | HTTPS | 開発者ポータル。 開発者ポータルが有効になっていることを前提に、HTTPS トラフィックをリスンします。 |
| :8004 | HTTP | HTTP による開発者ポータルの /files トラフィック。開発者ポータルが有効になっていることが前提です。 |
| :8447 | HTTPS | HTTPS による開発者ポータルの /files トラフィック。開発者ポータルが有効になっていることが前提です。 |
### 2.4.5. オプション: .env として IRIS_PASSWORD を追加する
使いやすいよう(またセキュリティの理由により)、IRIS dockerfile の .env ファイルを使用できます。
使用するには、docker-compose の iris サービスの部分を次のように編集します。
```yml
build:
context: .
dockerfile: dockerfile
args:
- IRIS_PASSWORD=${IRIS_PASSWORD}
```
そして、dockerfile を編集します(ビルドの第 2 または第 1 ステージ)。
```dockerfile
ARG IRIS_PASSWORD
RUN echo "${IRIS_PASSWORD}" > /tmp/password.txt && /usr/irissys/dev/Container/changePassword.sh /tmp/password.txt
```
### 2.4.6. テスト
docker-compose -f "docker-compose.yml" up -d --build
# 3. その 1: サービス/ルート

Kong/IAM の連携の仕組みを覚えていますか?

ここでは、次の項目を構築します。
* サービス
* crud API 用
* ルート
* このサービスにアクセスするためのルート
## 3.1. サービスを作成する
IAM ポータル
Rest API
# サービスを作成する
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=crud' \
--data 'url=http://iris:52773/crud/'
ここで確認したこと: サービスの作成するには、その URL のみが必要です。
## 3.2. ルートを作成する
IAM ポータル
Rest API
# ルートを作成する
curl -i -X POST \
--url http://localhost:8001/services/crud/routes \
--data 'name=crud-route' \
--data 'paths=/persons/*' \
--data 'strip_path=false'
ルートの作成には、次の項目が必要です。
* サービス名
* RegEx が許可されているパス
## 3.3. テスト
元の API
プロキシ API
# レガシー
curl –i --location --request GET 'http://localhost:52773/crud/persons/all' \
--header 'Authorization: Basic U3VwZXJVc2VyOlNZUw=='
# KONG
curl –i --location --request GET 'http://localhost:8000/persons/all' \
--header 'Authorization: Basic U3VwZXJVc2VyOlNZUw=='
ここで確認したこと:
* レガシー側は何も変わらない
* Kong 側:
* ポートを変更する
* パスはルートに対応する
* 依然として認証が必要
# 4. その 2: プラグインの使用
次に、IRIS エンドポイントに対して Kong の自動認証を行ってみましょう。
これを行うために、resquest-transformer というプラグインを使用します。

## 4.1. プラグインをサービスに追加する
IAM ポータル
Rest API
# プラグインを作成する
curl -i -X POST \
--url http://localhost:8001/services/crud/plugins \
--data 'name=request-transformer' \
--data 'config.add.headers=Authorization:Basic U3VwZXJVc2VyOlNZUw==' \
--data 'config.replace.headers=Authorization:Basic U3VwZXJVc2VyOlNZUw=='
## 4.2. テスト
元の API
プロキシ API
# レガシー
curl –i --location --request GET 'http://localhost:52773/crud/persons/all'
# KONG
curl –i --location --request GET 'http://localhost:8000/persons/all'
ここで確認したこと:
* 元の API にエラー 401 が発生する
* 認証を行わずにデータに到達した
# 5. その 3: 独自認証の追加
ここでは、元の API を損なうことなく、独自の認証を追加してみましょう。

## 5.1. コンシューマを追加する
IAM ポータル
Rest API
# コンシューマ anonymous を追加する
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=anonymous" \
--data "custom_id=anonymous"
# コンシューマ user を追加する
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=user" \
--data "custom_id=user"
## 5.2. Basic 認証プラグインを追加する
IAM ポータル
Rest API
# サービスの Basic 認証を有効にする
curl -i -X POST http://localhost:8001/routes/crud-route/plugins \
--data "name=basic-auth" \
--data "config.anonymous=5cc8dee4-066d-492e-b2f8-bd77eb0a4c86" \
--data "config.hide_credentials=false"
説明:
* config.anonymous = anonymous コンシューマの uuid
## 5.3. ACL プラグインを追加する
IAM ポータル
Rest API
# ACL を有効にする
curl -i -X POST http://localhost:8001/routes/crud-route/plugins \
--data "name=acl" \
--data "config.whitelist=user"
## 5.4. ACL とログイン情報で USER を構成する
IAM ポータル
Rest API
# コンシューマグループを追加する
curl -i -X POST \
--url http://localhost:8001/consumers/user/acls \
--data "group=user"
# コンシューマのログイン情報を追加する
curl -i -X POST http://localhost:8001/consumers/user/basic-auth \
--data "username=user" \
--data "password=user"
## 5.5. テスト
元の API
プロキシ API
# レガシー
curl –i --location --request GET 'http://localhost:52773/crud/persons/all' \
--header 'Authorization:Basic dXNlcjp1c2Vy'
# KONG
curl –i --location --request GET 'http://localhost:8000/persons/all' \
--header 'Authorization:Basic dXNlcjp1c2Vy'
# 6. 演習: レート制限
1. 認証されていないユーザーを有効にする
2. 認証されていないユーザーのレートを 1 分あたり 2 回の呼び出しに制限する
## 6.1. ソリューション
1. 認証されていないユーザーを有効にする
IAM ポータル
Rest API
# コンシューマグループを追加する
curl -i -X POST \
--url http://localhost:8001/consumers/anonymous/acls \
--data "group=user"
2. 認証されていないユーザーのレートを 1 分あたり 2 回の呼び出しに制限する
IAM ポータル
Rest API
# レート制限のあるコンシューマを追加する
curl -i -X POST \
--url http://localhost:8001/consumers/anonymous/plugins \
--data "name=rate-limiting" \
--data "config.limit_by=consumer" \
--data "config.minute=2"
# 7. 開発者ポータル

## 7.1. 概要
Kong Developer Portal(Kong 開発者ポータル)では以下が提供されます。
* すべての開発者が信頼できる唯一の情報源
* 直感的なドキュメントのコンテンツ管理
* 合理化された開発者オンボーディング
* ロールベースのアクセス制御(RBAC)

## 7.2. 有効化
IAM ポータル
Rest API
curl -X PATCH http://localhost:8001/workspaces/default --data "config.portal=true"
## 7.3. 最初の仕様を追加する
IAM ポータル
Rest API
curl -X POST http://localhost:8001/default/files -F "path=specs/iam-training.yml" -F "contents=@misc/spec.yml"
## 7.4. テスト
```url
http://localhost:8003/default/documentation/iam-training
```
何が起こりましたか?
これを解決するには?
## 7.5. 演習
1. CORS プラグインをルートに追加する
### 7.5.1. ソリューション
IAM ポータル
Rest API
# CORS を有効にする
curl -i -X POST http://localhost:8001/routes/crud-route/plugins \
--data "name=cors"
# 8. 開発者ポータル(その 2): 認証
## 8.1. Basic 認証を有効にする
IAM ポータル
セッション構成(JSON)
{
"cookie_secure": false,
"cookie_name": "portal_session",
"secret": "SYS",
"storage": "kong"
}
これで、開発者ポータルの認証が有効になりました。
## 8.2. アクセスを制限する
デフォルトでは、認証されていないユーザーがすべてにアクセスできるようになっています。
ロールを作成することで、アクセスを制限することができます。
例として、CRUD API ドキュメントへのアクセスを制限してみましょう。
### 8.2.1. ロールを作成する
IAM ポータル
Rest API
# ロールを有効にする
curl -i -X POST http://localhost:8001/default/developers/roles \
--data "name=dev"
### 8.2.2. 仕様にロールを追加する
IAM ポータル
Rest API
# ロールを有効にする
curl 'http://localhost:8001/default/files/specs/iam-training.yml' -X PATCH -H 'Accept: application/json, text/plain, */*' --compressed -H 'Content-Type: application/json;charset=utf-8' -H 'Origin: http://localhost:8002' -H 'Referer: http://localhost:8002/default/portal/permissions/' --data-raw $'{"contents":"x-headmatter:\\n readable_by:\\n - dev\\nswagger: \'2.0\'\\ninfo:\\n title: InterSystems IRIS REST CRUD demo\\n description: Demo of a simple rest API on IRIS\\n version: \'0.1\'\\n contact:\\n email: apiteam@swagger.io\\n license:\\n name: Apache 2.0\\n url: \'http://www.apache.org/licenses/LICENSE-2.0.html\'\\nhost: \'localhost:8000\'\\nbasePath: /\\nschemes:\\n - http\\nsecurityDefinitions:\\n basicAuth:\\n type: basic\\nsecurity:\\n - basicAuth: []\\npaths:\\n /:\\n get:\\n description: \' PersonsREST general information \'\\n summary: \' Server Info \'\\n operationId: GetInfo\\n x-ISC_CORS: true\\n x-ISC_ServiceMethod: GetInfo\\n responses:\\n \'200\':\\n description: (Expected Result)\\n schema:\\n type: object\\n properties:\\n version:\\n type: string\\n default:\\n description: (Unexpected Error)\\n /persons/all:\\n get:\\n description: \' Retreive all the records of Sample.Person \'\\n summary: \' Get all records of Person class \'\\n operationId: GetAllPersons\\n x-ISC_ServiceMethod: GetAllPersons\\n responses:\\n \'200\':\\n description: (Expected Result)\\n schema:\\n type: array\\n items:\\n $ref: \'#/definitions/Person\'\\n default:\\n description: (Unexpected Error)\\n \'/persons/{id}\':\\n get:\\n description: \' Return one record fo Sample.Person \'\\n summary: \' GET method to return JSON for a given person id\'\\n operationId: GetPerson\\n x-ISC_ServiceMethod: GetPerson\\n parameters:\\n - name: id\\n in: path\\n required: true\\n type: string\\n responses:\\n \'200\':\\n description: (Expected Result)\\n schema:\\n $ref: \'#/definitions/Person\'\\n default:\\n description: (Unexpected Error)\\n put:\\n description: \' Update a record in Sample.Person with id \'\\n summary: \' Update a person with id\'\\n operationId: UpdatePerson\\n x-ISC_ServiceMethod: UpdatePerson\\n parameters:\\n - name: id\\n in: path\\n required: true\\n type: string\\n - name: payloadBody\\n in: body\\n description: Request body contents\\n required: false\\n schema:\\n type: string\\n responses:\\n \'200\':\\n description: (Expected Result)\\n default:\\n description: (Unexpected Error)\\n delete:\\n description: \' Delete a record with id in Sample.Person \'\\n summary: \' Delete a person with id\'\\n operationId: DeletePerson\\n x-ISC_ServiceMethod: DeletePerson\\n parameters:\\n - name: id\\n in: path\\n required: true\\n type: string\\n responses:\\n \'200\':\\n description: (Expected Result)\\n default:\\n description: (Unexpected Error)\\n /persons/:\\n post:\\n description: \' Creates a new Sample.Person record \'\\n summary: \' Create a person\'\\n operationId: CreatePerson\\n x-ISC_ServiceMethod: CreatePerson\\n parameters:\\n - name: payloadBody\\n in: body\\n description: Request body contents\\n required: false\\n schema:\\n type: string\\n responses:\\n \'200\':\\n description: (Expected Result)\\n default:\\n description: (Unexpected Error)\\ndefinitions:\\n Person:\\n type: object\\n properties:\\n Name:\\n type: string\\n Title:\\n type: string\\n Company:\\n type: string\\n Phone:\\n type: string\\n DOB:\\n type: string\\n format: date-time\\n"}'
ここでは、次の箇所が重要です。
```yml
x-headmatter:
readable_by:
- dev
```
次のドキュメントを参照してください: 「[readable_by attribute](https://docs.konghq.com/enterprise/1.5.x/developer-portal/administration/developer-permissions/#readable_by-attribute)」(readable_by 属性)
### 8.2.3. テスト
#### 8.2.3.1. 新しい開発者を登録する

#### 8.2.3.2. この開発者を承認する

#### 8.2.3.3. この開発者のロールを追加する

curl 'http://localhost:8001/default/developers/dev@dev.com' -X PATCH --compressed -H 'Content-Type: application/json;charset=utf-8' -H 'Cache-Control: no-cache' -H 'Origin: http://localhost:8002' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Referer: http://localhost:8002/default/portal/permissions/dev/update' -H 'Pragma: no-cache' --data-raw '{"roles":["dev"]}'
## 8.3. 開発者向け Oauth2 を追加する
ここでは、開発者が安全に crud API を使用できるよう、Oauth2 認証を追加します。
このフローでは、開発者自身が登録を行い、crud API へのアクセス権を付与します。
### 8.3.1. その 1: Basic 認証を削除する
これを行うには、Basic 認証を BearToken 認証に置き換えます。
まず、Basic 認証/ACL を無効にします。
IAM ポータル
Rest API
# ACL プラグインを無効にする
curl 'http://localhost:8001/default/routes/afefe836-b9be-49a8-927a-1324a8597a9c/plugins/3f2e605e-9cb6-454a-83ec-d1b1929b1d30' -X PATCH --compressed -H 'Content-Type: application/json;charset=utf-8' -H 'Cache-Control: no-cache' -H 'Origin: http://localhost:8002' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Referer: http://localhost:8002/default/plugins/acl/3f2e605e-9cb6-454a-83ec-d1b1929b1d30/update' -H 'Pragma: no-cache' --data-raw '{"enabled":false,"name":"acl","route":{"id":"afefe836-b9be-49a8-927a-1324a8597a9c"},"config":{"hide_groups_header":false,"whitelist":["user","dev","crud"]}}'
### 8.3.2. その 2: application-registration プラグインを追加する
IAM ポータル
Rest API
# application-registration プラグインを作成する
curl -i -X POST \
--url http://localhost:8001/services/crud/plugins \
--data 'name=application-registration' \
--data 'config.auth_header_name=authorization' \
--data 'config.auto_approve=true' \
--data 'config.display_name=auth' \
--data 'config.enable_client_credentials=true'
### 8.3.3. リンクサービスとドキュメント
IAM ポータル
Rest API
curl 'http://localhost:8001/default/document_objects' --compressed -H 'Content-Type: application/json;charset=utf-8' -H 'Cache-Control: no-cache' -H 'Origin: http://localhost:8002' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Referer: http://localhost:8002/default/services/create-documentation' -H 'Pragma: no-cache' --data-raw '{"service":{"id":"7bcef2e6-117c-487a-aab2-c7e57a0bf61a"},"path":"specs/iam-training.yml"}'
#### 8.3.3.1. テスト
dev@dev.com としてログインした開発者ポータルで、新しいアプリケーションを作成します。

client_id と client_secret を提供されます。
これらの情報は、Swagger 開発者ポータルで使用できます。
このアプリケーションを crud サービスに登録します。

トークンを取得する:
curl --insecure -X POST https://localhost:8443/persons/oauth2/token \
--data "grant_type=client_credentials" \
--data "client_id=2TXNvDqjeVMHydJbjv9t96lWTXOKAtU8" \
--data "client_secret=V6Vma6AtIvl04UYssz6gAxPc92eCF4KR"
トークンを使用する:
curl --insecure -X GET https://localhost:8443/persons/all \
--header "authorization: Bearer u5guWaYR3BjZ1KdwuBSC6C7udCYxj5vK"
# 9. セキュアな管理ポータル
## 9.1. 管理者を作成する
シードパスワードなしでKong をブートしました。
そのため、RBAC を適用する前に、管理者を作成する必要があります。
これを行うために、次を行ってください。
* [チーム]に移動します。
* 管理者を招待します。
* メールを設定します。
* ユーザー名を設定します。
* ロールをスーパー管理者に設定します。
* 招待します。
* [招待された管理者]に移動します。
* 表示します。
* リンクを生成します。

## 9.2. Kong Manager の Basic 認証を有効にする
この機能を有効にするには、docker-compose ファイルに変更を加える必要があります。
次のコードを iam サービスの環境に追加します。
```yml
KONG_ENFORCE_RBAC: 'on'
KONG_ADMIN_GUI_AUTH: 'basic-auth'
KONG_ADMIN_GUI_SESSION_CONF: '{"secret":"${IRIS_PASSWORD}","storage":"kong","cookie_secure":false}'
```
コンテナを再起動します。
docker-compose down && docker-compose up -d
招待された管理者のリンクに移動します。
```url
http://localhost:8002/register?email=test.test%40gmail.com&username=admin&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MTYzMzYzNzEsImlkIjoiY2JiZGE5Y2UtODQ3NS00MmM2LTk4ZjItNDgwZTI4MjQ4NWNkIn0.sFeOc_5UPIr3MdlQrgyGvmvIjRFvSn3nQjo2ph8GrJA
```
## 9.3. RBAC で Kong Admin API を使用する
RBAC が設定されたため、Kong Admin API は使用できません。
curl -s -X GET \
--url http://localhost:8001/routes
このエラーが発生します。
```json
{"message":"Invalid credentials. Token or User credentials required"}
```
### 9.3.1. トークンで管理者ユーザーを作成する
* [チーム]に移動します。
* RBAC ユーザー
* 新しいユーザーを追加

curl -s -X GET \
--url http://localhost:8001/routes \
--header "Kong-Admin-Token: SYS"
# 10. プラグイン

Kong には品質の高いプラグインが付属しています。
しかし、組み込まれていないプラグインが必要となった場合は、どうすればよいのでしょうか。 コミュニティプラグインを使用する場合はどうすればよいのでしょうか。
この章では、コミュニティプラグインとそのインポート方法について説明します。
その後で、独自のプラグインの構築方法を確認しましょう。
## 10.1. コミュニティプラグインをインポートする
このステップでは、jwt-crafter プラグインを使用することにします。
これは、Kong 自体で JWT トークンを生成できるようにするプラグインで、トーク生成を行う上流のサービスに頼る必要がなくなります。
このプラグインは次の場所にあります。
```
https://github.com/grongierisc/kong-plugin-jwt-crafter
```
docker バージョンを使用しているため、このプラグインをインストールするには、プラグインを組み込む新しいイメージを構築する必要があります。
### 10.1.1. コミュニティプラグインで新しい Kong/IAM docker イメージを構築する
1. この Git のルートに「iam」というフォルダを作成します。
2. この新しいフォルダに dockerfile を作成します。
3. 「plugins」というフォルダを作成します。
1. すべてのコミュニティプラグインを追加する場所です。
4. docker-compose ファイルを更新して、新しいプラグインを有効にします。
plugins フォルダで、コミュニティプラグインの git clone を実行します。
git clone https://github.com/grongierisc/kong-plugin-jwt-crafter
dockerfile は次のようになります。
```dockerfile
FROM intersystems/iam:1.5.0.9-4
USER root
COPY ./plugins /custom/plugins
RUN cd /custom/plugins/kong-plugin-jwt-crafter && luarocks make
USER kong
```
この dockerfile で何を確認できますか?
コミュニティプラグインをインストールするには、ルートフォルダ(rockspec のある場所)に移動して、luarocks make を呼び出しています。 それだけです。 これでプラグインをインストールできました。
docker-compose の方では次を行います。
1. iam イメージタグを編集します。
1. intersystems/iam:1.5.0.9-4 -> intersystems/iam-custom:1.5.0.9-4
2. ビルドコンテキストを追加します。
```yml
build:
context: iam
dockerfile: dockerfile
```
3. 環境変数でプラグインを有効にします。
```yml
KONG_PLUGINS: 'bundled,jwt-crafter'
```
これで新しい IAM イメージをビルドします。
docker-compose build iam
### 10.1.2. テスト
docker-compose up -d
[プラグイン]->[新規]に移動すると、リストの最後に jwt-crafter プラグインが表示されているはずです。

#### 10.1.2.1. 使ってみる
1. 新しいサービスを作成します。
IAM ポータル
Rest API
# サービスを作成する
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=crud-persons' \
--data 'url=http://iris:52773/crud/persons/'
2. ルートを作成します。
IAM ポータル
Rest API
# ルートを作成する
curl -i -X POST \
--url http://localhost:8001/services/crud-persons/routes \
--data 'name=crud-route-jwt' \
--data 'paths=/crud/persons/*' \
--data 'strip_path=true'
3. 自動認証を再利用します。
IAM ポータル
Rest API
# プラグインを作成する
curl -i -X POST \
--url http://localhost:8001/services/crud-persons/plugins \
--data 'name=request-transformer' \
--data 'config.add.headers=Authorization:Basic U3VwZXJVc2VyOlNZUw==' \
--data 'config.replace.headers=Authorization:Basic U3VwZXJVc2VyOlNZUw=='
これで完了です。 jwt-crafter の実際の使用は次のようになります。
```bash
# acl をルートに追加する
curl -i -X POST http://localhost:8001/routes/crud-route-jwt/plugins \
--data "name=acl" \
--data "config.whitelist=test" \
--data "config.hide_groups_header=false"
# サービスを作成する
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=jwt-login' \
--data 'url=http://neverinvoked/'
# ルートを作成する
curl -i -X POST \
--url http://localhost:8001/services/jwt-login/routes \
--data 'name=jwt-login-route' \
--data 'paths=/jwt/log-in'
# サービスの Basic 認証を有効にする
curl -i -X POST http://localhost:8001/routes/jwt-login-route/plugins \
--data "name=basic-auth" \
--data "config.hide_credentials=false"
# サービスの Basic 認証を有効にする
curl -i -X POST http://localhost:8001/routes/jwt-login-route/plugins \
--data "name=jwt-crafter" \
--data "config.expires_in=86400"
# コンシューマを追加する
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=test"
# コンシューマグループを追加する
curl -i -X POST \
--url http://localhost:8001/consumers/test/acls \
--data "group=test"
# コンシューマのログイン情報を追加する
curl -i -X POST http://localhost:8001/consumers/test/basic-auth \
--data "username=test" \
--data "password=test"
curl -i -X POST http://localhost:8001/consumers/test/jwt \
--data "key=test" \
--data "algorithm=HS256"
# JWT プラグイン
curl -i -X POST http://localhost:8001/routes/crud-route-jwt/plugins \
--data "name=jwt"
```
テストしよう!
```bash
# test:test は base64 でエンコーディングされている
curl -H 'Authorization: basic dGVzdDp0ZXN0' localhost:8000/jwt/log-in
```
```bash
curl --location --request GET 'http://localhost:8000/crud/persons/all' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW0iOiJ0ZXN0Iiwic3ViIjoiODJiNjcwZDgtNmY2OC00NDE5LWJiMmMtMmYxZjMxNTViN2E2Iiwicm9sIjpbInRlc3QiXSwiZXhwIjoxNjE2MjUyMTIwLCJpc3MiOiJ0ZXN0In0.g2jFqe0hDPumy8_gG7J3nYsuZ8KUz9SgZOecdBDhfns'
```
## 10.2. 新しいプラグインを作成する
これは lua を学習する場所ではありませんが、IAM を素早く再起動して新しい開発をテストする方法などのヒントをいくつか紹介します。
### 10.2.1. ファイル構造
```
kong-plugin-helloworld
├── kong
│ └── plugins
│ └── helloworld
│ ├── handler.lua
│ └── schema.lua
└── kong-plugin-helloworld-0.1.0-1.rockspec
```
表記法により、Kong プラグインには kong-plugin のプレフィックスを付ける必要があります。
この例では、プラグインの名前を helloworld とします。
次の 3 つのファイルは必須ファイルです。
* handler.lua: プラグインのコアです。 実装のインターフェースで、各関数は、リクエスト/接続のライフサイクルにおいて希望する時点で実行されます。
* schema.lua: プラグインはおそらく、ユーザーが入力した構成を維持する必要があります。 このモジュールは、その構成のスキーマを保持し、ユーザーが有効な構成値のみを入力できるようにルールを定義します。
* *.rockspec: Rockspec: 仕様ファイルのパッケージです。宣言的な Lua スクリプトで、ロック *.rockspec (テーブルが含まれる Lua ファイル)を構築してパッケージ化する方法に関するルールが含まれます。
#### 10.2.1.1. handler.lua
plugins インターフェースでは、handler.lua ファイル内の次のいずれかのメソッドをオーバーライドして、Kong の実行ライフサイクルのさまざまなエントリポイントにカスタムロジックを実装できます。
| 関数名 | フェーズ | 説明 |
| ---------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| :init_worker() | init_worker | Nginx ワーカープロセスが起動するたびに実行されます。 |
| :certificate() | ssl_certificate | SSL ハンドシェイクのSSL 証明書の配信フェーズで実行されます。 |
| :rewrite() | rewrite | rewrite フェーズハンドラーとしてクライアントからリクエストを受信するたびに、そのリクエストに対して実行されます。 注意: このフェーズでは、サービスもコンシューマも識別されていないため、このハンドラーはプラグインがグローバルプラグインとして構成されている場合にのみ実行されます。 |
| :access() | access | クライアントからのすべてのリクエストに対して、上流サービスにプロキシされる前に実行されます。 |
| :response() | access | header_filter() と body_filter() の両方を置き換えます。 上流サービスからレスポンス全体を受信した後、その一部をクライアントに送信する前に実行されます。 |
| :header_filter() | header_filter | 上流サービスからすべてのレスポンスヘッダーのバイトが受信されると実行されます。 |
| :body_filter() | body_filter | 上流サービスからレスポンス本文のチャンクを受信するごとに実行されます。 レスポンスはクライアントにストリーミングされるため、バッファーサイズを超過し、チャンクごとにストリーミングされる場合があります。 そのため、レスポンスが大きければ、このメソッドが何度も呼び出されることがあります。 詳細は、lua-nginx-module のドキュメントをご覧ください。 |
| :log() | log | レスポンスの最後のバイトがクライアントに送信されると実行されます。 |
##### 10.2.1.1.1. 例
```lua
local BasePlugin = require "kong.plugins.base_plugin"
local HelloWorldHandler = BasePlugin:extend()
function HelloWorldHandler:new()
HelloWorldHandler.super.new(self, "helloworld")
end
function HelloWorldHandler:access(conf)
HelloWorldHandler.super.access(self)
if conf.say_hello then
ngx.log(ngx.ERR, "============ Hello World! ============")
ngx.header["Hello-World"] = "Hello World!!!"
else
ngx.log(ngx.ERR, "============ Bye World! ============")
ngx.header["Hello-World"] = "Bye World!!!"
end
end
return HelloWorldHandler
```
#### 10.2.1.2. schema.lua
ポータルで表示される構成ファイルです。
```lua
return {
no_consumer = true,
fields = {
say_hello = { type = "boolean", default = true },
say_hello_body = { type = "boolean", default = true }
}
}
```
#### 10.2.1.3. *.rockspec
```rockspec
package = "kong-plugin-helloworld" -- hint: rename, must match the info in the filename of this rockspec!
-- as a convention; stick to the prefix: `kong-plugin-`
version = "0.1.0-1" -- hint: renumber, must match the info in the filename of this rockspec!
-- The version '0.1.0' is the source code version, the trailing '1' is the version of this rockspec.
-- whenever the source version changes, the rockspec should be reset to 1. The rockspec version is only
-- updated (incremented) when this file changes, but the source remains the same.
-- TODO: This is the name to set in the Kong configuration `plugins` setting.
-- Here we extract it from the package name.
local pluginName = package:match("^kong%-plugin%-(.+)$") -- "myPlugin"
supported_platforms = {"linux", "macosx"}
source = {
url = "https://github.com/grongierisc/iam-training",
branch = "master",
-- tag = "0.1.0"
-- hint: "tag" could be used to match tag in the repository
}
description = {
summary = "This a demo helloworld for Kong plugin",
homepage = "https://github.com/grongierisc/iam-training",
license = "Apache 2.0"
}
dependencies = {
"lua >= 5.1"
-- other dependencies should appear here
}
build = {
type = "builtin",
modules = {
["kong.plugins."..pluginName..".handler"] = "kong/plugins/"..pluginName.."/handler.lua",
["kong.plugins."..pluginName..".schema"] = "kong/plugins/"..pluginName.."/schema.lua",
}
}
```
### 10.2.2. 構築
ここでは、次の章と同じことを行います: [11.1.1. コミュニティプラグインで新しい Kong/IAM docker イメージを構築する](#1111-build-a-new-kongiam-docker-image-with-the-community-plugin)
ただし、このプラグインに適応させています。
Dockerfile :
```dockerfile
FROM intersystems/iam:1.5.0.9-4
USER root
COPY ./plugins /custom/plugins
RUN cd /custom/plugins/kong-plugin-jwt-crafter && luarocks make
RUN cd /custom/plugins/kong-plugin-helloworld && luarocks make
#USER kong #Stay with root use, we will see why later
```
環境変数でプラグインを有効にします。
```yml
KONG_PLUGINS: 'bundled,jwt-crafter,helloworld'
```
これで新しい IAM イメージをビルドします。
docker-compose build iam
そして docker-compose を起動してテストします。
### 10.2.3. ヒント
IAM コンテナを「デバッグモード」で実行し、コンテナの停止/再開を簡単に行えるようにするには、dockerfile を変更して、プラグインの追加/削除など行います。
iam サービスを次のようにして停止できます。
docker-compose stop iam
そして、シェルを使用して実行モードで起動します。
docker-compose run -p 8000:8000 -p 8001:8001 -p 8002:8002 iam sh
コンテナでは次のように行います。
./docker-entrypoint.sh kong
コーディングをお楽しみください :)
# 11. CI/CD

この記事も残り少なくなりました。
最後に、DevOps/CI/CD について話しましょう。 この章は、IAM/Kong 向けの CI/CD を実装/スクリプト化する方法について、いくつかのアイデアを提供することを目的としています。
Kong は第一に API であるため、すべての Rest 呼び出しをスクリプト化して、各環境で実行させるという考え方です。
postman とその親友の newman(postman のコマンドラインバージョン)を使用すると、Rest 呼び出しのスクリプト化を最も簡単に行うことができます。
## 11.1. postman コレクションを作成する
postman が便利な理由の 1 つは、Rest 呼び出しの前後でスクリプトを実行できるところにあります。
ほとんどの場合、この機能を使用します。
### 11.1.1. IAM が起動しているか
最初のスクリプトでは、IAM が稼働しているかどうかを確認します。

```javascript
var iam_url = pm.environment.get("iam_url");
var iam_config_port = pm.environment.get("iam_config_port");
var url = "http://" + iam_url + ":" + iam_config_port + "/";
SenReq(20);
async function SenReq(maxRequest) {
var next_request = "end request";
const result = await SendRequest(maxRequest);
console.log("result:",result);
if(result == -1)
{
console.error("IAM starting .... failed !!!!");
}
}
function SendRequest(maxRequest) {
return new Promise(resolve => {
pm.sendRequest(url,
function (err) {
if (err) {
if (maxRequest > 1) {
setTimeout(function () {}, 5000);
console.warn("IAM not started...retry..next retry in 5 sec");
SendRequest(maxRequest - 1);
} else {
console.error("IAM starting .... failed");
resolve(-1);
}
} else {
console.log("IAM starting .... ok");
resolve(1);
}
}
);
});
}
```
### 11.1.2. 古いデータを削除する
```javascript
var iam_url=pm.environment.get("iam_url");
var iam_config_port=pm.environment.get("iam_config_port");
pm.sendRequest("http://"+iam_url+":"+iam_config_port+"/plugins", function (err, res) {
if (err) {
console.log("ERROR : ",err);
}
else {
var body_json=res.json();
if(body_json.data)
{
for( i=0; i < body_json.data.length; i++)
{
// Example with a full fledged SDK Request
route_id = body_json.data[i].id;
const delete_route = {
url: "http://"+iam_url+":"+iam_config_port+"/plugins/" + route_id,
method: 'DELETE',
};
pm.sendRequest(delete_route, function(err, res){
console.log(err ? err : res);
});
}
}
}
});
```
ルート、サービス、およびコンシューマでも同じように行ってください。
ルートのあるサービスは削除できないため、この実行順序は重要です。
### 11.1.3. サービス/ルートを作成する
ルートはサービスに依存しています。 この種のケースでは、postman の Test 関数を使用してデータを取得することができます。

画面
スクリプト
var id = pm.response.json().id;
var name = pm.response.json().name;
pm.globals.set("service_crud_id", id);
pm.globals.set("service_crud_name", name);
ここで、レスポンスから、新しいサービスの ID と名前を保存します。
次に、次のルートの作成でそれらを使用します。
画面
スクリプト
service_crud_name = pm.globals.get("service_crud_name");
ここで、グローバル変数「service_crud_name」を取得します。
次に、それを実際の呼び出しで使用します。
画面
スクリプト
{
"paths": [
"/persons/*"
],
"protocols": [
"http"
],
"name": "crud-persons",
"strip_path": false,
"service": {
"name": "{{service_crud_name}}"
}
}
#### 11.1.3.1. ヒント
* ペイロードは json または form-data のいずれかです。
* form-data:

* json:

json 形式を簡単に取得するには、管理者ポータルに移動し、json を表示してコピーします。

## 11.2. newman で実行する
docker run --rm -v "`pwd`/ci/":"/etc/newman" \
--network="iam-training_default" \
-t postman/newman run "DevOps_IAM.postman_collection.json" \
--environment="DevOps_IAM.postman_environment.json"
お知らせ
Makiko Kokubun · 2021年1月26日
開発者の皆さん、こんにちは!
InterSystems 開発者コミュニティでは、2021/2/5(金)に、ウェビナーを開催致します。今回は、初めてインターシステムズのデータプラットフォーム製品をご覧になるソフトウェアエンジニアの方向けに、弊社のエンジニアが 30分でその特徴をご紹介します。
ウェビナー「InterSystems IRIS データプラットフォーム 概要」
日時:2021年2月5日(金)15:00~15:30
参加費:無料(事前登録制)
事前登録、ウェビナ配信はこちら(ON24を使用します)https://event.on24.com/wcc/r/2982378/17DE6BE0C44C34513F10A8D7C7B68FB0
以下のような開発者の方におすすめです。
初めてインターシステムズのデータプラットフォーム製品をお使いになる方、ご興味のある方
新しいデータプラットフォームを試してみたい方
Caché から IRIS への移行をご検討中の方
ぜひご視聴ください!
お知らせ
Toshihiko Minamoto · 2020年7月19日
この度、プレスリリースを行い、InterSystems開発者コミュニティを正式にオープンしました!
本サイトには、アナウンス、記事、質問とその回答、ビデオがあります。技術的な質問や回答はもちろん、インターシステムズ製品や技術を使った経験を記事として投稿できるようになっています。また、リリースノートや新機能の説明、体験談、技術的な事例も掲載されています。
なお、記事や質問、回答などの投稿にはメンバー登録が必要です。登録方法はこちらをご覧ください。弊社パートナー様はWRCアカウントのユーザ名、パスワードでもログインできます。
質問や回答、記事の投稿方法はこちらをご参照ください。
皆様のご利用をお待ちしております。
お知らせ
Mihoko Iijima · 2023年7月3日
開発者の皆さん、こんにちは!
InterSystems グランプリ・コンテスト2023の投票が開始されました!
🔥 ベストアプリケーションはこれだ!! 🔥と思う作品にぜひ投票をお願いします。
投票方法は以下ご参照ください。
Experts nomination:
インターシステムズの経験豊富な審査員がベストアプリを選び、Expert Nominationで賞品をノミネートします。
⭐️ @akoblov, Support Specialist⭐️ @Guillaume.Rongier7183, Sales Engineer⭐️ @Eduard.Lebedyuk, Senior Cloud Engineer⭐️ @Steve.Pisani, Senior Solution Architect⭐️ @Timothy.Leavitt, Development Manager⭐️ @Evgeny.Shvarov, Developer Ecosystem Manager⭐️ @Dean.Andrews2971, Head of Developer Relations⭐️ @Alex.Woodhead, Senior Systems Developer⭐️ @Andreas.Dieckow , Principal Product Manager⭐️ @Aya.Heshmat, Product Specialist⭐️ @Benjamin.DeBoe, Product Manager⭐️ @Robert.Kuszewski, Product Manager⭐️ @Carmen.Logue , Product Manager⭐️ @Jeffrey.Fried, Director of Product Management⭐️ @Luca.Ravazzolo, Product Manager⭐️ @Raj.Singh5479, Product Manager⭐️ @Patrick.Jamieson3621, Product Manager⭐️ @Stefan.Wittmann, Product Manager⭐️ @Steven.LeBlanc, Product Specialist⭐️ @tomd, Product Specialist⭐️ @Daniel.Franco, Interoperability Product Management
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 · 2023年11月15日
開発者の皆さん、こんにちは!
InterSystems Java プログラミングコンテスト 2023 のテクノロジーボーナス詳細が決定しましたのでお知らせします。
Java Native API の使用 - 2
Java PEX Interoperability - 4
Java XEP の使用- 2
LLM AI または LangChain の使用: Chat GPT, Bard and others - 3
InterSystems IRIS Cloud SQL の使用 - 3
Community Java libs: Hibernate and Liquibase - 2
Questionnaire - 2
Docker container の使用 - 2
IPM Package による配布 - 2
オンラインデモ- 2
InterSystems Community Idea の実装 - 4
InterSystems IRIS Java 関連のBug発見 - 2
コミュニティ(USコミュニティ)に記事を投稿する(最初の記事)- 2
コミュニティ(USコミュニティ)に2つ目の記事を投稿する - 1
初めて参加した方 - 3
YouTubeにビデオを公開 - 3
詳細は以下の通りです。
Java Native API - 2 points
InterSystems IRISは、JavaからInterSystems IRISと対話するための Java Native API ライブラリ提供しています。この機能を利用してアプリケーションを開発した場合、追加で2ポイント獲得できます。
Java Pex Interoperability - 4 points
InterSystems IRISは、JavaからInterSystems Interoperabilityを開発するためのオプションの1つとして、Java Pex Interoperability モジュールを提供しています。このモジュールを使用してアプリケーションを開発した場合、追加で4ポイント獲得できます。
デモアプリケーションはこちら:pex-demo
Java XEP の使用- 2
Java XEP は、InterSysetms Javaライブラリで、Javaオブジェクトの階層にハイパフォーマンスな永続化機能を提供できるライブラリです。このライブラリを使用した場合追加で2ポイント獲得できます。詳しくはInterSystems XEP による Java オブジェクトの永続化 をご参照ください。
Community Java libs: Hibernate and Liquibase - 2
Community Hibernate と Liquibase のライブラリを使用した場合、それぞれ2ポイント獲得できます。
LLM AI or LangChain usage: Chat GPT, Bard and others - 3 points
LangChain ライブラリまたは、ChatGPT、Bard、PaLM, LLaMA ような他のAIエンジンを使用してソリューションを構築した場合、追加で3ポイント獲得できます。AutoGPTの使用についても3ポイント獲得できます。
いくつかのサンプルが既にOpen Exchangeにあります:iris-openai, chatGPT telegram bot
記事はこちら👉 article with langchain usage example.
IRIS Cloud SQL の使用 -3 points
あなたのソリューションに InterSystems IRIS Cloud SQL を使用した場合、追加で3ポイント獲得できます。IRIS Cloudはこちらからデプロイできます。
Questionnaire - 2
アンケートにご協力お願いします!アンケートへのリンクは後日お知らせします。アンケートに回答いただくと2ポイント獲得できます。
Docker container の使用- 2 points
アプリケーションは、Docker コンテナで動作する InterSystems IRIS を使用する場合、2ポイント獲得できます。最もシンプルなテンプレートから開始することもできます。
テンプレートについての解説は、「IRISを手軽に使う3つの方法」(12:28~)をご参照ください。
ZPM (IPM)Package によるデプロイ - 2 points
以下のようにデプロイできる ZPM(InterSystems Package Manager)であなたのFull Stackアプリケーションを公開するとボーナスポイントを獲得できます。
zpm "install your-multi-model-solution"
上記コマンドをZPMクライアントがインストールされたIRISで実行します。
ZPM について/ZPM Documentation
あなたのプロジェクトをオンラインデモで公開した場合 - 2 points
オンラインデモとしてアプリケーションをクラウドにプロビジョニングすると、2ポイント獲得できます。
Implement Community Opportunity Idea - 4 points
InterSystems Community Ideas ポータルから、「Community Opportunity」ステータスを持つアイデアを実装した場合、4ポイント獲得できます。
Find a bug in InterSystems IRIS Java Offerings - 2 points
インターシステムズが提供するJavaアプリケーションをより広く採用していただくために、IRISを使用したJavaアプリケーションの開発中に直面するバグを報告していただき、修正することを推奨しています。バグは、 java-bugreports に提出してください。最初に再現できたバグに対して2ポイントを差し上げます。
New First Article on Developer Community - 2 points
コミュニティに応募したアプリケーションの概要を説明する記事を投稿すると2ポイントを獲得できます。
New Second Article on Developer Community - 1 point
2つ目の記事を投稿する、または投稿したアプリケーション概要の翻訳記事を投稿することで、さらボーナスポイントを獲得できます。(3記事以降はポイントが加算されません。)
First-Time Contribution - 3 points
今回のコンテストへの応募が初めての場合、3ポイント獲得できます。
Video on YouTube - 3 points
開発した作品の動画を作成し、YouTube に掲載した場合、3ポイント獲得できま
※ ボーナスポイントについては、変更される可能性もあります。予めご了承ください。
ぜひ、コンテストにチャレンジしてみてください!
お知らせ
Ayumu Tanaka · 2024年4月30日
インターシステムズは、InterSystems IRIS、InterSystems IRIS for Health、HealthShare Health Connect のメンテナンスバージョン 2022.1.5 および 2023.1.4 をリリースしました。
【2022.1.5】
2022.1.x に対するバグフィックスを提供しています。詳細な情報は、以下のページをご参照ください(すべて英語版です)
InterSystems IRISInterSystems IRIS for HealthHealthShare Health Connect
【2023.1.4】
2023.1.x に対するバグフィックスを提供しています。詳細な情報は、以下のページをご参照ください(すべて英語版です)
InterSystems IRISInterSystems IRIS for HealthHealthShare Health Connect
【キットのご案内】
本製品は、従来からのインストーラパッケージ形式と、コンテナイメージ形式をご用意しています。その一覧は、サポートプラットフォームページ(英語)をご覧ください。
インストーラパッケージは、WRC Direct から入手できます。InterSystems IRIS、IRIS for Health は IRIS ダウンロードページから、HealthShare Health Connect は HealthShare ダウンロードページから、それぞれ入手してください。
コンテナイメージは InterSystems Container Registry から入手できます。 コンテナイメージには 2022.1 と 2023.1 のタグが付けられています。
このリリースではコミュニティエディションのキットおよびコンテナイメージはございません。
各製品のバージョン番号は 2022.1.5.940.0、2023.1.4.580.0 です。
記事
Toshihiko Minamoto · 2021年8月9日
1 年ほど前、私のチーム(多数の社内アプリケーションの構築と管理、および他の部署のアプリケーションで使用するツールやベストプラクティスの提供を担う InterSystems のアプリケーションサービス部門)は、Angular/REST ベースのユーザーインターフェースを元々 CSP や Zen を使って構築された既存のアプリケーションに作りこむ作業を開始しました。 この道のりには、皆さんも経験したことがあるかもしれない興味深いチャレンジがありました。既存のデータモデルとビジネスロジックに新しい REST API を構築するというチャレンジです。
このプロセスの一環として、REST API 用に新しいフレームワークを構築しました。あまりにも便利であるため、自分たちだけに取っておくわけにはいきません。 そこで、Open Exchange の で公開することにしました。 今後数週間または数か月の間に、これに関する記事がいくつか掲載される予定です。それまでは、GitHub のプロジェクトドキュメント))に用意されたチュートリアルをご利用ください。
はじめに、設計の目標と意図についていくつか以下に示します。 すべての目標が実現したわけではありませんが、順調に進んでいます!
## 高速開発とデプロイ
REST アプローチは、Zen と同じアプリケーション開発のクイックスタートを提供し、一般的な問題を解決しながら、アプリケーション固有の特殊なユースケースに柔軟性を提供する必要があります。
* REST アクセスへの新しいリソースの公開は、Zen DataModel と同じくらい簡単である必要があります。
* REST リソースの追加/変更には、アクセスされているレベルでの変更が必要です。
* REST による永続クラスの公開は、継承と最小限のオーバーライドで行えるべきですが、ハンドコーディング相当の機能もサポートする必要があります。 (これは、%ZEN.DataModel.Adaptor と %ZEN.DataModel.ObjectDataModel に似ています。)
* エラー処理/レポート、シリアル化/逆シリアル化、検証などに関する一般的なパターンは、各アプリケーションの各リソースに対して再実装する必要があってはいけません。
* SQL クエリ、フィルタリング、順序付け、および高度な検索機能とページネーションのサポートは、各アプリケーションに再実装するのではなく、組み込みである必要があります。
* REST API はオブジェクトレベル(CRUD)でだけでなく、既存の API/ライブラリのクラスメソッドとクラスクエリに対しても簡単に構築できます。
## セキュリティ
セキュリティは、付け足しで行うものではなく、設計/実装時に断定的に決定するものです。
* REST 機能がクラス継承によって取得される場合、開発者が能動的にアクセスが必要な人とアクセス条件を指定するまでリソースにアクセスできない動作をデフォルトとします。
* SQL 関連機能の実装を標準化することで、SQL インジェクション攻撃の標的を最小にします。
* 設計には OWASP API トップ 10(参照: [https://owasp.org/www-project-api-security](https://owasp.org/www-project-api-security/))を考慮する必要があります。
## 持続可能性
アプリケーション設計の統一性はエンタープライズアプリケーションエコシステムにおいて強力なツールです。
* 多様なハンドコーディングされた REST API と実装を蓄積するのではなく、一連のポートフォリオを通じて外観が似通った REST API を作成しなければなりません。 この統一性により、次が達成されなければなりません。
* 共通のデバッグ手法
* 共通のテスト手法
* REST API に接続するための共通の UI 手法
* 複数の API にアクセスする複合アプリケーションの開発の簡便性
* REST を介して提供または受け入れられるオブジェクト表現のエンドポイントと形式は、エンドポイントに基づいて API ドキュメント(Swagger/OpenAPI)を自動的に生成できるほど十分に定義されている必要があります。
* 業界標準の API ドキュメントに基づき、サードパーティまたは業界標準のツールを使用して、クライアントコードの一部(REST 表現に対応する typescript クラスなど)を生成できるようにします。
お知らせ
Mihoko Iijima · 2022年5月8日
開発者の皆さん、こんにちは!
GW🎏明け、いつもとちょっと違うこと👀を始めてみるのはいかがでしょうか。
例えば、プログラミングコンテスト💰に応募してみる! などなど。
9日より、InterSystems グランプリ・プログラミングコンテストが始まります!このコンテストのお題は「InterSystems データプラットフォームの機能を使う」です。とにかく、InterSysetms IRIS を利用していたら応募できます!ぜひ、参加してみてください!
この記事では、コンテストで賞金を多く獲得するのに役立つ、テクノロジーボーナスについてご紹介します!
InterSystems FHIR - 5
IntegratedML - 4
Interoperability - 3
Production EXtension(PEX) - 4
Embedded Python - 5
Adaptive Analytics (AtScale) Cubes usage - 4
Tableau, PowerBI, Logi の利用 - 3
InterSystems IRIS BI - 3
Docker コンテナの利用 - 2
ZPM パッケージを利用したデプロイ - 2
オンラインデモ - 2
Unit Testing - 2
コミュニティに最初の記事を投稿する - 2
コミュニティに2つ目の記事を投稿する - 1
Code Quality をパスする - 1
YouTube にビデオを公開する - 3
InterSystems FHIR as a Service と IRIS For Health の利用 - 5 points
InterSystems IRIS FHIR Accelerator Service (FHIRaaS) を使用して新規アプリケーションの構築や既存アプリケーションのテストを行う開発者の方々を募集しています!ポータル にサインインし、デプロイメントを行い、プログラミングコンテストのアプリケーションで AWS 上の InterSystems FHIR Server を使い始めましょう。
また、InterSystems IRIS for Health docker 版を使用して FHIR アプリケーションを構築することもできます。docker イメージの構築中に FHIR server の準備ができる IRIS-FHIR-Template をご利用いただけます。FHIR API 4.0.1 のドキュメントは こちら です。FHIR サーバの準備について詳しくは InterSystems IRIS for Health ドキュメント(FHIRサーバ概要) をご参照ください。
IntegratedML の利用 - 4 points
1. あなたの AI/ML ソリューションに InterSystems IntegratedML を使用するとボーナスポイントを獲得できます。
InterSystems IntegratedML template
このテンプレートの使い方の日本語解説ビデオはこちらの記事にあります。
2. データインポートツール
データインポートウィザードの使い方(ドキュメント)
CSVGEN - CSV インポートユーティリティ(ZPMを使います)
CSVGEN-UI - CSVGEN の WebUI
3. ドキュメント
Using IntegratedML
4. オンラインコース & ビデオ:
Learn IntegratedML in InterSystems IRIS
Preparing Your Data for Machine Learning
Predictive Modeling with the Machine Learning Toolkit
IntegratedML Resource Guide
Getting Started with IntegratedML
Machine Learning with IntegratedML & Data Robot
SQLから始める機械学習 ~IntegratedMLのご紹介~
BPL/DTLを使用したプロダクションの作成 - 3 point
IRIS Interoperability プロダクション の重要な機能の1つは、BPL(Business Process Language)で記述できるビジネス・プロセスです。
ビジネス・プロセスのドキュメント:ビジネス・プロセスの定義
ビジネス・ルールは、Interoperability プロダクションのロジックをノーコード/ローコードのアプローチで管理できます。InterSystems IRIS では、視覚的に、また ObjectScript を使用してビジネス・ルールを作成できます。
あなたの Interoperability プロダクションの中で、ビジネス・プロセスやビジネス・ルールを使用してアプリケーションを開発された場合、ビジネス・プロセス/ビジネス・ルールのボーナスポイントを獲得できます。
Business Rule Example
ビジネス・ルールの開発(ドキュメント)
Production EXtension (PEX) の利用 - 4 points
PEX は、Interoperability プロダクションの Python、Java、 .NET 用拡張機能です。
あなたの Interoperability プロダクションの中で、Python、Java、.Net の PEX を使用した場合、ボーナスポイントを獲得できます。
PEX Demo.
PEX : Java および .NET によるプロダクションの開発
InterSystems IRIS には、Python Pex モジュールがあり、Pythonから InterSystems Interoperability プロダクションを開発するオプションが提供されています。あなたのアプリケーションで Python Pex を使用した場合、さらに追加で3ポイント獲得できます。 Guillaume Ronguier が紹介している 代替の python.pex wheel を使用してもOKです。
Embedded Pythonの利用 - 4 points
あなたのアプリケーションに Embedded Python を使用した場合、ボーナスポイントを獲得できます。Embedded Python を利用するためには、InterSystems IRIS 2021.2 以降をご利用ください。
Embedded Pythonを簡単にご紹介します
Embedded Python 試してみました
Embedded Python を使ってレシート(JPG)の中身を IRIS に登録してみました
Embedded Python で Excel のデータを IRIS グローバルに格納する方法
Adaptive Analytics (AtScale) Cubes の利用 - 4 points
InterSystems Adaptive Analytics は、分析ソリューションに AtScale キューブを作成および使用するオプションが用意されています。
あなたは、キューブの使用や作成のためにコミュニティが用意したコンテスト用AtScale サーバを使用できます。また、JDBC経由であなたのIRIS サーバからそのサーバにアクセスできます(URLと認証情報はDiscord Channel で入手できます)。
あなたのAtScaleを使用した分析ソリューションの可視化レイヤは、TableauやPower BI、エクセル、Logiで作成できます。
Documentation, AtScale documentation
Training
Tableau, PowerBI, Logi の利用 - 3 points
Tableau や PowerBI、Logi を使用して可視化を行うと、ボーナスポイントを獲得できます。
可視化は、IRIS BI サーバを使用するか、AtScake との接続により行うことができます。
Logi は、InterSystems Report ソリューションとして利用できます。あなたは、InterSystems WRC よりコンポーザーをダウンロードできます。テンポラリライセンスは、discord channelで入手できます。
Documentation
Training
InterSystems IRIS BI の利用 - 3 points
InterSystems IRIS Business Intelligence は、IRIS の機能で IRIS に格納されているデータに対して BI キューブやピボットを作成でき、その情報をインタラクティブなダッシュボードを使用してユーザに情報提供できます。
Learn more
iris-analytics-template には、IRIS BIキューブ、ピボット、ダッシュボードの例が含まれています。
テンプレートの使い方については、日本語ビデオで解説しています。こちらの記事をご参照ください。
以下、IRIS BI ソリューションの例です。
Samples BI
Covid19 analytics
Analyze This
Game of Throne Analytics
Pivot Subscriptions
Error Globals Analytics
Creating InterSystems IRIS BI Solutions Using Docker & VSCode (video)
The Freedom of Visualization Choice: InterSystems BI (video)
InterSystems BI(DeepSee) Overview (online course)
InterSystems BI(DeepSee) Analyzer Basics (online course)
Docker コンテナの利用 - 2 points
docker コンテナで InterSystems IRIS を稼働させた場合、ボーナスポイントを獲得できます。初めて利用される方向けのシンプルなテンプレートをご用意しています。
テンプレートの概要については、日本語解説ビデオ(12:27~)があります。
ZPM パッケージによるデプロイメント - 2 points
フルスタックアプリケーションの ZPM(ObjectScript Package Manager) パッケージをビルドして公開し、一緒にデプロイできるようにすると、ボーナスポイントを獲得できます。
zpm "install your-multi-model-solution"
ZPM クライアントをインストールして IRIS にログインしてコマンドを実行します。
ZPM について/ZPM Documentation
オンラインデモ公開 - 2 points
オンラインデモとしてアプリケーションをクラウドにプロビジョニングすると、ボーナスポイントを獲得できます。
開発環境テンプレートやその他のデプロイメントオプションを使用することができます。例
サンプルアプリケーションの使用方法についてはビデオをご参照ください。
Unit Testing - 2 points
InterSystems IRIS のコードに Unit Test が実施されているアプリケーションは、ボーナスポイントを獲得できます。
Unit Test について詳しくは、ドキュメントやコミュニティをご参照ください。
コミュニティに初めて記事を投稿する - 2 points
コミュニティに応募したアプリケーションの概要を説明する記事を投稿するとポイントを獲得できます。
コミュニティに2つ目の記事を投稿する - 1 point
2つ目の記事を投稿する、または投稿したアプリケーション概要の翻訳記事を投稿することで、さらボーナスポイントを獲得できます。(3記事以降はポイントが加算されません。)
Code quality pass with zero bugs - 1 point
コードの静的制御のために、code quality Github action 組み込み、ObjectScript のバグが0の場合 ボーナスポイントを獲得できます。
Video on YouTube - 3 points
開発した作品の動画を作成し、YouTube に掲載した場合、3ポイント獲得できます。
上記ボーナスポイントの一覧は変更となる可能性もあります。
お知らせ
Mihoko Iijima · 2023年8月29日
開発者の皆さん、こんにちは!
InterSystems Python プログラミングコンテスト 2023 のテクノロジーボーナス詳細が決定しました!
Embedded Python - 3
Python Native API - 3
Python Pex Interoperability - 4
Python libs: sqlalchemy and dbt - 2
LLM AI or LangChain usage: Chat GPT, Bard and others - 4
NoObjectScriptLine - 5
Questionnaire - 2
Docker コンテナの利用 - 2
ZPM Package によるデプロイ - 2
オンラインデモ - 2
コミュニティ(USコミュニティ)に記事を投稿する(最初の記事) - 2
コミュニティ(USコミュニティ)に2つ目の記事を投稿する - 1
YouTubeにビデオを公開 - 3
詳細は以下の通りです。
Embedded Python - 3 ポイント
応募されるアプリケーションに Embedded Python を使用している場合、4ポイント獲得できます。Embedded Python を利用する場合は、IRIS 2021.2以降のバージョンをご利用ください。
Python Native API - 3 ポイント
InterSystems IRIS は、PythonからIRISを操作するための Python Native API ライブラリを提供しています。最新のPythonコミュニティドライバ をチェックすることで、一般的なPythonライブラリ(sqlalchemy、dbt)などの最新サポートが得られます。このドライバを使用してアプリケーションを開発した場合3ポイント獲得できます。
Python Pex Interoperability - 4 ポイント
InterSystems IRIS には Python Pex 相互運用性モジュールがあり、Pythonから InterSystems Interoperability プロダクションを開発することができます。このモジュールを使用することで、3ポイント獲得できます。この他に、Guillaume Ronguierが開発した代替の python.pex wheel を使用した場合もボーナスポイントを獲得できます。
Python libs: sqlalchemy and dbt - 2ポイント
IRISコミュニティライブラリの sqlachemy や dbt を使用した場合、それぞれの利用に対して2ポイント獲得できます。
LLM AI or LangChain usage: Chat GPT, Bard and others - 4 ポイント
ChatGPT、Bard、 PaLM、LLaMA などのAIエンジンのような LangChain ライブラリや Large Language Models (LLM) を使用したソリューションを構築すると、6ポイント獲得できます。AutoGPT の使用もカウントされます。 すでにいくつかの例がOpen Exchangeにあります:iris-openai, chatGPT telegram bot
記事例はこちら👉https://community.intersystems.com/post/langchain-fixed-sql-me
Pure Python(NoObjectScriptLine) - 5 ポイント
このコンテストではいくつかの PythonAPI を紹介しています。InterSystems IRISでPythonを利用したソリューションの中で、ObjectScriptを1行も使用しないで開発した場合、5ポイントを獲得できます。また、IRISのクラス定義内メソッドがEmbedded Pythonで記述されている場合も5ポイント獲得できます。
Questionnaire - 2 ポイント
アンケートにご協力をお願いします!アンケートへのリンクは後日お知らせします。
Docker コンテナの利用 - 2 ポイント
アプリケーションは、Docker コンテナで動作する InterSystems IRIS を使用する場合、2ポイント獲得できます。最もシンプルなテンプレートから開始することもできます。
テンプレートについての解説は、「IRISを手軽に使う3つの方法」(12:28~)をご参照ください。
ZPM Package によるデプロイ- 2 ポイント
以下のようにデプロイできる ZPM(InterSystems Package Manager)であなたのFull Stackアプリケーションを公開するとボーナスポイントを獲得できます。
zpm "install your-multi-model-solution"
上記コマンドをZPMクライアントがインストールされたIRISで実行します。
ZPM について/ZPM Documentation
あなたのプロジェクトをオンラインデモで公開した場合 - 2 ポイント
オンラインデモとしてアプリケーションをクラウドにプロビジョニングすると、2ポイント獲得できます。開発環境テンプレートやその他のデプロイメントオプションを使用することができます。例サンプルアプリケーションの使用方法についてはビデオをご参照ください。
Developer Communityに記事を初めて投稿する - 2 ポイント
コミュニティに応募したアプリケーションの概要を説明する記事を投稿すると2ポイントを獲得できます。
Developer Communityに2つ目の記事を投稿する - 1 ポイント
2つ目の記事を投稿する、または投稿したアプリケーション概要の翻訳記事を投稿することで、さらボーナスポイントを獲得できます。(3記事以降はポイントが加算されません。)
Video on YouTube - 3 ポイント
開発した作品の動画を作成し、YouTube に掲載した場合、3ポイント獲得できま
※ ボーナスポイントについては、変更される可能性もあります。予めご了承ください。
ぜひ、コンテストにチャレンジしてみてください!
お知らせ
Seisuke Nakahashi · 2023年10月20日
インターシステムズは、InterSystems IRIS、InterSystems IRIS for Health、HealthShare Health Connect のメンテナンスバージョン 2022.1.4 および 2023.1.2 をリリースしました。
【2022.1.4】
2022.1.x に対するバグフィックスを提供しています。詳細な情報は、以下のページをご参照ください(すべて英語版です)
InterSystems IRISInterSystems IRIS for HealthHealthShare Health Connect
【2023.1.2】
2023.1.x に対するバグフィックスを提供しています。詳細な情報は、以下のページをご参照ください(すべて英語版です)
InterSystems IRISInterSystems IRIS for HealthHealthShare Health Connect
【キットのご案内】
本製品は、従来からのインストーラパッケージ形式と、コンテナイメージ形式をご用意しています。その一覧は、サポートプラットフォームページ(英語)をご覧ください。
インストーラパッケージは、WRC Direct から入手できます。InterSystems IRIS、IRIS for Health は IRIS ダウンロードページから、HealthShare Health Connect は HealthShare ダウンロードページから、それぞれ入手してください。
コンテナイメージは InterSystems Container Registry から入手できます。
このリリースではコミュニティエディションのキットおよびコンテナイメージはございません。
各製品のバージョン番号は 2022.1.4.812.0、2023.1.2.450.0です。
お知らせ
Mihoko Iijima · 2022年10月11日
開発者の皆さん、こんにちは!
次のコンテストの詳細が決定しましたのでお知らせします📣
今回は、FHIRの知識を共有するためのコンテストを企画しています。
🏆 InterSystems IRIS for Health コンテスト: FHIR for Women's Health 🏆
InterSystems FHIR または、InterSystems Healthcare Interoperability を使用したアプリケーションを作成してご応募ください。
期間: 2022年11月14日~12月4日
賞金: $13,500!
>> 応募はこちらから! <<
コンテストのテーマ
💡 Healthcare Interoperability ソリューション – FHIR 💡
Interoperability FHIRソリューションまたは、Healthcare Interoperability ソリューション、または、InterSystems IRIS for Health、Health Connect、FHIR サーバを使用した Interoperability ソリューションの開発や保守を支援するソリューションを開発してください。
また、グローバルイシューの1つの解決にチャレンジいただきたいと思います。今回は、「Women's Health」についてがテーマです。
以下の課題解決を目指したソリューションの構築を行っていただくと、ボーナスポイントを獲得できます。
妊娠中の患者が、妊娠中の症状の傾向を把握できたり、パートナーアプリケーションに対して症状や妊娠中の日誌を共有するような統合機能が含まれるソリューション
女性のデジタルヘルスに関連するFHIRデータセット(妊娠追跡・モニタリング、子育て支援、更年期患者教育)が含まれるソリューション
要件:
応募可能なアプリケーション
Open Exchange アプリケーションの新規作成、または既存アプリケーションであっても大幅に改善されているものであればご応募いただけます。
コミュニティの担当チームは、コンテストへの応募を承認する前に申請された全アプリケーションをレビューします。
全てのアプリケーションは、IRIS for Health Community Edition か、Health Connect Cloud で動作する必要があります。
アプリケーションはオープンソースであり、GitHubで公開されている必要があります。
アプリケーションの README ファイルは、英語で記述してください(日本語で記述したものがあればそのまま掲載いただき、英文の追記をお願いします。翻訳アプリを使用しますが翻訳をお手伝いすることもできますのでお気軽にお知らせください!)。また、インストール手順や、アプリケーションがどのように動作するかの説明、またはビデオデモを含めてください
🆕 入賞特典:
1. Experts Nomination – 審査員から多く票を集めたアプリケーションには、以下の賞金が贈られます
🥇 1位 - $5,000
🥈 2位 - $3,000
🥉 3位 - $1,500
🏅 4位 - $750
🏅 5位 - $500
🌟 6-10位 - $100
2. Community winners – 開発者コミュニティで多く票を集めたソリューションには、以下の賞金が贈られます。
🥇 1位 - $1,000
🥈 2位 - $750
🥉 3位 - $500
複数の参加者が同数の票を獲得した場合、全参加者が勝者となり賞金は勝者間で分配されます。
スケジュール
🛠 アプリケーション開発と応募期間:
2022年11月14日 (00:00 EST): コンテスト開始!
2022年11月27日 (23:59 EST): 応募締め切り日
✅ 投票期間:
2022年11月28日 (00:00 EST): 投票開始!
2022年12月4日 (23:59 EST): 投票締め切り日
応募、投票期間中、アップロードしたアプリケーションは改良できます。
参加資格:
どなたでもご参加いただけます!(InterSystems 開発者コミュニティのアカウントを作成するだけでご応募いただけます)
👥 開発者がチームを組んで共同でアプリケーションを作成し、応募することもできます! 1チーム 2~5名 までご参加いただけます。
チームでご応募いただく場合は、アプリケーションの README にチームメンバー名の記載をお忘れなく!!(開発者コミュニティのプロファイルのリンクもお願いします)
Helpful Resources:
✓サンプルアプリケーション:
FHIR Server Template
iris-healthtoolkit-template
interoperability-embedded-python
FHIR HL7 SQL Demo FHIR DropBox
HL7 and SMS Interoperability Demo
IrisHealth Ensdemo
UnitTest DTL HL7
Healthcare HL7 XML
FHIR Interoperability Examples
FHIR-Orga-dt
FHIR Peudoanonimisation Proxy
FHIR-client-java
FHIR-client-.net
FHIR-client-python
FHIR related apps on Open Exchange
HL7 applications on Open Exchange
FHIR R4 リソースリポジトリを簡単にお試しいただける開発環境テンプレートのご紹介
✓ オンラインコース:
FHIR Integrations
HL7 Integrations
Learn FHIR for Software Developers
Exploring FHIR Resource APIs
Using InterSystems IRIS for Health to Reduce Readmissions
Connecting Devices to InterSystems IRIS for Health
Monitoring Oxygen Saturation in Infants
FHIR Integration QuickStart
✓ ビデオ
6 Rapid FHIR Questions
SMART on FHIR: The Basics
Developing with FHIR - REST APIs
FHIR in InterSystems IRIS for Health
FHIR API Management
Searching for FHIR Resources in IRIS for Health
【InterSystems Japan Virtual Summit 2021】HL7 FHIRによるインターオペラビリティ(YouTubeプレイリスト)
REST クライアントから FHIR R4 リソースリポジトリにアクセスする例
✓ For beginners with IRIS:
Build a Server-Side Application with InterSystems IRIS
Learning Path for beginners
【はじめての InterSystems IRIS】セルフラーニングビデオ 索引
【はじめてのInterSystems IRIS】Interoperability(相互運用性)を使ってみよう!
✓ 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
✓ コンテストへの応募方法
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」ボタンが表示されるので、クリックすると応募が完了します。
記事
Tomoko Furuzono · 2021年6月29日
これは、InterSystems FAQサイトの記事です。以下の7つの技術を用いて、VB.NETからInterSystems IRISへ接続し使用することができます。
(A) InterSystems IRIS ADO.NET Managed Provider を利用するInterSystems ADO.NET Managed Provider では、ADO.NET 準拠データベースとして InterSystems IRIS にアクセスでき、データへの簡単なリレーショナル・アクセスを提供します。特に ADO.NET を以前に使用したことのあるユーザにお勧めです。詳細は、以下ドキュメントをご参照ください。InterSystems IRIS ADO.NET Mnaged Providerについて
(B) XEP を利用する。.NETアプリケーションで作成したオブジェクトをそのまま InterSystems IRISへオブジェクトとして保存できます(オブジェクトをテーブルに変換する処理は行われません)。また、登録対象オブジェクトが格納された配列全体を1度に更新することもできるため、シンプルなオブジェクトの構造であれば、データの大量更新に優れたパフォーマンスを発揮します。詳細は、以下ドキュメントをご参照ください。InterSystems IRIS XEP による.NETオブジェクトの永続化について
(C) Native APIを利用するテーブルでもなくオブジェクトでもない、グローバル変数に対するダイレクトなアクセスを行う場合に利用できます。
(D) Entity Frameworkを利用する.NET側で Entity Franeworkを利用した複雑なオブジェクトモデルを利用している場合は、Entity Frameworkによる接続が最適です。Entity FrameworkはADO.NETの拡張機能であるため、.NET側でオブジェクトからの変換が行われInterSystems IRISへはSQLが渡されます。同じオブジェクトを利用するXEPと比較して複雑なオブジェクトモデルを簡単に処理できる利点がありますが、リアルタイムに大量データを更新する処理には向いていません。詳細は、以下ドキュメントをご参照ください。InterSystems IRIS Entity Framework Provider の使用法について
(E) WebServiceを使用するSOAP (Simple Object Access Protocol) に対する完全なサポートを提供していますので、.NETからも利用できます。詳細は、以下ドキュメントをご参照ください。WebサービスおよびWebクライアントの作成について
(F) RESTを使用するInterSytsems IRISにRESTインターフェースを提供するためのディスパッチクラスの作成すれば.NETからも利用できます。詳細は、以下ドキュメントをご参照ください。InterSYstems IRISでのRESTインターフェースの開発について
(G) ODBC経由で接続する他の技術からの接続と同様に、ODBC経由での接続ができます。