0 フォロワー · 46 投稿

VSCodeは、Microsoftが提供する人気のクロスプラットフォームエディターVisualStudio Codeの短縮名です。 詳細はこちら

記事 Toshihiko Minamoto · 10月 16, 2025 2m read

私が先週リリースしたInterSystems Testing Managerの新しいバージョンでは、@Timothy Leavittの優れた
テストカバレッジツールが追加され、私は2025年度Developer Toolsコンテストに出品しました。

こちらは、IPMプロジェクトのユニットテストが、IPMリポジトリでソート順を上書きできると思われる機能をまだカバーしていないことを示すティザー的なスクリーンショットです。

88行目が開発者への警告として赤くハイライトされていることに注目してください。

VS Codeのエクスプローラービューには「バッテリーインジケーター」風のアイコンが表示されており、このクラスのメソッド内の実行可能な行のうち、テストでカバーされているのが76%のみであるため、黄色になっています。 インジケーターにカーソルを合わせると、さらに詳しい情報が表示され、メソッドのカバレッジ(9個中8個)が、エディター内のオプションのテストカバレッジツールバーに第2のインジケーターとして表示されます。

VS Codeでは、しきい値を設定できるほか、赤・黄・緑が区別しにくい場合には、色自体も構成できます。

いかがでしょうか? すでにInterSystemsの%UnitTestフレームワークをご利用中であれば、ぜひご自身でもお試しください。 ご意見・ご感想は大歓迎です。コンテストの投票への投票もぜひお願いします。投票は米国東部時間で8月3日(日)深夜まで受け付けています。

0
0 20
お知らせ Toshihiko Minamoto · 10月 14, 2025

%UnitTestフレームワークのユーザーは、InterSystems Testing Manager拡張機能の最新リリース(v2.0.0)を@Timothy Leavittの素晴らしいテストカバレッジツールと組み合わせることで、VS Code内でテストカバレッジ情報を取得できるようになりました。

上部にテストカバレッジのペインが表示されています。左側のテストエクスプローラーと併せて確認しやすいように、右側のセカンダリサイドバーに移動させました。

直近のテスト実行(テストカバレッジツール自体のユニットテストすべて)の結果、TestCoverage.Procedures内のBitValueメソッドはカバーされていましたが、BitCountメソッド(および他の6つのメソッド)はカバーされていないことに注目してください。 TestCoverageパッケージの全体で43.08%の実行可能行のみが、ユニットテストによってカバーされていました。

InterSystems Testing Managerに対するこの大幅なアップグレードを、現在開催中のDeveloper Toolsコンテスト に出品します。 もし良いと思っていただけたら、来週の投票でぜひ応援してください!

0
0 29
InterSystems公式 Seisuke Nakahashi · 7月 23, 2025

インターシステムズは、VS Code - ObjectScript 拡張機能のバージョン 3.0.5 をリリースしました。 本リリースには、多くのバグ修正 および 利用状況データ収集の変更が含まれています。より多くの製品使用データを収集することで、ユーザのみなさまにとって最も良い影響につながる修正と機能強化を特定し、優先順位をつけて実装することが可能となります。 個人を特定できる情報 (PII) が収集されることはありません。また、VS Code の telemetry.telemetryLevel 設定で利用状況データ収集を無効にすることも可能です。 収集されるデータの一覧は こちら をご覧ください。 ObjectScript 拡張機能をご利用いただきありがとうございます。フィードバックがございましたら、お気軽に 問題をご報告 ください。

0
0 38
質問 ima · 5月 13, 2025

VSCodeをサーバーサイド編集モードで使っていますが、プロジェクト内プログラムの右クリックで「Remove from Project」はありますが、逆に既存プログラムを既存プロジェクトに追加するメニューが無いように思います?
追加する方法を教えてもらえませんか?

IRIS for Windows (x86-64) 2024.3 (Build 217U) Thu Nov 14 2024 17:59:58 EST

VS InterSystems ObjectScript v3.01

Intersystems ObjectScript Extension Pack v1.0.3

InterSystems server manager v3.10.0

2
0 102
InterSystems公式 Seisuke Nakahashi · 2月 11, 2025

開発者コミュニティのみなさま、2025年もよろしくお願いします!今年も素晴らしい製品やニュースをみなさまにお届けいたします。本日は VS Code の InterSystems Language Server 拡張機能の最新バージョンをご紹介します。Language Server 拡張機能の多くは、ObjectScript 拡張機能を通じてご提供することが多いです。そのため、コード補完機能やホバー機能といった、2024年に追加された Language Server 拡張機能の新機能には、なかなか気づきにくいかもしれません。ぜひ Language Server 変更履歴 で、見逃していたかもしれない新機能がないかご確認ください。最新バージョン2.7.0では、Windows ARMプラットフォームがサポートされたので、Surface Pro 11 (私はこの記事をウキウキしながら書いています) のようなデバイスをお持ちの方は、お使いのマシンで素晴らしい ObjectScript 開発を体験いただけます。Language Server 拡張機能をお試しいただき、何かありましたらぜひコメントをお寄せくださいませ。お待ちしております。

0
0 69
記事 Akio Hashimoto · 12月 22, 2024 2m read

​ UDL形式でのインポート・エクスポートが出来ない古いCahceバージョンのソースを保守していたり、古くからのバージョン管理下においてXMLでのバージョン管理を行っている環境であったりと、未だにXMLでのエクスポート・インポートが必要になる場面はまれにあるかと思います。 今回、そういった環境下でもわざわざ管理ポータルを開かずとも、VSCodeでXML形式でエクスポートする拡張機能をリリースしましたので、共有させて頂きます。

機能について

編集画面、あるいは、VSCodeのエクスプローラータブ内からクラスを選択し、コンテキストメニューの「XML形式でエクスポート」を実行します。

image

image

XMLファイルは所定の場所に保存されます。保存先は設定で指定が出来ます。

複数のクラスを選択した場合、初期値では1対1でXMLファイルが保存されます。

image  

設定を変更する事で、1つのXMLファイルとして保存する事も可能です。

image  

利用方法

  1. 拡張機能の検索窓から"ObjectScript To XML"を検索し、インストールします。

image

  1. READMEに記載されているソースをダウンロードし、IRISへインポートします。

  2. ウェブ・アプリケーションを作成します。

  3. 必要な場合、拡張機能の設定値を変更します。

image   

"objectscript-to-xml": {
    "applicationName": "/exml-api",
    "exportDir": "exports",
    "bundled": false
}
  • applicationNameに作成したウェブ・アプリケーションの名前を指定します。

  • exportDirにはエクスポートしたXMLファイルの配置先を指定します。

  • bundledがtrueの場合は、1つのXMLファイルとしてエクスポートされます。既定値はfalseです。

0
0 198
質問 Akio Hashimoto · 11月 28, 2024

ここ最近になって、VSCodeで以下のようなエラーが出るようになり、波線だらけになってしまいます。
IRISサーバーとは連携出来ていて、コンパイルも通るので大きな問題ではないのですが、ソースが真っ赤っ赤になってとっても見辛いです。
これらを消す方法があれば教えて下さい。
VSCode、拡張モジュール共に最新です。

Avoid using legacy if/else flow control statements (cachequality:OS0089)

鍋蓋カッコを使わない1行のIF文のところで真っ赤な波線が出まくります。
例:if (a = "") set b = "c"
 

Consider using an If statement instead of a postconditional (cachequality:OS0039)

コマンドの後付条件を記載しているところで、青い波線が出まくります。
例:quit:var=""
 

This QUIT invocation exits the current method; consider using RETURN instead (cachequality:OS0031)

処理の途中で、Quitと書いていることろが黄色い波線が出まくります。

ちなみに、以下のようなメッセージも出ます。

5
1 253
お知らせ Toshihiko Minamoto · 11月 20, 2024

ほとんどの方が @Daniel TamajonCachéQuality プロジェクトをご存知かと思います。 まだご存知でない方のために説明すると、InterSystems 製品用に記述されたコードの静的構文アナライザーです。 コード内の様々な種類の問題や潜在的なバグがお客様のプロダクション環境で見つかる前に、それらを検出して解決するのに役立てられます。 つまり、CachéQuality を使用することで、より優れた製品を提供できるようになります。 ObjectScript コードのチェックに使用されるルールの完全なリストは、こちらをご覧ください。

これは Studio ですでに提供されているものですが、 VSCode でも使用できるようになりました。

インストール

VSCode の拡張機能セクションで、「cachequality」を検索し、SonarLint for CachéQuality をインストールします。より優れたエクスペリエンスを得るには、先に VSCode for ObjectScript をインストールしてください。 いずれの拡張機能も、「objectscript」の検索で見つかります。

この拡張機能をインストールした時点から、構成を行わずに使用し始めることができ、クラスを開くと、検出されるすべての問題が下線表示されるようになります。

