お気に入りのIDEでのインターシステムズCachéでの開発

こんにちは InterSystemsCachéには、統合されたツールを使用せずにソリューションを開発する非常に実用的な方法があります。 すべてのプロジェクトコードは、ソースコードを含む従来のファイルの形式で保存し、好みの開発環境で編集し、バージョン管理システムでインデックスを付け、1つのコマンドでCachéDBMSのクラスをインポートおよびコンパイルできます。 さらに、これにより、コードのビルドや前処理など、他の外部ツールを使用する機能が提供されます。 この記事は、Cachéのまだ伝統的なものではなく、非常に実用的なプロジェクト開発サイクルと見なされます。



この記事では、組み込みツール(スタジオ)を使用せずにInterSystemsテクノロジーを使用してプロジェクト開発を整理する最も簡単な方法について説明します。 各メソッドは、InterSystemsCachéでプロジェクトをロード、アセンブル、またはデバッグするための本格的なツールに変更および拡張できますが、この記事の目的は、開発組織とその議論に対する提案されたアプローチの基礎を提供することです。



以下に説明する開発方法には、次のものが含まれます。



  1. プロジェクト全体(ソースコード)は、任意のディレクトリ構造でファイルシステムに配置されます。
  2. プロジェクトディレクトリには、Gitバージョン管理システムによってインデックスが付けられます。
  3. クラスのソースコードは「純粋な形式」でファイルに書き込まれ、クラスとパッケージの階層が観察されます。
  4. プロジェクトの作業はすべてファイルシステムで実行され、コードは外部エディターまたはIDEで記述されます。
  5. たとえば、コードの前処理、アセンブリ段階でのマクロ置換、フロントエンドアセンブリなどの追加ツールを接続できます。


この記事では、ルーチン、CSP、およびその他のファイルについては説明しません。 前者を使用した作業は、クラスの場合と同じように編成できます。したがって、必要に応じて、記事で紹介した例と同様に、日常的なサポートを自分で実装できます。 CSPファイルは単にディスク上のファイルであり、CachéDBMSにインポートする必要はありませんが、記事で説明されている方法と同様に、あるディレクトリから別のディレクトリに移動するだけです。



この記事で説明されている方法では、インストールされているバージョンのInterSystemsCaché2016.2+(それぞれEnsembleなど)以外の追加のツールやプラットフォームは必要ありません。 さらに、クライアントコードのアセンブリと前処理が考慮され、 Node.JSテクノロジで作成され、稼働中のマシンに自由にインストールできます。 この方法は、CachéDBMSを含む他の技術を使用して実行することもできます。 NodeJSが選択されたのは、プロジェクトの構築と前処理のタスクを完了するための既製のパッケージが多数あるためです。



動機と利点



疑問が生じます。なぜスタジオで開発を続けるのか、アトリエと呼ばれる「新しいスタジオ」に切り替えるのではないのですか? それを使用しないことのポイントは何ですか?



CachéObjectScript(COS)プログラミング言語は、C#、Java、JavaScript、Python、Rubyなどの他の最も一般的な言語とは異なります。 インターシステムズが提供およびサポートする開発ツールのみが「すぐに使用可能」に使用できるためです。 いくつかの著作権 ソリューションもありますが、それらはすべて、設計上、スタジオでのプログラミングと大差ありません。 CachéObjectScriptプログラムとそのソースコードは、CachéDBMS自体に直接保存されます。 InterSystemsCaché2016.2 (またはバージョン2013.2のCDL-続きを読む)でUDLサポートが登場する前に、データベースからソースコードをファイルに抽出するために、かなりのプログラムを記述し、このコードを戻すためにさらに努力する必要がありました。 DBMSCaché。 これがたった1つのコマンドで可能になったため、ソリューションを開発するための「従来の」モデルを簡単に整理できます。ソースコードファイルの編集-コンパイル-結果の取得。



Atelierの登場(執筆時点で使用可能なフィールドテストバージョン )以前は、CachéスタジオはWindowsプラットフォーム専用であるため、Linux / MacOS / ...を開発することは単に不可能でした。 この記事で説明されている方法は、完全にクロスプラットフォームです。



