記事
· 2020年10月22日 9m read

VSCode を使ってみよう!

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

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

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

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

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

操作前の準備

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

インストール後、VSCode で作成するクラス定義(*.cls)やルーチン(*.mac や *.inc)用ファイルを配置するためのワークスペース(作業環境)用フォルダを作成します。作成が終わったら VSCode を開き、[File > Open Folder...] から作成したフォルダを選択します。

VSCodeのワークスペースを開いた図

 

《2024/1/18追記》InterSystems製品のバージョン2023.1以下を利用されている環境でプライベートWebサーバ(※)ではなくWebサーバ(IISやApache)を利用してVSCodeから接続する場合、Webサーバにパスを追加する必要があります。

詳細は👉「Webサーバ(IISやApache)を利用してVSCodeからInterSystemsサーバに接続するときの注意点(バージョン2023.1以下)」をご参照ください。

(※)InterSystems製品インストール時、簡易的にインストールされたApacheで52773番ポートでアクセスするWebサーバ

 

 

1、ObjectScript用エクステンションのインストール

 エクステンションのアイコン  をクリックし「InterSystems」で検索し   をインストールします。

インストールが完了すると  のアイコンが左端に表示されます。

 

2、サーバへ接続する 

《2024/2/1現在のバージョンに合わせて修正しています》

メニューから File > Preferences > Settings (macOS では Code > Preferences > Settings) を選択して、VS Code Settings Editor を開きます。

検索欄に、objectscript を記入し、検索欄すぐ下にある [Workspace] を選択します。

Extensions > InterSystems ObjectScript を選択し、画面右に表示される設定項目の中から「ObjectScript: Conn」にある「Edit in settings.json」をクリックします。

 

開いたワークスペースのフォルダ以下に [.vscode] フォルダが用意され、settings.json が作成されます(このファイルは、ワークスペースに対するサーバ接続情報を記述できる設定ファイルです)。

settings.json  を開くと、"intersystems.servers":{} と、”objectscript.conn”: {}  の記述があり、"intersystems.servers":{} に接続したいサーバ情報を名前を付けて記述し ”objectscript.conn”: {}  には "intersystems.servers":{} で名付けたサーバ名を使用して接続指定を行います。

接続先を簡単に切り替えることができるように、"intersystems.servers":{} には、複数の接続先サーバ情報を記述できます。

以下、2つの接続先情報(test1、test2)を指定した設定例です。

画面例では、test1の接続情報を使用して接続します。

接続したい IRIS のホスト名(host)、Webサーバポート番号(port)、httpかhttpsか(schema)、接続時に使用するユーザ名(username)、接続サーバ情報(server)、ネームスペース(ns)、"active" : true を設定し保存します(Ctrl + s で保存できます)。

コミュニティエディションを除くプライベートWebサーバを使用しない2023.2以降のバージョンでは、"pathPrefix" : "/インスタンス名" の指定も必要となります。詳しくはこちらの記事をご参照ください。👉[プライベートWebサーバを使用しないバージョンの新規インストール/アップグレード:概要]

{
    "intersystems.servers": {
        "test1":{
            "webServer": {
                "host": "127.0.0.1",
                "port": 52773,
                "scheme":"http"
            },
            "username": "SuperUser"
        },
        "test2":{
            "webServer": {
                "host": "127.0.0.1",
                "pathPrefix": "/iris",
                "port": 80,
                "scheme": "http"
            },
            "username": "SuperUser"
        }
    },
    "objectscript.conn": {
        "active": true,
        "server": "test1",
        "ns": "USER"
    }
}

 

なお、以下のように、”objectscript.conn”: {}  の設定だけでも接続できますが、接続ユーザ名に対するパスワードをsettings.jsonに記述しておく方法となります。

{
    "intersystems.servers": {},
    "objectscript.conn": {
        "active": true,
        "host": "localhost",
        "port": 52773,
        "ns": "USER",
        "username": "_SYSTEM",
        "password": "SYS"
    }
}

 

接続できると、VSCode左下に以下のように接続情報が表示されます。

接続までの手順は以下の通りです。

初回、パスワードを設定しても接続できない場合は、 クリック後、画面左下に表示される[ObjectScript](下図)をクリックし、画面上部中央に表示されるメニューから「Toggle Coonection」をクリックし、接続できるかご確認ください。

 

接続が完了すると、下図のように各種メニューを表示できます。

メニューの [Refresh Connection] をクリックすると最新情報を取得できます。

 

 