下線表示にマウスポインターを合わせると、詳細を表示できます。

また、直接 VSCode で問題の詳細を開くこともできます。

VSCode には問題ビューが備わっており、Cmd+Shift+M ホットキーで有効にできます。このビューには、開いているソースファイルで検出された問題のリストが表示されます。 CacheQuality が検出した問題のリストを確認し、実際の場所に移動できます。

修正された行は保存後に再チェックされます

ただし、制限があります。 ルールのリストと、ルールに関連する他のいくつかのパラメーターを制御できません。 拡張機能は、デフォルト値による事前構成済みで提供されます。 さらに制御が必要な場合は、コネクテッドモードを使用できます。

コネクテッドモード

この拡張機能には、コネクテッドというモードも備わっています。 このモードでは、SonarQube サーバーをインストール済みの CacheQuality プラグインに接続できます。

SonarQube を使って、ルールのリストをカスタマイズできます。 ルールのパラメーターを無効化または有効化し、変更できます。 たとえば、`To method has too many lines` ルールはデフォルトで 50 行以降にトリガーされますが、この数値を変更することができます。

SonarQube Server がある場合は、まず、プロジェクト全体を解析する必要があります。 これには様々な方法があり、詳細は SonarQube ドキュメントに記載されています。 また、VSCode からプロジェクトにアクセスするにはトークンが必要です。

VSCode 設定の変更

    "sonarlint.connectedMode.project": {
        "projectKey": "Samples",
        "serverId": "local"
    },
    "sonarlint.connectedMode.servers": [
        {
            "serverId": "local",
            "serverUrl": "http://localhost:9000",
            "token": "65b19eb2ef04cd81a033c89820acf65d1f349c4f"
        }
    ]

projectKey は SonarQube に定義されているもので、サーバーセクションに定義されたリストの serverId である必要があります。

設定を保存し、SonarQube 側に変更を保存したら、バインディングを更新して VSCode を最新状態にします。

設定が正しく更新されたら、以下の通知が表示されます。

プロジェクトに使用されているルールのリストをカスタマイズする場合は、まず、ビルトインの品質プロファイル Caché Quality をコピーする必要があります。

そして、プロジェクトに新しいプロファイルを有効化します。

検出された一部の問題は SonarQube で解決でき、VSCode 拡張機能はそれを認識するため、再度表示されることはありません。

たとえば、このような問題があります。

呼び出されないメソッドの問題を誤検出として解決し、変数の問題を修正しないようにしましょう。

ファイルを開き直すと、新しい情報でもう一度解析されます。 %OnNew メソッドには未解決の問題が残っていません。

問題とフィードバック

CacheQuality プロジェクト自体はオープンソースではありませんが、VSCode の拡張機能はオープンソースです。 問題やフィードバックはそちらにお送りください。

0
0 95
記事 Toshihiko Minamoto · 11月 5, 2024 1m read

Studio で最も便利な機能の 1 つにコードスニペットがあります。

以下は、スニペットを VSCode に追加する方法です。

以下は、一般的な手順です。

1. ファイル - 設定 - ユーザースニペットに移動し、objectscript を選択します。

2. スニペットを追加します。以下に例を示します。

"SQL Statement": {
    "prefix": ["sql"],
    "body": ["#dim rs As %SQL.ISelectResult",
            "set rs = ##class(%SQL.Statement).%ExecDirect(,\"SELECT * FROM\")",
            "while rs.%Next() {",
            "\twrite rs.ID, !",
            "}"]
}

要素は以下のように定義されています。

  • prefix - スニペットを表示するのに入力する必要のある文字
  • body - スニペットの本体

さらにスニペットには、以下のようにプレースホルダーも含められます。

"Method": {
    "prefix": ["method"],
    "body": ["set sc = ##class(${1:class}).${2:method}()"]
}

このスニペットを挿入すると、最初のプレースホルダーの開始点に自動的に移動します。プレースホルダーは <TAB> でスクロールできます。

コーディングをお楽しみください!

0
0 116
記事 So Ochi · 10月 13, 2024 10m read

はじめに

生成AIを活用したアプリケーション開発は、Python、JavaScriptなどのメジャー言語による体験記事がよく見られます。一方、IRISのObjectScriptの開発に言及された記事は比較的少ないのが現状です。そこで、本記事では生成AIがObjectScriptの開発にどこまで活用できるのかを検証しました。

特にDevOpsのプロセスにおいて、生成AIは様々なシーンでの活用が期待できます。今回は開発工程に注目し、以下の観点から生成AIの有効性を調査しました。

  • 開発
    • コードの自動生成
    • 環境構築のアシスタント(テーブルの作成)
  • 検証
    • テストデータ生成のサポート

環境

本記事の検証は以下の環境で行いました。

開発環境

  • OS: macOS Sonoma
  • IRIS: 2023.4 (linux)

開発ツール IRISの開発にはStudioやVSCodeなどが利用可能ですが、今回は生成AIの活用に特化したエディタ「Cursor」を使用しました。

Cursorを選定した理由 Cursorは、生成AIによる支援機能に特化したコードエディタで、以下の特徴があります:

  • 生成AIの支援:コードの自動生成や提案、バグの検出、修正提案を行います。また、外部のドキュメントや複数のソースを指定し、生成内容に反映させる簡易なRAG機能も搭載されています。

  • VSCodeとの互換性:VSCodeをフォークして作られており、VSCodeユーザーはスムーズに移行できます。拡張機能もそのまま利用可能です。

IRISではv2024よりStudioは廃止となり、VSCodeが標準ツールとなります。そこで、VSCodeと互換性があり、生成AIとの親和性が高いCursorを選定しました。

選択した生成AIモデル GPT-4を使用しましたが、Claudeでも検証を行ったところ、どのモデルも大差ない結果となりました。 利用しやすいモデルを選んで試してみてください。

検証内容

今回は以下の内容を検証しました。

  • 簡単なプログラムの生成とターミナルでの実行
  • IRISのREST通信機能を使った商品情報検索APIの作成

サンプルプログラムの作成

まず、ユーザーに名前を入力させ、挨拶を返す簡単なルーチンを生成します。CursorでCommand+Lを押してチャットウィンドウを開き、以下のプロンプトを入力します。

あなたはObjectScriptの開発者です。
{仕様}をもとにコードを作成してください。
#仕様
- 以下の処理を実行するRoutineを作成する。
- macファイル名は"TEST.mac"とする。
1. ユーザーに名前の入力を促します。
2. 入力された名前が空であればエラーメッセージを表示します。
3. 名前が入力された場合、その名前を使って挨拶メッセージを表示します。

image

生成されたルーチンをTEST.macにコピーし、ターミナルで実行して動作を確認します。

image

REST APIの作成

簡易なプログラムの生成が確認できたので、次はより複雑なアプリケーションを作成してみます。

アプリケーションの仕様 IRISのREST通信機能を利用したAPIを作成します。ユーザーからのリクエストに基づき、サーバー上のデータベースから該当する商品情報をJSON形式で返します。

テーブルの作成 まずは、テーブルを作成しましょう。DDLの作成をAIに依頼します。

InterSystemsのIRISで{テーブル}を作成するためのDDLを出力してください
#テーブル
##名前
- Sample.Product
##列
- JanCd VARCHAR(13)
- ProductName VARCHAR(100)
- Price INT
## プライマリキー
- JanCd

image

生成されたDDLをターミナルから実行し、テーブルが正常に作成されたことを確認します。

image

テストデータの作成 テストデータの作成もAIにアシストしてもらいましょう。

image

テストデータが正常に登録されたことを確認します。

image

APIの作成 準備が整ったので、APIクラスを生成します。以下のプロンプトを使ってコードを作成します。

あなたはObjectScriptの開発者です。
{仕様}をもとに"Api.Product"クラスを作成してください。
#仕様
- REST通信でJSON形式で商品情報を返す。
- apiのURLは/products/:jancd
- %CSP.RESTクラスを継承する。
- Jsonデータの生成は%DynamicObjectクラスを利用する。
- レスポンスコードは、%responseを利用する。
1. jancdが指定されなかった場合、404を返す。指定された場合、以降の処理を続行する。 
2. "Sample.Product"テーブルをSQLで検索する。
- 取得項目: JanCd,ProductName,Price
- 検索条件: :jancdが指定された場合、テーブルをJanCdが一致するレコードを検索する。
3. 検索結果をJSON形式でREST通信結果として出力する。

image

生成されたコードを確認し、必要に応じて修正を加えます。クエリ結果の取得箇所で%Next()が実行されていなかったため、以下の修正を行いました。

Set tResult = tStatement.%Execute(jancd)
// -*-*-*-*- 処理を追加しました -*-*-*-*-
Do tResult.%Next()