プロジェクトにCachéクラスのみが含まれることはほとんどありません。 問題は、プロジェクト全体のソースコードをバージョン管理システムの1つのリポジトリに正しく保存する方法です。 そして今日まで、InterSystemsCachéのプロジェクトには独特の開発サイクルが使用されています。CachéDBMSのクラスに対する実際の作業はスタジオで行われ、変更を意図していないクラスのXML表現のみがプロジェクトリポジトリに取り込まれます。 Atelierの場合、開発サイクルは、外部ツールと相互作用することなく、その中でのみ動作するように調整されています。 新しいIDEの唯一の機能は、ソースコードをUDLファイルにエクスポート/インポートする明示的な機能です。これは、後でバージョン管理システムでインデックスを作成できますが、それ以上はできません。 外部ツール、コレクター、コードアナライザー、プリプロセッサーとの相互作用はありません。任意のプロジェクト構造、メタファイルのサポートはありません。一般的に、インターシステムズがAtelierおよびEclipse内でのサポートに必要と考えるもののみをサポートします。



最後に、上記のすべてを考慮した主な動機は、CachéObjectScriptを全世界に公開することです。 これにより、コミュニティでサポートされている最も人気のあるIDEによるCOSサポート用のオープンソースプラグインの出現、GitHubを含むclsファイルの避けられない今後の構文ハイライト、およびコードの分析やリファクタリングなどのさまざまなツールが登場します。



はじめに



Cachéバージョン2016.2では、$ system.OBJクラスのメソッドを使用して、ソースコードをUDL(Universal Definition Language)にアップロードするサポートが導入されました。 この記事では、この特定のクラスのメソッドの操作について説明します。 InterSystemsCaché2013.2以降の以前のバージョンでは、%Compiler.UDL.TextServicesクラスのメソッドを使用して、元の形式でクラスコードをアンロードすることもできました。 これにより、スタジオで表示できる形式のクラスまたはルーチンのソースコードを使用して、Caché物理ファイルのロードとアンロードが可能になります。 また、バージョン2016.2以降、 Atelier REST APIを使用して 、CachéDBMSからクラス定義をアンロードすることもできます。



以前は、クラスのXML表現のみをエクスポートおよびインポートできたため、ソースコードがほとんど読めなかったため、UDLはInterSystems製品(Caché、Ensemble、HealthCareなど)でプロジェクトを開発するための新しい可能性を開きます。



この記事の結果は、ファイルシステムで整理された単純なプロジェクトと、1つのコマンドでそれを収集してCachéDBMSにインポートできるいくつかのスクリプトになります。



準備する



InterSystemsCachéにプロジェクトがあるか、すでにあるとします。このプロジェクトは、Cachéクラス(および、場合によってはルーチンと静的フロントエンド)で構成されます。 これは、この記事で説明されている開発方法を既存または新規プロジェクトに適用し始めるために必要かつ十分な条件です。



マシンには、プロジェクトがインポートされるCachéDBMSバージョン2016.2+が既にローカルにインストールされていることが前提です。 InterSystemsCachéの以前のバージョン(2013.2以降)でこの開発方法を実装するには、%Compiler.UDL.TextServicesメソッドを使用して、提案された例を適合させる必要があります。 参照によりフォームに記入することにより、製品の試用版をダウンロードしてインストールできます。 インストール時に、8ビットの代わりにUnicodeエンコードを指定し、インストールウィザードによって提案された他のすべてのアイテムを変更せずに残します。



この記事では、 Gitバージョン管理システムを使用します 。 Gitがインストールされていない場合は、 インストールする必要があります。



プロジェクト作成



デモンストレーションプロジェクトのディレクトリ構造は次のとおりです。







この場合:



  1. プロジェクトのソースコードは「ソース」ディレクトリにあり、対応するサブディレクトリ「cls」にはプロジェクトのパッケージクラスのツリーがあります。 上記のプロジェクトのスクリーンショットでは、例としてDevProjectパッケージがあり、その中にRobotクラス(DevProject.Robot)があり、RESTは内部クラス(DevProject.REST.Index)を持つサブパッケージです。
  2. インポート*スクリプトは、プロジェクトをCachéDBMSにインポートします。


上記のプロジェクトコードはGitHub入手できます 。 次の手順に従って、ローカルマシンでプロジェクトを複製することをお勧めします。



git clone https://github.com/ZitRos/cache-dev-project
      
      





プロジェクトには、おなじみのパッケージ階層を含むsource / clsディレクトリが含まれます。 デモンストレーションのために、メッセージ「Welcome、Anonymous!」を表示するMessageメソッドクラスを含む単純なクラスを作成しました。



 Class DevProject.Robot { ClassMethod Message(name As %String = "Anonymous") { write "Welcome, ", name, "!" } }
      
      





このクラスおよびその他のクラスをCachéDBMSにインポートするには、以下のいずれかの方法を使用できます。