接続完了後、 をクリックすると、サーバ内のクラス/ルーチン/インクルードファイルなどの情報を確認できます。(サーバ側編集モードを有効にしない限り、サーバ側コードは read-only で開きます)

サーバ情報は読み取り専用の為、VSCode 上で編集したい場合は、ソースコードを右クリックし「Export」を選択します。

Export選択後、ワークスペース > src  以下にソースコードがコピーされます。

※システムコードは上書きしないようにご注意ください。

Export先ディレクトリは "objectscript.export": {} の設定で変更できます。デフォルトは src が設定されています。

以下のように "folder" の設定を使用して別ディレクトリに変更することができます。

    "objectscript.export": {
        "folder": "mydir",
        "addCategory": false,
        "map": {},
        "atelier": true,
        "generated": false,
        "filter": "",
        "exactFilter": "",
        "category": "*",
        "noStorage": false,
        "dontExportIfNoChanges": false,
        "maxConcurrentConnections": 0,
        "mapped": true
    }

 

3、クラス定義を作ってみる

早速、クラス定義を作成し、HelloWorld! の文字列を出力するメソッドを作ります。

 をクリックし、ワークスペースに戻ります。

開いたワークスペースに、パッケージ名と同名のフォルダを用意します。例では、Test としています。

定義例)

Class Test.Class1 Extends %RegisteredObject
{

ClassMethod Hello()
{
    write "Hello world! こんにちは!"
}

}

[Ctrl + スペース] を押すと以下のような入力候補が出ます。

コードの作成が完了したら、Ctrl + s で保存+コンパイルを行います。(Outputウィンドウを表示しておくとコンパイル結果が確認できます。)

ターミナルを起動し、クラスメソッドの実行を試します。

USER>do ##class(Test.Class1).Hello()
Hello world! こんにちは!
USER>

メモ:コンテナやLinux上のIRISに対しては、iris session インスタンス名 でIRISにログインできます。

例)

irisowner@0c6e3bc48ff6:~$ iris session IRIS
ノード: 0c6e3bc48ff6 インスタンス: IRIS

USER>

 

4、ルーチンを作ってみる

ルーチンの作成についての注意事項は、橋本さんに投稿いただいたこちらの記事がとても参考になります。ぜひご参照ください。

ワークスペース以下にルーチン用ファイルを作成します。拡張子は mac とします。

ルーチンでも [Ctrl + スペース] を押すと入力候補が表示されます。

ルーチン実行例は以下の通りです。

USER>do hello^First()
こんにちは、ルーチンです
USER>

 

5、デバッグの実行

《2024/1/17 時点の操作方法に合わせ図解など更新しています》

クラス定義の場合、以下のようにメソッド定義の直前に[Debug] と表示されます。[Debug] をクリックするとデバッグが開始するので、ブレークポイント(F9)を事前に設定しておきます。

[Debug]をクリックすると、VSCodeの画面上部にデバッグ用アイコン  が表示されます。

ステップ実行した時の状態は以下の通りです。(画面左側に実行中の変数などの一覧が表示されます)

 

ルーチンの場合もラベル名の上に表示される[Debug]をクリックすることで同様の手順でデバッグを開始できます。

 

6、Webサーバ使用時:デバッグの注意点

※ プライベートWebサーバ(=InterSystems製品インストール時、簡易的にインストールされたApacheで52773番ポートでアクセスするWebサーバ)使用時は以下の変更は不要です。

Webサーバ(IISやApache)を利用している環境でVSCodeからObjectScriptのデバッグを実行する際、Webソケットモジュールがデフォルトでは有効になっていないため以下のようなエラーが表示されます。

 
(WebサーバのWebソケットモジュールが有効になっていないため、デバッグセッションの開始が失敗した旨のエラーが表示されます)

 

以下、IISとApacheでのWebソケットモジュールの有効化方法をご紹介します。

IISの場合

Webサーバ(IIS)のサービスを選択した状態で、「アプリケーション開発」以下にある「WebSocketプロトコル」をチェックします。

また、「HTTP共通機能」以下にある「HTTPリダイレクト」もチェックします。

 

 

Windows10での追加の場合は下図の通りです。

 

 

Apacheの場合 

WebSocketモジュールを有効化するため、以下実行します。(設定変更後、Apacheを再起動してください。)

$ sudo a2enmod proxy_wstunnel
Considering dependency proxy for proxy_wstunnel:
Enabling module proxy.
Enabling module proxy_wstunnel.
To activate the new configuration, you need to run:
  systemctl restart apache2
$ sudo systemctl restart apache2
$
ディスカッション (1)1
続けるにはログインするか新規登録を行ってください