クリアフィルター
記事
Mihoko Iijima · 2020年4月28日
この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けて実現可能な複数の手法を紹介し、議論したいと思います。 次のようなトピックについて説明します。
Git 101
Gitフロー(開発プロセス)
GitLabのインストール
GitLabワークフロー
継続的デリバリー
GitLabのインストールと構成
GitLab CI/CD
第1回の記事では、Gitの基本、Gitの概念を高度に理解することが現代のソフトウェア開発にとって重要である理由、Gitを使用してソフトウェアを開発する方法について説明しています。
第2回の記事では、アイデアからユーザーフィードバックまでの完全なソフトウェアライフサイクルプロセスであるGitLabワークフローについて説明しています。
この記事では以下について説明します。
GitLabのインストールと構成
利用環境のGitLabへの接続
GitLabのインストール
GitLabをオンプレミス環境にインストールします。 GitLabのインストール方法は多彩で、ソースやパッケージからインストールしたり、コンテナーにインストールしたりできます。 ここではすべての手順を実際に説明するつもりはありませんが、そのためのガイドを紹介します。 ただし、それでもいくつか注意すべき点があります。
前提条件:
独立したサーバー - ウェブアプリケーションであるGitLabはかなりのリソースを消費するため、独立したサーバーで実行することをお勧めします。
Linux
(任意ですが強く推奨)ドメイン - ページを実行し、セットアップ全体を保護するために必要です。
構成
まず、通知メールを送信する必要があるかと思います。
次に、Pagesをインストールすることをお勧めします。 前の記事で説明したように、スクリプトのアーティファクトはGitLabにアップロードできます。 ユーザーはそれらのアーティファクトをダウンロードできますが、ブラウザで直接開くことができれば便利です。そのためにページが必要になります。
Pagesが必要な理由:
プロジェクト用に生成されたWikiや静的ページを表示するため
HTMLアーティファクトを表示するため
Pages を使ってその他のことを実現するため
また、HTMLページはonloadでリダイレクトを設定できるため、必要な場所へユーザーをリダイレクトさせることができます。 例えば、最後に実行されたユニットテスト(HTMLを生成した時点)にユーザーをリダイレクトするHTMLページを生成するコードは次のとおりです。
ClassMethod writeTestHTML()
{
set text = ##class(%Dictionary.XDataDefinition).IDKEYOpen($classname(), "html").Data.Read()
set text = $replace(text, "!!!", ..getURL())
set file = ##class(%Stream.FileCharacter).%New()
set name = "tests.html"
do file.LinkToFile(name)
do file.Write(text)
quit file.%Save()
}
ClassMethod getURL()
{
set url = "http://host:57772"
set url = url _ $system.CSP.GetDefaultApp("%SYS")
set url = url_"/%25UnitTest.Portal.Indices.cls?Index="_ $g(^UnitTest.Result, 1) _ "&$NAMESPACE=" _ $zconvert($namespace,"O","URL")
quit url
}
XData html
{
<html lang="en-US">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="refresh" content="0; url=!!!"/>
<script type="text/javascript">window.location.href = "!!!"</script>
</head>
<body>
If you are not redirected automatically, follow this <a href='!!!'>link to tests</a>.
</body>
</html>
}
ただし、私がPagesを使用した際にはバグが発生しました(アーティファクトを閲覧中に502エラーが発生しました)。こちらで修正されています。
利用環境のGitLabへの接続
CDスクリプトを実行するには、アプリケーションを実行するように構成されたサーバー環境が必要です。 LinuxサーバーにInterSystems製品がインストールされていると仮定します(InterSystems IRISだけでなく、これはCachéとEnsembleでも動作します)。以下の手順では、環境をGitLabに接続します。
GitLab Runnerをインストールする
ランナーをGitLabに登録する
ランナーがInterSystems IRISを呼び出せるようにする
GitLab Runnerのインストールについて重要な注意事項があります。GitLab Runnerをインストールした後にサーバーの複製を作成しないでください。その結果は予測不能であるため、まったく推奨されません。
ランナーをGitLabに登録する
まず、以下を実行します。
sudo gitlab-runner register
その後、いくつかのプロンプトが表示されます。ほとんどの手順は非常に簡単ですが、中には複雑なものもあります。
このランナーのgitlab-ciトークンを入力してください
以下のような複数のトークンを利用可能です。
システム全体用(管理設定で利用可能)
各プロジェクト用(プロジェクト設定で利用可能)
ランナーを接続して特定のプロジェクトのCDを実行する際には、そのプロジェクトのトークンを指定する必要があります。
このランナーのgitlab-ciタグを入力してください(カンマ区切り):
CDの構成では、どのスクリプトをどのタグで実行するかを絞り込むことができます。 そのため、最も単純なケースでは環境名となるタグを1つ指定します。
次のいずれかのexecutorを入力してください:ssh、docker+machine、docker-ssh+machine、kubernetes、docker、parallels、virtualbox、docker-ssh、shell: docker
Dockerのない通常のサーバーを使用している場合は、shell を選択してください
ランナーがInterSystems IRISを呼び出せるようにする
ランナーをGitLabに接続した後、InterSystems IRISとやり取りできるようにする必要があります。
gitlab-runnerユーザーがcsessionを呼び出せるようにする必要があります。 そのためには、該当ユーザーを irisusr (irisuser) または cacheusrグループに追加します。
usermod -a -G irisusr gitlab-runner
InterSystems IRISで gitlab-runner ユーザーを作成し、CDのタスク(DBへの書き込みなど)を行う役割を付与してください。
OSレベルの認証を許可します。
2と3に関してはユーザーやパスの受け渡しといった他の方法を使用できますが、OS認証が望ましいと思います。
まとめ
このパートでの実施内容:
GitLabをインストールしました
環境をGitLabに接続しました
リンク
インストール手順
Pages
Runner
パート I:Git
パートII:GitLabワークフロー
次の内容
次のパートでは、継続的デリバリーの構成を書きます。
記事
Mihoko Iijima · 2020年7月6日
この連載記事では、InterSystemsの技術とGitLabを使用したソフトウェア開発に向けていくつかの可能性のあるアプローチをを紹介し、議論したいと思います。 今回は以下のようなトピックを取り上げます。
Git 101
Gitフロー(開発プロセス)
GitLabのインストール
GitLabワークフロー
継続的デリバリー
GitLabのインストールと構成
GitLab CI/CD
コンテナを使用する理由
コンテナインフラストラクチャ
コンテナを使用したCD
ICMを使用したCD
この記事では、InterSystems Cloud Managerを使用して継続的デリバリーを構築ドします。 ICMは、InterSystems IRISをベースとしたアプリケーション用のクラウドプロビジョニングおよびデプロイメントソリューションです。これにより、 必要なデプロイ構成を定義することができ、ICMが自動的にプロビジョニングします。 詳細については、First Look: ICM をご覧ください。
ワークフロー
継続的デリバリーの構成では、次のようになります。
GitLabリポジトリにコードをPushする
Dockerイメージをビルドする
Dockerレジストリにイメージを公開する
テストサーバーでテストする
テストに合格した場合は、本番サーバーにデプロイする
または図解では以下の通りです:
ご覧のとおり、Dockerコンテナを手動で管理する代わりにICMを使用すること以外は、ほとんど同じです。
ICMの構成
コンテナのアップグレードを開始する前に、コンテナをプロビジョニングする必要があります。 そのためには、私たちのアーキテクチャを説明する defaults.json と definitions.json を定義する必要があります。
ここでは、LIVEサーバ用に2つのファイルを提供します。TESTサーバーの 定義 は同じで、 デフォルト も Tag と SystemMode の値以外は同じです。
defaults.json :
{ "Provider": "GCP", "Label": "gsdemo2", "Tag": "LIVE", "SystemMode": "LIVE", "DataVolumeSize": "10", "SSHUser": "sample", "SSHPublicKey": "/icmdata/ssh/insecure.pub", "SSHPrivateKey": "/icmdata/ssh/insecure", "DockerImage": "eduard93/icmdemo:master", "DockerUsername": "eduard93", "DockerPassword": "...", "TLSKeyDir": "/icmdata/tls", "Credentials": "/icmdata/gcp.json", "Project": "elebedyu-test", "MachineType": "n1-standard-1", "Region": "us-east1", "Zone": "us-east1-b", "Image": "rhel-cloud/rhel-7-v20170719", "ISCPassword": "SYS", "Mirror": "false"}
definitions.json
[ { "Role": "DM", "Count": "1", "ISCLicense": "/icmdata/iris.key" }]
ICMコンテナ内で/icmdata フォルダーがホストからマウントされ、
TESTサーバー定義が /icmdata/test フォルダーに配置されます
LIVEサーバー定義は /icmdata/live フォルダーに配置されます
必要なすべてのキーを取得した後で:
keygenSSH.sh /icmdata/sshkeygenTLS.sh /icmdata/tls
そして、必要なファイルを/icmdata に配置します。
iris.key
gcp.json(Google Cloud Platformへのデプロイ用)
ICMを呼び出してインスタンスをプロビジョニングします。
cd /icmdata/testicm provisionicm runcd /icmdata/liveicm provisionicm run
これにより、1台のTESTサーバーと1台のLIVEサーバーをプロビジョニングし、
それぞれにスタンドアロンのInterSystems IRISインスタンスがプロビジョニングされます。
より詳細な説明については、First Look: ICM を参照してください。
ビルド
まず、イメージをビルドする必要があります。
コードはいつものようにリポジトリに保存され、CDの設定は gitlab-ci.yml に保存されますが、それに加えて(セキュリティを高めるために)いくつかのサーバー固有のファイルをビルドサーバーに保存します。
iris.key
ライセンスキーです。サーバーに保存するのではなく、コンテナのビルド中にダウンロードすることもできます。 リポジトリに保存するのは安全ではありません。
pwd.txt
デフォルトのパスワードを含むファイル。 繰り返しますが、リポジトリに保存するのは安全ではありません。 また、別のサーバーでprod環境をホストしている場合は、デフォルトのパスワードが異なる可能性があります。
load_ci_icm.script
初期スクリプトは:
インストーラをロード
インストーラがアプリケーションの初期化を行う
コードをロードする
set dir = ##class(%File).NormalizeDirectory($system.Util.GetEnviron("CI_PROJECT_DIR"))do ##class(%SYSTEM.OBJ).Load(dir _ "Installer/Global.cls","cdk")do ##class(Installer.Global).init()halt
最初の行は意図的に空欄にしてあります。
これまでの例とは異なる点がいくつかあります。 1つ目は、ICMはGitLabの代わりにコンテナと直接やり取りするため、OS認証を有効にしていない点です。 2つ目は、インストーラマニフェストを使ってアプリケーションを初期化し、初期化のさまざまな方法を示している点です。 インストーラについて詳細はこの記事のインストーラの詳細をご参照ください。 最後に、イメージをDocher Hubでプライベートリポジトとして公開します。
Installer/Global.cls
インストーラマニフェストは以下の通りです。
<Manifest> <Log Text="Creating namespace ${Namespace}" Level="0"/> <Namespace Name="${Namespace}" Create="yes" Code="${Namespace}" Ensemble="" Data="IRISTEMP"> <Configuration> <Database Name="${Namespace}" Dir="${MGRDIR}/${Namespace}" Create="yes" MountRequired="true" Resource="%DB_${Namespace}" PublicPermissions="RW" MountAtStartup="true"/> </Configuration>
<Import File="${Dir}MyApp" Recurse="1" Flags="cdk" IgnoreErrors="1" /> </Namespace>
<Log Text="Mapping to USER" Level="0"/> <Namespace Name="USER" Create="no" Code="USER" Data="USER" Ensemble="0"> <Configuration> <Log Text="Mapping MyApp package to USER namespace" Level="0"/> <ClassMapping From="${Namespace}" Package="MyApp"/> </Configuration>
<CSPApplication Url="/" Directory="${Dir}client" AuthenticationMethods="64" IsNamespaceDefault="false" Grant="%ALL" /> <CSPApplication Url="/myApp" Directory="${Dir}" AuthenticationMethods="64" IsNamespaceDefault="false" Grant="%ALL" /> </Namespace></Manifest>
そして、以下の変更が実装されています。
アプリケーションのネームスペースを作成します。
アプリケーションコードデータベースを作成します(データはUSERデータベースに格納されます)。
コードをアプリケーションコードデータベースにロードします。
MyAppパッケージをUSERネームスペースにマップします。
HTML用とREST用の2つのWebアプリケーションを作成します。
gitlab-ci.yml
次は、継続的デリバリーの構成についてです:
build image: stage: build tags: - master script: - cp -r /InterSystems/mount ci - cd ci - echo 'SuperUser' | cat - pwd.txt load_ci_icm.script > temp.txt - mv temp.txt load_ci.script - cd .. - docker build --build-arg CI_PROJECT_DIR=$CI_PROJECT_DIR -t eduard93/icmdemo:$CI_COMMIT_REF_NAME .
ここでは何が起きているのでしょうか?
まず、docker buildはベースとなるビルドディレクトリのサブディレクトリににしかアクセスできないので秘密」ディレクトリ (iris.key、pwd.txt、およびload_ci_icm.script があるディレクトリをクローンしたリポジトリをコピーする必要があります。
次の最初のターミナルアクセスにはユーザとパスの入力が必要なので、load_ci.script に追加します(load_ci.script の先頭行の空行はそのためのものです)。
最後に、dockerイメージをビルドして次のように正しくタグを付けします。
$ eduard93/icmdemo:$CI_COMMIT_REF_NAME
ここで $CI_COMMIT_REF_NAME は、現在のブランチの名前です。 イメージタグの最初の部分は、GitLabのプロジェクト名と同じ名前にする必要があることに注意してください。GitLabのレジストリタブで確認することができます(タグ付けの方法はレジストリタブで確認することができます)。
Dockerfile
DockerイメージのビルドはDockerfile を使って行います。
FROM intersystems/iris:2018.1.1-released
ENV SRC_DIR=/tmp/srcENV CI_DIR=$SRC_DIR/ciENV CI_PROJECT_DIR=$SRC_DIR
COPY ./ $SRC_DIR
RUN cp $CI_DIR/iris.key $ISC_PACKAGE_INSTALLDIR/mgr/ \ && cp $CI_DIR/GitLab.xml $ISC_PACKAGE_INSTALLDIR/mgr/ \ && $ISC_PACKAGE_INSTALLDIR/dev/Cloud/ICM/changePassword.sh $CI_DIR/pwd.txt \ && iris start $ISC_PACKAGE_INSTANCENAME \ && irissession $ISC_PACKAGE_INSTANCENAME -U%SYS < $CI_DIR/load_ci.script \ && iris stop $ISC_PACKAGE_INSTANCENAME quietly
基本的なIRISコンテナから開始します。
まず、コンテナ内にリポジトリ(と「秘密」ディレクトリ)をコピーします。
次に、ライセンスキーをmgrディレクトリにコピーします。
次に、パスワードを pwd.txt の値に変更します。 この操作ではpwd.txtが削除されることに注意してください。
その後、インスタンスが起動され、load_ci.scriptが実行されます。
最後に、IRISインスタンスを停止します。
ここで注意したいのは、Docker executorではなく GitLabShell executor を使用していることです。Docker executorはイメージ内の何かが必要な場合に使用します。例えば、Androidアプリケーションをjavaコンテナで構築していて、apkだけが必要な場合などです。 この場合はコンテナ全体が必要になり、そのためにShell executorが必要になります。 そのため、GitLab Shell executorを使ってDockerコマンドを実行しています。
公開
Docker Hubでイメージを公開しましょう
publish image: stage: publish tags: - master script: - docker login -u eduard93 -p ${DOCKERPASSWORD} - docker push eduard93/icmdemo:$CI_COMMIT_REF_NAME
変数${DOCKERPASSWORD} に注意してください。これはGitLab 秘密変数です。 GitLab>プロジェクト>設定> CI / CD>変数でそれらを追加できます。
ジョブログには、パスワードの値は含まれません。
Running with gitlab-runner 10.6.0 (a3543a27) on icm 82634fd1Using Shell executor...Running on docker...Fetching changes...Removing ci/HEAD is now at 8e24591 Add deploy to LIVEChecking out 8e245910 as master...Skipping Git submodules setup$ docker login -u eduard93 -p ${DOCKERPASSWORD}WARNING! Using --password via the CLI is insecure. Use --password-stdin.Login Succeeded$ docker push eduard93/icmdemo:$CI_COMMIT_REF_NAMEThe push refers to repository [docker.io/eduard93/icmdemo]master: digest: sha256:d1612811c11154e77c84f0c08a564a3edeb7ddbbd9b7acb80754fda97f95d101 size: 2620Job succeeded
そして、Docker Hubで新しいイメージを確認できます。
実行
イメージが作成されました。次に、テストサーバーで実行してみましょう。 スクリプトは以下とおりです。
run image: stage: run environment: name: $CI_COMMIT_REF_NAME tags: - master script: - docker exec icm sh -c "cd /icmdata/test && icm upgrade -image eduard93/icmdemo:$CI_COMMIT_REF_NAME"
ICMでは、1つのコマンド( icm upgrade )を実行するだけで、既存のデプロイメントをアップグレードできます。このコマンドは icm コンテナ内で指定されたコマンドを実行する "docker exec icm sh -c "を実行して呼び出します。 最初に、ICMデプロイメント定義がTESTサーバー用に定義されている /icmdata/test にモードを切り替えます。 その後、 icmアップグレード を呼び出して、既存のコンテナを新しいコンテナに置き換えます。
テスト
テストをいくつか実行してみましょう。
test image: stage: test tags: - master script: - docker exec icm sh -c "cd /icmdata/test && icm session -namespace USER -command 'do \$classmethod(\"%UnitTest.Manager\",\"RunTest\",\"MyApp/Tests\",\"/nodelete\")' | tee /dev/stderr | grep 'All PASSED' && exit 0 || exit 1"
繰り返しになりますが、ここでも、icmコンテナ内で1つのコマンドを実行しています。 icmセッションは、デプロイされたノードでコマンドを実行します。 コマンドはユニットテストを実行します。 その後、すべての出力を画面にパイプし、ユニットテストの結果を見つけるために grep にもパイプして、正常かエラーでプロセスを終了します。
デプロイ
本番サーバーへのデプロイは、LIVEデプロイメント定義用の別のディレクトリを除いては、テストのデプロイとまったく同じです。 テストが失敗した場合、このステージは実行されません。
deploy image:
deploy image: stage: deploy environment: name: $CI_COMMIT_REF_NAME tags: - master script: - docker exec icm sh -c "cd /icmdata/live && icm upgrade -image eduard93/icmdemo:$CI_COMMIT_REF_NAME"
まとめ
ICMは、クラウドインフラストラクチャをプロビジョニングとサービスをデプロイするための
シンプルで直感的な方法を提供します。これにより、大規模な開発や再構築を行わなくても、クラウドにアクセスできるようになります。 コードとしてのインフラストラクチャ(IaC)およびコンテナ化されたデプロイメントの利点により、InterSystems IRISベースのアプリケーションをGoogle、Amazon、Azureなどのパブリッククラウドプラットフォーム、またはプライベートのVMware vSphereクラウドに簡単にデプロイできます。 必要なものを定義し、いくつかのコマンドを発行すれば、後はICMが行います。
すでにクラウドインフラストラクチャ、コンテナ、またはその両方を使用している場合でも、ICMを使用することでアプリケーションのプロビジョニングとデプロイに必要な時間と労力を大幅に削減します。
リンク
記事のコード
テストプロジェクト
ICMドキュメント
First Look: ICM
記事
Mihoko Iijima · 2023年2月24日
開発者の皆さん、こんにちは!
InterSystems デベロッパーツールコンテスト2023 の21の応募作品の中から、Experts Nomination 第4位に輝いた @Muhammad Waseem さんのiris-geo-map(インタラクティブに地図を生成し、地理データを視覚化するツール)についてご紹介します。
このツールは、Embedded Pythonを利用していて Folium Python ライブラリを使用されています。
特徴については @Muhammad Waseem さんの Open Exchange のREADMEもぜひご参照ください。
それでは、さっそく、使用開始までの手順です。(とても簡単です)
IPM(InterSystems Package Mangaer:以前はZPMとも呼ばれていました)のクライアントツールを管理ポータルかスタジオからインポートしたら、以下コマンドを実行するだけでツールの準備が整います。
クライアントツールのインポートはどのネームスペースでも大丈夫です。管理ポータルからインポートされる場合は、以下メニューを利用します。
管理ポータル→システムエクスプローラ→クラス→インポート対象ネームスペースを選択→インポートボタンクリック
ツールを配置したいネームスペースに移動し、ZPMコマンドを利用してインストールします。
zpm "install iris-geo-map"
ZPMインストール時の出力例
USER>zpm "install iris-geo-map"
[USER|iris-geo-map] Reload START (/usr/irissys/mgr/.modules/USER/iris-geo-map/1.0.4/)[USER|iris-geo-map] requirements.txt START[USER|iris-geo-map] requirements.txt SUCCESS[USER|iris-geo-map] Reload SUCCESS[iris-geo-map] Module object refreshed.[USER|iris-geo-map] Validate START[USER|iris-geo-map] Validate SUCCESS[USER|iris-geo-map] Compile START[USER|iris-geo-map] Compile SUCCESS[USER|iris-geo-map] Activate START[USER|iris-geo-map] Configure START[USER|iris-geo-map] Configure SUCCESS[USER|iris-geo-map] Activate SUCCESSUSER>
インストールによって準備される dc.IrisGeoMap.Folium クラスの GetGeoDetails()メソッドを使って、住所情報から緯度経度の情報を取得してみましょう。
例は、インターシステムズジャパンの東京オフィスの住所です。
USER>do ##class(dc.IrisGeoMap.Folium).GetGeoDetails("6-10-1 Nishi-Shinjuku, Shinjuku-ku,Tokyo,160-0023")
Location: 35 40m 53.5184s N, 139 42m 51.223s E
Address: 外苑西通り, 大京町, 新宿区, 東京都, 160-0015, 日本
Latitude: 35.6815329
Longitude: 139.7142286
使用されているコードは以下の通りです。(Embedded Pythonを使用しています)
ClassMethod GetGeoDetails(addr As %String) [ Language = python ]
{
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="IrisGeoApp")
try:
location = geolocator.geocode(addr)
print("Location:",location.point)
print("Address:",location.address)
point = location.point
print("Latitude:", point.latitude)
print("Longitude:", point.longitude)
except:
print("Not able to find location")
}
こんな具合で緯度経度情報を取得できるので、この結果を利用していくつかの場所にピンを指した地図を作成してみましょう(結果はHTMLで出力されます)。
この処理には、dc.IrisGeoMap.Folium クラスの MarkGeoDetails() メソッドを使用します。
do ##class(dc.IrisGeoMap.Folium).MarkGeoDetails("6-10-1 Nishi-Shinjuku,Fujiyoshida,Gion,Sapporo,Fukuoka,Osaka","irisgeomap_locations.html")
実行が完了すると第2引数で指定したディレクトリ、ファイル名でHTMLが生成されるので開いてみます。
インターシステムズ東京オフィス、富士吉田市、祇園、札幌市、大阪市、福岡市を地点に指定した結果が表示されました!
コードは以下の通りです。
GetGeoDetails()メソッドと同様に、第1引数に指定された住所情報から緯度経度情報を取得し、folium.Mapでマップオブジェクトを作ってから、folium.Markerで地図にピンを指しています。
Pythonを使うことで、こんなに簡単に地図にピンがさせてしまうのですね!
Python便利です。
ぜひ皆さんのお手元でも試してみてください!
お知らせ
Toshihiko Minamoto · 2022年9月19日
開発者の皆さんこんにちは。
前回のお知らせで、フィードバック・ポータル「インターシステムズ・アイデア」を紹介しました。今回は、このポータルについて、特にそこで扱われるトピックについて詳しく説明したいと思います。
以下のカテゴリーでアイデアを募集しています!
💡 InterSystems Products では以下の製品について新しい開発の方向性に関するアイデアを投稿することができます。
InterSystems IRIS data platform
InterSystems IRIS for Health
InterSystems HealthShare
InterSystems TrakCare
💡 InterSystems Services では以下のインターシステムズのサービスをよりよくするためのアイデアを投稿できます。
Developer Community
Open Exchange app gallery
Global Masters gamification platform
Partner Directory
Documentation
Certification
Learning
and InterSystems Ideas Portal itself
また、インターシステムズ社の製品やサービスとは直接関係のないフィードバックについては、「その他」というカテゴリが用意されています。
There is also the category "Other" for feedback that is not related directly neither to InterSystems Products or Services.
カテゴリーを選択した後、以下のようにキーワードやタグを自由に追加してください。
ポータルに追加する価値のあるカテゴリーやキーワードについてもお気軽にお寄せください。皆様からのご意見をお待ちしております。
ではインターシステムズ・アイデアポータルでお会いしましょう ✌️
記事
Mihoko Iijima · 2021年6月22日
これは InterSystems FAQ サイトの記事です。
同一システムに InterSystems 製品を複数インストールした場合、ドライバマネージャに登録される InterSystems 用の ODBCドライバは、最後にインストールしたバージョンのものに変更されます。
以下のレジストリエントリを変更することで、任意のドライバへ変更できます。
なお、RegFiles.bat 実行では ODBCドライバは切り替わらないのでご注意ください。
レジストリエントリは、以下の通りです。
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\InterSystems ODBC キーの Driver 値HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\InterSystems ODBC キーの Setup 値
上記エントリには、現在使用中のドライバへのパスが記録されています。
これらを、切り替える対象となるドライバが存在するパスに変更してください。
記事
Hiroshi Sato · 2022年7月20日
irisコマンドのqlistまたはlistを使用して出力先をファイルにして出力することができます。
qlistの結果は、^を区切り文字としたテキスト形式で出力されます。
^で区切られた3番目の部分に稼働状況のデータがあります。
$ iris qlist IRIS > iris.log
$ cat iris.log
IRIS^/Applications/iris^2022.1.0.164.0^running, since Thu Apr 7 16:37:03 2022^iris.cpf^1972^52773^0^alert^IRIS^^^/Applications/iris
listの場合には、先頭にstatus:と表示された行に稼働状況のデータがあります。
Unix系のOSの場合
$ iris list IRIS > iris.log
$ cat iris.log
Configuration 'IRIS' (default)
directory: /Applications/iris
versionid: 2021.2.0.650.0
datadir: /Applications/iris
conf file: iris.cpf (SuperServer port = 1972, WebServer = 80)
status: running, since Thu Apr 7 16:37:03 2022
state: alert
product: InterSystems IRIS
Windowsの場合
state行が表示されません。
C:\InterSystems\IRIS\bin>iris listInstance 'IRIS' (Development installation) directory: 'C:\InterSystems\IRIS' versionid: '2021.2.0.650.0' conf file: 'c:\intersystems\iris\iris.cpf' (SuperServer port = 1972, WebServer port = 80) status : 'running, since Wed Jun 1 19:26:09 2022' Product : InterSystems IRIS
記事
Tomoko Furuzono · 2022年3月29日
これは、InterSystems FAQサイトの記事です。
SQLの場合、NULLデータと空文字列 ('')は区別されます。それぞれの設定・確認方法は、以下のようになります。
(1) NULLデータ
【SQL】
insert into test (a) values (NULL)select * from test where a IS NULL
【InterSystems ObjectScript】
set x=##class(User.test).%New()set x.a=""
(2) 空文字列 ('')
【SQL】
insert into test (a) values ('')select * from test where a = ''
【InterSystems ObjectScript】
set x=##class(User.test).%New()set x.a=$C(0)
詳細については、以下ドキュメントをご参照ください。
NULL および空文字列【IRIS】NULL および空文字列