#チュートリアル

0 フォロワー · 39 投稿

技術的な機能またはソリューションの段階的な説明を含む投稿。

記事 Mihoko Iijima · 10月 16, 2025 1m read

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

この記事では、Developer Hub にまたまた新チュートリアル:InterSystems IRIS for Health:デジタルヘルスの相互運用性 が追加されましたので、体験内容についてご紹介します。(準備不要でブラウザがあれば試せるチュートリアルです!)

チュートリアルでは、InterSystems IRIS for Health を使用しているのですが、IRIS for Health の持つ機能により以下のような相互運用性シナリオを作成できます。

  • HL7、CDA、FHIR、DICOM のデータルーティングを管理
  • HL7 から FHIR への変換、CDA から HL7 への変換、FHIR から CDA への変換
  • 異なるシステムと API との間のデータフローを確立

チュートリアルの中では、あるシステムから入力される HL7 メッセージを他のシステムに送信する流れをご体験いただけます。

また、データ変換が必要な場合の対応方法や HL7 メッセージの一部をテーブルに保存する流れなどもご体験いただけます。

例)HL7 メッセージの一部をテーブルに格納

アカウント作成やログインも不要で  ボタンをクリックするだけで始められます👍

ぜひ、お試しください!​​​​​​

0
0 20
記事 Mihoko Iijima · 10月 9, 2025 1m read

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

この記事では、Developer Hub にあるチュートリアルに新しいチュートリアル:InterSystems IRIS ベクトル検索を使用した RAG が追加されましたので内容をご紹介します。(準備不要でブラウザがあれば試せるチュートリアルです!)

このチュートリアルでは、生成 AI アプリケーションの精度向上に向けて、ベクトル検索と検索拡張生成(Retrieval Augmented Generation)の活用を体験できます。

具体的には、InterSystems IRIS のベクトル検索機能を活用し、生成 AI チャットボット向けのナレッジベースをサンプルコードを利用して作成します。

また、Streamlit を使用して作成したチャットボットを動かしながら、ナレッジベースの情報を追加することで生成 AI からの回答が変化していくことを確認していきます。

アカウント作成やログインも不要で  ボタンをクリックするだけで始められます👍

チュートリアルへのリンクは「開発者コミュニティのリソース」からも辿れます!

ぜひ、お試しください!​​​​​​

0
0 33
記事 Hiroshi Sato · 12月 18, 2024 1m read

Caché技術ガイドのいくつかをIRIS版に書き換えた文書を作成しましたので公開します。

IRISファーストステップガイド
IRISBasicTechnologyGuide

- ObjectScript操作ガイド

- オブジェクト操作ガイド

- 多次元データエンジンの概念およびアーキテクチャー
IRIS SQLガイド

0
2 123
記事 Takao Otokita · 5月 26, 2024 13m read

はじめに

IRIS BIチュートリアル試してみたシリーズの11回目です。ついに今回が最終回になります。
最終回のトピックは「ピボット・テーブルおよびダッシュボードのエクスポートとパッケージ化」です。これまでに作成したピボットテーブルやダッシュボードをエクスポートして他の環境などに移送するためのテクニックを学びます。
では、早速はじめていきましょう。

ピボット・テーブルおよびダッシュボードのエクスポートとパッケージ化

0
0 92
記事 Takao Otokita · 5月 19, 2024 7m read

はじめに

IRIS BIチュートリアル試してみたシリーズの10回目です。
今回はチュートリアル最後のページ「ピボット・テーブルおよびダッシュボードの作成とパッケージ化」についてです。
これまでアーキテクトとアナライザを使用してきましたが、今回はユーザポータル画面を使ってダッシュボードを作成していきます。
では、早速はじめていきましょう。

ピボット・テーブルの作成

0
0 68
記事 Takao Otokita · 5月 12, 2024 6m read

はじめに

IRIS BIチュートリアル試してみたシリーズの9回目です。
今回は、チュートリアル全6ページのうちの5ページ目、「サブジェクト領域の作成」について試していきます。
「サブジェクト領域」という新しい概念が出てきますが、どんなものかを触りながら理解していきます。
では、早速はじめていきましょう。

サブジェクト領域の作成

0
0 90
記事 Takao Otokita · 5月 6, 2024 8m read

はじめに

IRIS BIチュートリアル試してみたシリーズの8回目です。このシリーズもだいぶ長くなってきました。
今回も、前回に引き続きチュートリアルの「キューブ定義の拡張」ページの内容です。
最後に残った2つのトピックについて進めていきます。では、はじめていきましょう。

置換の定義

タイトルには「置換」とありますが、ディメンジョンのレベルを集約した新しいレベルを作成する方法、と理解していただくのがよいかもしれません。
2回目の記事でちょっとだけ触れた Age Group と Age Bucket レベルを作成していきます。
まず Age Group レベルを作成します。こちらは以下のような3つのグルーピングになります。

  • 0 to 29:30歳未満の患者
  • 30 to 59:30歳から59歳までの患者
  • 60+:60歳以上の患者
0
0 86
記事 Takao Otokita · 4月 23, 2024 6m read

はじめに

IRIS BIチュートリアル試してみたシリーズの6回目です。
今回からは、全6ページのうちの4ページ目「キューブ定義の拡張」に入っていきます。
前回まではメジャーやディメンジョンなど、基本的なキューブの構成要素を作成しましたが、さらにキューブを使いやすくするための機能について学んでいきます。
では、早速はじめましょう。

階層へのレベルの追加

0
0 98
記事 Takao Otokita · 4月 17, 2024 8m read

はじめに

IRIS BIチュートリアル試してみたシリーズの5回目です。
今回も、前回同様チュートリアルの「キューブの作成」ページになります。
前回はキューブを作成し、そのキューブを使用していくつかのピボットテーブルを作成しました。
その中で気になった点を今回は修正していきます。では、はじめていきましょう。

キューブの調整

前回の作業の中で、ピボットテーブル作成時に気になった点は以下のものがありました。

  • Age メンバの並び順が数値の順になっていない
  • 担当医師不在の場合に、医師名に「,」のみ表示される
  • 同姓同名の医師が存在した場合に、データが一緒くたになってしまう

では、これらを解消していきましょう。アーキテクト画面で Tutorial キューブを開きます。
キューブが開いたら、 Age レベルをクリックし、続いて [要素を追加] をクリックします。
 
要素名に AgeSort と入力し、要素選択は プロパティ を指定します。
 
AgeSort プロパティができました。

 
では、AgeSort プロパティの詳細設定を変えます。詳細ペインの [表現] に以下の式を設定します。

$CASE($LENGTH(%source.Age),2:%source.Age,:"0"_%source.Age)
0
0 115
記事 Takao Otokita · 4月 11, 2024 7m read

はじめに

IRIS BIチュートリアル試してみたシリーズの4回目です。
今回からはチュートリアルの3ページ目、「キューブの作成」に沿って進めていきます。
では、早速はじめていきたいと思います。

基本的なキューブの作成

キューブの作成はアーキテクト画面から行います。
管理ポータル画面のメニューで、 Analytics → アーキテクト を選択します。
 
アーキテクト画面が開きました。1回目の記事の作業のときに Patientsキューブを開いたので、私の環境では再びPatientsキューブが表示されました。
新しいキューブを作成しますので、[新規] ボタンをクリックします。

 
ダイアログが開いたら、以下のように指定していきます。

  • 定義タイプ:キューブ
  • キューブ名:Tutorial
  • ソースクラス:BI.Study.Patient
  • キューブのクラス名:Tutorial.Cube
0
0 88
記事 Takao Otokita · 4月 7, 2024 8m read

はじめに

IRIS BIチュートリアル試してみたシリーズの3回目です。
チュートリアルの「キューブ要素の概要」ページの続きを行います。
前回同様、アナライザを操作しながらキューブの要素について説明していきます。
では、早速はじめていきましょう。

Allメンバ

0
0 129
記事 Takao Otokita · 4月 1, 2024 5m read

はじめに

IRIS BIチュートリアル試してみたシリーズの2回目です。
今回は、前回の作業でセットアップしたサンプルキューブやデータを用いてアナライザを操作します。
アナライザは、IRIS BIのキューブ等を基にピボットテーブルを作成する機能です。Excelのピボットテーブルをご存知でしたらイメージがつきやすいかもしれません。
では、早速はじめていきたいと思います。

アナライザ画面の説明

まずはアナライザ画面を開きます。管理ポータル画面のメニューから、 Analytics → アナライザ を選択します。
 

以下のような画面が表示されます。アナライザ画面は大きく3つの領域から成り立っています。

  • モデル・コンテンツ領域:選択したキューブのコンテンツがリスト表示される
  • ピボット・ビルダ領域:ピボットテーブル作成のための項目を指定する
  • ピボット・プレビュー領域:ピボットテーブルの結果が表示される

 
モデル・コンテンツ領域の説明

0
0 145
記事 Takao Otokita · 3月 25, 2024 5m read

はじめに

開発者コミュニティのみなさん、こんにちは。
IRISには組み込みのビジネスインテリジェンス機能であるIRIS BIが備わっております。
ただし、使い方がよく分からないということから利用に至ってない方もいらっしゃるのではないでしょうか。
幸いなことに、オンラインドキュメントの中にはIRIS BIの開発者向けチュートリアルのページがあり、それに沿って作業するとIRIS BIの簡単な概要を理解することができます。
ですので、これから数回に分けてチュートリアルを実行した結果を紹介し、IRIS BIの機能や使い方について知っていただければと思います。
初回は、チュートリアル用のネームスペースにサンプルのデータやキューブなどを作成する準備作業について説明します。
なお、使用した環境ですが、Windows PC(OS: Windows 10)にIRIS 2024.1のコミュニティエディション(コンテナ版)で行っております。

ファイルのダウンロードと解凍

0
0 147
記事 Toshihiko Minamoto · 2月 26, 2024 10m read

   

Hello, community!

IrisApiTester アプリを作成した後、それにもっと可能性があることに気付き、いくつか調整することで強力なコラボレーションツールになるのではないかと考えました。

そこで、以下の事について検討してみました。

  • API コレクションをチーム全体で共有できるか?
  • ユニットテストの実行に使用できるか?
  • 統合テストにはメリットがあるか?
  • CI/CD 継続的インテグレーションレイヤーを追加するとどうなるか?

可能な答えを考えた末、試してみることにしました。 作業を終えると、すべての回答が(ある程度)肯定であることがわかりました。 最終的には、この記事を書いて、この経験を皆さんと共有することに決めました。 知識の交換に役立ち、できればアプリケーションを一緒に改善していければと思います。

この記事は役に立つと思います。 新しいアプリケーションを検討するきっかけになるかもしれませんし、アジャイルな方法で実行できることを知らなかったテストを、このヒントでやっと実行できるようになることに気付くでしょう。

簡潔にするために、この記事を複数のセクションに分けています。 そのため、直接必要な箇所を読むことも、全文を読むこともできるように構成されています。

手順にしたがってテストを実行する場合は、すでに IrisApiTester Docker イメージをダウンロード済みで、インスタンスを実行していることが前提です。 そうでない場合は、必要なデータは以前に書いた記事に含まれています:

https://community.intersystems.com/post/iris-api-tester

 

ポイント 1 - チーム間で Postman コレクションを共有する:

最初に考えたのは、自分の Postman コレクションをテストと共に同僚全員と共有できるのか、ということです。その解決策は思った以上にかなり単純なものでした。

