0 フォロワー · 44 投稿

Caché Server Pages (CSP) は、InterSystemsデータプラットフォームでインタラクティブなWebアプリケーションを構築するために使用するアーキテクチャとツールセットの両方のことです。

記事 Hiroshi Sato · 2月 15 4m read

IRISではCSPタグベースの開発は、非推奨(Deplicated)になっています。

非推奨とはいえ、いますぐ使えなくなることはないと思います。

が、CSP機能に含まれるHyperEventの#server()#呼び出しは、かなりやばいということがわかってきました。

これはChromeを始めとするメジャーなブラウザーが提供しているSynchronous XMLHttpRequestという関数を呼び出しています。

この関数をGoogleは10年前くらいから非推奨機能としていて、いつか完全に機能をドロップすると宣言しています。

Stackoverflowの該当記事

インターシステムズのドキュメントにもさりげなく記載されています。

HyperEventCallメソッド

とはいえ、10年もそのままなので、希望的観測をすれば、今後も使える可能性は高いかもしれません。

しかし、ある日突然なくなるリスクはゼロではありません。

ですので、#server()#呼び出しをお手元のコードからなるべく早く取り除くのが賢明です。

それでは、どうすれば良いのか?

ということですが、今のご時世で考えれば、REST APIに変えましょうというのが美しい世界ですが、おそらく書き換えのコストは、半端じゃないでしょう。

ということで、現実的な解は、#Call()#に置き換えることだと思います。

4
2 70
記事 Hiroshi Sato · 3月 4 13m read

最近話題のClaude Codeを使って、ObjectScriptプログラミングをトライしてみました。

もちろんClaude CodeにObjectScriptのコードを書かせるにはそれなりの指示が必要ですが、適切なプロンプトを与えると想像以上にちゃんとしたObjectScriptコードを書いてくれます。

今回試したのは、少し前に投稿したCSPの#server問題に対応するため、#serverをREST APIに書き換えるというものです。

元のソースは、

https://github.com/wolfman0719/shopdemo

これはCSPのデモアプリケーションですが、しっかりと#server機能を使用しています。


結論をいうと、%sessionがRESTとCSP間で共有できないという根本問題があって、実行成功までには至っていませんが面倒なコーディングをかなりカーバーしてくれることがわかります。

(REST APIをCSPクラスで実装することで%session共有の問題を回避でき、Claude Codeが生成したロジックの正しさは証明されました)

そして、Claude Codeは、 ObjectScriptのことかなり理解してくれています。

ObjectScriptプログラマーが少ない問題を大きく改善してくれる可能性があります。
 

それでは、私がどのようなことを行ったか説明します。

2
0 56
記事 Toshihiko Minamoto · 2月 9 3m read

IRIS DocDB Explorerの紹介:InterSystems IRISでJSONドキュメントを管理できるスタイリッシュなUI

IRISは、DocDBを使用してJSONドキュメントを保存および取得できる専用機能を提供しており、事前定義されたスキーマを必要としません。

開発者は、複数のツールを切り替えたり、冗長なコードを書いたりせずに、ドキュメントを素早く簡単に閲覧、作成、編集できる方法を求めています。 そこで私は、DocDBと簡単にやり取りできるクリーンでレスポンシブなインターフェースを提供するCSPベースのオープンソースアプリケーション、iris-docdb-uiを開発しました。 ユーザーは、ネームスペースやドキュメントデータベースの作成、保存されたドキュメントの閲覧、新規ドキュメントの追加、既存ドキュメントの編集を、すべて1つの便利なプラットフォーム上で簡単に行えます。

このアプリケーションは、InterSystems Open Exchangeでも公開されているため、簡単にインストールして、すぐに使い始めることができます。

 

DocDBを使いやすくする方法

Iiris-docdb-ui -  RIS DocDB Explorerの本質はそのシンプルさにあります。

0
0 43
記事 Hiroshi Sato · 12月 8, 2025 6m read

これは InterSystems FAQ サイトの記事です。
 

WebSocketは、リアルタイム双方向通信を可能にするプロトコルで、Webアプリケーションの動的な操作性を向上させるために広く活用されています。

この技術は、TCP上で動作し、HTTPプロトコルを介して接続を確立します。

一度接続が確立されると、持続的な接続が維持され、サーバーとクライアントが効率的にデータを交換できるのが特徴です。

通常のHTTP通信の場合、クライアントからのリクエストに対してサーバーが応答するというのが基本的な動作になるため、サーバーから非同期にデータを送信することが難しいですが、WebSocketを利用することでそのような機能を簡単に実現できます。

一方で、サーバーからの一方向の非同期通信が実現できれば良いという要件であれば、SSE (Server-Sent Events)を使用することもできます。

一般的にWebSocket通信が最も適していると考えられるのは、クライアント・サーバー間で双方向にデータを交換する必要がある場合になります。

双方向の接続を維持する必要があるため、状況によって、サーバー上のコンピュータ資源の消費(メモリー、CPU、IRISライセンス使用量など)に注意する必要があります。

0
0 67
記事 Hiroshi Sato · 12月 7, 2025 2m read

CSPでWebアプリケーションを開発する方法は今では推奨されていませんが、既存資産が膨大にあって、他の手法への書き換えには相当の時間がかかりそうな方々はたくさんおられることでしょう。

そういう方々は、しばらくはそれらCSPファイルのメンテナンスの必要性があるかと思います。