If tResult.%SQLCODE = 100 {

curlコマンドを使用してAPIの動作を確認し、正常にJSONデータが返却されることを確認します。

image

最終的なソースは以下の通りです。今回は一部修正が必要でしたが、基本的な部分は生成AIが正しく対応していました。

  Class Api.Product Extends %CSP.REST
  {

  /// URLマッピング
  XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
  {
  <Routes>
      <Route Url="/products/:jancd" Method="GET" Call="GetProductInfo"/>
  </Routes>
  }

  /// 商品情報を取得するメソッド
  ClassMethod GetProductInfo(jancd As %String) As %Status
  {
      // jancdが指定されていない場合、404を返す
      If jancd = "" {
          Set %response.Status = 404
          Quit $$$OK
      }

      // "Sample.Product"テーブルをSQLで検索する
      Set tStatement = ##class(%SQL.Statement).%New()
      Set tSQL = "SELECT JanCd, ProductName, Price FROM Sample.Product WHERE JanCd = ?"
      Set tStatus = tStatement.%Prepare(tSQL)
      
      If $$$ISERR(tStatus) {
          Set %response.Status = 500
          Quit tStatus
      }
      
      Set tResult = tStatement.%Execute(jancd)
      Do tResult.%Next()
      
      // 検索結果がない場合、404を返す
      If tResult.%SQLCODE = 100 {
          Set %response.Status = 404
          Quit $$$OK
      }
      
      // 検索結果をJSON形式で出力する
      Set tProduct = ##class(%DynamicObject).%New()
      Do tProduct.%Set("JanCd", tResult.%Get("JanCd"))
      Do tProduct.%Set("ProductName", tResult.%Get("ProductName"))
      Do tProduct.%Set("Price", tResult.%Get("Price"))
      
      Write tProduct.%ToJSON(),!
      
      Quit $$$OK
  }

  }

既存コードの活用

次に、生成したAPIに商品名を部分一致で検索するメソッドを追加します。Cursorの外部ファイル参照機能を使い、先ほど生成したクラスを参考にしながら新しいメソッドを作成します。プロンプトは以下の通りです。

@Api.Product.cls 
以下の{仕様}で、"Api.Product"クラスにメソッドを追加してください。
#仕様
- GetProductInfo()の処理を参考にすること。
- apiのURLは/products/name/:productname
- Sample.ProductテーブルからAPIで指定された値が、ProductNameと部分一致するレコードを検索し、検索した結果をJson形式で返す。
- 検索結果は配列にして返す。

image

生成したコードは以下になります。(追加部分のみ抜粋)

  Class Api.Product Extends %CSP.REST
  {
      // ... 既存のコード ...

      /// URLマッピング
      XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
      {
      <Routes>
          // ... 既存のルート ...
          <Route Url="/products/name/:productname" Method="GET" Call="GetProductInfoByName"/>
      </Routes>
      }

      // ... 既存のコード ...

      /// 商品名で商品情報を取得するメソッド
      ClassMethod GetProductInfoByName(productname As %String) As %Status
      {
          // productnameが指定されていない場合、404を返す
          If productname = "" {
              Set %response.Status = 404
              Quit $$$OK
          }

          // "Sample.Product"テーブルをSQLで検索する
          Set tStatement = ##class(%SQL.Statement).%New()
          Set tSQL = "SELECT JanCd, ProductName, Price FROM Sample.Product WHERE ProductName LIKE ?"
          Set tStatus = tStatement.%Prepare(tSQL)
          
          If $$$ISERR(tStatus) {
              Set %response.Status = 500
              Quit tStatus
          }
          
          Set tResult = tStatement.%Execute("%" _ productname _ "%")
          
          // 検索結果がない場合、404を返す
          If tResult.%SQLCODE = 100 {
              Set %response.Status = 404
              Quit $$$OK
          }
          
          // 検索結果をJSON形式で出力する
          Set tProducts = ##class(%DynamicArray).%New()
          While tResult.%Next() {
              Set tProduct = ##class(%DynamicObject).%New()
              Do tProduct.%Set("JanCd", tResult.%Get("JanCd"))
              Do tProduct.%Set("ProductName", tResult.%Get("ProductName"))
              Do tProduct.%Set("Price", tResult.%Get("Price"))
              Do tProducts.%Push(tProduct)
          }
          
          Write tProducts.%ToJSON(),!
          
          Quit $$$OK
      }

      // ... 既存のコード ...
  }

生成されたコードを確認し、curlコマンドで動作を確認します。正常に実行されました。外部ファイル参照機能の利用により、自動生成の精度が向上していることがうかがえます。 image

開発上の課題と解決策

自動生成の精度向上 基本コマンドを用いたプログラムは高い精度を発揮しますが、クラスを利用した複雑な処理では精度が低下する印象を受けました。プロンプトの指示を工夫することで、精度を高めることができそうです。 また、Cursorの外部ドキュメント、ファイル参照機能には大きな可能性を感じました。この機能を使えば、既存のリソースや、AIが学習していないライブラリの活用が期待できます。

セキュリティとプライバシー Cursorはプライバシーモードを備えており、データをサーバーに保持しない設定が可能です。しかし、Cursorに限らず生成AIの業務利用には慎重な調査が必要です。

所感

今回の検証を通じて、生成AIのコード生成能力が向上していることを実感しました。特に、テストデータやDDLの生成は、開発の効率を大幅に向上させる可能性があります。アジャイル開発で迅速なモックアップの作成が求められる場面では、生成AIの効果的な活用が期待できそうです。一方で、既存システムの小規模な改修には、効果が限定的であるという印象を受けました。

この記事を作成したきっかけは、ObjectScriptの初学者向け演習問題を生成AIで作成した際、その問題と解答の品質が非常に高かったことです。業務での活用も十分可能であると思い、今回の検証を行いました。生成AIは、工夫次第でさらなる幅広い活用が期待できるツールだと感じています。

参考資料

0
0 249
お知らせ Toshihiko Minamoto · 9月 12, 2024

Git を使用してIRIS でソリューションを構築することは、素晴らしいことです! 単にローカルの git リポジトリにVSCodeを使用し、サーバーに変更をプッシュする... それは非常に簡単です。

でも、次の場合はどうでしょうか。

  • 共有リモート開発環境で他の開発者と共同作業を行い、同じファイルの同時編集を回避したい場合
  • BPL、DTL、ピボット、ダッシュボードなどにおいて管理ポータルに基づくエディターを使用しており、 作業に簡潔なソース管理を使用したい場合
  • 一部の作業においては引き続き Studio を使用しているかたまに VSCode から Studio に戻っているか、チームがまだ VSCode を完全に採用しておらず、一部のチームメンバーが Studio の使用を希望している場合
  • 同じネームスペースで同時に多数の独立したプロジェクト(InterSystems Package Manager を使って定義された複数のパッケージなど)に取り組んでおり、(多数の個別のプロジェクトではなく)1 つの isfs 編集ビューからすべてのプロジェクトの作業を行い、適切な git リポジトリで変更を自動的に追跡する場合
0
0 198
記事 Toshihiko Minamoto · 8月 16, 2024 12m read

Visual Studio Code(VSCode)は、市場で最も一般的なコードエディターです。 Microsoft によって制作され、無料 IDE として配布されています。 VSCode は ObjectScript などの多数のプログラミング言語をサポートしており、2018 年までは Atelier(Eclipse ベース)もサポートしていました。 InterSystems 製品開発の主なオプションの 1 つとして考えられていましたが、 2018 年、InterSystems 開発者コミュニティが VSCode のサポートを発表した際に、関連する InterSystems のプロユーザーらが実際にこのエディターを使用し始め、以来、特に新しいテクノロジー(Docker、Kubernetes、NodeJS、Angular、React、DevOps、GitLab など)を使用する開発者の間でその使用が続いています。 VSCode の一番の機能の中にはデバッグ機能が挙げられます。 そこで、この記事では、クラスコードや %CSP.REST コードなどの ObjectScript コードをデバッグする方法を詳しく紹介します。

デバッグとは?

デバッグとは、ObjectScript コードに含まれる「バグ」と呼ばれるエラーを検出して解決するプロセスを指します。一部のエラーはコンパイルエラーではなく論理エラーです。 そのため、ソースコード実行ロジックのエラーを理解するには、プログラムを行ごとに実行して確認する必要があります。 条件またはプログラミングのロジックを特定して論理的なミスを見つけるには、これが最善の方法です。 その他のエラーには実行時エラーがあります。 この種の問題をデバッグできるには、まず、割り当てられた変数の値を確認することが不可欠です。

VSCode 用 InterSystems IRIS 拡張機能のインストール

まず、VSCode IDE に InterSystems IRIS 拡張機能をインストールする必要があります。 これを行うには、拡張機能に移動し、InterSystems を見つけてこれらの InsterSystems 拡張機能をインストールします。

最後の拡張機能(InterSystems ObjectScript Extension Pack)を最初にインストールする必要があります。この拡張機能パックは、ObjectScript の接続、編集、開発、およびデバッグに不可欠なものであるためです。 リストに含まれる他の拡張機能はオプションです。

サンプルアプリケーション

この記事のデバッグ例には、GitHub リポジトリ(https://github.com/yurimarx/debug-objectscript.git)のアプリケーションを使用します。 以下の手順に従って、VSCode でアプリケーションを取得、実行、およびデバッグしてください。
1.    ローカルディレクトリを作成し、プロジェクトソースコードをこのディレクトリに取得します。

$ git clone https://github.com/yurimarx/debug-objectscript.git

2.    このディレクトリ(iris-rest-api-template ディレクトリ)でターミナルを開いて実行します。

$ docker-compose up -d --build

3.    iris-rest-api-template ディレクトリ内で $code . を使うか、 フォルダを右クリックして「Open with Code」を選択し、VSCode を開きます。
4.    フッターで ObjectScript をクリックし、.vscode/launch.json で構成されたオプションを開きます。

5.    「Toggle Connection」を選択して同時接続を有効にします。

6.    この接続を有効にしたら、以下に示す接続が得られます。

7.    VSCode で IRIS に接続されていない場合は ObjectScript コードをデバッグできないため、 ObjectScript VSCode 拡張機能をクリックして接続を確認します。

8.    Person.cls を開き、行番号 25 に移動し、左側の数字 25 にマウスポインターを合わせます。

9.    次に、上部の ClassMethod にマウスポインターを合わせ、「Debug this method」をクリックします。

10.    VSCode に、パラメーターに値を設定するためのダイアログが開くため、下の例の通りに値を設定し、Enter をクリックします。

11.    VSCode は行 25 でコードの実行を停止します。

12.    左上で現在の変数値を確認できます。  

13.    左下でブレークポイントのリストと現在のブレークポイントのコールスタックを確認できます。  

14.    右上にはブレークポイントのあるソースコードとデバッグの実行を制御するための一連のボタンがあります。  

15.    デバッグコンソールを使ってそこに何かを入力する必要がある場合は、「Name_”,”_Title」と入力すると、デバッグコンソールで変数の連結を確認できます。

16.    結果の変数を選択し、右クリックして「Add to Watch」を選択します。

17.    これで、WATCH セッションで結果の変数の現在の値を監視し、変更できるようになりました。

18.    最後に、フッターバーはオレンジになっており、デバッグ中であることを示しています。

デバッグコンソールの使用

デバッグコンソールでは、デバッグ中に式を記述して、様々な変数(単純な方またはオブジェクト型)の値を確認したり、現在の値や他の条件を検証したりすることができます。 当たりを返すものであれば何でも実行できるため、$zv も機能します。 以下の手順に従って、いくつかのオプションを確認してください。

1.    デバッグターミナルプロンプトに「Name_", "_Title_" From "_Company」と入力すると、名前、タイトル、会社が連結された値を出力として確認できます。

デバッグツールバーの使用

デバッグツールバーではデバッグの実行を制御できるため、ここではボタンの機能を確認します。

1.    「Continue」ボタン(F9): 実行を次のブレークポイントまで続けます。 次のブレークポイントがない場合は、最後まで実行されます。
2.    Step Over(F8): 内部メソッドのソースコードに入らずに次の行に移動します(Populate メソッドに入りません)。
3.    Step Into(F7): 内部メソッドのソースコード内の次の行に移動します(Populate メソッドの最初の行に移動します)。
4.    Step Out(Shift + F8): メソッドの呼び出し元ソースコードの現在の行に移動します。
5.    Restart(Crtl + Shift + F5): デバッグをリプレイします。
6.    Stop: デバッグセッションを停止します。  

%CSP.REST クラスメソッドのデバッグ

REST クラスメソッドをデバッグするには、Fábio Gonçalves が見つけた簡単なトリック(こちらで記事をご覧ください: https://community.intersystems.com/post/atelier-debugging-attach-process)を適用する必要があります。 HANG を追加する必要があります(20~30 秒が推奨です)。 以下の手順に従ってください。

1.    ファイル src\dc\Sample\PersonREST.cls を開き、GetInfo() メソッドに移動して HANG 30 を追加します(このメソッドのデバッグの開始までに30 秒の時間を得えるには必要です)。

2.    HANG と SET の行にブレークポイントを設定します(赤い丸)。

3.    HTTP クライアントを開いて REST メソッドを呼び出します(ここではクラス PersonREST から GetInfo を呼び出します):

4.    Basic Auth を Authorization に設定します(ユーザー名: _SYSTEM、パスワード: SYS)。

5.    GET http://localhost:52773/crud/ を送信します。
6.    フッターバーの「ObjectScript Attach」をクリックします。

7.    ObjectScript Attach を選択します。

8.    PersonREST プロセスを選択します。

9.    VSCode がブレークポイントで現在の実行を停止するまでしばらく待ちます(約 30 秒)。

注意 1: HANG は実行を停止するため、デバッグを終了したら、HANG 30 を削除してください。

注意 2: PersonREST プロセスが表示されない場合は、VSCode を再起動してもう一度お試しください。

10.    これでデバッグプロセスを実行できるようになりました。

ブレークポイントの編集

ブレークポイントを右クリックすると、削除するか条件ブレークポイント(条件が true の場合にブレークポイントで停止)を構成できます。 コードに埋め込まれたブレークコマンドも、デバッガーによってキャッチされます。 これも試してみてください。

1.    ブレークポイントを右クリックし、「Edfit Breakpoint」を選択します。

2.    下に示す式を入力し、Enter を押します。

注意: version = 1.0.5 でブレークポイントが false になるのと、1.0.6 で true になるのを試してみてください。

.vscode/launch.json ファイルでデバッグオプションを構成する

Launch.json ファイルは、プロジェクトのデバッグオプションの構成に使用します。 他のオプションを見るには、こちらのファイルに移動してください。

このサンプルの場合、選択できるデバッグオプションは 2 つあります。

1.    直接プログラムで、プログラム属性に構成されたクラスでデバッグを起動します(この例では、デバッガーは PackageSample.ObjectScript クラスのメソッド Test() で開始します)。
2.    デバッグするために選択したプログラムプロセスに PickProcess をアタッチできます。 この例では、デバッガーはプロセスのリストの最上位で開くため、デバッグするプロセス(各プログラムにはそのプロセスがあります)を選択します。 2 つ目のオプションの方が一般的です。

一般的な方法では、任意のデバッグ構成においてこれらの属性は必須です(出典: https://intersystems-community.github.io/vscode-objectscript/rundebug/)。

  • type - 使用するデバッグのタイプを識別します。 この場合、objectscript は InterSystems ObjectScript 拡張機能によって提供されています。
  • request - この起動構成の操作タイプを識別します。 可能な値は launch と attach です。
  • name - 構成を識別するための任意の名前。 この名前は「Start Debugging」ドロップダウンリストに表示されます。

また、ObjectScript 起動構成では、属性 program を指定する必要があります。この属性は、次の例に示すように、デバッガーの起動時に実行するルーチンまたは ClassMethod を指定します。

"launch": {
    "version": "0.2.0",
    "configurations": [
       {
        "type": "objectscript",
        "request": "launch",
        "name": "ObjectScript Debug HelloWorld",
        "program": "##class(Test.MyClass).HelloWorld()",
      },
      {
        "type": "objectscript",
        "request": "launch",
        "name": "ObjectScript Debug GoodbyeWorld",
        "program": "##class(Test.MyOtherClass).GoodbyeWorld()",
      },
   ]
}

ObjectScript の attach 構成の場合、以下の属性を指定する必要がある場合があります。

  • processId - 文字列または数値にアタッチするプロセスの ID を指定します。 デフォルトは "${command:PickProcess}" で、実行時にアタッチするプロセス ID のドロップダウンリストを提供します。
  • system - システムプロセスへのアタッチを許可するかどうかを指定します。 デフォルトは false です。

次の例は、複数の有効な ObjectScript アタッチ構成を示しています。

"launch": {
    "version": "0.2.0",
    "configurations": [
        {
            "type": "objectscript",
            "request": "attach",
            "name": "Attach 1",
            "processId": 5678
        },
        {
            "type": "objectscript",
            "request": "attach",
            "name": "Attach 2",
            "system": true
        },
    ]
}

これで、デバッグサイドバーの上部にある Run and Debug フィールドに VS Code が提供するリストからデバッグ構成を選択することができます(出典: https://intersystems-community.github.io/vscode-objectscript/rundebug/)。

緑色の矢印をクリックすると、現在選択されているデバッグ構成が実行します。
ObjectScript 起動デバッグセッションを開始する際は、エディターとアクティブなタブでデバッグするプログラムを含むファイルが開いていることを確認してください。 VS Code はアクティブなエディター(フォーカスのあるタブ)でファイルのサーバーを使ってセッションのデバッグを開始します。 これは、アタッチされた ObjectScript デバッグセッションにも適用されます。
この拡張機能はセッション中、WebSocket を使用して InterSystems サーバーと通信します。 デバッグセッションを開始しようとする際に問題が発生する場合は、InterSystems サーバーの Web サーバーが WebSocket 通信を許可しているかを確認してください。
デバッグコマンドと Run メニューの項目は VS Code がサポートする他の言語でも同じように機能します。 VS Code のデバッグに関するその他の情報については、このセクションの最初にリストされているドキュメントリソースをご覧ください。

ローカルソースコードとサーバーソースコード(IRIS サーバー)の同期を設定する

ソースコードにフォルダ構造を用意しておくことも非常に重要です。これは "objectscript.export" 設定で行われます。 この情報はサーバーの食らう名をローカルファイルに変換するために使用されます。 これに誤りがある場合、ローカルにのみ存在する場合でも、読み取り専用モードでクラスが開く場合があります。
1.    .vscode\settings.json ファイルを開き、objectscript.export を構成します。

2.    フォルダにマウスポインターを合わせ、カテゴリとその他のパラメーターを追加してそれに関するドキュメントを表示します。

デバッグプロセスを補完するその他のテクニック

プログラムをデバッグするほかに、ソースコードを十分にドキュメント化し、重要なコードが実行した操作をログに記録し、ユニットテストとソースコード静的解析ツールを実行することも覚えておきましょう。 こうすることで、プログラムの品質ははるかに改善され、メンテナンスと調整時間、および費用を削減できます。

さらに学習する

以下のリソースを確認すると、VSCode での ObjectScript のデバッグに関してさらに読むことができます。
1.    https://www.youtube.com/watch?v=diLHwA0rlGM
2.    https://intersystems-community.github.io/vscode-objectscript/rundebug/
3.    https://code.visualstudio.com/docs/introvideos/debugging
4.    https://code.visualstudio.com/docs/editor/debugging
5.    https://docs.intersystems.com/iris20221/csp/docbook/Doc.View.cls?KEY=TOS_VSCode

0
1 310
お知らせ Toshihiko Minamoto · 8月 13, 2024

%UnitTest framework を使用してユニットテストを構築したことがある場合、またはこれから構築しようとお考えの場合は、InterSystems Testing Manager をご覧ください。

VS Code を離れることなく、ユニットテストの閲覧、実行またはデバッグ、過去の実行結果の表示が可能になりました。

InterSystems Testing Manager は、ObjectScript 拡張機能がサポートするソースコード場所のパラダイムに対応しています。 ユニットテストクラスは、VS Code のローカルファイルシステム('client-side editing' パラダイム)またはサーバーネームスペース('server-side editing')のいずれかでマスターできます。 いずれの場合でも、実際のテストの実行は、サーバーネームスペースで発生します。

フィードバックをぜひお送りください。

0
0 76
お知らせ Akio Hashimoto · 7月 28, 2023

こんにちは。
VSCodeでObjectScriptにコメントを挿入する拡張機能を作成してみましたので、共有させて頂きたいと思います。


使い方はとても簡単で、コンテキストメニューから「コメントの追加」を選択するだけです。
カーソル位置に合ったコメントが挿入されます。
挿入するコメントの定型文は設定で自由に指定できます。

クラスの説明文を挿入する

 

パラメーターやプロパティの説明文を挿入する

 

メソッドの説明文を挿入する

 

4
0 114
InterSystems公式 Mihoko Iijima · 5月 10, 2024

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

2023年5月にご案内した記事「2023.2 からスタジオが非推奨となります」でもご案内しましたが、インターシステムズは、IRIS 2023.2のリリースからスタジオの廃止を発表しました。

詳細な非推奨計画は2023年11月にお知らせした記事「InterSystems Studio の非推奨に関するお知らせ」でご案内していましたが、バージョン2024.2のプレビューリリースが始まり現在その計画の最初のマイルストーンに到達しました。

バージョン2024.2 プレビューキット以降、Windows キットにはスタジオが含まれなくなります。つまり、このキットを使用した新規インストールでは スタジオがインストールされません。既存のインスタンスをバージョン 2024.2以降にアップグレードした場合は、インスタンスの bin ディレクトリから スタジオが削除されます。

0
0 253
記事 Toshihiko Minamoto · 5月 9, 2024 3m read

VS Code でファイルを編集しているときに、グローバル値のチェックやいくつかの ObjectScript コマンドの実行が必要だったことはありませんか? これが可能になりました。しかもセットアップは不要です! vscode-objectscript 拡張機能バージョン 2.10.0 以上を持っており、InterSystems IRIS 2023.3 以降に接続している場合は、サーバーの場所に関係なくサーバーへのターミナル接続を開けるようになりました。

この新しいターミナルを開く方法には 3 つあります。

WebSocket ターミナルは、読み取り、ネームスペースの切り替え、中断、カスタムターミナルプロンプトなど、標準 ObjectScript シェルの多数の機能をサポートしていますが、 この記事では、これに特有の 3 つの機能に焦点を当てたいと思います。

  • コマンド入力は構文の色付けがされるため、実行する前に入力が構文的に正しいことを確認できます。 syntax colored input

  • ターミナルは複数行の編集モードをサポートしています。Enter を押すと、入力が実行されるのではなく新しい行が追加されます。 新しい行は、コマンド入力に閉じられていない開始波括弧 { または開始丸括弧 ( がある場合に追加されます。 multi-line input

  • VS Code のシェル統合に完全に組み込まれているため、VS Code はコマンドの入出力を検出できます。 このため、コマンドを簡単に再実行したり、カーソルでテキストをハイライトせずにコマンド出力をクリップボードにコピーしたりすることができます。 command output

機能の全リストについては、公式ドキュメントをご覧ください。 この機能の改善アイデアがありますか? ぜひお聞かせください! 提案は、拡張機能の GitHub リポジトリに投稿できます。 この投稿のすべてのスクリーンショットでは、新しい "InterSystems Default Dark Modern" VS Code テーマが使用されています。InterSystems Language Server 拡張機能バージョン 2.4.0 以降で使用可能です。

0
0 256
記事 Toshihiko Minamoto · 5月 7, 2024 4m read

VS Code に焦点を当てた 2 つの現地ウェビナー(ヘブライ語による「Intro」および「Beyond Basics」)に続き、フォローアップとして参加者向けに送信した関連リソースのリンクを用意しました。 コミュニティのために、ここでもそれを共有しています。
便利なリソースをぜひさらに追加してください。

  • サーバーサイド開発

* サードパーティ製エクステンションはサポートされません

0
0 108
記事 Toshihiko Minamoto · 4月 23, 2024 2m read

VS Code を使ってコードを編集する場合、設定モデルでは、ワークスペースルートフォルダの .vscode サブフォルダにある settings.json ファイルを使用して、一部の設定にフォルダ固有の値を指定できます。 ワークスペースのルートフォルダ内で作業している場合、ここで設定した値は個人設定の値よりも優先されます。

isfs-type ワークスペースを使用してサーバー上のネームスペースで直接操作している場合は、現在および将来のネームスペースごとに特別な .vscode フォルダをサポートするようにそのサーバーを構成しておく必要があります。 このフォルダはフォルダ固有のコードスニペットデバッグ起動構成も提供できます。

この機能をセットアップしておくと、設定(またはスニペット、またはデバッグ構成)をサーバーに配置することで、そのサーバーで作業するすべての VS Code ユーザーがすぐにそれを使用できるようになるというメリットがあります。

たとえば、Deltanji ソース管理は、機能拡張を使って VS Code に統合されます。 サーバー側の設定ストレージを使用すれば、結果が設定に依存する場合に、特定のネームスペースに接続するすべての開発者が Deltanji 拡張機能から同じ結果を得ることができるようになります。

サーバーがネームスペースごとに .vscode サブフォルダをホストして公開するように構成するのは、1 回限りのタスクです。 手順はドキュメント化されていますが、サーバーで ZPM / IPM を使用できる場合は、vscode-per-namespace-settings パッケージをインストールすると自動的に実行することができます。 ソースコードを含むこのパッケージの詳細は、Open Exchange をご覧ください。

0
0 234
記事 Toshihiko Minamoto · 3月 18, 2024 7m read

はじめに

InterSystems は先日、Visual Studio Code(VSC)IDE 用の拡張機能は InterSystems Studio に比べてより優れたエクスペリエンスを提供するという考えから、VSC IDE 用の拡張機能を独占的に開発するためにバージョン 2023.2 より InterSystems Studio のサポートを終了すると発表しました。それ以来、VSC に切り替えた開発者や、VSC を使用し始めた開発者が大勢います。 VSC には Studio のような出力パネルがなく、InterSystems が開発したプラグインをダウンロードする以外に IRIS ターミナルを開く統合機能もないため、多くの人は演算を実行する際にターミナルの開き方に迷ったことでしょう。

概要

  • はじめに 
  • 解決策
    • 少なくとも IRIS 2020.1 または IRIS 2021.1.2 を使用するユーザー: Web ターミナルを使用
    • 少なくとも least IRIS 2023.2 を使用するユーザー: WebSocket ターミナルを使用
    • Docker ベースの IRIS を使用するユーザー
    • ローカルマシンでバージョン 2023.2 より前の IRIS を使用するユーザー
    • SSH 接続を使ってリモートサーバーの IRIS でコーディングするユーザー

解決策

VSC でターミナルを開く方法は使用している特定の構成によって異なるため、以下に、状況に最適な解決策をまとめました。

少なくとも IRIS 2020.1.1 または IRIS 2021.1.2 を使用するユーザー: Web ターミナルを使用

少なくとも IRIS 2020.1.1 または IRIS 2021.1.2 を使用し、外部の拡張機能のインストールが許可されている(サードパーティアプリケーションに関する会社のポリシーにより許可されていない場合もあります)ユーザーの場合、VSC 用の Web ターミナル拡張機能が役立つ可能性があります。 ご存知ない方のために説明すると、Web ターミナルは、ObjectScript で制作された InterSystems 製品(IRIS、Caché、Ensemble、HealthShare、TrakCare など)用の Web ベースのターミナルで、ブラウザ内でより高度なバージョンのターミナルを使用することができます(プロジェクトページはこちらです)。 この VSC 拡張機能によって、直接 VSC からクリックするだけで Web ベースのターミナルを起動できます。

Web ターミナルを開くには、InterSystems ツール をクリックし、ネームスペースを選択して、いずれかのアイコン( または )をクリックします。それぞれ、VSC ターミナルパネルかブラウザで Web ターミナルが開きます(Alt を押すとデフォルトアイコンを変更できます)。

 

 

少なくとも least IRIS 2023.2 を使用するユーザー: WebSocket ターミナルを使用

少なくとも IRIS 2023.2 を使用するユーザーは、最新バージョンの VSC 拡張機能に含まれる新しい「WebSocket ターミナル」機能を利用できるため、他の回避策は必要ありません。

WebSocket ターミナルを開くには、InterSystems ツールをクリックし、ネームスペースを選択して、Web ターミナルの隣のアイコンをクリックします。

編集: 詳細については、これについて @Brett Saviano が書いたおもしろい記事をご覧ください!

How to run ObjectScript commands in the VS Code integrated terminal(VS Code の統合ターミナルで ObjectScript コマンドを実行する方法)

Docker ベースの IRIS を使用するユーザー

Docker 内の IRIS 環境で作業しており、VSC を使用しているユーザーは、Docker 環境から直背悦ターミナルセッションを開始できます。

ステータスバーで Docker voice をクリックし、Docker でターミナルを開くを選択します。

このポイントについて画像と説明を提供してくれた @Evgeny Shvarov に感謝しています。

 

ローカルマシンでバージョン 2023.2 より前の IRIS を使用するユーザー

ローカルマシンで実行するバージョンの IRIS で作業するユーザーの場合は、VSC 内に専用の IRIS ターミナルをセットアップすることができます。

    1. settings.json ファイルを開きます。 このファイルを見つけるには、表示 > コマンドパレットをクリックして「settings」と入力し、ユーザー設定を開く(JSON)を選択するなど、様々な方法があります。
    2. terminal.integrated.profiles.windows」の下に以下のコードを追加します。
"terminal.integrated.profiles.windows":{
<span class="hljs-string">"IRIS Terminal"</span>: {

&nbsp;&nbsp;&nbsp; <span class="hljs-string">"path"</span>: [

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hljs-string">"C:\\InterSystems\\IRISHealth\\bin\\irissession.exe"</span>
&nbsp;&nbsp;&nbsp; ],

&nbsp;&nbsp;&nbsp; <span class="hljs-string">"args"</span>: [<span class="hljs-string">"IRISHEALTH"</span>],

&nbsp;&nbsp;&nbsp; <span class="hljs-string">"icon"</span>: <span class="hljs-string">"terminal-cmd"</span>
} 

}

注意: 正しい irissession.exe のパスを挿入してください。

c. VSC からターミナルを開くには、ターミナル > 新しいターミナル > プロファイルを起動… > IRIS ターミナルに移動します。

d. ターミナルメニューに 'IRIS ターミナル' voice が表示されます。

SSH 接続を使ってりモードサーバーの IRIS でコーディングするユーザー 

SSH 接続(PuTTY の使用など)を使ってアクセスできるリモートサーバー(会社サーバーなど)の IRIS バージョンを使用するユーザーの場合、Remote - SSH VSC 拡張機能を使用して、VSC をサーバーに直接接続できます。 これを行うには、以下を実行します。

    1. VSC に Remote - SSH: Editing Configuration Files 拡張機能をインストールします。
    2. サイドバーの「リモートエクスプローラーアイコンをクリックします。
    3. SSH 構成ファイルを開く」を選択します。

  

次のパスの構成ファイルを開きます: C:\Users\<username>\.ssh\config

    1. 構成ファイルに以下のコードを挿入します。 
Host my-putty-connection

    HostName < IP address or server name >

    User < username >

    IdentityFile < private key path on your local machine >

    Port < port >

IP アドレスとポートは PuTTY に指定されたホスト名とポート、ユーザー名はリモートサーバーにアクセスする際に使用するユーザー認証情報、そして IdentityFile は PuTTY 秘密鍵へのファイルパスです。

注意:  PuTTY が生成した秘密鍵の元のフォーマット(.ppk)は VSC で読み取れません。 PuTTY 経由で VSC とリモートサーバーの接続を確立するには、元の秘密鍵を複製して .pem フォーマットに変換する必要があります。 この変換は、以下のように行います。

  1. PuTTYgen アプリケーションを起動します。
  2. File メニューから、Load private key をクリックします。
  3. .ppk フォーマットの秘密鍵を選択して、Open を選択します。
  4. Conversions メニューで Export OpenSSH Key (force new file format) をクリックします。
  5. .pem 拡張子を使った新しい名前を設定し、Save ボタンをクリックします。
  6. この新しい .pem ファイルへのパスを VSC の IdentifyFile パラメーターにリンクします。
    1. ファイルを保存します。 数秒ほどすると、Remote Explorer パネルに新しい接続が表示されます。
    2. Connect in New Window...」をクリックして新しい VSC ウィンドウに SSH 接続を開きます。
  7. リモートマシンのオペレーティングシステムを選択します(初回アクセスのみ)。
  8. 新しいウィンドウで、Terminal New Terminal に移動します(または Ctrl + ò または Ctrl + Shift + ò を使用します)。
  9. これで、リモートマシンに接続し、VSC 内で IRIS ターミナルを使用できるようになりました。

注意: この操作は、以前に PuTTY 経由でリモート接続を開始したことがあり、PuTTY が閉じられている場合またはリモートサーバーに接続していない場合にのみ機能します。 この操作では、PuTTY は起動せず、PuTTY が確立するトンネルに VSC が接続されるだけです。

VSC を通じて PuTTY 接続を開始するには、バッチファイルを使用できます(Windows)。 提供されている connect_remote.bat ファイルは、PuTTY に含まれる Plink コマンドを使用してセッションを開始します。

@echo off

set SESSION="<your saved session name>"

plink -load %SESSION%

セッションを開始するには、VSC ターミナルに .\connect_remote.bat と入力して、リモート接続を開き、認証情報を入力します。

注意: こちらの後のメソッドによって、すべての VSC ショートカットをサポートするターミナルバージョンにアクセスできるようになります! Shift+Insert ではなく、Ctrl+V を使用できるようになります 🎉

1
1 611
記事 Mihoko Iijima · 10月 22, 2020 11m read

皆さんこんにちは!Virtual Summit ご覧いただけていますでしょうか。

Virtual Summit で VSCode ObjectScript 用エクステンションバージョン1.0 のリリースが👏正式発表👏されましたので、さっそく利用方法を投稿してみました。

来週の技術セッションではさらに詳しい説明があると思いますので、ご登録がまだの方は、ぜひご登録ください!
(ご登録いただくとオンデマンド配信でいつでもセッションのビデオを視聴できます。機械翻訳ではありますがビデオには日本語字幕が付いています。)

この記事では、以下の操作方法をご紹介します。

  1. ObjectScript用エクステンションのインストール方法
  2. サーバへ接続する 👉《2025/8/7:更新》GUI を使って接続情報を作成できる図解を追加しています
  3. クラス定義を作ってみる
  4. ルーチンを作ってみる
  5. デバッグを実行してみる 👉《2024/1/17:更新》最新のObjectScriptエクステンションに合わせて内容を更新しました。
  6. Webサーバ使用時:デバッグの注意点 👉《2024/1/17追加》プライベートWebサーバではない通常のWebサーバを使用する場合の注意点を追加しました。

操作前の準備

VSCodeのインストール を行います。

1
1 4042
記事 Mihoko Iijima · 1月 18, 2024 5m read

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

VSCodeのObjectScriptエクステンションを利用してInterSystems製品に接続するときに「プライベートWebサーバ (*1)」ではなく、「Webサーバ(IISやApache)」を利用される場合、接続時に使用するREST用パスが通るようにWebサーバに仮想パスを追加する必要があります。

(*1) プライベートWebサーバとは、バージョン2023.1以前のInterSystems製品をインストールすると自動でインストールされる簡易的なApacheで、52773番ポートで管理ポータルやWebアクセスのテストにご利用いただけるWebサーバです。(本番運用環境には適さない簡易的なWebサーバです)

対象バージョン:2023.1以下のInterSystems製品

追加が必要なパス: /api

以下、IISApacheそれぞれの設定方法をご紹介します。

IISの場合

IISを有効化した後で、InterSystems製品のインストーラーのメニューから「ウェブサーバ」(下図左)または「カスタム」から「Webサーバゲートウェイ→IIS用CSP」(下図右)で設定を行った場合、

IISにWebゲートウェイがインストールされ、デフォルトで以下のアプリケーションを追加します。

0
0 750
記事 Toshihiko Minamoto · 12月 14, 2023 4m read

IRIS コンテナに VSCode を追加する

繰り返し利用できる開発環境をセットアップするには、環境用のコンテナを起動するのが最も簡単な方法の 1 つです。 素早く繰り返す際には、自分の開発コンテナ内に vscode インスタンスをホストするのが非常に便利なことが分かりました。 そこで、ブラウザベースの vscode を IRIS コンテナに追加するための簡易コンテナスクリプトを作成しました。 これは、ほとんどの 2021.1+ のコンテナで動作するはずです。 私のコードリポジトリはこちらにあります

vscode を含み事前に接続された InterSystems IRIS コンテナ

認証情報
ユーザー_SYSTEM
パスワードSYS

画像

概要

このプロジェクトでは、ホストされた(Web ベース)バージョンの vscode を同じコンテナ内で利用できる IRIS コンテナを作成します。 これには、以下が含まれます。

  • 同じコンテナコードの編集
  • コンテナの IRIS インスタンスへの事前接続
  • 管理ポータルからのリンク
  • コンテナによる IDE の自動起動

クイックスタート

  1. ダウンロードするか、git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git を実行します。
  2. プロジェクトのルートで次を実行します: docker build . -t vscode-irishealth-ml:latest --no-cache
  3. docker-compose up を実行します。
    • Docker Compose を使用していませんか? こちらをご覧ください。
  4. 管理ポータルに移動します。
  5. このガイドの始めにあるユーザーとパスワードを使ってログインします。
  6. お気に入りのペインで VSCODE リンクをクリックします。
  7. プロンプトが表示されたら、vscode で同じパスワードを使用して IRIS インスタンスに接続します。
# プロジェクト用の新しいフォルダ
mkdir vscode-iris
cd vscode-iris

# ここでリポジトリをクローン
git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git .

# イメージをビルド
docker build . -t vscode-irishealth-ml:latest --no-cache

# (A) または (B) のいずれかを実行
#
# (A) Compose ファイルを実行
docker-compose up
# または (B) デーモンを使用する場合
docker-compose up -d

永続性を追加する

永続的な IRIS インスタンスを使用する場合は、docker-compose.yml ファイルの 16 行目から 20 行目のコメントを解除します。 これにより、コンテナに永続ストレージマウントが追加されます。

    volumes:
    - "./durable/:/durable/"
    environment:
    - ISC_DATA_DIRECTORY=/durable/iconfig

ベースイメージを変更する

このイメージは、InterSystems 開発者コミュニティ zpm イメージに基づいてビルドされています(こちらにあります)。 これらのイメージには、パッケージリポジトリから簡単にインストールれきる zpm コマンドが含まれていますが、90 日間のコミュニティライセンスしか付帯していません。

ビルドに使用されているイメージタグは以下のとおりです。

FROM intersystemsdc/irishealth-ml-community:latest

イメージを変更する場合は、Docker ファイルの最初の行を希望するイメージタグ(カスタム IRIS インスタンスかサポートされているインスタンスのいずれか)に変更してください。 以下に例を示します。

FROM containers.intersystems.com/intersystems/irishealth-community:2021.2.0.651.0

Docker-Compose を使用しない場合

Docker Compose を使用しない場合でも、以下のようにしてコンテナを実行できます。

# コンテナをビルドした後
# --after コマンドは必須
docker run --name vscode -d \
    --publish 1972:1972 \
    --publish 52773:52773 \
    --publish 51773:51773 \
    --publish 53773:53773 \
    --publish 8080:8080 \
    --publish 8888:8888 \
    vscode-irishealth-ml:latest \
    --after "/bin/bash /install/boot.sh"
0
0 250
質問 Yuji Ohata · 10月 16, 2023

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

同じ現象に陥っていた方がいれば助言頂きたいのですが、
VsCodeでIRISにリモートで接続した際、SourceControlでUserNameが取得できていないようです。

{
    "objectscript.conn": {
        "host": "xxxx.xxxx.xxxx.xxxx",
        "port": 52773,
        "ns": "RKNK",
        "username": "xxxx",
        "password": "xxxx",
        "active": true
    },
    "editor.formatOnType": true
}

→SourceControlクラスで..Usernameを取得しようとしても値が入っていない。

同じような現象になった方はいらっしゃらないでしょうか?
何か情報をお持ちの方がいらっしゃれば、フォローいただけますと幸いです。

4
0 205
InterSystems公式 Seisuke Nakahashi · 11月 13, 2023

2023年5月に発表し、Global Summit 2023 における多くのプレゼンテーションや活発な議論をへて、インターシステムズは Intersytems Studio の非推奨に関する計画を引き続き進めています。(非推奨とは、インターシステムズが積極的に開発しなくなった、より優れたオプションが存在する機能またはテクノロジを示します)

0
0 262
記事 Mihoko Iijima · 9月 20, 2023 2m read

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

ObjectScriptのコード実行中にエラーが発生した場合 "<UNDEFINED>HelloWorld+2^Simple.Demo.1 *name" のようなエラーメッセージが表示されます。

エラーメッセージの読み方については、ObjectScriptクックブックの「ObjectScriptでエラーが発生したら」のエラーメッセージの読み方 をご参照ください。

エラー行の特定を行う際、VSCodeのコマンドパレットを利用すると簡単に対象行にジャンプできますので、以下、方法をご紹介します。

1)VSCodeのView→Command Palette... を開きます。

2) 「ObjectScript:Open Error Location...」を選択します(初回は表示項目に登場しないため > の後ろに ObjectScript と入力すると表示されます)。

3) テキストボックスが表示されるので、エラーメッセージの出力情報の中から ラベル名+行数^生成ルーチン名 をコピーして貼り付け、Enterをクリックします。

※スタジオにも同様の機能がありますが、VSCodeの場合対象となるコード(生成コードの元コード)をVSCode上で表示していなくても対象となる生成ルーチンを開きエラー行をポイントしてくれます。

0
0 1144
記事 Mihoko Iijima · 9月 18, 2023 4m read

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

スタジオを利用されている方にはお馴染みのソースコードの「XMLファイルへのエクスポート/インポート機能」がVSCodeのObjectScriptエクステンションに追加されました! (ObjectScript 2.10.0以降に含まれています。こちらのリクエストが元となりました👉https://github.com/intersystems-community/vscode-objectscript/issues/1158   エクステンションの追加番号は#1171です)

今まで、過去エクスポートしたXMLファイルをVSCodeから参照するためには、管理ポータル(またはスタジオ)を利用してインポートする必要がありましたが、VSCodeの画面だけでできるようになりました!

💡注意1: InterSystems IRIS /InterSystems IRIS for Health 2023.2以降のバージョンに接続した状態でご利用いただける機能です。

💡注意2:この機能は管理ポータルやスタジオのインポート/エクスポートのVSCode版のような機能となるため、インポートしたソースコードはサーバ側にインポートされ、エクスポートはサーバ側コードを選択してXMLファイルにエクスポートする動作となります。XMLファイルインポート後、VSCodeのワークスペースでローカルファイル(*.cls や *.mac)として編集 したい場合は、 ObjectScriptエクステンションマークをクリックし、対象のコードを選択→エクスポート の手順でローカルにエクスポートする必要があります。

0
1 596
記事 Seisuke Nakahashi · 8月 14, 2023 5m read

突然ですが、みなさま、IRIS でのコーディングに Visual Studio Code をご利用されていますか? 以前投稿しましたように、2023.2からスタジオは非推奨 となっています。私自身も数年前からは VSCode 一本に移行しました。VSCode はご存じのように、ありとあらゆる項目でカスタマイズが可能となっており、一度慣れると、スタジオより見た目よく、自分好みに仕上げられ、何より動作が軽いのがお気に入りです。

さて今日は、その VSode の見た目のカスタマイズのお話です。

5
0 387
InterSystems公式 Seisuke Nakahashi · 5月 10, 2023

インターシステムズは、高品質な開発体験をみなさまにご提供することお約束しています。その中には優れた IDE (Integrated Developer Experience) も含まれます。ここ数年、長くお使いいただいている弊社独自の IDE である InterSystems スタジオと並行して、Visual Studio Code の ObjectScript ツールを提供してきました。VSCode-ObjectScript プラグインは 46,000 以上ダウンロードされ、開発者のみなさまからは、「すぐれた開発体験であり、今や InterSystems Studio を凌駕した」との嬉しいフィードバックをいただいています。

2023.2 のリリースから、InterSystems スタジオ非推奨となります (非推奨とは、インターシステムズが今後は積極的に開発を行わない、より優れたオプションが存在する機能を意味します)。 しばらくの間は InterSystems スタジオのメンテナンス、リリース、サポートは続けます。いくつかのお客様にとっては、スタジオが今なお重要なツールであることは重々承知しております。しかしながら、私たちはこれ以上スタジオに注力しないことをご理解いただければ幸いです。私たちは現在、VSCode に注力しています。

0
0 486
記事 Megumi Kakechi · 3月 19, 2023 2m read

Visual Studio Code 用のエクステンション(拡張機能)には、その動作を構成するための多くの設定が用意されています。

設定可能な項目一覧は、こちらの VS Codeドキュメント でご紹介しています(英語のみ)。

今回は、これらの設定の中で「コンパイルフラグを変更したい場合」の例で、設定の変更方法をご案内します。
※コンパイルフラグの詳細については こちらの記事 をご覧ください。


~ VS Code でコンパイルフラグを変更する方法 ~


① メニューから File(ファイル) > Preferences(ユーザ設定) > Settings(設定) (macOS では Code > Preferences > Settings) を選択し、設定エディタを開きます。


② 検索欄に、objectscript と入力して設定を絞り込み、今回は検索欄の下にある [Workspace(ワークスペース)] (※)を選択します。
※ユーザー:PCのユーザーごとに設定したい場合や、ワークスペースを作っていない時に利用する設定
 ワークスペース:ワークスペースを作成して作業するときに、ワークスペース全体に適用して利用する設定


③ 表示されている設定項目の中から変更したい項目を見つけます。

0
0 700
記事 Toshihiko Minamoto · 1月 16, 2023 7m read

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

InterSystems IRIS で embedded python を使用する一般的なプロジェクトの出発点として推奨できる、最小限の embedded python テンプレート をご紹介しましょう。

特徴:

  • Embedded python対応
  • Embedded Pythonの3つの開発方法の例
  • VSCode開発対応
  • Dockerが利用可能
  • オンラインデモが可能
  • ZPM First開発対応。

以下、その特徴について説明しましょう。

まず、Embedded Pythonについて説明します。この機能は InterSystems IRIS 2021.2 に搭載されており、InterSystems IRIS と python を使用したソリューションを開発することができます。 IRIS 2021.2以降では、InterSystems IRISとの共有メモリ環境でpythonスクリプトを実行でき、python開発者は、コードがデータに近いデータベースを使用する際に、独自のオプションを得ることができます。 

Embedded Pythonによる3つの開発モード

ObjectScript から python のライブラリをコールする

これは、%SYS.Pythonクラスにより、Pythonのライブラリをインポートし、ObjectScirptを介してPythonをコールすることができるようになったからです。 ドキュメント, . 以下のコードを参照してください。

ClassMethod Today() As%Status
{
  Set sc = $$$OKSet dt = ##class(%SYS.Python).Import("datetime")
  write dt.date.today().isoformat()
  Return sc
}

Python で ObjectScript クラスメソッドを記述する

実際、開発者はメソッドのシグネチャに [Language=python] タグを付けて、pure python でコーディングできるようになった。また、ObjectScriptのクラスやグローバルを参照するためのヘルパーpythonライブラリ "iris"も用意されています。 ドキュメント、以下のサンプルコード

ClassMethod CreateRecordPython(propValue As %VarString, ByRef id As %Integer) [ Language = python ]
{
    import iris
    obj=iris.cls(__name__)._New()
    obj.Test=propValue
    sc=obj._Save()
    id=obj._Id()
    return sc
}

InterSystems IRISソリューションのpure pythonでのコーディング

これは、開発者がIRISを扱う方法の3番目のオプションです。  ここでは、pythonスクリプトをIRISに接続する必要があり、これはENV変数とCallInサービスの "On "を介して行うことができます(詳細は以下を参照)。一度セットアップされたPythonスクリプトは、IRISとの共有メモリで実行されます。ここで、"iris" ライブラリが非常に役に立ちます。 ドキュメント,

defcreate_rec(var):
    obj=iris.cls('dc.python.PersistentClass')._New()
    obj.Test=var
    obj._Save()
    id=obj._Id()
    return id

# テストレコード作成from datetime import datetime
now=str(datetime.now())
print("dc.python.PersistentClass で新しいレコードを作成する")
print(create_rec(now))

## SQLを実行し、データをプリントするdefrun_sql(query):
    rs=iris.sql.exec(query)
    for idx, row in enumerate(rs):
        print(f"[{idx}]: {row}")

query="dc_python.PersistentClass から * を選択する"
print("SQLクエリの実行 "+query)
run_sql(query)

Dockerが可能

テンプレートリポジトリは、コンテナ内でIRISを実行し、Embedded Pythonの調整に必要なすべてをセットアップします。

環境変数。Embedded PythonはIRISに接続してPythonスクリプトを実行するために、特定の環境変数の設定を必要とします。以下は、それを助ける設定をdockerfileに記述しています:

# init Python env
ENV PYTHON_PATH=/usr/irissys/bin/irispython
ENV SRC_PATH=/irisrun/repo
ENV IRISUSERNAME "SuperUser"
ENV IRISPASSWORD "SYS"
ENV IRISNAMESPACE "USER"

また、Embedded Python は CallIn サービスを "ON" にする必要があり、これは docker build フェーズで iris.script で行われます。

; Embedded Pythonのcallinを可能do##class(Security.Services).Get("%Service_CallIn",.prop)
    set prop("Enabled")=1set prop("AutheEnabled")=48do##class(Security.Services).Modify("%Service_CallIn",.prop)

また、あなたのソリューションには、いくつかの Python ライブラリのインストールが必要かもしれません。これは、リポジトリのルートにある requirements.txtdockerfileにある pip3 コールによって提供されます:

pip3 install -r requirements.txt && \

VSCode開発対応

VSCodeでdockerを使って開発するのはとても便利です。Embedded pythonのVSCodeを使ったIRISソリューションをdockerで開発する場合、Devcontainer modeに切り替える必要があります。 .devcontainer フォルダに devcontainer.json ファイル を導入してください。これは、どのDockerサービスと連携する必要があるかを記述しており(私たちのケースではirisです)。コンテナ内で動作しているIRISが使用するPythonエンジンが提供するVSCode内のPythonスクリプトを実行するのに役立ちます。 devcontainer.json ファイルには、コンテナモードでどの extensions を使用する必要があるのかを記述したセクションもあります。

"extensions": [
        "ms-python.python",
        "ms-python.vscode-pylance",
        "intersystems-community.vscode-objectscript",
        "intersystems.language-server",
        "intersystems-community.servermanager",
        "ms-vscode.docker"
    ],

ZPMを使用したEmbedded Pythonソリューションのインストール

このテンプレートは、「ZPM first」開発リポジトリとして設定されています。つまり、開発したコードはすべて module.xml に記述され、Docker イメージをビルドするたびに ZPM モジュールとしてインストールされます。つまり、開発者は毎回 iris.script の 次の行 からコーディングを開始します:

zpm "load /home/irisowner/irisbuild/ -v":1:1

そして、Embedded pythonのコードもZPMモジュールに記述され、FILECOPYを介してインストールされます:

この式は、リポジトリ内の /python フォルダにあるすべての python スクリプトをパッケージ化し、ターゲット IRIS インストールの libdir 内の python/ フォルダにインストールしたいことを意味します。python スクリプトが ${libdir}python/ フォルダにコピーされると、ターゲット IRIS マシンの ObjectScirpt または Python からのインポート コールに利用できるようになります。

注意:他のPythonコードを誤って上書きしないように、Pythonスクリプトのフォルダ名称は、ユニークなものにしてください。

このテンプレートがあなたのお役に立つことを願っています。フィードバック、特にプルリクエストは大歓迎です。

0
0 215