1 つまたは複数の API コレクションを含むリポジトリに Postman を接続できることがわかったのです。 同時に、Postman には、ターミナルなどに切り替えずに Postman からコレクションの更新、コミット、およびその他の操作の実行を行える Git クライアントも含まれていました。 みんなは知っていたことかもしれませんが、私は知りませんでした (^^;)

さぁ、準備はいいですか?! これから、API コレクションを含むリポジトリに Postman を接続する方法を説明します。

例として、GitHub にリポジトリを作成しました。 また、Bitbucket にも作成したので、 そちらのサービスの方が好みの場合は、それを使うこともできます。 私のリポジトリへのリンクです:

https://github.com/daniel-aguilar-garcia/postman-collection-test

必要であれば、フォークできます。 コレクションには、IrisApiTester のローカルインスタンス(localhost)にある Docker コンテナーを指す単純なテストがいくつか含まれています。

まず、リポジトリに Postman を接続します。

Postman を開き、「APIs」をクリックして API を作成します。

次に、コレクションの名前を選択して、GitHub アイコン(または Bitbucket)をクリックします。

認証を求められる場合があります。 求められたら、自分の GitHub ユーザーに接続することを許可してください。

許可したら、GitHub ユーザー、API を保存するリポジトリ、およびリポジトリのブランチを選択します。

(新規リポジトリでない場合は)接続が完了すると、リポジトリに含まれる API コレクションが表示されます。

API 内のすべてのコレクションはメニューにも表示されます。

コレクションを変更すると、Git セクションがすぐに更新されるため、 コミット、プル、プッシュなどの操作を実行できます。

Postman の有料ライセンスを使用している場合は、共有ワークスペースを作成するだけで開発チーム全員と接続することができますが、 無料のアカウントを使用している場合は、開発チームのすべてのコンピューターで上記のすべての手順を繰り返す必要があります。

上記の手順によって、チームメンバーとコレクションを共有し、最新状態に維持するという最初のポイントを完了しました。 唯一の欠点は、無料アカウントを使用している場合に生成できる API が 3 つまでということです。 その場合は、同じリポジトリにすべてのコレクションを配置すると、問題を介できます。

 

ポイント 2 - ユニットテスト:

次に解決する課題は、API テストだけでなく、ユニットテストの実行にもツールを使用する方法に関係しています。 この時点で、新しいエンドポイントをテストごとに作成せずに、一番速くテストを生成する方法は何かについて考えてみました。その答えが以下です。

ウェブアプリを /run パスに作成しました。

また、API のクラスも作成しました。 次のルートを作りました(リポジトリでは、Example パッケージの TestRoutes.cls クラスです)。

このウェブアプリとルートを使用すると、すべてのクラスにいわゆる「自動公開」メソッドを確立できます。 API にクラストとメソッド名を渡すだけでこれを達成できます。 以下の例を見てください。

localhost:52773/run/IrisNewman.Example.TestMethods/TestOK

この場合、以下のように指定しました。

/run -> ウェブアプリのパス

/IrisNewman.Example.TestMethods -> 実行するメソッドが配置されるクラス

/TestOK -> 実行するメソッド

TestOK メソッドでは、ユニットテストの単純なチェック操作が実行されます。

ClassMethod TestOK() As%Status
{
    Set testNumber = 1Set a = 1Set b = 2Set res = ..SumNumbers(a,b)

    Do..assert(res,3,$G(%methodname),testNumber)

    Quit$$$OK
}

 

このクラスでは、独自の assert メソッドを定義しているのが特徴です。 このメソッドによって、パラメーター 1 と 2 に渡される値が同等であることを確実にしています。 パラメーター 3 はメソッドの実際の名前で、4 はメソッド内のアサーションの数です。 これらの最後の 2 つのパラメーターは、アサーションでエラーが発生した場合に詳細なメッセージを返すために使用されます。 比較されたときに値が一致しない場合、一般のスローで例外をスローし、リクエストのヘッダーに 500 のレスポンスコードを送信します。 すると、Newman のレポートでそのテストがエラーにマークされます。

このアプローチでは、以下の操作のみが残っています。

  • Postman コレクションへの呼び出しをメソッドに含める。
  • 変更をコミットする。 

そうすれば、全員のリポジトリでコレクションを更新させることができるようになります。

 

ポイント 3 - 統合テスト:

前の手順と同じように、統合テストに使用されているウェブアプリを再利用することができます。 テストの例として、データベースにユーザーを追加しましょう。

localhost:52773/run/IrisNewman.Example.TestMethods/InsertPerson

ここでは、以下の項目について指定されています。

/run -> ウェブアプリのパス

/IrisNewman.Example.TestMethods -> 実行するメソッドが配置されるクラス

/InsertPerson -> 実行するメソッド

InsertPerson メソッドでは、すべての操作をトランザクション内で実行し、求める値が格納されたことをアサーションで確認しています。 最後に、変更を元に戻すロールバックが含まれています。

ClassMethod InsertPerson()
{

    Set testNumber = 1Set method=$G(%methodname)

    TSTARTSet person=##class(IrisNewman.Example.Entity.Person).%New()
    Set person.IDCard="11111111H"Set person.Name="Incognito Guy"Set person.Address="False Street, 123"Set person.City="Springfield"Set res = person.%Save()

    Do..assert(res,1)

    Set personReaded = ##class(IrisNewman.Example.Entity.Person).%OpenId(person.IDCard)

    Do..assert(personReaded.Name,"Incognito Guy",method,testNumber)

    TROLLBACKQuit$$$OK
}

 

更新や削除などの操作も同じようにテストできるため、必要な統合テストの実行が可能となります。

 

ポイント 4 - CI/CD の追加:

「これはこれでいいけれど、もっと自動化させたい。 同僚のテストを自動的に起動するにはどうすればいいのか」と思ってていませんか?

このために、アプリに新しいエンドポイントを作成しました(Postman ではなくブラウザで起動する必要があります)。

http://localhost:52773/pull_and_run_tests

このエンドポイントは、Git または Bitbucket リポジトリから最新バージョンのコレクションをダウンロードします。 また、それに対してテストを実行し、画面上にテスト結果のレポート(Newman)も表示するようになっています。

pull_and_run_test エンドポイントを実行するには、repository.cfg ファイルに、テストのコレクションを保存するリポジトリへのアクセスデータを構成する必要があります。

このとき、コミットするたびに自動的にすべてのテストを実行するワークフローをリポジトリに追加すればよくなるのではないかという考えがありました。

このための新しいエンドポイントを作ることがアイデアとして浮かびました。

http://localhost:52773/pull_run_and_send_google

これは、ApiTesting Docker イメージをダウンロードしてからリポジトリからコレクションをダウンロードし、テストを実行して Google Chat に結果の HTML ファイルの URL と共にメッセージを送信します。

これが機能するには、repository.cfg ファイルで、メッセージの受信先である Google Chat チャンネルのウェブフックの URL を構成する必要があります。

次の図に、リポジトリにコミット完了ごとのワークフロー実行の例を示します。

以下は、例として使用した GitHub ワークフローのコードです。

