100人以上のユーザーが利用するJMPアドインがいくつかあります。これらのアドインには、JMP、Oracle ODBCクライアント、そしてカスタムメニューが必要です。当初は各ユーザーのPCにアドインを導入していましたが、JMPとOracleのインストールに加え、各PCにODBCドライバとアドインメニューを設定する必要がありました。毎週のようにハードディスクが故障したり、PCのイメージが再作成されたりと、メンテナンス作業は大変なものでした。
この負担を軽減するため、JMPとアドインの実行にはCitrixサーバーを使用することにしました。現在、CitrixからMicrosoftリモートデスクトッププロトコル(RDP)への移行を進めています。そのメリットは以下のとおりです。
この講演では、サーバーのセットアップ、セキュリティ、Oracle の構成、JMP アドインの構成、コードのメンテナンス、ユーザーが Citrix または RDP からファイルを保存する方法について詳しく説明します。
ピーター・ムロズです。ジョンソン・エンド・ジョンソンの社員です。今日は、サーバー向けJMPとそれがどのように私の世界を救ったかについてお話しします。画面を共有してください。
改めて、ピーター・ムロズと申します。ジョンソン・エンド・ジョンソン・イノベーティブ・メディシンの社員です。本日は、JMPサーバー版とアドインを活用して、私の世界を救った方法についてお話します。なお、このプレゼンテーションは私の見解を表明するものであり、ジョンソン・エンド・ジョンソンの製品を正式に推奨するものではありません。
私たちは誰でしょうか?ジョンソン・エンド・ジョンソン・イノベーティブ・メディシンです。私たちの使命は、人々の生活を変革し、現代の最も重要なアンメット・メディカル・ニーズを解決する革新的な医薬品とソリューションを創薬・開発することです。私の部署はグローバル・メディカル・セーフティと呼ばれています。私たちは、医療安全の卓越性とベネフィット・リスク評価を堅固に推進することで、患者さんを守るという使命を担っています。
私のグループは「方法論・分析」と呼ばれ、安全性シグナルの検出と評価における効率性と分析能力を向上させる分析ツールの開発と実装を目標としています。簡単に言うと、ジョンソン・エンド・ジョンソンのほとんどの医薬品について、プロセス、報告、安全性データの収集と分析を行っています。チームの残りのメンバーは、こちら右側にいます。ここに私がいます。こちらは4人の孫たちで、下には生まれたばかりの孫娘もいます。
本日の議題は何でしょうか?まず、問題点と解決策についてお話しした後、サーバー環境の詳細、セキュリティ、Oracleの設定方法、JMPアドインの設定方法、コードメンテナンスのヒント、そしてCitrixやRDSからファイルを保存する方法についてお話しします。私たちが直面した問題は、100人以上のユーザーが使用するJMPアドインが複数あり、それらにはJMP、Oracleへの接続、そしてカスタムメニューが必要だったことです。当初は、これらを個々のPCにアドインとして導入しました。そのため、各PCにはJMP、Oracle、ODBCドライバーの設定、そして追加メニュー自体が必要でした。これはうまくいきましたが、毎週のようにハードディスクが故障したり、PCのイメージが再作成されたり、何も入っていない新しいコンピューターを入手したりと、メンテナンスは大変な作業でした。とにかく大変な作業でした。
JMPとアドインの実行にCitrixサーバーを使用するように切り替えました。現在CitrixからMicrosoftリモートデスクトップサービス(RDS)への移行を進めていますが、基本的には同じものです。メリットとしては、一度設定するだけで済むことが挙げられます。海外のユーザーにとって、画面を送受信するだけなのでパフォーマンスは良好です。保存しない限り、データは送信されません。
セキュリティレベルがさらに強化されています。変更を加えると、ユーザーごとにではなく、サーバーごとに1回ずつ展開されます。RDSに移行する理由は、Citrixよりも安価で、Windowsのコンポーネントであり、リモートデスクトッププロトコルと呼ばれるものを使用しているためです。RDSを使用するには、Microsoftのコンピュータアクセスライセンスが必要です。
これが私たちの環境です。Oracleデータベースと、現在3台のCitrixサーバーがありますが、近々RDSに移行し、JMPも稼働させています。ユーザーはここからWebリンク経由でサーバーに接続し、JMPを実行して出力を画面に表示します。
Citrixは、デスクトップ仮想化、ネットワーク、SaaS(Software as a Service)、クラウドコンピューティング技術といった幅広い分野にサーバーアプリケーションを提供する、アメリカの多国籍クラウドコンピューティングおよび仮想化テクノロジー企業です。Microsoftリモートデスクトップサービス(RDS)は、アプリケーション仮想化を提供します。ドライブやプリンターのマッピングが可能です。これはMicrosoftが開発した独自のプロトコルで、ネットワーク経由で別のコンピューターに接続するためのグラフィカルインターフェースを提供します。ユーザーはRDSクライアントソフトウェアを使用し、ホストコンピューターはRDSサービスソフトウェアを有効にする必要があります。
複数のサーバーがあり、負荷分散が関係しています。RDS の設定について少し説明しますが、RDS に関する技術的な説明はここまでです。負荷分散に使用するサーバーを選択する接続ポータルがあります。RDS 用の Web フロントエンドは別のサーバー上に存在します。これは RDS 上のコンポーネントで、アプリケーションの一覧が表示されます。ユーザーが利用できるアプリケーションがいくつか表示されています。Web ページには Microsoft IIS を使用しています。技術的な説明はここまでです。会社で RDS または Citrix を設定する場合は、IT 部門に相談する必要があります。
セキュリティ対策として、Identity Management Systemと呼ばれるシステムを使用しています。リクエストを送信すると、開発、QA、本番環境のグループに割り当てられます。開発、QA、本番環境の特定のグループにアクセスできるユーザーのみがJMPを実行できます。さらに、アドイン、ユーザー、ロールをリストしたOracleテーブルがあり、各アドインのユーザーごとに異なるセキュリティレベルを設定するためのコネクタも用意されています。さらに、メンテナンス用の管理者アカウントを使用して、サーバーにリモートログインします。それでは、Oracleの設定について説明しましょう。
サーバーにOracleクライアントをインストールし、2つの環境変数を設定する必要があります。Oracle HomeはOracleクライアントの保存場所、TNS_ADMINはTNSNAMES.ORAファイルとSQLNET.ORAファイルの保存場所を指定します。TNSNAMES.ORAにはデータベースのエイリアスがすべて含まれており、Oracleにこれらのデータベースを検索する場所を指示します。ODBC接続用のOracleドライバの名前を確認する必要があります。最も簡単な方法は、Windowsキーを押し、「ODBC」と入力し、「ODBCデータソース 64ビット」を選択してドライバのタブをクリックすると、OraClient19Home1にOracleドライバ名「Oracle」が表示されます。
このOracleドライバ名を使って接続するにはどうすればいいでしょうか?簡単なJSLスクリプトをご紹介します。tns_aliasという名前があります。これは私のデータベースです。TNSNAMES.ORAにはこのように記載されています。
次にコネクタのテキストがあります。DBQはTNSエイリアスです。ユーザー名とパスワードはここにあります。ドライバのテキストはdriverです。そして、OraClient19Home1にあるOracleです。これは見つけにくいかもしれません。見つけ方については、役立つヒントがあります。
次に、これら2つをDSN文字列に結合し、それを使ってデータベース接続を作成し、この変数1 DBCに割り当てます。コネクタ文字列は、すべてが完了すると以下のようになります。これを使ってSQLを実行するには、コネクタと以下のような簡単なSQL文を使ってexecute_sqlを呼び出し、データベース接続を閉じます。JMPアドインはどのように設定するのでしょうか?サーバーにJumpをインストールし、このディレクトリにアドインフォルダを作成する必要があります。
C:\ProgramData\SAS\JMP\addIns。大文字と小文字の区別が重要です。つまり、P が大文字、D が大文字、すべて大文字、I が大文字です。JMP サポートデスクに何度か問い合わせて、これが I が大文字で、P が大文字、D が大文字であることを理解してもらう必要がありました。理解が深まった後は、問題なく動作します。
フォルダ名にはアドインの「ID」を使用します。ここでは、このリモートサーバー上に5つのアドインが配置されている例を示しています。各フォルダには1つのファイル、つまりaddin.defが含まれています。以下はaddin.defファイルの例です。
IDはアドインのエイリアスであるcom.jnj.gms.pv-analyze-prismを識別します。名前、ホーム、そして最小ジャンプバージョンがあります。このホームとはどういう意味でしょうか?ホームとはハートマークがある場所です。アドインのすべてのJSLスクリプトが保存されている場所です。
ここがフォルダで、ここにJSLスクリプトがすべて入っています。addin.jmpcustファイルにはアドインのメニューが格納されています。私たちのアドインはすべてカスタムメニューです。さて、メニューについてお話しましょう。私たちの設定では、適切なセキュリティ対策を講じていないユーザーがメニューオプションを実行できないようにしています。
各メニュー項目は、プログラムを指すグローバル変数を宣言しており、その中にはセキュリティチェック用の起動プログラムも含まれています。これを確認するには、「表示」→「メニューとツールバーのカスタマイズ」と進み、右上の「変更」→「JMPアドイン」を選択し、目的のアドインを選択して「OK」をクリックします。すると、このアドインのメニューが点灯します。ここで設定を変更できます。典型的なメニューエントリの例を以下に示します。実行するプログラムを指すグローバル変数を設定しています。datatable.jslを開いてください。
このデータアドインのホームディレクトリにはIDが入っています。つまり、JMPに指示する必要はありません。ハードディスクの実際の場所を指定する必要もありません。JMPはここを参照してaddin.devファイルからデコードします。2行目にはlaunch_pva_menu.jslスクリプトをincludeするように書かれています。これがメニューのアクション部分に詰め込まれているものです。このjslを実行するだけです。また、このアドインのホームディレクトリであるcom.jnj.gms.pv-analyze-prismを使用するようにも確認してください。これが起動プログラムです。いくつかの関数とデータベースアクセススクリプトをインクルードしています。そして、有効なPPAユーザーを呼び出しています。
Oracleのセキュリティテーブルでユーザーを検索します。テーブルに正しく存在しない場合はエラーメッセージが表示され、処理が中断されます。JMPのバージョンに依存します。これは、addin.devファイルにJMPの最小バージョンが記載される前に書かれたものだと思いますが、もしかしたら私が知らなかっただけかもしれません。
とにかく、それを通過できたら、プログラム名に何かが含まれているかどうかを確認します。JMPアプリの拡張機能(アプリケーションビルダー)が含まれている場合は、プログラムを開きます。そうでない場合はJSLスクリプトなので、それをインクルードします。コードメンテナンスのために、開発環境、QA環境、本番環境の3つの環境を用意しています。開発用サーバーが1台、QA用サーバーが1台、本番用サーバーが3台あります。
検証が成功すると、更新されたファイルが関連サーバーにコピーされます。これらのフォルダーの同期にはTotal Commanderというプログラムを使用していますが、その仕組みについては後ほど説明します。CitrixとRDSは少し異なります。実際にファイルにアクセスするには…少なくともOneDriveというツールを使っています。これは違います。
サーバーとJMPのデスクトップまたはドキュメントに保存すると、サーバー自体に保存されてしまいますが、これは許可されていません。これを回避するには、「ファイル設定」の「ファイルの場所」をクリックします。次に、「データファイルのディレクトリ」と「保存先ディレクトリ」の両方で、この場合はOneDriveの場所を指定します。CitrixとRDSでは少し異なります。CitrixではClient\C$ですが、RDSではtsclient\Cです。
残りはユーザー、ユーザー名、OneDrive、JNJです。これがOneDriveのカスタマイズされた保存場所です。これ以降、ファイルを開いたり保存したりすると、デフォルトでOneDriveに保存され、サーバーへの保存は行われなくなります。
簡単なデモを見てみましょう。ここへアクセスしてください。これはRDSのログイン画面です。ログインしてみます。RDPファイルが生成され、実行されます。ここを右クリックすると、「この種類のファイルを常に開く」にチェックが入ります。これはただ接続しているだけです。開発インスタンスでServer JMPが動作しています。何かを開くことができます…私のデータです。それでは、配布を実行してみましょう。
それでは保存しましょう。OneDriveに保存されます。「temp」というフォルダに入れます。よし。これでハードドライブに保存できました。まだ保存中のようですね。さて、JMPをローカルのコンピューターで実行しているので、これをクリックしてここにドラッグするとどうなるか見てみましょう。できました。サーバー上で生成したのですが、実際に動作するかを確認する方法があります。
はい。もう一つお見せしたかったのはサーバー本体です。こちらはRDSサーバーにログインした状態です。JMP 16とJMP 18がインストールされており、こちらは私が使っているTotal Commanderというユーティリティです。
サーバーにコピーするのを待っているファイルがある例をお見せしたいと思います。これはファイル共有上にあります。このDの場所は、この特定のアプリケーションのアドインの場所です。このボタンでディレクトリを同期し、比較して日付で並べ替えます。更新可能なファイルがいくつかあるようです。
ただ、一つだけやりたいことがあります。私のお気に入りの機能の一つは、ここを右クリックして「左右を比較」と表示できることです。これは簡単な変更です。コメントが間違った場所にありましたが、正しい場所に入力しました。同期したい場合は、「同期」をクリックします。コピーすれば完了です。サーバー版JMPのデモはこれで全てです。それではプレゼンテーションに戻りましょう。結論として、JMPをサーバーで実行するとアドインが非常に便利です。設定は一度だけで済みます。
海外のユーザーにとって、パフォーマンスは素晴らしいです。セキュリティレベルが強化され、変更はユーザーごとではなくサーバーごとに1回ずつ適用されます。つまり、サーバー版JMP Plusアドインは世界中のユーザーを救ってくれたということです。以上です。ありがとうございます。