1. InterSystems-Atelierの新しい開発環境を使用します。







もちろん、プロジェクトの作業をテストする必要があるたびに、示されたアクションを実行することは有益ではないため、2番目のオプションを使用します。



2.ターミナルで次のコマンドを実行します。



 do $system.OBJ.ImportDir("D:/Path/To/Project/source/cls",,"ck /checkuptodate=all",,1)
      
      





このコマンドは、すべてのファイルをD:/ Path / To / Project / source / clsディレクトリから現在のネームスペースに再帰的にダウンロードし、インポートの最後の瞬間以降に変更されたクラスもコンパイルします。 したがって、変更なしでリロードされたクラスはコンパイルに時間がかかりません。



2番目のオプションは、最も便利なソリューションではありません。プロジェクトで作業を開始するたびに、Cachéターミナルを開き、そこでユーザー名とパスワードのペアを入力する必要があります(通常の保護レベル以上のインスタンスで)、目的のネームスペースに移動して、最後にコマンドを実行します。ノートブックのどこかに保存しました。 3番目のオプションを使用してこれを自動化することができます。



3.シェルスクリプト(バッチスクリプト)を作成し、クラスをInterSystemsCachéにインポートする必要があるたびに呼び出します。



 import
      
      





ほとんどすべての外部IDEで開発する場合に後者を呼び出す簡単さは、ボタンを1つ押すだけに減らすことができます。 したがって、プロジェクト全体がファイルシステムに配置され、ファイルで作業が行われ、必要に応じて、プロジェクトをコンパイルおよび実行するためのコマンドが1つだけ実行されます。



インポートスクリプト



プロジェクトをCachéDBMSにインポートするスクリプトを検討してください。 これを行うには、Cachéインスタンスに関するもう少しの情報、つまり、インストールされたCachéの場所、ダウンロードされるエリア、ログイン用のユーザー名とパスワードが必要です。 このデータは、スクリプトで直接編集されます。 プロジェクトをローカルマシンにデプロイするときは、スクリプトをリポジトリに保存し、最新のデータでスクリプトのローカルコピーを作成することをお勧めします。



スクリプトのソースコードは、 Windowsおよび* nixシステムのGitHubで入手できます。 実行する必要があるのは、プロジェクトの作業を開始する前に、スクリプト内のいくつかの変数を一度編集することだけです。



このスクリプトは、インストールされたDBMSの/ bin /ディレクトリにある実行可能ファイルcache.exeを起動し、2つの引数を渡します-データベースと名前空間を持つディレクトリ。 次に、InterSystemsCachéのターミナルインターフェイスを介して、スクリプトはユーザー名、パスワード、およびクラスをインポートしてインポートまたはエラーを報告するCachéObjectScript言語のいくつかの簡単なコマンドを送信します。



したがって、ユーザーはクラスのインポートとコンパイル、およびコンパイル中に発生したエラーに関するすべての必要な情報を受け取ります。 import.batスクリプトを呼び出すときの出力例:



 Importing project... Node: DESKTOP-ILGFMGK, Instance: ENSEMBLE20162 USER> Load of directory started on 06/29/2016 22:59:10 Loading file C:\Users\ZitRo\Desktop\cache-dev-project\source\cls\DevProject\Robot.cls as udl Loading file C:\Users\ZitRo\Desktop\cache-dev-project\source\cls\DevProject\REST\Index.cls as udl Compilation started on 06/29/2016 22:59:10 with qualifiers 'ck /checkuptodate=all' Class DevProject.REST.Index is up-to-date. Compiling class DevProject.Robot Compiling routine DevProject.Robot.1 Compilation finished successfully in 0.003s. Load finished successfully. IMPORT STATUS: OK
      
      





これで、プロジェクトがロードされたことを確認できます。 これを行うには、Cachéターミナルからクラスのテストメソッドを呼び出すことができます。



 USER > do ##class(DevProject.Robot).Message() Welcome, Anonymous!
      
      





インストールされているCachéDBMSのバージョンが2016.2未満の場合、次のエラーが表示されます。



  #5840:    '/root/source/cls/Index.cls', ..    .
      
      





拡張例



InterSystemsテクノロジを使用してプロジェクトを開発することから最大限の利益を得るために、グラフィカルインターフェイスを追加し、NodeJSとGulpでプロジェクトを構築して、もっと魅力的なことを試してみましょう。 結果はWebページになり、その画像を以下に示します。











そのようなプロジェクトの開発をいかに正確に組織化することができるかに重点が置かれます。 まず、提案されたソリューションのアーキテクチャを検討する必要があります。