name:LaunchTestson:
  push:
    branches:
      -mainjobs:
  build:
    runs-on:ubuntu-latest
    steps:
    -name:Checkoutsourcecode
      uses:actions/checkout@v2
    -name:Clonetheirisapitesterrepository
      run:gitclonehttps://github.com/daniel-aguilar-garcia/irisapitester.git
    -name:RaiseDockerCompose
      run:docker-composeup-d
      working-directory:./irisapitester
    -name:WaitforDocker
      run:sleep30
    -name:SendreporttoGoogleChat
      id:send_report_google
      run:|

        $(curl -s http://localhost:52773/pull_run_and_send_google)

 

では、受信するメッセージの例を見てみましょう。

(この例では URL のみを送信していますが、 失敗したときにのみ送信するか、「executed Ok / KO」と URL をレポートに送信するようにプログラムすることもできます。)

注意: メッセージ送信の機能を使用する場合は、テスト結果の HTML を保存するネットワークストレージにマッピングすることをお勧めします。 Docker インスタンスはワークフロー中に生成されて破棄されるため、そこに保存しても消えてしまいます。 この問題を解決するには、Docker ファイルへのパスでネットワークボリュームを追加し、IrisNewman/Api.cls クラスの executionsTestPath パラメーターのテストストレージパスを変更します。

 

上記を行うと、自動化しようとしているすべてのテストの大部分が対応されたことになります。 このワークフローは手順の例として使用しているため、テストリポジトリに追加しましたが、 ソフトウェアのリポジトリに保存することもできます。 もう 1 つのオプションは、ソフトウェアのコードと実行されるコレクションを直接同じリポジトリに配置することです。 この場合は、コミットごとに、更新した Postman コレクションのテストが実行され、操作の結果が自動的に通知(この場合は Google Chat)されます。

この記事に興味を持っていただき、このアプリケーションまたは作業方法を日常業務で使っていただけたら幸いです。少なくとも、このアイデアがどこかで役立てられればと思います。

ご質問や不明な点は、コメントセクションにぜひ投稿してください。 ご質問を歓迎しています。

お読みいただきありがとうございました!!


 

0
0 141
記事 Toshihiko Minamoto · 12月 20, 2023 15m read

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

多くの方が、Open Exchange と GitHub で InterSystems ObjectScript ライブラリを公開しています。

でも、開発者がプロジェクトの使用とコラボレーションを簡単に行えるようにするにはどうしていますか?

この記事では、ファイルの標準セットをリポジトリにコピーするだけで、ObjectScript プロジェクトを簡単に起動して作業する方法をご紹介します。

では始めましょう!

概要 - 以下のファイルをこちらのリポジトリからお使いのリポジトリにコピーしてください。

Dockerfile

docker-compose.yml

Installer.cls

iris.script

settings.json{#9f423fcac90bf80939d78b509e9c2dd2-d165a4a3719c56158cd42a4899e791c99338ce73}

.dockerignore{#f7c5b4068637e2def526f9bbc7200c4e-c292b730421792d809e51f096c25eb859f53b637}
.gitattributes{#fc723d30b02a4cca7a534518111c1a66-051218936162e5338d54836895e0b651e57973e1}
.gitignore{#a084b794bc0759e7a6b77810e01874f2-e6aff5167df2097c253736b40468e7b21e577eeb}

すると、プロジェクトを起動して共同作業する標準的な方法が得られます。 以下は、この仕組みと動作する理由についての記事です。

注意: この記事では、InterSystems IRIS 2019.1 以降で実行可能なプロジェクトを対象としています。

InterSystems IRIS プロジェクトの起動環境の選択

通常、開発者には、プロジェクト/ライブラリを試して、素早く安全な方法であることを確認していただきたいと思っています。

私見としては、新しいものを素早く安全に起動するには、Docker コンテナが理想的だと考えています。起動、インポート、コンパイル、計算するあらゆるものがホストマシンにとって安全であり、いかなるシステムやコードも破壊されたり損なわれたりすることがないことを開発者に保証できるためです。 何らかの問題が発生した場合は、コンテナを止めて削除するだけで済みます。 アプリケーションが膨大なディスクスペースを占有するのであれば、コンテナを削除すれば、容量を解放できます。 アプリケーションがデータベース構成を破損するのであれば、破損した構成のあるコンテナを削除するだけです。 このように単純で安全なのです。

Docker コンテナでは、安全と標準化を得られます。

バニラ InterSystems IRIS Docker コンテナを実行するには、IRIS Community Edition イメージを実行するのが最も簡単です。

  1. Docker デスクトップをインストールします。 

  2. OS のターミナルで以下を実行します。

docker run --rm -p 52773:52773 --init --name my-iris store/intersystems/iris-community:2020.1.0.199.0
  1. 次に、ホストブラウザで管理ポータルを開きます。

http://localhost:52773/csp/sys/UtilHome.csp

  1. または IRIS へのターミナルを開きます。

    docker exec -it my-iris iris session IRIS

  2. IRIS コンテナが不要になれば、それを停止します。

    docker stop my-iris

さて、 IRIS を Docker コンテナで実行しますが、 開発者にはコードを IRIS にインストールして、いくらかの設定を行ってほしいと考えているとします。 以下ではこれについて説明します。

ObjectScript ファイルのインポート

最も単純な InterSystems ObjectScript プロジェクトには、クラス、ルーチン、マクロ、グローバルなどの一連の ObjectScript ファイルが含めることができます。 命名規則フォルダ構造の提案についての記事をご覧ください。

問題は、このコードをどのようにして IRIS コンテナにインポートするかです。

ここで役立つのが Dockerfile です。これを使用して、バニラ IRIS コンテナを取得し、リポジトリから IRIS にすべてのコードをインポートして、必要に応じて IRIS で設定を行います。 リポジトリに Dockerfile を追加する必要があります。

ObjectScript テンプレートリポジトリから取得した Dockerfile を調べてみましょう。

ARG IMAGE=store/intersystems/irishealth:2019.3.0.308.0-community
ARG IMAGE=store/intersystems/iris-community:2019.3.0.309.0
ARG IMAGE=store/intersystems/iris-community:2019.4.0.379.0
ARG IMAGE=store/intersystems/iris-community:2020.1.0.199.0
FROM $IMAGE

USER root

WORKDIR /opt/irisapp
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp

USER irisowner

COPY  Installer.cls .
COPY  src src
COPY iris.script /tmp/iris.script # run iris and initial 

RUN iris start IRIS \
    && iris session IRIS < /tmp/iris.script

 

最初の ARG の行は $IMAGE 変数を設定しており、それを FROM で使用します。 これは、$IMAGE 変数を変更するために FROM の前の最後の行が何であるかだけを切り替えて、さまざまな IRIS バージョンでコードをテスト/実行するのに適しています。 

以下のコードがあります。 

ARG IMAGE=store/intersystems/iris-community:2020.1.0.199.0

FROM $IMAGE

これは、IRIS 2020 Community Edition ビルド 199 を使用するということです。

リポジトリからコードをインポートするため、リポジトリのファイルを Docker コンテナにコピーする必要があります。 以下の行はそれを行います。

USER root

WORKDIR /opt/irisapp
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp

USER irisowner

COPY  Installer.cls .
COPY  src src

USER root - ここで、ユーザーをルートに切り替えて、フォルダを作成してファイルを Docker にコピーします。

WORKDIR /opt/irisapp - この行では、ファイルをコピーする workdir をセットアップしています。

RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp   -  ここでは、irisowner ユーザーと IRIS を実行するグループに権限を付与しています。

USER irisowner - ユーザーを root から irisowner に切り替えます。

COPY Installer.cls .  - workdir のルートに Installer.cls をコピーしています。 このピリオドを忘れないでください。

COPY src src - ソースファイルをリポジトリの src フォルダから Docekr の workdir の src フォルダにコピーします。

次のブロックでは、初期スクリプトを実行し、インストーラーと ObjectScript コードを呼び出します。

COPY iris.script /tmp/iris.script # run iris and initial 
RUN iris start IRIS \
    && iris session IRIS < /tmp/iris.script

COPY iris.script / - iris.script をルートディレクトリにコピーします。 コンテナをセットアップするために呼び出す ObjectScript が含まれます。

RUN iris start IRIS</span>  - IRIS を起動します。

&& iris session IRIS < /tmp/iris.script - IRIS ターミナルを起動し、それに最初の ObjectScript を入力します。

以上です! Docker にファイルをインポートする Dockerfile ができました。 installer.cls と iris.script の 2 つのファイルが残っています。ではそれらを詳しく見てみましょう。

Installer.cls

Class App.Installer
{

XData setup
{
<Manifest>
  <Default Name="SourceDir" Value="#{$system.Process.CurrentDirectory()}src"/>
  <Default Name="Namespace" Value="IRISAPP"/>
  <Default Name="app" Value="irisapp" />

  <Namespace Name="${Namespace}" Code="${Namespace}" Data="${Namespace}" Create="yes" Ensemble="no">

    <Configuration>
      <Database Name="${Namespace}" Dir="/opt/${app}/data" Create="yes" Resource="%DB_${Namespace}"/>

      <Import File="${SourceDir}" Flags="ck" Recurse="1"/>
    </Configuration>
    <CSPApplication Url="/csp/${app}" Directory="${cspdir}${app}"  ServeFiles="1" Recurse="1" MatchRoles=":%DB_${Namespace}" AuthenticationMethods="32"
       
    />
  </Namespace>

</Manifest>
}

ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 3, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger) As %Status [ CodeMode = objectgenerator, Internal ]
{
  #; Let XGL document generate code for this method. 
  Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "setup")
}

}

率直に言って、ファイルのインポートに Installer.cls は必要ありません。 これは 1 行で実行可能です。 ただし、コードをインポートするほかに、CSP アプリのセットアップ、セキュリティ設定の追加、データベースとネームスペースの作成を行わなければなりません。

この Installer.cls では、 IRISAPP という名前で新しいデータベースとネームスペースを作成し、このネームスペースのデフォルトの /csp/irisapp アプリケーションを作成します。

すべては、<Namespace> 要素で行います。

<Namespace Name="${Namespace}" Code="${Namespace}" Data="${Namespace}" Create="yes" Ensemble="no">

    <Configuration>
      <Database Name="${Namespace}" Dir="/opt/${app}/data" Create="yes" Resource="%DB_${Namespace}"/>

      <Import File="${SourceDir}" Flags="ck" Recurse="1"/>
    </Configuration>
    <CSPApplication Url="/csp/${app}" Directory="${cspdir}${app}"  ServeFiles="1" Recurse="1" MatchRoles=":%DB_${Namespace}" AuthenticationMethods="32"
       
    />
  </Namespace>

そして、Import タグを使って、SourceDir からすべてのファイルをインポートします。

<Import File="${SourceDir}" Flags="ck" Recurse="1"/>

この SourceDir は変数であり、現在のディレクトリ/src フォルダに設定されています。

<Default Name="SourceDir" Value="#{$system.Process.CurrentDirectory()}src"/>

これらの設定を含む Installer.cls によって、src フォルダから任意の ObjectScript コードをインポートするわかりやすい新しいデータベース IRISAPP を作成できるという確信を持つことができます。

iris.script

ここに、IRIS コンテナを起動する初期の ObjectScript セットアップコードを挿入してください。

例: 開発にはパスワードのプロンプトは不要であるため、ここでは、installer.cls を読み込んで実行してから、パスワードの初回変更リクエストを回避するために、UserPasswords を永久にしています。

; run installer to create namespace
do $SYSTEM.OBJ.Load("/opt/irisapp/Installer.cls", "ck")
set sc = ##class(App.Installer).setup()  zn "%SYS"
Do ##class(Security.Users).UnExpireUserPasswords("*") ; call your initial methods here
halt

docker-compose.yml

docker-compose.yml はなぜ必要なのでしょうか。Dockerfile と同様に、イメージをただビルドして実行するだけではいけないのでしょうか。 もちろん、そうすることは可能です。 ただし、docker-compose.yml を使用すれば作業が単純になります。

通常、docker-compose.yml は、1 つのネットワークに接続された複数の Docker イメージを起動するために使用されます。

docker-compose.yml は、多数のパラメーターを処理する場合に、1 つの Docker イメージの起動をより簡単にするためにも使用できます。 これを使用すれは、ポートのマッピング、ボリューム、VSCode 接続パラメーターなどを Docker に渡すことができます。

version: '3.6' 
services:
  iris:
    build: 
      context: .
      dockerfile: Dockerfile
    restart: always
    ports: 
      - 51773
      - 52773
      - 53773
    volumes:
      - ~/iris.key:/usr/irissys/mgr/iris.key
      - ./:/irisdev/app

ここでは、サービス iris を宣言しています。これは Dockerfile を使用し、IRIS の 51773、52773、53773 ポートを公開するサービスです。 また、このサービスは、ホストマシンのホームディレクトリの iris.key と期待される IRIS フォルダ、およびソースコードのルートフォルダと /irisdev/app フォルダの 2 つのボリュームのマッピングも行います。

docker-compose によって、セットアップされるパラメーターに関係なく、イメージをビルドして実行するためのコマンドをより短く、統一することができます。

いずれの場合でも、以下のようにしてイメージをビルドします。

$ docker-compose up -d

 そして以下のようにして IRIS ターミナルを開きます。

$ docker-compose exec iris iris session iris

Node: 05a09e256d6b, Instance: IRIS

USER>

また、docker-compose.yml では、VSCode ObjectScript プラグインの接続もセットアップできます。

.vscode/settings.json

ObjectScript アドオン接続設定に関連しているのは、以下の部分です。

{
    "objectscript.conn" :{
      "ns": "IRISAPP",
      "active": true,
      "docker-compose": {
        "service": "iris",
        "internalPort": 52773
      }
    }     

}

ここにあるのは設定です。VSCode ObjectScript プラグインのデフォルトの設定とは異なります。

ここでは、IRISAPP ネームスペース(Installer.cls で作成)に接続すると述べています。

"ns": "IRISAPP",

そして、docker-compose の設定があります。これは、サービス「iris」内の docker-compose ファイルで、VSCode が 52773 がマッピングされているポートに接続すると書かれています。

"docker-compose": {
        "service": "iris",
        "internalPort": 52773
      }

52773 について調べたところ、これはマップされたポートが 52773 に対して定義されていないことがわかります。

ports: 
      - 51773
      - 52773
      - 53773

つまり、ホストマシンのポートで利用できるランダムなポートが取得され、VSCode は自動的にランダムなポートを介して、docker 上でこの IRIS に接続するということです。

これは非常に便利な機能です。IRIS を使用して任意の量の Docker イメージをランダムなポート上で実行し、VSCode をそれらのポートに自動的に接続するオプションが提供されるためです。

他のファイルはどうでしょうか?

以下のファイルもあります。

.dockerignore  - 作成した Docker ファイルにコピーしない不要なホストマシンのファイルをフィルターするために使用できるファイル。 通常、.git や .DS_Store は必須です。

.gitattributes - git の属性。ソース内の ObjectScript ファイルの行末を統一します。 Windows と Mac/Ubuntu オーナーがリポジトリで共同作業する場合に非常に便利です。

.gitignore - Git で変更履歴を追跡しないファイル。 通常、.DS_Store などの非表示の OS レベルのファイルです。

以上です!

リポジトリを Docker 実行可能にし、コラボレーションしやすくするにはどうすればよいでしょうか。

  1. このリポジトリをクローンします。

  2. 以下のファイルをすべてコピーします。

Dockerfile

docker-compose.yml

Installer.cls

iris.script

settings.json{#9f423fcac90bf80939d78b509e9c2dd2-d165a4a3719c56158cd42a4899e791c99338ce73}

.dockerignore{#f7c5b4068637e2def526f9bbc7200c4e-c292b730421792d809e51f096c25eb859f53b637}
.gitattributes{#fc723d30b02a4cca7a534518111c1a66-051218936162e5338d54836895e0b651e57973e1}
.gitignore{#a084b794bc0759e7a6b77810e01874f2-e6aff5167df2097c253736b40468e7b21e577eeb}

上記をリポジトリにコピーしてください。

Dockerfile のこの行を IRIS にインポートする ObjectScript のあるリポジトリ内のディレクトリに一致するように変更します(in /src フォルダにある場合は変更しません)。

それだけです。 すべての人(あなた自身も含む)が、新しい IRISAPP ネームスペースでコードをインポートできるようになります。

プロジェクトの起動方法

IRIS で ObjectScript プロジェクトを実行するためのアルゴリズムは以下の通りです。

  1. プロジェクトをローカルに Git clone します。

  2. プロジェクトを実行します。

$ docker-compose up -d
$ docker-compose exec iris iris session iris

Node: 05a09e256d6b, Instance: IRIS

USER>zn "IRISAPP"

**開発者によるプロジェクトへの貢献方法 **

  1. リポジトリをフォークして、フォークされたリポジトリをローカルに Git clone します。

  2. VSCode でフォルダを開きます(DockerObjectScript の拡張機能が VSCode にインストールされている必要があります)。

  3. docker-compose.yml を右クリックし、再起動します。VSCode ObjectScript が自動的に接続され、編集/コンパイル/デバッグできるうようになります。

  4. リポジトリに変更をコミット、プッシュ、およびプルリクエストします。

以下は、この仕組みを説明する簡単な Gif です。

以上です! それでは、コーディングをお楽しみください!

0
0 172
記事 Mihoko Iijima · 9月 26, 2023 4m read

この記事では、2023年3月1日~31日の期間に開催された「技術文書ライティングコンテスト:InterSystems IRISチュートリアル」に応募された24作品の中から、Open Exchangeに公開されている sqlalchemy-iris を利用してPythonとSQLでIRISのデータを操作する方法を投稿された Heloisa Paivaさんの記事をご紹介します。

Open Exchangeは、世界各地にいる開発者コミュニティメンバーが開発したインターシステムズ製品で利用できるサンプルアプリが登録されているページで、自由にダウンロードしてご利用いただけます。

Heloisaさんの記事のように公開されている Open Exchange の利用例があると、「ちょっと使ってみたいな・・」と思われているメンバーの方への情報共有ができてとても有用な記事になると思います!丁度日本で初開催の「技術文書ライティングコンテスト」開催中ですので、ぜひ使用例や感想など、投稿してみてください!💪

0
0 787
記事 Mihoko Iijima · 9月 13, 2023 3m read

この記事では、2023年3月1日~31日の期間に開催された「技術文書ライティングコンテスト:InterSystems IRISチュートリアル」に応募された24作品の中から、Heloisa Paivaさんが投稿されたシンプルですぐに試せる記事をご紹介します。

はじめに

このチュートリアルは、テストやチュートリアル用のサンプル作成など、あらゆる目的でサンプルデータベースを作成するための、私が見つけた最も簡単な方法についての簡単なチュートリアルです。

ネームスペースの作成

  1. ターミナルを開きます。
  2. 次のコマンドを実行します。 "Do $SYSTEM.SQL.Shell()"   (※または :sql の入力でもSQLシェルに切り替えできます)
  3. "CREATE DATABASE " コマンドを実行します。実行時、作成したいネームスペース名をコマンドの引数に指定します。(TESTネームスペースを作成する例:CREATE DATABASE TEST)

これで、管理ポータルから新しいネームスペースを作成するより簡単で素早い方法でネームスペースを作成できます。

ネームスペースに移動するには、現在開いているSQLシェルを終了させるため、"quit" を入力し、zn "ネームスペース名" と入力します。これでターミナルで行うすべての動作がこのネームスペースのスコープに入ります。

テーブルの作成

0
0 176
記事 Toshihiko Minamoto · 6月 29, 2023 13m read

         

コミュニティの皆さん、こんにちは。
この記事では、InterSystems Embedded Python の使用方法を説明します。以下のトピックが含まれます。

  • 1- Embedded Python の概要
  • 2- Embedded Python の使用方法
    • 2.1- ObjectScript から Python ライブラリを使用する
    • 2.2- Python から InterSystems API を呼び出す
    • 2.3- ObjectScript と Python を同時に使用する
  • 3- Python 組み込み関数の使用
  • 4- Python モジュール/ライブラリ 
  • 5- Embedded Python のユースケース
  • 6- まとめ

では、概要から始めましょう。

 

1- Embedded Python の概要

Embedded Python は、Python 開発者が InterSystems IRIS の全データと全機能に直接アクセスできるようにする、InterSystems IRIS データプラットフォームの機能です。

InterSystems IRIS には、データプラットフォーム内で解釈、コンパイル、および実行される ObjectScript と呼ばれる強力なプログラミング言語が組み込まれています。

ObjectScipt は InterSystems IRIS のコンテキスト内で実行されるため、データプラットフォームのメモリとプロシージャ呼び出しに直接アクセスできます。

Embedded Python は、InterSystems IRIS プロセスコンテキスト内で Python コードを実行を可能にする Python プログラミング言語の拡張機能です。

ObjectScript と Python のいずれも同じオブジェクトメモリで動作するため、Python オブジェクトは ObjectScript オブジェクトを単にエミュレートするのではなく、ObjectScipt オブジェクトであると言えます。

これらの言語の共平等性により、ジョブに最適な言語か、アプリケーションの記述に最も使いやすい言語を選択することができます。

 

2- Embedded Python の使用方法

Embedded Python を使用する場合、3 つの異なる方法でコードを記述できます。

2.1- ObjectScript から Python ライブラリを使用する

まず、通常の .py ファイルを記述し、InterSystems IRIS コンテキストからそれを呼び出します。 この場合、データプラットフォームは Python プロセスを起動し、IRIS と呼ばれるモジュールをインポートできるようにします。これにより、Python プロセスが IRIS カーネルに自動的に接続されるため、Python コードのコンテキストから ObjectScript のすべての機能にアクセスできるようになります。

2.2- Python から InterSystems API を呼び出す

次に、通常の ObjectScript コードを記述し、%SYS.Python パッケージを使って Python オブジェクトをインスタンス化します。 この ObjectScript パッケージを使うと、Python モジュールとライブラリをインストールし、ObjectScript 構文でコードベースを操作できるようになります。
%SYS.Python パッケージを使うと、ObjectScript 開発者は Python の知識が無くてもリッチな Python ライブラリエコシステムを ObjectScript コードで使用できるようになります。

2.3- ObjectScript と Python を同時に使用する

最後に、InterSystems クラス定義を作成し、Python でメソッドを記述します。 そのメソッドを呼び出すと、Python インタープリターが起動します。 このメソッドは、メリットとして、それを含むクラスのインスタンスへの参照を使って、Python コードのそのブロックの self キーワードを埋めることができます。 また、Python を使って InterSystems クラスにクラスメソッドを書き込むことで、SQL で、テーブルに新しい行が追加されたなどの異なるデータエントリイベントを処理するメソッドを簡単に実装できます。
カスタムストアドプロシージャを Python で迅速に開発することも可能です。

ご覧のとおり、Embedded Python を使用すると、パフォーマンスを犠牲にすることなく、ジョブに最適なプログラミング言語を選択できます。

3- Python 組み込み関数の使用

Python インタープリターには、常に利用できる多数の関数と型が組み込まれています。 以下に、アルファベット順でリストしています。

組み込み関数
AELR
abs()enumerate()len()range()
aiter()eval()list()repr()
all()exec()locals()reversed()
any()round()
anext()FM
ascii()filter()map()S
float()max()set()
Bformat()memoryView()setattr()
bin()frozenset()min()slice()
breakpoint()GNstaticmethod()
bytearray()getattr()next()str()
bytes()globals()sum()
Osuper()
CHobject()
callable()hasattr()oct()T
chr()hash()open()tuple()
classmethod()help()ord()type()
compile()hex()
complex()PV
Ipow()vars()
Did()print()
delattr()input()property()Z
dict()int()zip()
dir()isinstance()
divmod()issubclass()-
iter()__import__()

Python 組み込み 関数の使用

Python 組み込み関数を使用するには、"builtins" をインポートする必要があります。その後、関数を呼び出せるようになります。

set builtins = ##class(%SYS.Python).Import("builtins")

Python の print() 関数は、実際には組み込みモジュールのメソッドであるため、ObjectScript からこの関数を使用できるようになりました。

USER>do builtins.print("hello world!")
hello world!
USER>set list = builtins.list()
 
USER>zwrite list
list=5@%SYS.Python  ; []  ; <OREF>

同様に、help() メソッドを使って、リストオブジェクトのヘルプを取得できます。

USER>do builtins.help(list)
Help on list object:
class list(object)
 |  list(iterable=(), /)
 |
 |  Built-in mutable sequence.
 |
 |  If no argument is given, the constructor creates a new empty list.
 |  The argument must be an iterable if specified.
 |
 |  Methods defined here:
 |
 |  __add__(self, value, /)
 |      Return self+value.
 |
 |  __contains__(self, key, /)
 |      Return key in self.
 |
 |  __delitem__(self, key, /)
 |      Delete self[key].

 

4- Python モジュールまたはライブラリ

一部の Python モジュールまたはライブラリはデフォルトでインストールされるため、すでに利用することができます。 help("module") 関数を使うと、これらのモジュールを表示できます。
Python libraries list output 1

Python モジュールまたはライブラリのインストール

これらのモジュールとは別に、Python には数百ものモジュールとライブラリがあり、pypi.org で確認できます。Python Package Index(PyPI)は Python プログラミング言語のソフトウェアリポジトリです)

他のライブラリが必要な場合は、intersystems irispip コマンドを使ってライブラリをインストールする必要があります。

たとえば、Pandas は Python データ分析ライブラリです。 以下のコマンドは、パッケージインストーラーの irispip を使用して、Windows システムに Pandas をインストールします。

C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python pandas

C:\InterSystems は InterSystems インストールディレクトリに置き換えられることに注意してください。

5- Embedded Python のユースケース

5.1- Python Reportlab ライブラリを使った PDF の印刷

irispip コマンドを使用して Reportlab ライブラリをインストールしてから、objectscript 関数を作成します。

ファイルの場所を指定すると、以下の CreateSamplePDF() という ObjectScript メソッドによって、サンプル PDF ファイルが作成され、その指定場所に保存されます。

Class Demo.PDF
{

ClassMethod CreateSamplePDF(fileloc As%String) As%Status
{
    set canvaslib = ##class(%SYS.Python).Import("reportlab.pdfgen.canvas")
    set canvas = canvaslib.Canvas(fileloc)
    do canvas.drawImage("C:\Sample\isc.png", 150, 600)
    do canvas.drawImage("C:\Sample\python.png", 150, 200)
    do canvas.setFont("Helvetica-Bold", 24)
    do canvas.drawString(25, 450, "InterSystems IRIS & Python. Perfect Together.")
    do canvas.save()
}

}

メソッドの最初の行では、ReportLab の pdfgen サブパッケージから canvas.py ファイルをインポートしています。 コードの 2 行目は、Canvas オブジェクトをインスタンス化し、InterSystems IRIS オブジェクトのメソッド呼び出しと同じ方法で、メソッドを呼び出しています。

その後、通常の方法でメソッドを呼び出せるようになります。

do ##class(Demo.PDF).CreateSamplePDF("C:\Sample\hello.pdf")

以下の PDF が生成され、指定された場所に保存されます。
InterSystems ロゴ、Python ロゴ、および InterSystems and Python のテキストを含む 1 ページ PDF。 併用による完璧な機能。

 

5.2- Python Qrcode ライブラリを使った QR コードの生成

QR コードを生成するには、irispip コマンドを使用して Qrcode ライブラリをインストールする必要があります。次に、以下のコードを使用すると、QR コードを生成できます。

 

5.3- Python Folium ライブラリを使った地理的位置情報の取得

地理データを取得するには、irispip コマンドを使用して Folium ライブラリをインストールする必要があります。次に、以下の objectscript 関数を作成します。

Class dc.IrisGeoMap.Folium Extends%SwizzleObject
{

// Function to print Latitude, Longitude and address details ClassMethod GetGeoDetails(addr As%String) [ Language = python ]
{
    from geopy.geocoders import Nominatim
    geolocator = Nominatim(user_agent="IrisGeoApp")
    try:
        location = geolocator.geocode(addr)
        print("Location:",location.point)
        print("Address:",location.address)
        point = location.point
        print("Latitude:", point.latitude)
        print("Longitude:", point.longitude)
    except:
        print("Not able to find location")
}
}

IRIS ターミナルに接続して以下のコードを実行します

do ##class(dc.IrisGeoMap.Folium).GetGeoDetails("Cambridge MA 02142")

以下が出力されます。

画像

 

5.4- Python Folium ライブラリを使ったインタラクティブ地図への場所の生成とマーキング

同じ Python Folium 伊良部らりを使用して、インタラクティブ地図に場所を生成し、それをマーキングします。以下の objectsctipt 関数によって、これを実行します。

ClassMethod MarkGeoDetails(addr As%String, filepath As%String) As%Status [ Language = python ]
{
    import folium
    from geopy.geocoders import Nominatim
    
    geolocator = Nominatim(user_agent="IrisGeoMap")
    #split address in order to mark on the map
    locs = addr.split(",")
    if len(locs) == 0:
        print("Please enter address")
    elif len(locs) == 1:
        location = geolocator.geocode(locs[0])
        point = location.point
        m = folium.Map(location=[point.latitude,point.longitude], tiles="OpenStreetMap", zoom_start=10)
    else:
        m = folium.Map(location=[20,0], tiles="OpenStreetMap", zoom_start=3)
    
    for loc in locs:
        try:
            location = geolocator.geocode(loc)
            point = location.point
            folium.Marker(
                    location=[point.latitude,point.longitude],
                    popup=addr,
                ).add_to(m)         
        except:
            print("Not able to find location : ",loc) 
              
    map_html = m._repr_html_()
    iframe = m.get_root()._repr_html_()
    fullHtml = """
             
                
                    
                     """
    fullHtml = fullHtml + iframe            
    fullHtml = fullHtml + """                                             
                
                
    """try:
        f = open(filepath, "w")
        f.write(fullHtml)
        f.close()
    except:
        print("Not able to write to a file")
}

IRIS ターミナルに接続し、MarkGeoDetails 関数を呼び出します

dc.IrisGeoMap.Folium クラスの MarkGeoDetails() 関数を呼び出します。
この関数には、以下の 2 つのパラメーターが必要です。

  1. 場所("," 区切りで、複数の場所を渡すことができます)
  2. HTML ファイルパス

以下のコマンドを実行し、地図に Cambridge MA 02142、NY、London、UAE、Jeddah、Lahore、および Glasgow の場所をマークして、 "irisgeomap_locations.html" ファイルとして保存します。

do ##class(dc.IrisGeoMap.Folium).MarkGeoDetails("Cambridge MA 02142,NY,London,UAE,Jeddah,Lahore,Glasgow","d:\irisgeomap_locations.html")

上記のコードによって、以下のインタラクティブ HTML ファイルが生成されます。

画像

 

5.5- Python Pandas ライブラリを使ったデータ分析

irispip コマンドを使用して Pnadas ライブラリをインストールする必要があります。次に、以下のコードを使用すると、データが表示されます。

 

6- まとめ

InterSystems Embedded Python(IEP)は、Python コードと InterSytems アプリケーションをシームレスに統合できる強力な機能です。 IEP を使用すると、Python で利用可能な広範なライブラリとフレームワークを活用して、InterSystems アプリケーションの機能を強化できます。 この記事では、IEP の主な機能とメリットを説明しました。

IEP は、InterSystems アプリケーション内から Python オブジェクトを操作し、Python コードを実装できるようにする一連のライブラリとして実装されています。 これにより、単純で有効な方法によって、Python コードを InterSystems アプリケーションに統合できるため、データ分析、機械学習、自然言語処理など、InterSystems ObjectScript での実装が困難なタスクを実行できるようになります。

IEP を使用する主なメリットの 1 つには、Python と InterSysems の間のギャップのかけ渡しを得られることが挙げられます。 このため、両方の言語の持つ力を使って、両分野の長所を組み合わせた強力なアプリケーションを作成しやすくなります。

IEP には、Python の機能を活用して、InterSystems アプリケーションの機能を拡張する方法も備わっています。 つまり、InterSystems ObjectScript で実装するには困難なタスクに、Python で利用できる膨大な数のライブラリをフレームワークを利用して実行できます。

InterSystems Embedded Python には、Python の機能を活用して、InterSystems アプリケーションの機能を拡張する強力な方法が備わっています。 Python コードを InterSystems アプリケーションに統合することで、Python で利用できる膨大な数のライブラリとフレームワークを利用し、InterSystems ObjectScript での実装が困難な複雑なタスクを実行できます。

以上です!

0
0 568
記事 Mihoko Iijima · 6月 1, 2023 21m read

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

この記事では、システム連携の自動的な流れの中にユーザからの指示を介入できる「ワークフローコンポーネント」のサンプル でご紹介した内容を、お手元のIRIS、IRIS for Healthを利用して体験いただくための手順を解説します。

なお、ワークフローコンポーネントでどんなことができるのか?の概要説明については、ウェビナーをご参照ください。

A.事前準備

1) InterSystems IRIS または、IRIS for Healthのインストール環境をご用意ください。

まだインストール環境がない場合は、コミュニティエディション(コンテナ版かキット版)をご利用ください。

0
0 390
記事 Toshihiko Minamoto · 5月 11, 2023 10m read

はじめに

データ分析は、急速に展開するこの時代において、ビジネス上の意思決定を行う上で欠かせない側面です。 組織はデータ分析に大きく依存して、十分な情報に基づく意思決定と競合優位の維持を行っています。 この記事では、Pandas と InterSystems Embedded Python を使ってデータ分析を実行する方法について説明します。 Pandas の基本、InterSystems Embedded Python を使用するメリット、および両方を組み合わせて有効なデータ分析を実行する方法について説明します。

Pandas とは?

Pandas は幅広いタスクに使用可能で、Pandas ができることよりも、できないことを記述する方が簡単なくらい汎用性の高いツールです。

基本的に、Pandas はデータの拠点として機能します。 データのクリーニング、変換、分析を行うことで、データを理解しやすくすることができます。 たとえば、データセットがコンピューターに CSV ファイルとして保存されている場合、Pandas はデータを DataFrame というテーブルのような構造に抽出することができます。 この DataFrame を使用すると、以下のような様々なタスクを実行できます。

  • 各列の平均、中央値、最大値、または最小値を求める、列間の相関性の有無を判定する、特定の列のデータの分布を調べるなど、データに関して、統計を計算し、質問に答えます。
  • 欠損値の削除や特定の基準に基づく行と列のフィルタ処理によって、データをクリーニングします。
  • 棒、線、ヒストグラム、バブルなどをプロットできる Matplotlib を使ってデータを可視化します。
  • クリーニングと変換を終えたデータを CSV、データベース、または別の種類のファイルに保存します。

モデリングや複雑な可視化を詳しく見る前に、データセットの性質をしっかり理解しておくことが必要です。Pandas には、この理解を達成するために最適な方法が備わっています。

InterSystems Embedded Python を使用するメリット

InterSystems Embedded Python は、InterSystems データプラットフォーム内に組み込まれている Python ランタイム環境です。 プラットフォーム環境から離れることなく、データプラットフォーム内で Python コードを安全かつ効率的に実行する方法を提供します。 つまり、様々な環境を切り替えながらデータ分析タスクを実行する必要がないため、データ分析の効率と生産性が向上します。

Pandas と InterSystems Embedded Python の組み合わせ

Pandas と InterSystems Embedded Python を組み合わせることで、データアナリストはデータ分析タスクを簡単に実行できます。 InterSystems Embedded Python には、Python コードを実行するための安全で効率的なランタイム環境が備わっており、Pandas には、一連の強力なデータ操作ツールが備わっています。 これらを合わせることで、組織に包括的なデータ分析ソリューションを提供しています。

Pandas のインストール

Python パッケージをインストールする

Pandas と InterSystems Embedded Python と使用するには、Python パッケージとして Pandas をインストールする必要があります。 以下は、Pandas のインストール手順です。

  • 管理者モードでコマンドプロンプトを開きます(Windows)。
  • コマンドプロンプトで <installdir>/bin ディレクトリに移動します。
  • 次のコマンドを実行して Pandas をインストールします: irispip install --target <installdir>\mgr\python pandas 。このコマンドによって Pandas は InterSystems が推奨する <installdir>/mgr/python ディレクトリにインストールされます。インストールするパッケージによって、実際のコマンドは異なる場合があります。 pandas を、インストールしたいパッケージの名前に置き換えてください。

それだけです! これで、Pandas と InterSystems Embedded Python を使用できるようになりました。

 irispip install --target C:\InterSystems\IRIS\mgr\python pandas

Pandas をインストールしたので、employees データセットで作業できるようになりました。 以下は、CSV ファイルを Pandas DataFrame に読み込み、データクリーニングと分析を実行する手順です。

まず、Python の新しいインスタンスを作成しましょう

Set python = ##class(%SYS.Python).%New()

Python ライブラリをインストールします。ここでは、pandas と buildins をインポートします。

Set pd = python.Import("pandas")

#;To import the built-in functions that are part of the standard Python librarySet builtins = python.Import("builtins")

データを pandas ライブラリにインポート

InterSystems Embedded Python を使用して Pandas DataFrame にデータを読み込むには、いくつかの方法があります。 以下は一般的な 3 つの方法です。
次のサンプルファイルをとして使用しています。

CSV からデータを読み取る

CSV ファイルへのパスを使って read_csv() を使用し、カンマ区切り値を読み取ります。

Set df = pd."read_csv"("C:\InterSystems\employees.csv")

テキストファイルをインポートする {#importing-text-files}

テキストファイルの読み取りは CSV ファイルに似ています。 唯一のニュアンスは、以下に示すように、sep 引数で区切り文字を指定する必要があることです。 この区切り文字引数は、DataFrame 内の行を区切るために使用するシンボルを参照します。 区切り文字として、コンマ(sep = ",")、ホワイトスペース(sep = "\s")、タブ(sep = "\t")、コロン(sep = ":")が一般的に使用されます。 ここでは、\s は 1 つのホワイトスペース文字を表します。

Set df = pd."read_csv"("employees.txt",{"sep":"\s"})

Excel ファイルのインポート

単一シートの Excel ファイルをインポートするには、ファイルパスを入力とする "read_excel()" 関数を使用します。 たとえば、df = pd.read_excel('employees.xlsx') というコードの場合、"diabetes.xlsx" という Excel ファイルを読み取り、そのコンテンツを "df" という DataFrame に格納します。

どの行を DataFrame のヘッダーにするかを決定するヘッダー引数など、他の引数も指定することができます。 デフォルトでは、ヘッダーは 0 に設定されているため、最初の行がヘッダーまたは列名になります。 列名を指定する場合は、names 引数に名前のリストを渡すことができます。 ファイルに行インデックスが含まれる場合は、index_col 引数を使って指定できます。

Pandas DataFrame または Series では、インデックスが行または列の位置を指す識別子であることに注意してください。 DataFrame の行または列にラベルを付け、インデックスを使用して特定の行または列にアクセスすることができます。 行インデックスは、値の範囲、時系列、一意の識別子(社員 ID など)、またはその他の種類のデータにすることができます。 列に関しては、インデックスは通常、列名を示す文字列です。

Set df = pd."read_excel"("employees.xlsx")

Excel ファイルをインポートする(複数のシート){#importing-excel-files-(multiple-sheets)}

複数のシートが含まれる Excel の読み取りも、それほど変わりません。 sheet_name という追加の引数を 1 つ指定し、シート名の文字列またはシート位置の整数を渡すだけです(Python では 0 インデックスが使用されているため、最初のシートは sheet_name = 0 でアクセスできます)。

#; Extracting the second sheet since Python uses 0-indexingSet df = pd."read_excel"("employee.xlsx", {"sheet_name":"1"})

JSON からデータを読み取る

Set df = pd."read_json"("employees.json")

DataFrame 内のデータを確認

.head().tail() を使ってデータを表示する方法

これには、インポートした builtins ライブラリを使用できます(ZW でも動作しますwink

do builtins.print(df.head())

データセットの列をすべて表示

Do builtins.print(df.columns)

データのクリア

'Start Date' 列を日時オブジェクトに変換

Set  df."Start Date" = pd."to_datetime"(df."Start Date")

更新後のデータセットは以下のようになります。

'Last Login Time' 列を日時オブジェクトに変換

Set df."Last Login Time" = pd."to_datetime"(df."Last Login Time")

'Salary' 列の欠損値に平均給与を設定

Set meanSal = df."Salary".mean()
Set df."Salary" = df."Salary".fillna(meanSal)

 

分析の実行

性別ごとの平均給与を計算

Do builtins.print(df.groupby("Gender")."Salary".mean())

チームごとの平均ボーナス率を計算

Do builtins.print(df.groupby("Team")."Bonus %".mean())

 

毎年採用される社員数を計算

Do builtins.print(df."Start Date".dt.year."value_counts"()."sort_index"())

 

年功者かどうかで社員数を計算

Do builtins.print(df."Senior Management"."value_counts"())

Pandas でのデータの出力 {#outputting-data-in-pandas}

Pandas は様々なファイルタイプからデータをインポートできるように、様々な形式にエクスポートすることも可能です。 これは特に、データが Pandas を使って変換され、ローカルマシン上に保存する必要がある場合に行われます。 以下は、Pandas DataFrams を様々な形式で出力する方法です。

DataFrame を CSV ファイルに出力する {#outputting-a-dataframe-into-a-csv-file}

Pnadas DataFrame(ここでは df を使用)は、."to_csv"() メソッドを使って CSV ファイルとして保存されます。 

do df."to_csv"("C:\Intersystems\employees_out.csv")

 

DataFrame を JSON ファイルに出力する {#outputting-a-dataframe-into-a-json-file}

."to_json"() メソッドを呼び出して、DataFrame オブジェクトを JSON ファイルにエクスポートします。

do df."to_json"("C:\Intersystems\employees_out.json")

 

DataFrame を Excel ファイルに出力する {#outputting-a-dataframe-into-an-excel-file}

DataFrame オブジェクトから ."to_excel"() を呼び出して、“.xls” または “.xlsx” ファイルとして保存します。

do df."to_excel"("C:\Intersystems\employees_out.xlsx")

 

毎年採用される社員数を示す基本的な棒グラフを作成してみましょう。

これには、matplotlib.pyplot を使用します。
 

//import matplotlibSet plt = python.Import("matplotlib.pyplot")
//create a new dataframe to reprecent the bar chartset df2 = df."Start Date".dt.year."value_counts"()."sort_index"().plot.bar()
//export the output to a pngdo plt.savefig("C:\Intersystems\barchart.png")
//cleanupdo plt.close()

以上です! これらの単純なステップを使えば、CSV ファイルを読み取り、データをクリーニングして、InterSystems Embedded Python で Pandas を使って、基本的な分析を実行できます。

動画

以下のリンクを使って、動画にアクセスできるようになりました。 動画そのものは、上記のチュートリアルの包括的な概要と詳細として機能します。
https://youtu.be/hbRQszxDTWU

まとめ 

提供されたチュートリアルは、Pandas が実行できる基本機能しかカバーされていません。 Pandas を使うと、広範なデータ分析、可視化、フィルタリング、集計タスクを実行できるため、あらゆるデータワークフローで貴重なツールとなります。 また、他のデータサイエンスパッケージと組み合わせると、たとえば、対話型ダッシュボードを構築し、機械学習モデルを開発して予測を行い、データワークフローを自動化することができます。 Pandas の理解をさらに深めるには、以下に記載するリソースを調べ、学習過程を加速させましょう。

免責事項

Pandas と InterSystems の活用には様々な方法があることに注意してください。 提供された記事は、教育のみを目的としており、最も最適なアプローチを保証するものではありません。 この記事の著者として、Pandas の機能を継続的に学習し調査しているため、より良い結果を生み出す別の方法や手法が存在する可能性があります。 したがって、読者は慎重な判断と注意を以って、この記事に記載さあれている情報を各自のプロジェクトに適用することをお勧めします。

0
0 335
記事 Mihoko Iijima · 3月 28, 2023 3m read

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

前の記事では「機械学習を試せるチュートリアル:IntegratedML」で試せる内容をご紹介しましたが、この記事では Interoperability(相互運用性)チュートリアル の内容を少しご紹介します。

Interoperability(相互運用性)チュートリアルでは、Redditに新しく投稿された記事=(https://www.reddit.com/new/)を一定間隔で取得し、全投稿の中から「猫(cat)」🐈について記載されている情報のみを抽出し、対象記事をファイル出力する流れをご体験いただけます。

0
0 340
記事 Akio Hashimoto · 3月 16, 2023 3m read

DockerコンテナでIRISサーバーを構築していた時に、Dockerのバージョンアップによって、IRISサーバーが消滅してしまう事がありました。 その経験から、IRISサーバーを復元する為の方法と、事前のバックアップについて共有したいと思います。

###IRISのバックアップ手順

全ての構築が完了したら、事前にバックアップを取っておきます。 クラスやルーチン、グローバルのバックアップは別途、バックアップを取っておく事をお勧めします。

  1. ユーザー定義をエクスポートする。   IRISサーバーで定義したユーザーの設定内容を全てエクスポートします。
zn "%SYS"
write ##class(Security.Users).Export({出力先フルパス})
  1. アプリケーション定義をエクスポートする。   IRISサーバーに定義したアプリケーションの設定内容を全てエクスポートします。
zn "%SYS"
write ##class(Security.Applications).Export({出力先フルパス})
  1. IRISサーバーを停止する。   起動しているIRISサーバーのインスタンス名を指定してIRISサーバーを停止します。
iris stop {IRISインスタンス名}
  1. iris.cpf ファイルをバックアップする。   cpfファイルはインストールディレクトリに在ります。

  2. 各データベースをバックアップする。   各データベースのiris.datをバックアップしておく。   この時、ディレクトリで退避すると良いでしょう。

  3. IRISサーバーを起動する。   IRISサーバーのインスタンス名を指定して起動します。

iris start {IRISインスタンス名}

###IRISサーバーの再構築

IRISサーバーをインストールし直した場合などに、バックアップしておいた情報でIRISサーバーを再構築する。

  1. データベースを元の構成で配置する。   iris.dat等を元のディレクトリ構成で配置しておく。

  2. IRISをインストール。

  3. IRISサーバーを停止する。   IRISサーバーのインスタンス名を指定して停止します。

iris stop {IRISインスタンス名}
  1. バックアップしておいたiris.cpfファイルを上書きする。

  2. 必要に応じて、iris.cpfファイルのパーミッションを変更する。   上手く行かない時はパーミッションを確認して下さい。

  3. IRISサーバーを起動する。   IRISサーバーのインスタンス名を指定して起動します。

iris start {IRISインスタンス名}
  1. ユーザー定義をインポートする。   バックアップしておいたユーザーの定義ファイルをインポートします。
zn "%SYS"
write ##class(Security.Users).Import({バックアップファイルのフルパス})
  1. アプリケーション定義をインポートする。   バックアップしておいたアプリケーションの定義ファイルをインポートします。
zn "%SYS"
write ##class(Security.Applications).Import({バックアップファアイルのフルパス})
  1. 必要な場合、クラス、ルーチンを再コンパイルする。   再コンパイルが必要な場合があります。

以上が、構築したIRISサーバーのバックアップと再構築の手順になります。

0
1 244
記事 Mihoko Iijima · 3月 9, 2023 2m read

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

前の記事では、開発者向け情報を集めた「Developer Hub」をご紹介しましたが、この記事では Developer Hub のチュートリアルの中から「機械学習」をテーマとしたチュートリアル:IntegratedML についてご紹介します

 InterSystems IRISには、機械学習を行うために必要なプロセスのいくつかを自動化するAutoMLの機能が組み込まれていて、機能名として「IntegratedML」と呼んでいます。機能概要については、末尾のビデオをご参照さい。

チュートリアルを始めるための準備は不要で、 ボタンをクリックするだけでチュートリアルを開始できます。

0
0 209
記事 Mihoko Iijima · 2月 21, 2023 3m read

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

開発者向け情報を集めた「Developer Hub」ページが新たに登場しました!

(2025/10/9更新: 新たなチュートリアルが加わりましたので情報更新しました。)

このページには、5種類のチュートリアルが用意されています。チュートリアはブラウザ上で動作し、VSCodeやIRISターミナル、管理ポータルなどチュートリアルで使用するすべての画面が1つのタブ内で開くようになっています。

チュートリアルを試すための事前準備は不要で、クリック1回ですぐにお試しいただけます!(ユーザ登録も不要です)(チュートリアル開始方法は、ページ末尾をご覧ください。)

0
0 335
お知らせ Mihoko Iijima · 11月 9, 2022

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

InterSystems IRIS と InterSystems IRIS for Health のコミュニティエディションですが、InterSystems IRIS ダウンロードページからお好みのプラットフォームのキットを自由にダウンロードいただけます。

この記事では、改めてダウンロードページの使い方をご紹介いたします!

 👈開発者コミュニティのページの左端にこんなリンク集がありますので、「InterSystems IRIS ダウンロードページ」をクリックします。

クリック後、ログイン画面が表示されます。

開発者コミュニティのアカウントか、WRCダイレクトのアカウントでログインします。

開発者コミュニティのアカウントはオンラインラーニングのアカウントと共通です。

アカウントをお持ちでない方は、「Register for a new account」のリンクからアカウント登録をお願いします。

0
0 1045
記事 Toshihiko Minamoto · 10月 5, 2022 5m read

開発者の皆さん
こんにちは。
 

誰かのヘルプが必要だったり、興味のある機能を議論したり、みんなにアナウンスしたり、知識を共有したりしませんか?
この記事ではそのすべての方法について説明します。

より簡単に投稿方法にたどり着くために以下の項目を用意しました。

一般的なガイドライン

最初に、開発者コミュニティサイトのトップメニューにある「新しい投稿」ボタンをクリックします。

その後、質問やアナウンス、記事、議論の作成が選択できるエディタが表示されます。投稿の種類に応じて必須項目と任意項目が表示されます。

0
0 140
記事 Toshihiko Minamoto · 8月 11, 2021 17m read

不在時に、セキュリティとプライバシーを維持しながら、コンピューターを相互に信頼させるにはどうすればよいでしょうか?

「ドライマルティーニを」と彼は言った。 「1 杯。 深いシャンパングラスで。」
「承知いたしました。」
「気が変わった。 ゴードンを 3、ヴォッカを 1、キナリレを半量。 キンキンに冷えるまでよくシェイクしてから、大きめの薄いレモンピールを 1 つ加えてくれ。 わかったかい?」
「お承りいたしました。」 バーテンダーはその考えが気に入ったようだった。
イアン・フレミング著『カジノ・ロワイヤル』(1953 年)より

OAuth は、ユーザーログイン情報を伴うサービスを「運用中」のデータベースから、物理的にも地理的にも分離する上で役立ちます。 このように分離すると、ID データの保護が強化され、必要であれば、諸国のデータ保護法の要件に準拠しやすくしてくれます。

OAuth を使用すると、ユーザーは、最小限の個人データをさまざまなサービスやアプリケーションに「公開」しながら、一度に複数のデバイスから安全に作業することができるようになります。 また、サービスのユーザーに関する「過剰な」データを操作しなくてよくなります(データはパーソナル化されていない形態で処理することができます)。

InterSystems IRIS を使用する場合、OAuth と OIDC サービスを自律的かつサードパーティのソフトウェア製品と連携してテストし、デプロイするための既成の完全なツールセットを利用できます。

OAuth 2.0 と Open ID Connect

OAuth と Open ID Connect(OIDC または OpenID)は、アクセスと識別をデリゲートするためにオープンプロトコルを汎用的に組み合わせたもので、21 世紀現在、人気を得ているようです。 大規模な使用において、これより優れたオプションはまだ誰も思いついていません。 HTTP(S) プロトコル上にとどまり、JWT(JSON Web Token)コンテナを使用するため、特にフロントエンドのエンジニアに人気があります。

OpenID は OAuth を使用して機能しています。実際、OpenID は OAuth のラッパーです。 OpenID を電子識別システムの認証と作成に使用するオープンスタンダードとして使用することは、開発者にとって目新しい事ではありません。 2019 年には、公開から 14 周年を迎えました(バージョン 3)。 Webとモバイル開発、そしてエンタープライズシステムで人気があります。

そのパートナーである OAuth オープンスタンダードはアクセスをデリゲートする役割を担っており、12 年目を迎えています。関連する RFC 5849 標準が登場してからは 9 年です。 この記事の目的により、プロトコルの最新バージョンである OAuth 2.0 と最新の RFC 6749 を使用することにしましょう。 (OAuth 2.0 は、その前身の OAuth 1.0 とは互換していません。)

厳密に言えば、OAuth はプロトコルではなく、ソフトウェアシステムにアクセス権制限アーキテクチャを実装する際に、ユーザー識別操作を分離して別のトラステッドサーバーに転送するための一連のルール(スキーム)です。

OAuth は特定のユーザーについて何も言及できないことに注意してください! ユーザーが誰であるか、ユーザーがどこにいるのか、またユーザーが現在コンピューターを使用しているかどうかさえも、知ることはできません。 ただし、OAuth を使用すれば、事前に発行されたアクセストークンを使用して、ユーザーが参加することなくシステムと対話することが可能であり、 これは重要なポイントです(詳細は、OAuth サイトにある「User Authentication with OAuth 2.0」をご覧ください)。

User-Managed Access(UMA)プロトコルも OAuth に基づくプロトコルです。 OAuth、OIDC、および UMA を合わせて使用することで、次のような分野で保護された ID とアクセス管理(IdM、IAM)システムを実装することができます。

API エコノミーの新しいアクセス制御ベン図
API エコノミーの新しいアクセス制御ベン図

何よりも、個人データをシステムのほかの部分と同じ場所に保存してはいけません。 認証と認可は物理的に分離する必要があります。 そして、ID と認証を各個人に与えることが理想と言えます。 自分で保管せずに、 所有者のデバイスを信頼するのです。

信頼と認証

ユーザーの個人データを自分のアプリや作業データベースと組み合わさったストレージ場所に保存するのはベストプラクティスではありません。 言い換えれば、このサービスを提供できる信頼のある人を選ぶようにする必要があります。

このサービスは、次の項目で構成されます。

  • ユーザー
  • クライアントアプリ
  • 識別サービス
  • リソースサーバー

アクションは、ユーザーのコンピューターの Web ブラウザで実行されます。 ユーザーには識別サービスが備わったアカウントがあり、 クライアントアプリは、識別サービスと相互インターフェースとの契約に署名済みです。 リソースサーバーは、識別サービスを信頼して、識別できた人にアクセスキーを発行します。

ユーザーはクライアント Web アプリを実行して、リソースを要求します。 クライアントアプリは、アクセス権が必要なそのリソースへのキーを提示する必要があります。
ユーザーにキーがない場合、クライアントアプリはリソースサーバーへのキーを発行するために契約している識別サービスに接続します(ユーザーを識別サービスに転送します)。

識別サービスは、どのようなキーが必要かを問い合わせます。

ユーザーは、リソースにアクセスするためのパスワードを入力します。 この時点でユーザー認証が行われ、ユーザーの身元が確認されると、リソースへのキーが提供され(ユーザーをクライアントアプリに戻します)、ユーザーがリソースを利用できるようになります。

認可サービスの実装

InterSystems IRIS プラットフォームでは、必要に応じてさまざまなプラットフォームからのサービスをアセンブルできます。 次はその例です。

  1. デモクライアントが登録された OAuth サーバーを構成して起動します。
  2. デモ OAuth クライアントを OAuth サーバーと Web リソースに関連付けて構成します。
  3. OAuth を使用できるクライアントアプリを開発します。 Java、Python、C#、または Node JS を使用できます。 以下の方に、ObjectScript でのアプリケーションコードの例を示しています。

OAuth にはさまざまな設定があるため、チェックリストが役立ちます。 例を見ていきましょう。 IRIS 管理ポータルに移動し、[システム管理]>[セキュリティ]>[OAuth 2.0]>[サーバー]の順に選択します。

各項目には設定行の名前とコロン、そして必要であればその後に例または説明が含まれます。 別の方法として、Daniel Kutac の 3 部構成になっている「InterSystems IRIS Open Authorization Framework (OAuth 2.0)の実装 - パート1」、パート2、そしてパート3 に記載されているスクリーンショットのヒントを参考にしてください。

次のスクリーンショットはすべて、例として提示されています。 独自のアプリケーションを作成する際は、別のオプションを選択する必要があるでしょう。

[一般設定]タブで、次のように設定してください。

  • 説明: 構成の説明を入力します。「認証サーバー」など。
  • ジェネレーターのエンドポイント(以降「EPG」)のホスト名: サーバーの DNS 名。
  • サポートされている許可の種類(少なくとも 1 つを選択):
    • 認可コード
    • 暗黙
    • アカウントの詳細: リソース、所有者、パスワード
    • クライアントアカウントの詳細
  • SSL/TLS 構成: oauthserver

[スコープ]タブで、次を設定します。

  • サポートされているスコープを追加: この例では「scope1」です。

[間隔]タブで、次を設定します。

  • アクセスキー間隔: 3600
  • 認可コードの間隔: 60
  • キー更新の間隔: 86400
  • セッション中断間隔: 86400
  • クライアントキー(クライアントシークレット)の有効期間: 0

[JWT 設定]タブで、次を設定します。

  • 入力アルゴリズム: RS512
  • キー管理アルゴリズム: RSA-OAEP
  • コンテンツ暗号化アルゴリズム: A256CBC-HS512

[カスタマイズ]タブで、次を設定します。

  • 識別クラス: %OAuth2.Server.Authenticate
  • ユーザークラスの確認: %OAuth2.Server.Validate
  • セッションサービスクラス: OAuth2.Server.Session
  • キーの生成クラス: %OAuth2.Server.JWT
  • カスタムネームスペース: %SYS
  • カスタマイズロール(少なくとも 1 つ選択): %DB_IRISSYS および %Manager

では、変更内容を保存します。

次のステップでは、OAuth サーバーにクライアントを登録します。 [顧客の説明]ボタンをクリックして、[顧客の説明を作成]をクリックします。

[一般設定]タブで、次の情報を入力します。

  • 名前: OAuthClient
  • 説明: 簡単な説明を入力します。
  • クライアントタイプ: 機密
  • リダイレクト URL: oauthclient から識別した後に、アプリに戻るポイントのアドレス。
  • サポートされている付与の種類:
    • 認可コード: はい
    • 暗黙
    • アカウントの詳細: リソース、所有者、パスワード
    • クライアントアカウントの詳細
    • JWT 認可
  • サポートされているレスポンスタイプ: 次のすべてを選択してください。
    • コード
    • id_token
    • id_token キー
    • トークン
  • 認可タイプ: シンプル

[クライアントアカウントの詳細]タブは自動的に入力されますが、クライアントの正しい情報であるかを確認してください。
[クライアント情報] タブには次の項目があります。

  • 認可画面:
    • クライアント名
    • ロゴの URL
    • クライアントのホームページ URL
    • ポリシーの URL
    • 利用規約の URL

では、[システム管理]>[セキュリティ]>[OAuth 2.0]>[クライアント]の順に移動して、OAuth サーバークライアントにバインディングを構成します。

サーバーの説明の作成:

  • ジェネレーターのエンドポイント: 一般的なサーバーのパラメーターから取得されます(上記を参照)。
  • SSL/TLS 構成: 事前構成済みのリストから選択します。
  • 認可サーバー:
    • 認可エンドポイント: EPG + /authorize
    • キーエンドポイント: EPG + /token
    • ユーザーエンドポイント: EPG + /userinfo
    • キーのセルフテストエンドポイント: EPG + /revocation
    • キーの終了エンドポイント: EPG + /introspection
  • JSON Web Token(JWT)設定:
    • 動的登録以外のほかのソース: URL から JWKS を選択します。
    • URL: EPG + /jwks

このリストから、たとえばサーバーが OAuth-client にユーザーに関するさまざまな情報を提供できることがわかります(scopes_supported および claims_supported)。 また、アプリケーションを実装するときは、共有する準備ができているデータが何であるかをユーザーに尋ねても何の価値もありません。 以下の例では、scope1 の許可のみを要求します。

では、構成を保存しましょう。

SSL 構成に関するエラーがある場合は、[設定]>[システム管理]>[セキュリティ]>[SSL/TSL 構成]に移動して、構成を削除してください。

これで OAuth クライアントをセットアップする準備が整いました。
[システム管理]>[セキュリティ]>[OAuth 2.0]>[クライアント]>[クライアント構成]>[クライアント構成を作成]に移動します。 [一般]タブで、次を設定します。

  • アプリケーション名: OAuthClient
  • クライアント名: OAuthClient
  • 説明: 説明を入力します。
  • 有効: はい
  • クライアントタイプ: 機密
  • SSL/TCL 構成: oauthclient を選択します。
  • クライアントリダイレクト URL: サーバーの DNS 名
  • 必要な許可の種類:
    • 認可コード: はい
    • 暗黙
    • アカウントの詳細: リソース、所有者、パスワード
    • クライアントアカウントの詳細
    • JWT 認可
  • 認可タイプ: シンプル

[クライアント情報]タブで、次を設定します。

  • 認可画面:
    • ロゴの URL
    • クライアントのホームページ URL
    • ポリシーの URL
    • 利用規約の URL
  • デフォルトのボリューム: サーバーに以前に指定したものが取得されます(scope1 など)。
  • 連絡先メールアドレス: カンマ区切りでアドレスを入力します。
  • デフォルトの最大経過時間(分): 最大認可経過時間または省略できます。

[JWT 設定]タブで、次を設定します。

  • JSON Web Token(JWT)設定
  • X509 アカウントの詳細から JWT 設定を作成する
  • IDToken アルゴリズム:
    • 署名: RS256
    • 暗号化: A256CBC
    • キー: RSA-OAEP
  • Userinfo アルゴリズム
  • アクセストークンアルゴリズム
  • クエリアルゴリズム

[クライアントログイン情報]タブで、次を設定します。

  • クライアント ID: クライアントがサーバーに登録された際に発行された ID(上記を参照)。
  • 発効されたクライアント ID: 入力されません
  • クライアントシークレット: クライアントがサーバーに登録された際に発行されたシークレット(上記を参照)。
  • クライアントシークレットの有効期限: 入力されません
  • クライアント登録 URI: 入力されません

構成を保存しましょう。

OAuth 認可を使用した Web アプリ

OAuth は、インタラクション参加体(サーバー、クライアント、Web アプリケーション、ユーザーのブラウザ、リソースサーバー)間の通信チャネルが何らかの形で保護されていることに依存しています。 この役割は SSL/TLS プロトコルが果たしているのがほとんどですが、 OAuth は、保護されていないチャネルでも機能します。 そのため、たとえばサーバー Keycloak はデフォルトで HTTP プロトコルを使用して、保護なしで実行します。 調整と調整時のデバッグが単純化されます。 サービスを実際に使用する際、OAuth のチャネル保護は、厳重な要件に含まれるべきであり、Keycloak ドキュメントに記述されている必要があります。 InterSystems IRIS の開発者は、OAuth に関するより厳密なアプローチに従っており、SSL/TSL の使用を要件としています。 単純化できる唯一の方法は、自己署名証明書を使用するか、組み込みの IRIS サービス PKI([システム管理]>>[セキュリティ]>>[公開鍵システム]を利用することです。

ユーザーの認可の検証は、UAuth サーバーに登録されているアプリケーションの名前と OAuth クライアントスコープの 2 つのパラメータを明示的に示すことで行えます。

Parameter OAUTH2APPNAME = "OAuthClient";
set isAuthorized = ##class(%SYS.OAuth2.AccessToken).IsAuthorized(
..#OAUTH2APPNAME,
.sessionId,
"scope1",
.accessToken,
.idtoken,
.responseProperties,
.error)

認可がない場合に備え、ユーザー ID をリクエストして、アプリケーションを操作する許可を取得するためのリンクを準備しておきます。 ここでは、OAuth サーバーに登録されているアプリケーションの名前を指定して、OAuth クライアントと要求されるボリューム(スコープ)を入力するだけでなく、ユーザーを返す Web アプリケーションのポイントへのバックリンクも指定する必要があります。

Parameter OAUTH2CLIENTREDIRECTURI = "https://52773b-76230063.labs.learning.intersystems.com/oauthclient/"
set url = ##class(%SYS.OAuth2.Authorization).GetAuthorizationCodeEndpoint(
..#OAUTH2APPNAME,
"scope1",
..#OAUTH2CLIENTREDIRECTURI,
.properties,
.isAuthorized,
.sc)

 

IRIS を使用して、ユーザーを IRIS OAuth サーバーに登録しましょう。 たとえば、ユーザーに名前とパスワードを設定するだけで十分です。
受信した参照の下でユーザーを転送すると、サーバーはユーザーを識別する手続きを実行し、Web アプリケーションのアカウントデータによって、操作許可が照会されます。また、%SYS フィールドのグローバル OAuth2.Server.Session で自身に結果を保持します。

  1. 認可されたユーザーのデータを示します。 手続きが正常に完了したら、アクセストークンなどがあります。 それを取得しましょう。

    set valid = ##class(%SYS.OAuth2.Validation).ValidateJWT( .#OAUTH2APPNAME, accessToken, "scope1", .aud, .JWTJsonObject, .securityParameters, .sc )

以下に、完全に動作する OAuth の例のコードを示します。

Class OAuthClient.REST Extends %CSP.REST
{
Parameter OAUTH2APPNAME = "OAuthClient";
Parameter OAUTH2CLIENTREDIRECTURI = "https://52773b-76230063.labs.learning.intersystems.com/oauthclient/";
// to keep sessionId
Parameter UseSession As Integer = 1;
XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
    &lt;Routes>
        &lt;Route Method="GET" Url = "/" Call = "Do" />
    &lt;/Routes>
}
ClassMethod Do() As %Status
{
    // Check for accessToken
    set isAuthorized = ##class(%SYS.OAuth2.AccessToken).IsAuthorized(
        ..#OAUTH2APPNAME,
        .sessionId,
        "scope1",
        .accessToken,
        .idtoken,
        .responseProperties,
        .error)
    // to show accessToken
    if isAuthorized {
     set valid = ##class(%SYS.OAuth2.Validation).ValidateJWT(
         ..#OAUTH2APPNAME,
         accessToken,
         "scope1",
         .aud,
         .JWTJsonObject,
         .securityParameters,
         .sc
     )
     &html&lt; Hello!&lt;br> >
         w "You access token = ", JWTJsonObject.%ToJSON()
     &html&lt; &lt;/html> >
     quit $$$OK
    }
    // perform the process of user and client identification and get accessToken
    set url = ##class(%SYS.OAuth2.Authorization).GetAuthorizationCodeEndpoint(
        ..#OAUTH2APPNAME,
        "scope1",
        ..#OAUTH2CLIENTREDIRECTURI,
        .properties,
        .isAuthorized,
        .sc)
    if $$$ISERR(sc) {
         w "error handling here"
         quit $$$OK
    }
    // url magic correction: change slashes in the query parameter to its code
    set urlBase = $PIECE(url, "?")
    set urlQuery = $PIECE(url, "?", 2)
    set urlQuery = $REPLACE(urlQuery, "/", "%2F")
    set url = urlBase _ "?" _ urlQuery
    &html&lt;
     &lt;html>
         &lt;h1>Authorization in IRIS via OAuth2&lt;/h1>
         &lt;a href = "#(url)#">Authorization in &lt;b>IRIS&lt;/b>&lt;/a>
     &lt;/html>
    >
    quit $$$OK
}
}

コードの作業コピーは、InterSystems GitHub リポジトリ(https://github.com/intersystems-community/iris-oauth-example)にもあります。

必要に応じて、OAuth サーバーと OAuth クライアントに高度なデバッグメッセージモードを有効にしてください。これらは、%SYS エリアの ISCLOG グローバルに記述されます。

set ^%ISCLOG = 5
set ^%ISCLOG("Category", "OAuth2") = 5
set ^%ISCLOG("Category", "OAuth2Server") = 5

詳細については、「IRIS、OAuth 2.0 と OpenID Connect の使用」ドキュメントをご覧ください。

まとめ

これまで見てきたように、すべての OAuth 機能には簡単にアクセスでき、完全に使用できる状態になっています。 必要に応じて、ハンドラークラスとユーザーインターフェースを独自のものに置き換えることができます。 OAuth サーバーとクライアントの設定は、管理ポータルを使う代わりに、構成ファイルで構成することも可能です。

0
0 417
お知らせ Shintaro Kaminaka · 7月 8, 2021

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

HL7v2メッセージをFHIR(Fast Healthcare Interoperability Resources)に変換するニーズがあり、その変換プロセスが複雑で分かりにくいと感じたことはありませんか?インターシステムズは、HL7v2メッセージをFHIR(Fast Healthcare Interoperability Resources)に変換するプロセスを簡単にする、HealthShareメッセージ変換サービス(HealthShare Message Transformation Services)と呼ばれる新しいクラウドベースのSaaSサービスを展開しています。 この新しいサービスの早期アクセス・プレビュー・プログラムを発表できることを嬉しく思います。 必要なのは、無料のAWSアカウントと、HL7v2メッセージをドロップするためのS3バケット、そしてFHIR出力を得るための別のS3バケットだけです。

この機能の簡単なデモをご覧ください。

<iframe allow="encrypted-media" allowfullscreen="" frameborder="0" gesture="media" height="315" scrolling="no" src="https://www.youtube.com/embed/Js0SDUZbXv8" width="560"></iframe>

インターシステムズ社のラーニングサイトでは、AWS の無料アカウントとインターシステムズ社のクラウド・ポータルの無料アカウントにサインアップして、変換サービスの強力な機能を利用するための簡単なステップ・バイ・ステップ・ガイドを提供しています。 完全なドキュメントは、インターシステムズ社のドキュメントでご覧いただけます。

このサービスは、7月下旬に正式に開始される予定です。プレビューが終了しても、最初の100万件の変換を無料で利用することができます。

インターシステムズ社のこの新しいオファーの詳細は以下の内容です:

HealthShareメッセージ変換サービスの紹介。

医療IT業界では、FHIR® (Fast Healthcare Interoperability Resources)が、ヘルスケアデータを交換するための最新のデータ標準として採用されています。 オンデマンドのHealthShareメッセージ変換サービスを利用することで、医療機関、保険会社、製薬会社は、既存のデータフォーマットをFHIR規格に変換し、データから最大限の価値を引き出すことができます。 インターシステムズは、最新のFHIR規格だけでなく、HL7v2、X12、CDA、C-CDA、DICOMを含むすべての主要なヘルスケア規格を実装しており、ヘルスケアの相互運用性におけるリーダー的存在です。

HealthShareメッセージ変換サービスは、これらの以前の標準からFHIR R4へのメッセージ変換を簡単に行えるように設計されており、初期リリースではHL7 v2メッセージのFHIR R4への変換をサポートしています。 FHIRメッセージは、AWS S3バケットまたはAmazon HealthLake (Preview)に送ることができ、将来的には他のFHIRリポジトリオプションも追加される予定です。

HealthShareメッセージ変換サービスは、HL7v2メッセージをFHIRに変換することを簡単にします。 変換ロジックを気にする必要がないので、メッセージ変換の複雑な作業はインターシステムズに任せて、優れたヘルスケア・アプリケーションの構築に集中することができます。このサービスが提供するのは

  • AWS上での簡単なプロビジョニングと起動
  • インバウンドS3バケットのHL7v2メッセージのチェック
  • HL7コンテンツのバリデーション
  • FHIR R4へのメッセージ変換
  • 変換されたメッセージを、アウトバウンドの S3 バケット、InterSystems FHIR Accelerator (Preview) サービス、または Amazon HealthLake (Preview) リポジトリにルーティングする
  • 変換パイプラインのステータスと統計情報のモニタリング

さらに、このサービスはAWSのインフラ上に構築されているため、ISO 27001:2013およびHIPAAをサポートするHITRUST認証を取得しています。インターシステムズは、このサービスの運用、監視、バックアップを管理しています。

そして何より、このサービスが商業的に開始されると、最初の100万回の変換が無料で提供され、その後は使用した分だけを支払うことになり、変換されたメッセージあたりのコストは非常に低く抑えられます。 このサービスを利用するための長期契約はなく、いつでも解約できます。

皆様からのフィードバックをお待ちしております。 この記事のコメント欄にご意見をお寄せいただくか、 HMTS@InterSystems.com まで直接お問い合わせください。

HL7 ® と FHIR ® は Health Level Seven International の登録商標であり、これらの商標の使用は HL7 による推奨を意味するものではありません。FHIR商標の使用は、HL7によるHealthShare Message Transformation ServicesまたはHealthShare Message Transformation Servicesの推奨を意味するものではありません。

0
0 508