検索

クリアフィルター
お知らせ
Mihoko Iijima · 2022年3月11日

InterSystems Global コンテスト開催!

開発者の皆さん、こんにちは! 次のコンテストへの参加準備はよろしいですか? 19 回目の InterSystems オンラインプログラミングコンテストのテーマは・・・ 🏆 InterSystems Global Contest 🏆 です! (もう 18 回も開催してたんですね。びっくり ( ゚Д゚) いたしました) 応募期間は 2022年3月21日~4月3日 です。 💰 賞金総額: $10K 💰 コンテストのテーマ: Global または ダイレクトアクセス は、InterSystems IRIS データエンジンの中核をなすものです。SQL、REST-API、ObjectScript、DocDB、Native API でアクセスできるすべての IRIS のデータはグローバル変数に格納されています。 グローバル は、InterSystems IRIS のパフォーマンス、信頼性、拡張性を支えるコアテクノロジです。 このコンテストでは、InterSystems IRIS のグローバルを使用して、データの読み取り、保存、変更を行うオープンソースアプリケーションを募集します!データの取り込みと読み込みのパフォーマンス、そして、任意のデータ・モデルの実装を導入できるストレージ・スキーマの柔軟性を活用するようなグローバルのパワーを利用したアプリケーションを開発し、ご応募ください! 一般的な応募条件: 応募可能なアプリケーション Open Exchange アプリケーションの新規作成、または既存アプリケーションであっても大幅に改善されているものであればご応募いただけます。 コミュニティの担当チームは、コンテストへの応募を承認する前に申請された全アプリケーションをレビューします。 全てのアプリケーションは IRIS Community Edition 、 IRIS for Health Community Edition 、 IRIS Advanced Analytics Community Edition のいずれかで動作する必要があります。 アプリケーションはオープンソースであり、GitHubで公開されている必要があります。 アプリケーションの README ファイルは、英語で記述してください(日本語で記述したものがあればそのまま掲載いただき、英文の追記をお願いします。翻訳アプリを使用しますが翻訳をお手伝いすることもできますのでお気軽にお知らせください!)。また、インストール手順や、アプリケーションがどのように動作するかの説明、またはビデオデモを含めてください 優勝特典: 1. Experts Nomination- 審査員から多く票を集めたアプリケーションには、以下の賞金が贈られます。 🥇 1位 - $4,000 🥈 2位 - $2,000 🥉 3位 - $1,000 🌟 4~15位 - $100 2. Community winners - 開発者コミュニティで多く票を集めたソリューションには、以下の賞金が贈られます。 🥇 1位 - $1,000 🥈 2位 - $750 🥉 3位 - $500 ✨ 受賞者全員にグローバルマスターズ・バッジをプレゼントします! 複数の参加者が同数の票を獲得した場合、全参加者が勝者となり賞金は勝者間で分配されます。 スケジュール: 🛠 アプリケーション開発と応募期間: 2022年3月21日(00:00 EDT): コンテスト開始! 2022年4月3日 (23:59 EDT): 応募締め切り ✅ 投票期間(1週間): 2022年4月4日 (00:00 EDT): 投票開始! 2022年4月10日 (23:59 EDT): 投票終了 応募、投票期間中、アップロードしたアプリケーションは改良できます。 参加資格: どなたでもご参加いただけます!(InterSystems 開発者コミュニティのアカウントを作成するだけでご応募いただけます) 👥 開発者がチームを組んで共同でアプリケーションを作成し、応募することもできます! 1チーム 2~5名 までご参加いただけます。 チームでご応募いただく場合は、アプリケーションの README にチームメンバー名の記載をお忘れなく!!(開発者コミュニティのプロファイルのリンクもお願いします) Helpful Resources: 1. ドキュメント グローバルについて 2. IRIS初心者向け情報 Build a Server-Side Application with InterSystems IRIS Learning Path for beginners 【はじめての InterSystems IRIS】セルフラーニングビデオ 索引 グローバルはデータを保存するための魔法の剣です パート1 3. 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 4. コンテストへの応募方法 Need Help? インターシステムズのDiscord serverのコンテストチャンネルに参加すると世界の開発者とチャットしながら意見交換することができます! または、この記事の返信欄をぜひご利用ください! 審査及び投票ルール 投票ルールは近日公開します。 皆様からの✨素敵な✨プロジェクトをお待ちしております!(ง`0´)ง ❗️ コンテスト規約については、こちらをご参照ください。❗️ ご応募方法について 以下の応募方法ビデオをご参照ください。 以下、コンテストに応募する迄の手順をご説明します。 コンテスト応募までの流れは以下の通りです(※ビデオでは、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」ボタンが表示されるので、クリックすると応募が完了します。
記事
Hiroshi Sato · 2022年7月25日

InterSystems ObjectScriptの型キャストサポートについて

これは InterSystems FAQ サイトの記事です。 ObjectScript言語は、Java言語等がサポートしている型キャストをサポートしていません。 ただし、メソッドのキャストはサポートしています。 詳細は以下ドキュメントページをご参照ください。 メソッドのキャスト【IRIS】メソッドのキャスト InterSystems ObjectScript言語はJava言語や.NetのC#言語のような静的型付き言語とは異なり、動的型付き言語に分類される言語になります。 従って型の解釈は実行時に行われ、宣言時に型を合わせるという必要性がないため型キャストのような仕組みを用意していません。
お知らせ
Mihoko Iijima · 2023年2月10日

★投票開始!★ InterSystems デベロッパーツールコンテスト

開発者の皆さん、こんにちは! 【InterSystems デベロッパーツールコンテスト】の投票が開始されました! 🔥 ベストアプリケーションはこれだ!! 🔥 と思う作品にぜひ投票をお願いします! (今回は21作品がエントリーされています!) 投票方法は以下ご参照ください。 Experts nomination: インターシステムズの経験豊富な審査員がベストアプリを選び、Expert Nominationで賞品をノミネートします。 ⭐️ @Alexander.Koblov, 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⭐️ @Alexander.Woodhead, Technical Specialist⭐️ @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⭐️ @Thomas.Dyar, Product Specialist 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 へのサインインします(開発者コミュニティのアカウントを使用してください)。 投票ボタンは、開発者コミュニティ内で、質問/回答/記事の掲載/投稿に対するコメント など 記載いただいた方に対して有効になります。 ボタンが押せない場合は、コミュニティへのコメントやオリジナルの記事など、書き込みお願いします!詳細は、こちらの記事をご参照ください。 気が変わった場合は? - 選択をキャンセルして別のアプリケーションに投票できます。 ぜひ 🔥これだ🔥 と思う作品に投票お願いします! メモ:コンテストへ応募された作品は、投票週間中にバグを修正したり、アプリケーションを改良したりすることができますので、アプリケーションのリリースを見逃さずに購読してください
記事
Toshihiko Minamoto · 2020年9月30日

InterSystems IRIS のクラスクエリ

InterSystems IRIS のクラスクエリ InterSystems IRIS(および Cache、Ensemble、HealthShare)のクラスクエリは、SQL クエリを Object Script のコードから分離する便利なツールです。 このクエリの基本的な機能は、同じ SQL クエリを複数の場所で異なる引数で使用する場合にクエリの本文をクラスクエリとして宣言し、このクエリを名前で呼び出すことでコードの重複を回避できるというものです。 このアプローチは、次のレコードを取得するタスクを開発者が定義するカスタムクエリにも便利です。 興味が湧きましたか? それではこのまま読み進めてください! ## 基本クラスクエリ 簡単に言うと、基本クラスクエリは SQL の SELECT クエリを表現できるようにするものです。 基本クラスクエリは SQL オプティマイザとコンパイラによって通常の SQL クエリと同様に処理されますが、Caché Object Script のコンテキストから実行する際はより便利になります。 また、次のようにクラス定義(メソッドまたはプロパティと同様)でクエリ項目として宣言されます。 * タイプ: %SQLQuery * SQL クエリのすべての引数を引数リストに含める必要があります。 * クエリタイプ: SELECT * コロンを使用して各引数にアクセスします(静的SQLと同様)。 * 出力結果の名前とデータタイプに関する情報を含む ROWSPEC パラメーターをフィールドの順序と共に定義します。 * (任意)フィールドに ID が含まれている場合、 CONTAINID パラメーターにその列番号を定義します。 ID を返す必要がない場合は、CONTAINID に0を割り当てます。 * (任意)静的 SQL の同様のパラメーターに対応し、SQL 式をコンパイルするタイミングを指定する COMPILEMODE パラメーターを定義します。 このパラメーターが IMMEDIATE(デフォルト)に設定されている場合、クエリはクラスと同時にコンパイルされます。 このパラメーターを DYNAMIC に設定すると、クエリは初回実行の前にコンパイルされます(動的 SQL と同様)。 * (任意)クエリ結果の形式を指定する SELECTMODE パラメーターを定義します。 * このクエリを SQL プロシージャとして呼び出す場合は、SqlProc プロパティを追加します。 * クエリの名前を変更する場合は、SqlName プロパティを設定します。 SQL コンテキストでのクエリのデフォルト名は PackageName.ClassName_QueryName です。 * Caché Studio には、クラスクエリを作成するためのウィザードが搭載されています。 指定した文字で始まるすべてのユーザー名を返す ByName クエリを使った Sample.Person クラスのサンプル定義 Class Sample.Person Extends %Persistent { Property Name As %String; Property DOB As %Date; Property SSN As %String; Query ByName(name As %String = "") As %SQLQuery (ROWSPEC="ID:%Integer,Name:%String,DOB:%Date,SSN:%String", CONTAINID = 1, SELECTMODE = "RUNTIME", COMPILEMODE = "IMMEDIATE") [ SqlName = SP_Sample_By_Name, SqlProc ] { SELECT ID, Name, DOB, SSN FROM Sample.Person WHERE (Name %STARTSWITH :name) ORDER BY Name } } このクエリを次のように Caché Object Script から呼び出すことができます。  Set statement=##class(%SQL.Statement).%New() Set status=statement.%PrepareClassQuery("Sample.Person","ByName") If $$$ISERR(status) { Do $system.OBJ.DisplayError(status) } Set resultset=statement.%Execute("A") While resultset.%Next() { Write !, resultset.%Get("Name") } または、自動生成されたメソッドである「クエリ名Func」を使用して結果セットを取得することもできます。 Set resultset = ##class(Sample.Person).ByNameFunc("A") While resultset.%Next() { Write !, resultset.%Get("Name") } このクエリは、SQL コンテキストから次の 2 つの方法で呼び出すこともできます。 Call Sample.SP_Sample_By_Name('A') Select * from Sample.SP_Sample_By_Name('A') このクラスは、SAMPLES のデフォルト Caché ネームスペースにあります。単純なクエリに関する説明は以上となります。 今度はカスタムクエリを説明します。 ## カスタムクラスクエリ 基本クラスクエリはほとんどの場合に正常に動作しますが、次のような場合にはアプリケーションでクエリの動作を完全に制御しなければならないことがあります。 * 選択条件が複雑な場合。 カスタムクエリでは次のレコードを返す Caché Object Script メソッドが独自に実装されているため、選択条件が要件に応じて複雑化している可能性があります。 * 使用したくない形式の API経由でしかデータにアクセスできない場合。 * データが(クラスなしで)グローバルに保存されている場合。 * データにアクセスするために権利を昇格する必要がある場合。 * データにアクセスするために外部 API を呼び出す必要がある場合。 * データにアクセスするためにファイルシステムにアクセスする必要がある場合。 * クエリを実行する前に、追加の操作を実行する必要があります(接続の確立、アクセス許可の確認など)。 では、どのようにカスタムクラスクエリを作成しますか? まず、クエリのワークフロー全体(初期化から破棄まで)を実装する 4 つのメソッドを定義する必要があります。 * queryName — クエリに関する情報を提供します(基本クラスクエリと同様) * queryName**Execute** — クエリを作成します * queryName**Fetch** — クエリの次のレコードの結果を取得します * queryName**Close** — クエリを破棄します 次に、これらのメソッドをさらに詳しく分析します。 **queryName メソッド** queryName メソッドはクエリに関する情報を提供します。 * タイプ: %Query * 本文を空白のままにします。 * 出力結果の名前とデータタイプに関する情報を含む ROWSPEC パラメーターをフィールドの順序と共に定義します。 * (任意)フィールドに ID が含まれている場合、番号順に対応する CONTAINID パラメーターを定義します。 ID を返さない場合は、CONTAINID に値を割り当てないでください。 例えば、新しい永続クラス Utils.CustomQuery のすべてのインスタンスを 1 つずつ出力する AllRecords クエリ(queryName = AllRecords、メソッドは単に AllRecords と呼ばれる)を作成してみましょう。 まず、新しい永続クラス Utils.CustomQuery を作成します。 Class Utils.CustomQuery Extends (%Persistent, %Populate){ Property Prop1 As %String; Property Prop2 As %Integer; } 次に、AllRecords クエリを書きます。 Query AllRecords() As %Query(CONTAINID = 1, ROWSPEC = "Id:%String,Prop1:%String,Prop2:%Integer") [ SqlName = AllRecords, SqlProc ] { } **queryNameExecute メソッド** queryNameExecute メソッドはクエリを完全に初期化します。 このメソッドのシグネチャは次のとおりです。 ClassMethod queryNameExecute(ByRef qHandle As %Binary, args) As %Status 説明: * qHandle はクエリ実装の他のメソッドとの通信に使用されます。 * このメソッドは、qHandle を後で queryNameFetch メソッドに渡す状態に設定する必要があります。 * qHandle は OREF、変数、または多次元変数に設定できます。 * args はクエリに渡される追加のパラメーターです。 必要な数の引数を追加できます(または引数をまったく使用しないでください)。 * このメソッドはクエリの初期化ステータスを返します。 では、再び例に戻りましょう。 複数の方法で範囲内を自由に反復処理できます(以下でカスタムクエリの基本的な処理方法を説明します)。ただし、この例では関数 $Order を使用してグローバルを反復処理します。 この場合、qHandle は現在の ID を格納します。追加の引数は必要ないため、arg 引数は必要ありません。 結果は次のようになります。 ClassMethod AllRecordsExecute(ByRef qHandle As %Binary) As %Status { Set qHandle = "" Quit $$$OK } **queryNameFetch メソッド** queryNameFetch メソッドは、単一の結果を $List 形式で返します。 このメソッドのシグネチャは次のとおりです。 ClassMethod queryNameFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status [ PlaceAfter = queryNameExecute ] 説明: * qHandle はクエリ実装の他のメソッドとの通信に使用されます。 * クエリが実行されると、qHandleには queryNameExecute または queryNameFetch の以前の呼び出しによって指定された値が割り当てられます。 * すべてのデータが処理されると、レコードが値 %List または空の文字列に設定されます。 * データの終端に達したら、AtEnd が 1 に設定されます。 * PlaceAfter キーワードは、int コードでのメソッドの位置を識別します。 "Fetch" メソッドは "Execute" メソッドの後に配置する必要がありますが、これは 静的 SQL(つまり、クエリ内の カーソル)にのみ重要です。 一般に、このメソッド内では次の処理が実行されます。 1. データの終端に達したかどうかを確認します。 2. まだデータが残っている場合は新しい %List を作成し、Row 変数に値を割り当てます。 3. それ以外の場合は、AtEnd を 1 に設定します。 4. 次の結果を取得するために qHandle を準備します。 5. ステータスを返します。 この例では次のようになります。 ClassMethod AllRecordsFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status { #; ^Utils.CustomQueryD を反復する #; qHandle に次の id を書き込み、新しい id を持つグローバルの値を val に書き込む Set qHandle = $Order(^Utils.CustomQueryD(qHandle),1,val) #; 残っているデータがあるかどうかを確認する If qHandle = "" { Set AtEnd = 1 Set Row = "" Quit $$$OK } #; 残っていなければ %List を作成する #; val = $Lb("", Prop1, Prop2) Storage の定義を参照 #; Row =$lb(Id,Prop1, Prop2) AllRecords リクエストについては ROWSPEC を参照 Set Row = $Lb(qHandle, $Lg(val,2), $Lg(val,3)) Quit $$$OK } **queryNameClose メソッド** queryNameClose メソッドはすべてのデータが取得された時点でクエリを終了します。 このメソッドのシグネチャは次のとおりです。 ClassMethod queryNameClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = queryNameFetch ] 説明: * Caché は queryNameFetch メソッドの最後の呼び出しの後にこのメソッドを実行します。 * つまり、クエリのデストラクタとも言い換えることができます。 * したがって、その実装ではすべての SQL カーソル、クエリ、ローカル変数を破棄する必要があります。 * このメソッドは現在のステータスを返します。 この例では、ローカル変数 qHandle を削除する必要があります。 ClassMethod AllRecordsClose(ByRef qHandle As %Binary) As %Status { Kill qHandle Quit $$$OK } 以上です! クラスをコンパイルすると、基本クラスクエリと同様に %SQL.Statement から AllRecords クエリを使用できるようになります。 ## カスタムクエリの反復ロジック手法 では、カスタムクエリにはどのような手法を使用できるのでしょうか? 一般的には、次の 3 つの基本的な手法があります。 * グローバルによる反復 * 静的 SQL * 動的 SQL **グローバルによる反復** この手法は、グローバルによる反復に $Order などの関数を使用することを基本にしています。 この手法は次の場合に使用できます。 * データが(クラスなしで)グローバルに保存されている場合。 * コード内の glorefs の数を減らしたい場合。 * 結果をグローバルの添え字で並べ替える必要がある/並べ替え可能な場合。 **静的 SQL** この手法は、カーソルと静的 SQL を基本にしています。 この手法は次の目的で使用されます。 * int コードの可読性を高める。 * カーソルの処理を簡単にする。 * コンパイルプロセスの高速化(静的 SQL はクラスクエリに含まれるため、コンパイルは 1 回だけ実行されます)。 注意事項: * %SQLQuery タイプのクエリから生成されたカーソルには、Q14 などのように自動的に名前が付けられます。 * クラス内で使用されるすべてのカーソルは、異なる名前を持つ必要があります。 * エラーメッセージは、名前の末尾に追加の文字があるカーソルの内部名が関係しています。 例えば、カーソル Q140 のエラーは実際にはカーソル Q14 によって引き起こされたものです。 * PlaceAfter を使用し、カーソルが宣言箇所と同じ int ルーチンで使用されるようにしてください。 * INTO は FETCH と組み合わせて使用する必要がありますが、DECLARE とは組み合わせないでください。 Utils.CustomQuery の 静的 SQL の例: Query AllStatic() As %Query(CONTAINID = 1, ROWSPEC = "Id:%String,Prop1:%String,Prop2:%Integer") [ SqlName = AllStatic, SqlProc ] { } ClassMethod AllStaticExecute(ByRef qHandle As %Binary) As %Status { &sql(DECLARE C CURSOR FOR SELECT Id, Prop1, Prop2 FROM Utils.CustomQuery ) &sql(OPEN C) Quit $$$OK } ClassMethod AllStaticFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status [ PlaceAfter = AllStaticExecute ] { #; INTO は FETCH と共に使用する必要あり &sql(FETCH C INTO :Id, :Prop1, :Prop2) #; データの終端に達したかどうかを確認する If (SQLCODE'=0) { Set AtEnd = 1 Set Row = "" Quit $$$OK } Set Row = $Lb(Id, Prop1, Prop2) Quit $$$OK } ClassMethod AllStaticClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = AllStaticFetch ] { &sql(CLOSE C) Quit $$$OK } **動的 SQL** この手法は、他のクラスクエリと動的 SQL を基本にしています。 この手法は、複数のネームスペースで SQL クエリを実行する、クエリを実行する前に権限を昇格するなどの SQL クエリ自体以外の追加処理を実行する必要がある場合に適切です。 Utils.CustomQuery の動的 SQL の例: Query AllDynamic() As %Query(CONTAINID = 1, ROWSPEC = "Id:%String,Prop1:%String,Prop2:%Integer") [ SqlName = AllDynamic, SqlProc ] { } ClassMethod AllDynamicExecute(ByRef qHandle As %Binary) As %Status { Set qHandle = ##class(%SQL.Statement).%ExecDirect(,"SELECT * FROM Utils.CustomQuery") Quit $$$OK } ClassMethod AllDynamicFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status { If qHandle.%Next()=0 { Set AtEnd = 1 Set Row = "" Quit $$$OK } Set Row = $Lb(qHandle.%Get("Id"), qHandle.%Get("Prop1"), qHandle.%Get("Prop2")) Quit $$$OK } ClassMethod AllDynamicClose(ByRef qHandle As %Binary) As %Status { Kill qHandle Quit $$$OK } ## 代替手法:%SQL.CustomResultSet %SQL.CustomResultSet クラスからサブクラス化してクエリを作成することもできます。 この手法のメリットは次のとおりです。 * 若干の速度改善 * すべてのメタデータがクラス定義から取得されるため、ROWSPEC が不要であること * オブジェクト指向の設計原則に準拠できること %SQL.CustomResultSet クラスのサブクラスからクエリを作成するには、次の手順を実行してください。 1. 結果のフィールドに対応するプロパティを定義します。 2. クエリコンテキストが格納される private プロパティを定義します。 3. コンテキストを開始する %OpenCursor メソッド(queryNameExecute と同様)をオーバーライドします。 エラーが発生時に %SQLCODE と %Message も設定します。 4. 次の結果を取得する %Next メソッド(queryNameFetch と同様)をオーバーライドします。 プロパティを入力します。 このメソッドはすべてのデータが処理された場合に 0 を返し、一部のデータがまだ残っている場合に 1 を返します。 5. 必要に応じて %CloseCursor メソッド(queryNameClose と同様)をオーバーライドします。 Utils.CustomQuery の %SQL.CustomResultSet の例: Class Utils.CustomQueryRS Extends %SQL.CustomResultSet { Property Id As %String; Property Prop1 As %String; Property Prop2 As %Integer; Method %OpenCursor() As %Library.Status { Set ..Id = "" Quit $$$OK } Method %Next(ByRef sc As %Library.Status) As %Library.Integer [ PlaceAfter = %Execute ] { Set sc = $$$OK Set ..Id = $Order(^Utils.CustomQueryD(..Id),1,val) Quit:..Id="" 0 Set ..Prop1 = $Lg(val,2) Set ..Prop2 = $Lg(val,3) Quit $$$OK } } これは、次のように Caché Object Script コードから呼び出すことができます。 Set resultset= ##class(Utils.CustomQueryRS).%New() While resultset.%Next() { Write resultset.Id,! } また、SAMPLES ネームスペースでは、Samples.Person のクエリを実装する Sample.CustomResultSet クラスという別の例を使用することもできます。 ## 最後に カスタムクエリは、Caché Object Script コードから SQL 式を分離し、純粋な SQL では難しすぎる可能性がある高度な動作を実装するのに役立ちます。 ## 参考情報 クラスクエリ グローバルによる反復 静的 SQL 動的 SQL %SQL.CustomResultSet Utils.CustomQuery クラス Utils.CustomQueryRS クラス この記事の執筆にご協力いただいた [Alexander Koblov](https://community.intersystems.com/user/alexander-koblov) 氏に感謝します。
記事
Toshihiko Minamoto · 2020年9月14日

起源から InterSystems への道のり

* この記事は、Caché 以前の歴史に関するかなり個人的な見方を書いたものです。 過去の記事で紹介された [Mike Kadow](https://community.intersystems.com/user/mike-kadow-0) 氏の素晴らしい著書に対抗するつもりはありません。 私たちの歴史的背景は異なるため、この記事は過去に対する別の視点を生み出すことを意図しています。 全体的な話は、1966 年に **MGH**(マサチューセッツ総合病院)で 8K のメモリ(18 ビットワード)[_現在 = 18K バイト_] を搭載した **PDP-7**(シリアル番号#103) が予備のシステムとして使用されたことから始まります。 「シリアル番号 103 は、現在 [2014] は MGH のコックスがんセンターの敷地になっている取り壊されたセイヤービルの地下にありました。」「Octo Barnett の指導の下、Neil Papparlardo と Curt Marble がこのマシンで最初のソフトウェアを開発し、リリースしました。」  彼らはこのソフトウェアを MUMPS と名付けました。 (引用元) PDP-7 言語自体は古い形式の Basic にかなり近いものでした。 しかし、他のプログラミング言語に比べて大幅に改善されている点がありました。 * その**画期的なアイデア**は、ファイルシステムを処理する必要なしに永続的なデータを格納および取得することでした。 これは、利用可能なメモリの 30 %以上を容易に消費し、ソートやインデックス付けに対応していない 他のシステムと比較すると、当時はものすごく先進的なものでした。 * (ALGOL、FORTRAN のように)強力なデータ型や名前によって強制されるデータ型がない。 これら(データ型の制約)によって形式上のエラーと変換の原因が無限に存在することになります。 * 構造が固定されていない動的(疎な)配列とメモリ内に事前に割り当てられた半分空の空間がある。 * 可変長の構造化インデックス(添え字)で永続的なデータにインデックスを付けることで ソート、グループ化、サブグループ化などを簡単にしている。 これを COBOL、FORTRAN、PL/1 の古いコードと比較すると、この革命の規模がいかに大きいかわかるでしょう。 この新しいソフトウェアは PDP-11に至るまでの急速なハードウェアの発展と共に進化し、 最終的には MUMPS 4b として知られるようになりました。 1978 年は注目に値する年でした。- InterSystems が Terry Ragon によって設立されました。- DEC が初の VAX-11 クラスタを導入しました(確かカーネギーメロン大学で)。- DEC が DSM-11(Digital Standard Mumps)を完成させました。さらに、当時の最新標準規格に従いつつストレージのパフォーマンスを劇的に改善する新しい Global モジュールがありました。これは、データベースの名を冠した他のどの製品よりも圧倒的に性能が優れていました。この Global モジュールの作成者は、国際的な経験を持つ優秀なエンジニアである Terry Ragon でした。- 私自身も 1978 年に DSM-11 のセールス兼サポートエンジニアとして DEC に入社し、メイナードでの最初のサポート向けトレーニングで Terry に会いました。 当時の DEC は新しい VAX-11 と VAX-Cluster に完全に舞い上がっていました。 新しい高性能 DB は無視され、その能力は完全に誤解されていました。 新しいハードウェアを有効活用するために DSM を VAX でネイティブに使いたいというソフトウェア開発者の要望はすべて無視されていました。 このように顧客の要望がいつまでも無視され続けていたことが、私が自身の顧客から誘われるきっかけになりました。 「対応してもらえないのなら、私たちと一緒にやりましょう!」[このような OS をゼロから作成するオファーはどのくらいありますか?] 私は誘いを断り切れず、ベアボーンの VAX-750 でゼロから顧客と一緒に OS を書き上げました。 この OS は VISOS と名付けられ、サポートされている VAX のモデルが存在する間は生き残っていました。 しばらくして、DEC は DSM を VMS の上にレイヤードプロダクトとして発表しました。 当初、性能は基盤となる RMS によって決まっており、ハードウェアの処理能力の向上は反映されていませんでした。 私は関心を失い、それ以降のことはもう気にしませんでした。 数年後、DEC が愛されていなかった製品である DSM を InterSystems に売却したことは最高の出来事だと思っています。 ほどなくして DEC は自身を売却することになりました。 私は 20 年後に InterSystems に入社したとき、Caché の中で再び自分が実装していた部分をたくさん見つけました。 そのため、私は故郷にいるようなとても温かい気持ちを味わうことができたのです。 現在の Caché はその前身からは大きく変わっていますが、ソースには互換性があります。 Globals の力はまだ残っているのです。 性能面で競合する DB を凌駕できない事例はほとんど 存在しないかもしれません。 数多くの中から私が気に入っている例をご紹介します。 欧州宇宙機関(ESA)が実行している GAIA プロジェクト この投稿は、技術的な歴史と個人的な物語の一部を間違いなくかなり個人的な視点で執筆したものです。 ご質問がある方や、私の誤りを正す必要があると感じた方は遠慮無くご連絡ください。 私はウィーン(オーストリア)にいるため、遠く離れた天の川の境界から ケンブリッジ、メイナード、ボストンでの決定を見ているような感覚を常に抱いていました。![ウィンク](https://community.intersystems.com/sites/all/libraries/ckeditor/plugins/smiley/images/wink_smile.png "ウィンク")  
お知らせ
Toshihiko Minamoto · 2020年10月11日

InterSystems IRIS の新しいリリースの流れ

InterSystems は、InterSystemsIRIS を新しいリリース方法を採用しようとしています(訳注:2020年現在、このリリース方法が採用されています)。このブログでは、新しいリリースモデルとお客様が予測しておくべきことを説明しています。  この内容は InterSystems IRIS ロードマップセッションの最後に行われた Global Summit で説明し、お客様から多くの肯定的なフィードバックを受け取ったものです。 この新しいモデルでは、次の 2 つのリリースストリームを提供しています。 1)EM と呼ばれる従来と同じ毎年恒例のリリース(拡張メンテナンス) 2)CD(継続的デリバリーを意味する)のタグが付けられ、コンテナ形式でのみ入手可能になる四半期ごとのリリース。 変更の理由はスピードと予測性の向上 この業界では変化のペースが加速していますが、このモデルを採用すれば最新機能を非常に迅速に公開し、市場での応答性と競争力を高めることができます。  当社は多くのお客様から次の 2 つを求められています。 新機能をリクエストしてからそれを使用できるようになるまでの時間の短縮 アップデート計画を立てるための予測可能なスケジュール この継続的デリバリーの原則に基づいた新しいリリースの流れは、多くの主要ソフトウェア会社やエンタープライズ対応のオープンソースプロジェクトの大部分で使用されている 2 ストリームモデルとほぼ同等のものです。 この方法の採用に成功した人々は、リリースの品質が向上し、リスクが低下し、応答時間が短縮されたことを明確に報告しています。  従来のリリース方針は変更なし 従来と同じリリース(「EM」リリース)はこれまでと同じように行われます。   このリリースは継続的なメンテナンスリリースの対象となり、必要に応じてその場その場で提供され、すべてのプラットフォームでサポートされます。  従来通り、全製品のインストールキットは WRC Software Distribution ポータルを通じて入手できます。 フィールドテストはこれまでと同様にメジャーリリースで利用できます。  メンテナンスリリースは従来と同じ基本ルールが適用され、EMリリースで利用できます。 以前と異なるのは、これらのリリースが毎年予測可能なタイミングで提供されるようになることです。 次の図に示すように、InterSystems IRIS のバージョン 2019.1 は 2019 年 3 月に、バージョン 2020.1 は 2020 年 3 月に予定されています。           新しい四半期リリースではコンテナのみが提供   3 カ月ごとに新しい四半期リリースストリームを介して「CD」表記の新機能が提供されるようになります。 例えば次の図に示すように、InterSystems IRIS バージョン 2018.2 CD は 2018 年 11 月に、バージョン 2019.1 CD は 2019 年 2 月に、バージョン 2019.2 CD は 2019 年 5 月に予定されています。         CD リリースには次の制限があります。 Open Container Initiative(OCI)フォーマットを使用するコンテナイメージとしてのみ入手できます。 このフォーマットは、Docker / Amazon / Microsoft / Google / IBM などの多くの企業で広く使用され、サポートされています。 OCI 互換のインフラストラクチャのみで動作します。 Docker は最も一般的な OCI ランタイムであるため、InterSystems は Ubuntu Linux カーネルで構築された Docker コンテナの提供とサポートを行っています。 このコンテナは、すべての主要クラウドプラットフォーム(Amazon AWS / Microsoft Azure / Google GCP/ IBM Cloud)と事実上すべての種類の Linux、Windows Server 2016 / 2019 などのさまざまなプラットフォームで実行されます。 InterSystems は Docker-for-windows と Docker-for-mac をそれぞれ使用する開発専用の Windows 10 と Mac OS へのコンテナのデプロイをサポートしています。 (現時点で OCI コンテナをサポートしていない代表的なプラットフォームは AIX です。) これらはコンテナであるため、インストールやイメージのアップグレードは不要です。 InterSystems が提供するコンテナイメージを使用し、それともとに独自のイメージを作成できます。 デプロイする場合は、単純にコンテナを入れ替えるだけです。データのアップグレードが必要な場合、InterSystems はリリースと共にアップグレードを提供します。 CD リリースに関して、InterSystems はメンテナンスリリース、セキュリティ修正、またはAdhoc(パッチ修正)を提供しません。変更を取得したい場合は、単純に次のリリースを取得してください。 最新の変更が加えられた新しいリリースが 3 カ月ごとに提供されるため、重要な修正を待つ必要はありません。 InterSystems は開発、テスト、および本番環境を対象に CD リリースを完全にサポートしています。 InterSystems は各 CD リリースに加えてプレビュープログラムも用意し、最終リリースの前にプレビューイメージを提供します。 プレビューイメージは、開発およびテストを目的とする場合はサポートされますが、本番環境ではサポートされていません。 コンテナは比較的新しいものですが、現在は広く使用されており、多くのメリットがあります。 お客様は CD リリースを使用したり、コンテナを採用したりする必要はありません。ただし、コンテナ内で InterSystems IRIS を使用するのに役立つ多くの InterSystems のリソース(複数のオンライン動画を含む)が存在するほか、業界全体には大規模なコンテナ周辺のエコシステムがあります。 CD リリースは新機能を迅速に提供するほか、従来の(EM)リリースの予測可能性と安定性の向上に役立ちます。今年最初の CD リリースには対応する EM リリースがあります(プラットフォーム固有の機能を除いては同じものです)。また、これらには以前の CD リリースのすべての機能に加えてさらに多くの機能が追加されています。開発者は CD リリースで作業でき、コードが従来のリリースでも機能することを確信できます。CD リリースを試さなかった場合でも、四半期ごとに InterSystems IRIS でリリースされた機能を追跡し、自信を持って計画を立てることができます。

#InterSystems IRIS FAQ

0 投稿0 フォロワー

#InterSystems IRIS for Health

818 投稿0 フォロワー

#InterSystems Demo Olympics

0 投稿0 フォロワー
お知らせ
Mihoko Iijima · 2023年2月26日

InterSystems 技術文書ライティングコンテスト:InterSystems IRIS チュートリアル

開発者の皆さん、こんにちは! 21作品の応募があったデベロッパーツールコンテストが終わったばかりですが、次のコンテストの開催が決定しました! ✍️ 技術文書ライティングコンテスト:InterSystems IRIS チュートリアル ✍️ 3月1日~31日までの期間に InterSystems IRISプログラマーを対象としたチュートリアルを投稿してください。チュートリアルのレベルは初級、中級、上級のいずれでもかまいません。IRISプログラマ向けのチュートリアルを投稿してください。 🎁 参加者全員への賞品: 投稿いただいた方全員に参加賞があります。 🏆 特賞: 選ばれた6作品には特別賞があります。 賞品 1. 期間内にチュートリアルを投稿された方全員に以下の特別賞があります! 🎁 Branded Organic Canvas Tote Bag 🎁 Moleskine Lined Notebook 2. エキスパートアワード – InterSystemsのエキスパートにより審査されます。 🥇 1位: Mars Pro Bluetooth speakers / AirPods Max 🥈 2位: Apple AirPods Pro with Wireless Charging Case / JBL Pulse 4 Light Show Speaker 🥉 3位: Magic Keyboard Folio for iPad / Bose Soundlink Micro Bluetooth Speaker (当選者は、獲得した賞品より低い順位の賞品と交換することができます) 3. 開発者コミュニティアワード – 「いいね!」が最も多かった記事に贈られます。受賞者は、以下の賞品の中から1つを選ぶことができます。 🎁 Magic Keyboard Folio for iPad 🎁 Bose Soundlink Micro Bluetooth Speaker メモ: 著者は 1ノミネートに対して1つの賞品を獲得できます(一人の著者は、エキスパートノミネートで1賞品、コミュニティノミネートで1賞品 の合計 2 つの賞品を獲得することができます)。 同点の場合は、同点の記事に対するエキスパートの投票数を同点判定基準とします。 参加資格 どなたでもご参加いただけます!(InterSystems 開発者コミュニティのアカウントを作成するだけでご応募いただけます) コンテストのスケジュール 📝 3月1日~31日: この期間にコミュニティへの記事の投稿と投票が行われます。 期間中に記事を公開してください。 開発者コミュニティメンバーは、公開された記事に「いいね!」をつけることで「開発者コミュニティアワード」の投票を行ったことになります。 《注意》記事の公開が早ければ早いほど、「いいね!」を集める期間が長くなります。 応募条件 ❗️ コンテスト期間中に書かれた記事で、以下の条件を満たすものは、自動的にコンテストに参加することができます。 InterSystems IRISのチュートリアルを投稿してください。チュートリアルのレベルは初級、中級、上級のいずれでもかまいません。 英語での投稿をお願いします。 日本独自ルール:コミュニティ担当者で英語に翻訳しますので、日本のコミュニティへ日本語で投稿してください! 記事は、新しい記事で投稿してください(既存の記事の続編でも構いません)。 他のコミュニティで投稿された記事の翻訳記事では応募できません。 記事を投稿する際 チュートリアルタグ をつけて投稿してください。 記事は400文字400単語以上(=英語記事にした場合のカウント)としてください(リンクとコードは文字制限にカウントしません) 同じ作者から投稿は3記事までとします。 同じトピックであっても異なる著者による異なる内容の記事であれば許可されます。 * チュートリアルは開発者が特定のタスクや一連のタスクを完了できるように、手順を示してください。 🎯 EXTRA BONUSES 今回は、当選に有利なボーナスを追加することにしました!ぜひチェックしてください! Bonus Nominal Details Topic bonus 5 提案されたトピックのリスト(下記)にあるトピックに関する記事であれば、ボーナスとしてエキスパート5票(エキスパートが選ぶ1位が3票です)を獲得できます。 Video bonus 3 記事の表現形式:記事の投稿のほかに、解説動画作成するとボーナスポイントを獲得できます。 Discussion bonus 1 InterSystemsのエキスパートにより最も有益な議論が行われた記事には、ボーナスポイント1ポイントを獲得できます。 Translation bonus 1 翻訳記事を他リージョンのコミュニティに投稿するとボーナスポイントを獲得できます。翻訳方法はこちらの記事をご参照ください。 メモ:1記事つき1票のみ獲得できます New member bonus 3 コンテストに参加経験のない方は、3エキスパート票を獲得できます。 トピック候補 ボーナス特典をゲットできるトピック案です。 ✔️ Working with IRIS from C#(​​​C#からIRISを操作する方法)✔️ Working with IRIS from Java(JavaからIRISを操作する方法)✔️ Working with IRIS from Python(PythonからIRISを操作する方法)✔️ Using Embedded Python(Embedded Pythonの使用方法)✔️ Using Python API(PythonAPIの使用方法)✔️ Using Embedded SQL(埋め込みSQLの使用方法)✔️ Using ODBC/JDBC(ODBC/JDBCの使用方法)✔️ Working with %Query/%SQLQuery(%Query/%SQLQueryを操作する方法)✔️ Using indexes(インデックスの使用方法)✔️ Using triggers(トリガの使用方法)✔️ Using JSON(JSONの使用方法)✔️ Using XML(XMLの使用方法)✔️ Using REST(RESTの使用方法)✔️ Using containers(コンテナの使用方法)✔️ Using kubernetes(Kubernetesの使用方法) 注)同じテーマでも、著者が異なる記事はOKです ➡️ InterSystems Discord に参加してルールやトピック、ボーナスについてチャットしましょう! 皆さんの✨素敵✨な記事をお待ちしています! 重要事項:賞品の配送は国によって異なり、一部の国では不可能な場合があります。制限のある国のリストは、@Liubka.Zelenskaia までお問い合わせください。 現在16記事が投稿されていますがその中の1つは、🗾日本のコミュニティメンバーからの投稿です👍 英語記事:https://community.intersystems.com/post/backup-and-rebuilding-procedure-iris-server 日本語記事:https://jp.community.intersystems.com/node/538021 投票は英語記事への「いいね👍」で行っています。ぜひ日本からの投稿を応援してください📣 さて、今回のお題ですが、レベルを問わない InterSystems IRIS のチュートリアルです。 いつも使っているこの使い方、実は初めて使う人には良い内容かも! 最初こんな風に使っていたけど、実はこの使い方のほうがいいかも! など、ご経験された内容を新しいコミュニティメンバーに共有するイメージでぜひ投稿してみてください。 投稿は直接英語版コミュニティに投稿いただいても、まずは日本語で日本のコミュニティに投稿いただいてもどちらでも大丈夫です(#チュートリアル のタグをつけて投稿いただければ、日本のコミュニティからご連絡いたします)。 なお英字にした際、URLやコマンド実行例を除き「400単語以上の記述が必要」となりますので、ご注意ください。 英単語のカウントは、コミュニティのエディタをデフォルトモード「WYSIWYG」にした状態で右下に表示されます。確認にご利用ください。
お知らせ
Mihoko Iijima · 2022年11月9日

InterSystems IRIS/InterSystems IRIS for Health コミュニティエディションのダウンロード方法

開発者の皆さん、こんにちは! InterSystems IRIS と InterSystems IRIS for Health のコミュニティエディションですが、InterSystems IRIS ダウンロードページからお好みのプラットフォームのキットを自由にダウンロードいただけます。 この記事では、改めてダウンロードページの使い方をご紹介いたします! 👈開発者コミュニティのページの左端にこんなリンク集がありますので、「InterSystems IRIS ダウンロードページ」をクリックします。 クリック後、ログイン画面が表示されます。 開発者コミュニティのアカウントか、WRCダイレクトのアカウントでログインします。 開発者コミュニティのアカウントはオンラインラーニングのアカウントと共通です。 アカウントをお持ちでない方は、「Register for a new account」のリンクからアカウント登録をお願いします。 以下の流れでアカウント登録が行えます。 お名前、社名、リージョン(Japanを選択)、メールアドレスなどを記入し [Terms and Conditions] ご確認後、チェックボックスをチェック✅し [Continue] ボタンをクリックすると、トークン入力画面に移動します。 1で登録したメールアドレスにトークンが送付されますので、コピーします。(有効期限は30分です) トークンを入力します。 パスワード設定画面 [Chooose Password] が表示されるのでパスワードを入力し、[Continue]ボタンをクリックすると、元のページに戻るリンクが表示されるので、クリックします。 WRCダイレクトのアカウントでログインした方は、ログイン後の画面に表示される👇以下ロゴ の [Download Community Edition](黄色い線の)ボタンをクリックすると、ダウンロード画面に移動します。 開発者コミュニティのアカウントでログインされた方は、ログイン後、すぐにダウンロード画面が表示されます。 後は、①、②、③の項目を選択し、をチェックしたら、ボタンクリックでダウンロードいただけます。 ダウンロード後のインストール方法については、以下ビデオでご紹介しています。ぜひご参照ください。 🎦【はじめての InterSystems IRIS】セルフラーニングビデオ:基本その1:InterSystems IRIS Community Edition をインストールしてみよう! InterSystems IRIS for Healthも上記ビデオでご紹介している同様の方法でインストールいただけます。 コミュニティエディションの制限事項についての最新情報は、以下ドキュメントをご参照ください。 ✅ InterSystems IRIS Community Edition Limitations バージョン2022.2 では、以下の制限があります(2022.1以前の制限から変わっています)。 合計データ:10GB 接続数:8 コア数:20 日本語ドキュメント:InterSystems IRIS Community Edition の制限」からも制限事項をご確認いただけますが、時期によっては翻訳が最新情報に追い付いていないこともありますので、最新情報は、英語ドキュメントをご参照ください。 はじめて InterSystems IRIS/InterSystems IRIS for Health を操作される方向けに、セルフラーニングビデオやチュートリアルを各種ご用意しております。ご興味のある内容から始めてみてください! 🎦 InterSystems 製品を初めて使用する方向け学習コンテンツなど 操作してみて、疑問に感じたことや 困ったことなどありましたら、ぜひコミュニティにご質問ください! コミュニティメンバーと一緒に考えて問題を解決していきましょう!
記事
Mihoko Iijima · 2023年3月2日

InterSystems IRIS/InterSystems IRIS for Health コミュニティ版と製品版の違いについて

これは InterSystems FAQ サイトの記事です。 コミュニティ版は1インスタンスでの利用を想定しているため、2インスタンス以上で設定する構成は利用できません。 製品版と異なる点は以下の通りです。 組込みのライセンスキーを利用しているため、別のライセンスキーを適用できません。 同時接続 8ユーザまで利用できますがキーには期限があります。 キーの期限を迎えた場合は、コミュニティ版の新バージョンに切り替えることで新しいキーが適用されます。 ミラーリング、ECP、シャーディング、InterSystems APIマネージャ(IAM)を利用できません。 データベースのサイズに制限があります(10GB)。 インストール環境のCPU数に制限があります(20コア)。 最新情報は InterSystems IRIS Community Edition Limitations をご確認ください。※上記制限事項はバージョン2022.2~の情報です。バージョン2022.1以前の制限事項は日本語ドキュメント「InterSystems IRIS Community Edition の制限」をご参照ください。 コミュニティ版のダウンロード方法ついて詳しくは、「InterSystems IRIS/InterSystems IRIS for Health コミュニティエディションのダウンロード方法」をご参照ください。
お知らせ
Mihoko Iijima · 2023年4月3日

★受賞者発表!★ InterSystems 技術文書ライティングコンテスト:InterSystems IRIS チュートリアル

開発者の皆さん、こんにちは! 第4回 InterSystems 技術文書ライティングコンテスト:InterSystems IRIS チュートリアル が終了しました。 期間内に投稿された🌟 24の素晴らしい記事はこちらから 🌟ご覧いただけます。 この記事では、コンテスト受賞者を発表します📣 ⭐️ エキスパートアワード – InterSystems のエキスパートが選出した記事: 🥇 1位: @Muhammad.Waseem さんが投稿された InterSystems Embedded Python in glance 🥈 2位: @Rizmaan.Marikar2583 さんが投稿された InterSystems Embedded Python with Pandas - Part 1 🥉 3位: @Heloisa.Paiva さんが投稿された SQLAlchemy - the easiest way to use Python and SQL with IRIS's databases ⭐️ 開発者コミュニティアワード – 「いいね!」が最も多かった記事: 🏆 @Maria.Gladkova さんが投稿された Setting up VS Code to work with InterSystems technologies そして! ⭐️ 多くの記事を投稿された方: @Robert.Cemper1003さん: 4 記事 @Heloisa.Paivaさん: 3 記事 @Irene.Mikhaylovaさん: 3 記事 多く記事を投稿された3名の方には、「Magic Keyboard Folio for iPad」または「 Bose Soundlink Micro Bluetooth Speaker」のどちらかを贈呈します! 👏投稿してくださった開発者の皆さんをご紹介します👏 @Robert.Cemper1003 さん @Heloisa.Paiva さん @Muhammad.Waseem さん @wang.zhe さん @Irene.Mikhaylova さん @Maria.Gladkova さん @Yone.Moreno さん @Akio.Hashimoto1419 さん @Julian.Matthews7786 さん @Daniel.Aguilar さん @water.huang さん @Oliver.Wilms さん @Rizmaan.Marikar2583 さん @姚.鑫 さん @Zhong.Li7025 さん @Jude.Mukkadayil さん @Roger.Merchberger さん コンテストの記事一覧はこちらからご覧いただけます👉 Tech Article contest #4 開発者コミュニティに素晴らしい記事を投稿いただき、ありがとうございました! なお、賞品は現在制作中です。発送の準備ができ次第、参加者の皆様にご連絡させていただきます 参加賞?が届きました。ありがとうございます!トートバッグと、ノートです! @Akio.Hashimoto1419 さん、共有ありがとうございます! (私も欲しいです!) Great 👍 thanks for your contribution, @Akio.Hashimoto1419!
記事
Toshihiko Minamoto · 2021年3月10日

ZPM モジュールの構造: InterSystems ソリューションのパッケージ化。

デベロッパーの皆さん、こんにちは! 最近、当社は [InterSystems Package Manager](https://community.intersystems.com/post/introducing-intersystems-objectscript-package-manager) (ZPM) をリリースしました。 ZPM を開発した理由の 1 つは、ソリューションをパッケージ化して ZPM レジストリに提出することにより、そのデプロイを「install xxx package」のようなコマンドを実行するだけの単純な作業にするためです。 これを行うには、InterSystems IRIS パッケージの中身を説明する module.xml ファイルをリポジトリに導入する必要があります。 この記事では、module.xml ファイルの異なる構成要素を説明し、独自のファイルを作成する方法をご紹介します。 まずは、samples-objectscript パッケージから始めます。以下のコマンドを実行すれば、IRIS に [ObjectScript のサンプルアプリケーション](https://openexchange.intersystems.com/package/Samples-ObjectScript-4)がインストールされます。 zpm: USER>install samples-objectscript おそらく、これほどシンプルなパッケージはないと思います。以下は、パッケージの中身を説明する [module.xml](https://github.com/isc-zpm/Samples-ObjectScript/blob/master/module.xml) です。 <Export generator="Cache" version="25"> <Document name="samples-objectscript.ZPM"> <Module> <Name>samples-objectscript</Name> <Version>1.0.0</Version> <Packaging>module</Packaging> <SourcesRoot>src</SourcesRoot> <Resource Name="ObjectScript.PKG"/> </Module> </Document> </Export> それでは、文書の中身を一行ずつ見ていきましょう。 module.xml は、Cache/IRIS の XML 文書のファミリーに属しているため、この行はその関係性を示すもので、内部ライブラリがこの文書を認識できるようにしています。 次のセクションはこちら。     パッケージには名前を付けます。 名前には小文字と「-」の記号を含めることができます。 (この場合なら samples-objectscript)。 パッケージ名は、拡張子に「.ZPM」を使い、Document タグの name 節に入れてください。 Document の内部要素は以下の通りです。 - パッケージ名。 今回は、 <Name>samples-objectscript</Name> - パッケージバージョン。 今回は、 <Version>1.0.0</Version> モジュール - パッケージの種類。 モジュールパラメーターは以下のように入力します。 <Packaging>module</Packaging> - ZPM がインポートする ObjectScript を探すフォルダー。  今回は「/src」フォルダーで ObjectScript を探すよう指示します。 <SourcesRoot>src</SourcesRoot> - インポートする ObjectScript の要素。 パッケージやクラス、include、グローバル、dfi などが含まれます。  SourceRoot フォルダー以下の構造は次のようになります。 /cls - Folder=Package 内にある Class=file.cls 形式のすべての ObjectScript クラス。 サブパッケージはサブフォルダーです。 /inc - _file.inc_ 形式のすべての include ファイル。 /mac - すべての mac ルーチン。  /int - すべての「中間」ルーチン (別名「他のコード」、mac コードをコンパイルした結果、またはクラスやマクロを持たない ObjectScirpt)。 /gbl - XML 形式でエクスポートされるすべてのグローバル。 /dfi - XML 形式でエクスポートするすべての DFI ファイル。 各ピボットは pivot.dfi ファイルに、各ダッシュボードは dashboard.dfi ファイルに作成されます。 例えば、 ObjectScript ページをインポートするとします。 これをうけて、ZPM は /src/cls/ObjectScript フォルダーの中を見て、そこからすべてのクラスをインポートします。 <Resource Name="ObjectScript.PKG"/> なので、 パッケージ化するソリューションを作成するには、ObjectScript クラスを「/cls」フォルダー内にあるリポジトリのいずれかのフォルダーに入れ、すべてのパッケージとクラスを class=file.cls 形式の package=folder に入れます。 クラスを違うかたちでリポジトリに保管したいけれども、いちいち手作業で ObjectScript 用に適切なフォルダー構造を作成するのは避けたいという場合、それを解決してくれるツールはたくさんあります。例えば、Atelier や VSCode Object Script は、まさにその条件が満たされるかたちでクラスをエクスポートしますし、他にはパッケージ化する準備ができているアーチファクトをネームスペースからすべてエクスポートしてくれる [isc-dev](https://openexchange.intersystems.com/package/ISC-DEV) ユーティリティなどがあります。 **mac ルーチンのパッケージ化** これはクラスの場合とよく似ています。 ルーチンを /mac フォルダーに入れるだけです。 [例はこちら。](https://github.com/isc-zpm/DeepSeeButtons/blob/master/module.xml) <Export generator="Cache" version="25"> <Document name="DeepSeeButtons.ZPM"> <Module> <Name>DeepSeeButtons</Name> <Version>0.1.7</Version> <Packaging>module</Packaging> <SourcesRoot>src</SourcesRoot> <Resource Name="DeepSeeButtons.mac"/> </Module> </Document> </Export> **その他の要素** また、以下のような、オプションとして使える要素もあります。 と の要素が含まれる場合があります。 例: <Author> <Organization>InterSystems</Organization> <CopyrightDate>2019</CopyrightDate> </Author>   **CSP/Web アプリケーションのパッケージ化** ZPM はウェブアプリケーションもデプロイできます。 これを成功させるには、CSPApplication 要素を [CSPApplication パラメーター](https://docs.intersystems.com/irislatestj/csp/documatic/%25CSP.Documatic.cls?PAGE=CLASS&LIBRARY=%25SYS&CLASSNAME=Security.Applications)の節と一緒に導入します。  例えば、DeepSeeWeb の [module.xml](https://github.com/isc-zpm/DeepSeeWeb/blob/master/module.xml) にある CSPApplication タグをご覧ください。 <CSPApplication Url="/dsw" DeployPath="/build" SourcePath="${cspdir}/dsw" ServeFiles="1" Recurse="1" CookiePath="/dsw" /> この設定により、**/dsw** という名前のウェブアプリケーションが作成され、リポジトリの **/build** フォルダーにあるすべてのファイルが IRIS csp ディレクトリの $**{cspdir}****/dsw** フォルダーにコピーされます。 **REST API アプリケーション** これが REST-API アプリケーションである場合、CSPApplication 要素はディスパッチクラスを含み、MDX2JSON module.xml のように構成される可能性があります。 <CSPApplication Path="/MDX2JSON" Url="/MDX2JSON" CookiePath="/MDX2JSON/" PasswordAuthEnabled="1" UnauthenticatedEnabled="1" DispatchClass="MDX2JSON.REST" /> **依存関係** モジュールをインストールする際には、ターゲットシステムに別のモジュールがインストールされている場合があります。 これは、複数の 要素を含み得る 要素の中にある 要素により 説明されている場合があります。 このそれぞれに、 と があり、 また先にインストールされているべき 他のモジュールとそれらのバージョンが記述されています。 こういった状況では、ZPM はモジュールがインストールされているかどうかを確認し、インストールされていなければ、インストールを実行します。 こちらは、DSW モジュールの MDX2JSON モジュールに対する依存関係を示した例です。 <Dependencies> <ModuleReference> <Name>MDX2JSON</Name> <Version>2.2.0</Version> </ModuleReference> </Dependencies> 以下も依存関係の[例](https://github.com/isc-zpm/ThirdPartyChartPortlets/blob/master/module.xml)です。[ThirdPartyPortlets](https://github.com/isc-zpm/ThirdPartyChartPortlets) が [Samples BI](https://openexchange.intersystems.com/package/Samples-BI)(holefoods) に依存しています。 <Dependencies> <ModuleReference> <Name>holefoods</Name> <Version>0.1.0</Version> </ModuleReference> </Dependencies> また、任意のコードを実行して、データと環境をセットアップするというオプションもあります。これについては、次回の記事で解説します。 **独自のパッケージをビルドする方法** それでは、 module.xml ができたら、パッケージをビルドして、module.xml の構造が正しいかどうかをテストすることができます。 テストは、ZPM クライアントを使って実行できます。 ZPM を IRIS システムにインストールし、以下の読み込みコマンドでパッケージのコードを読み込みます。 zpm: NAMESPACE>load path-to-the-project パスは、パッケージのリソースを含み、かつルートフォルダーに module.xml を持つフォルダーを指しています。  例えば、 パッケージのビルドは、[こちらのプロジェクト](https://github.com/isc-zpm/Samples-ObjectScript)を使ってテストできます。 チェックアウトしたら、docker-compose-zpm.yml を使ってコンテナをビルドします。 SAMPLES ネームスペースでターミナルを開き、ZPM を呼び出します。 zpm: SAMPLES> zpm: SAMPLES>load /iris/app [samples-objectscript] Reload START [samples-objectscript] Reload SUCCESS [samples-objectscript] Module object refreshed. [samples-objectscript] Validate START [samples-objectscript] Validate SUCCESS [samples-objectscript] Compile START [samples-objectscript] Compile SUCCESS [samples-objectscript] Activate START [samples-objectscript] Configure START [samples-objectscript] Configure SUCCESS [samples-objectscript] Activate SUCCESS パスが「/iris/app」になっているのは、docker-compose-zpm.yml の中でプロジェクトのルートをコンテナの「/iris/app」フォルダーにマップすると指定しているためです。 したがって、このパスを使えば、ZPM にプロジェクトの読み込み元を指定することができます。 ついに、 読み込みに成功しました。 つまり、パッケージをデベロッパーコミュニティのリポジトリに提出する際にこの module.xml を使えるということです。 以上が、アプリケーションに使う適切な module.xml ファイルを作成する方法です。  **InterSystems コミュニティのリポジトリにアプリケーションを提出する方法** 現時点で、要件は 2 つあります。 1. アプリケーションが [Open Exchange](https://openexchange.intersystems.com) に記載されている。 2. [Community Package Manager のリポジトリ](https://pm.community.intersystems.com/packages/-/all)にアプリケーションを提出することをご希望の方は、私までダイレクトメッセージをお送りいただくか、この記事のコメント欄よりお知らせください。 module.xml が正常に動作していることをご確認ください!)
記事
Mihoko Iijima · 2021年1月15日

TPCによるベンチマーク結果や、他DBと高速性について比較したベンチマーク結果の公表についての InterSystems の考え

これは InterSystems FAQ サイトの記事です。 InterSystemsでは、既存のお客様および見込みのお客様と実施した他DBMS製品との比較を行った様々なベンチマーク結果を持っています。 しかし、それらの結果に関して、ほとんどのRDBMSベンダのライセンス条項に当該RDBMSベンダの承諾なしにベンチマーク結果を公表してはならないという条項があるため、現実問題として一般的な公表は、難しい状況です。 一方、TPC等の公共の機関等がベンチマーク条件を策定、公開しているベンチマークに関しては、必要な実施コストに対して得られるものが少ないと考えており、過去にも実施しておりませんし、将来も実施する予定はありません。 InterSystemsは、TPCの様な現実のシナリオからかけ離れたベンチマークを実施するのではなく、実際のアプリケーションを模したベンチマークシナリオを構築し、それに基づき、各ハードウェアベンダ、パートナ企業、エンドユーザとの協力の基、ベンチマークを実施しております。 こちらのレポートは、それらのベンチマーク結果の1つに基づくアナリストレポートです。 ぜひご参照ください。