このプロジェクトは、静的クライアントコード(HTML、CSS、JavaScript)、RESTインターフェイスを記述するサーバー上のクラス、およびデータベースに格納された1つのクラスで構成されています。



GET要求を使用するクライアントは、サーバー上にあるロボットのリストを受け取ります。 また、「Spawn a new robot!」ボタンをクリックすると、クライアントはサーバーにGETリクエストを送信し、その結果、Robotクラスの新しいインスタンスが作成され、表示されたリストに追加されます。



プロジェクトの技術的な実装は、 GitHub(「拡張」ブランチ)で確認できます。 以下の記事では、このようなプロジェクトの開発方法に特に注意を払います。



拡張デモンストレーションプロジェクトのディレクトリ構造は、左の図に示すとおりです。



ここでは、前の例とは異なり、 `source / static`ディレクトリにあるアプリケーションのクライアント部分が追加され、プロジェクトはNode.JSとGulpを使用してビルドされます。



たとえば、特にプロジェクトには特別なコメントが含まれています。 例:



 <div class="version">v<!-- @echo package.version --></div>
      
      





プロジェクトをビルドすると、このコメントはpackage.jsonファイルで指定されたプロジェクトのバージョンに置き換えられます。 コレクターはCSSおよびJavaScriptコードも縮小し、処理されたすべてのコードを `build`ディレクトリーにコピーします。



インポートスクリプトでは、前の例とは異なり、次の変更が追加されました。



  1. インポートする前に、プロジェクトが組み立てられます。
  2. インポートファイルは、プリプロセッサを通過するため、 `build`ディレクトリからインポートされるようになりました。
  3. ファイルは、CSPファイルとともに `build / static`ディレクトリからCaché`csp / user`ディレクトリにコピーされます。 したがって、アプリケーションをインポートするとすぐに使用可能になります。


このプロジェクトのインストールと実行の詳細な手順 、リポジトリの説明にあります。



その結果、 `import。*`ファイル内のいくつかの変数を変更することにより、一度だけ設定する必要があるプロジェクトが作成されます。



考慮された開発サイクルは、 CachéVisual EditorおよびCachéWeb Terminalのいくつかのプロジェクトで使用されます 。 すぐに、自分のプロジェクトを含む他のプロジェクトでアプリケーションが見つかるかもしれません。



開発環境とデバッグ



この開発方法では、InterSystemsCachéを使用しないデバッグは必要ありません。 グローバルにログインするだけでなく、COSコードをデバッグする場合でも、Cachéの統合デバッグツールを使用する必要があります。



説明した開発方法には、大きな利点があります。お気に入りの開発環境を使用して、COSコード、vim、または単純なメモ帳を記述し、Mac OSまたは他のプログラミング言語と同じ方法でCOSの* nixを開発できることです。 しかし一方で、COSはこのDBMS以外では事実上サポートしていません。 これは、オートコンプリートは言うまでもなく、構文の強調表示でさえ現在エディターではサポートされていないことを意味します。 しかし、近い将来、これらすべてはより良い方向に変化することになり、今日のすべての補助手段はすでに実装する準備ができています。



それまでは、CachéObjectScriptの配布中に、IntelliJなどの一部のIDEが提供する基本的なキーワード構文を強調表示することができます。 そして彼女は彼女の仕事に非常にうまく対処しています:







IntelliJの場合は、今すぐ試すことができます。 ここに、 [ファイル]-> [設定のインポート]を使用してインポートする必要がある設定ファイルがあります。 著者のバックライト、不完全、追加は大歓迎です。



おわりに



この記事の目的は、InterSystemsCachéの開発の世界に新しいものをもたらし、他の開発アプローチを一般に紹介し、プログラミング言語としてのCachéObjectScriptの普及を促進することです。 フィードバック、アイデア、ディスカッションを歓迎します。



PS
経験豊富な読者は、最小限のセキュリティ設定でCachéインスタンスでインポートが行われた場合、Cachéはユーザー名とパスワードを要求せず、その結果、スクリプトがユーザー名とパスワードを入力しようとしたため、スクリプトを変更しない場合、予想される場所では、構文エラーが2回返されます。 これは、ユーザー名またはパスワードが停止するまで、スクリプトの動作に影響しません。



コメントで、Cachéがユーザー名とパスワードを必要とするかどうかを判断する方法を提案し、そうでない場合は送信しないでください。 もちろん、そのようなニーズに対しては、スクリプトから数行をカットするだけで十分ですが、この質問は未解決のままにしておきます。



All Articles