IRISではVSCodeが主たるIDEとなっていますが、開発環境がWindowsのみであれば、CSPファイルをSJISでメンテナンスしておけば、問題は起こりません。

ところが、それらのファイルをUNIX環境(LinuxやMac)に持っていって、VSCodeで編集作業を開始すると、文字化けの嵐となってしまいます。

これは以前にポストしましたが、UNIX環境のIRISは何も設定しないとロケールがenuw(英語)となっているためです。

さらにこれを日本語専用ロケールに変えても、unix環境ではロケールがjpuwの場合、ファイルの読み書きのエンコーディングが、utf8となっているので、cspファイルのエンコーディングがSJISのままでは都合が悪いです。

従ってCSPファイルのエンコーディングをUTF8に変更する必要があります。

しかし、プラットフォームの切り替えのたびにエンコーディングを変更するのも面倒です。

そこで推奨の方法は、ファイルのエンコーディングをUTF8のBOM付きに変更することです。

0
0 50
記事 Toshihiko Minamoto · 11月 24, 2025 5m read

img

この記事では、Pythonでの仮想環境の概念を紹介します。仮想環境は、依存関係を管理してプロジェクトをOSから分離するために不可欠です。

仮想環境とは?

仮想環境とは、次が含まれているフォルダのことです。

  • 特定のバージョンのPython
  • 最初は空のsite-packagesディレクトリ

仮想環境により、OSのPythonインストールとその他のプロジェクトからプロジェクトを分離できるようになります。

使用方法

仮想環境を使用するには、これらの手順に従います。

  1. 仮想環境を作成する:Pythonに標準搭載されている venv モジュールを使用すると、仮想環境を作成できます。 ターミナルを開いて、以下を実行します。

    python -m venv .venv
    

    .venv を希望する環境名に置き換えます。

  2. 仮想環境を有効化する:仮想環境を作成した後に、有効化する必要があります。 コマンドは、オペレーティングシステムによって異なります。

    • Windowsの場合
    .venv\Scripts\Activate.ps1
    

    エラーが発生した場合は、ターミナルで以下のコマンドを実行する必要がある可能性があります。

    Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force; .venv\Scripts\Activate.
0
0 97
記事 Toshihiko Minamoto · 11月 18, 2025 7m read

img

モジュールは重要なテーマです! ObjectScriptにはこの概念はありませんが、Pythonでは基本的な考え方です。 一緒に見ていきましょう。

モジュールとは?

モジュールは、クラスとパッケージの間にある中間層だと私は考えています。 例を見てみましょう。

悪い例:

# MyClass.py
class MyClass:
    def my_method(self):
        print("Hello from MyClass!")

別のスクリプトでこのクラスを使用する場合、次のようになります。

# class_usage.py
from MyClass import MyClass # weird, right?

my_instance = MyClass()
my_instance.my_method()

なぜこれは悪い例なのでしょうか?

まず最初に、PEP 8によると、ファイル名は snake_case(スネークケース)にする必要があり、my_class.py にするべきです。 次に、クラスと同じ名前のファイルからクラスをインポートしています。 Phthonではこれは良いプラクティスではありません。

特に、ObjectScriptのようにクラスと同じ名前のファイルにクラスを定義する環境から来ると、これは分かりにくいかもしれません。

0
0 75
記事 Mihoko Iijima · 7月 7, 2025 3m read

これは InterSystems FAQ サイトの記事です。

一般的に、500番台はサーバー側で発生したエラーを表していて、503番エラーはサーバーが何らかの理由で機能を停止していてクライアントの要求に回答できない場合に出現するエラーです。

外部サイトの説明:503エラー 【HTTP 503 Service Unavailable】

以下、InterSystems 製品の使用で発生する503エラーの考えられる原因について一覧します。

REST/CSPページにアクセスできない

原因:ライセンスが割り当てられない場合に発生します(ライセンスが「同時接続ユーザ」での購入である場合、ユーザ数が制限を迎えたためライセンスが割り当てられずこのエラーが発生します)。

アプリケーションが「認証なし」アクセスを使用している場合、以下の原因により503エラーが発生します。

  • REST では、「認証なし」アクセスの場合は処理が終了しても10秒間ライセンスが保持されます。このため、保持するライセンス数を超えるような使用方法となっている可能性があります。
  • CSPアプリケーションでは、ブラウザごとにセッションを作成します。明示的にセッション終了を指定する、またはセッションタイムアウトを迎えるまでライセンスを保有し続けます。
0
0 122
記事 Tomoko Furuzono · 4月 17, 2025 1m read

これは、InterSystems FAQサイトの記事です。


メソッドの実装に使用する言語を明示する場合は、下記のようにメソッドキーワードで「Language=~~~」と指定します。

Method name(formal_spec) As returnclass [ Language = language ]
{    //implementation }

 指定できるLanguageの値は下記のとおりです。

  • objectscript (既定) — ObjectScript
  • python — 組み込み Python
  • tsql — Transact-SQL
  • ispl — Informix ストアド・プロシージャ言語

ドキュメント:Language (メソッド・キーワード)

上記の通り、ObjectScriptで記載する場合は、「Language=objectscript」と指定します。
但し、CSP内の<SCRIPT>タグ内で指定する場合は、下記の通り、「LANGUAGE=’cache’」と指定することにご注意ください。

<SCRIPT LANGUAGE='cache', ~~~>

ドキュメント:<SCRIPT> 

※CSPページは、IRISでは非推奨の機能です。

0
0 79