| スピーカー |
トランスクリプト |
| ブライアン・コーコラン |
朝のアップデートへようこそ。これはJMP Discovery Europe 2021での私の講演です。 |
| |
私の名前は Brian Corcoran です。JMP 開発マネージャーを務めています。 |
| |
それで、今日は何をしたいのでしょうか? |
| |
REST プロトコルを使用して、インターネット ベースのデータ プロバイダーに基づいて JMP でレポートを作成する方法を説明します。 |
| |
それができたら、JMP 16 に搭載された更新された JMP スクリプト エンジンを使用して、このレポートを JMP Live に公開する方法を紹介します。 |
| |
最後に、このテストを自動化する方法を紹介します。これにより、毎日出勤するとレポートがすでに更新されており、朝のコーヒーや紅茶を飲みながらそれを確認できるようになります。 |
| |
さて、まずインターネット データ プロバイダーについてお話しましょう。 |
| |
それらのほとんどは、REST プロトコルと呼ばれるものに基づいています。 |
| |
これはステートレスな呼び出しで、基本的にはURLの末尾にパラメータが追加されたようなものです。多くの組織が、エンドユーザーに公開データを公開するためにこれを使用しています。例としては、世界銀行、米国国勢調査局、Googleなどが挙げられます。 |
| |
JMPには、この作業を支援する「HTTPリクエスト」という機能があります。この機能を使うと、これらのサービスにアクセスできます。通常、これらのサービスにアクセスするには、GETまたはPOSTと呼ばれるメソッドが使用されます。HTTPリクエストを使うことで、これらのサービスにアクセスできるようになります。 |
| |
このレポートでは、ジョンズホプキンス大学のCOVID-19 |
| |
パンデミックからのデータを含む REST API。 |
| |
ジョンズ・ホプキンス大学は、世界中からこのデータを集め、アクセスするための無料のパブリック API を提供する米国の大学です。 |
| |
現在、このツールにはプレミアム バージョンもあり、データへのアクセスが向上し、より詳細なデータを取得できますが、今のところは無料バージョンで対応してみます。私が提供するスクリプトのいくつかを実際に試していただければ幸いです。 |
| |
ではREST APIとはどのようなものでしょうか? |
| |
見てみましょう。 |
| |
以下はジョンズ・ホプキンス大学からの例です。 |
| |
まずベースURL、この場合はAPI、COVID19API.comから始まります。このURLを見ると、ある国における感染者数の合計を問い合わせていることがわかります。 |
| |
括弧で囲まれた国名には、実際に国名を入力する必要があります。私の場合は、ドイツ(英語名が使われている)を使用します。 |
| |
しかし、これを試すことができる国はおそらく 100 か国あります。 |
| |
ジョンズホプキンスでは開始日と終了日を入力する必要があります |
| |
ベースURLの後に疑問符があります。これらは基本的にAPI呼び出しのパラメータであり、これによって結果が返されます。 |
| |
指定した日付範囲内の値。 |
| |
これはちょっと長い形式です。 |
| |
月...年、月、日、時刻の T、そして 24 時間制の時刻に Z が付加されます。 |
| |
幸いなことに、JMPにはそれを支援する機能があります。フォーマット呼び出しを使うと、今日は日付とともに現在の正確な時刻が表示されます。使用するフォーマット文字列を指定し、最後にZを追加するだけで、 |
| |
ジョンズ・ホプキンスに必要なフォーマットです。 |
| |
先ほども申し上げたように、 |
| |
REST呼び出しでは通常、GETまたはPOSTのいずれかのポスト動詞が使用されます。ジョンズ・ホプキンス大学ではGETを使用しています。少しの間、PowerPointから離れて説明しましょう。 |
| |
私がそこに掲載したウェブサイトにアクセスすると、 |
| |
スライドや論文でも、 |
| |
ここでは、API がタイプ別に提供され、基本的に情報をどのように渡すか、何が返されるかが示されています。 |
| |
さて、ここでそれぞれに何が必要なのか確認してみましょう。プレミアム カテゴリがあり、それにアクセスするには毎月いくら支払わなければならないかがわかります。 |
| |
わかった。 |
| |
それで。 |
| |
何が返されるのでしょうか?JSONが返されます。これは、名前と値のペア(大文字と小文字、コロン、数値文字列など)の文字列の集まりです。 |
| |
これは、この特定の観測における症例数を表します。JMPにはJSONにアクセスするための優れた機能があり、後ほど説明します。 |
| |
これが実際のHTTPリクエスト呼び出しです。URLと、必要なメソッド(GET)と、このセキュアゼロを渡します。なぜそうするのでしょうか? |
| |
Johns Hopkins はパブリック API であり、セキュア ソケット レイヤー (SSL) を使用しないため、これをオフにする必要があります。そうしないと、呼び出しが失敗します。 |
| |
そして、send コマンドで呼び出しを行うと、JSON がデータで返されます。 |
| |
それでは、スクリプトをもう少し詳しく見ていきましょう。PowerPointを終了して、JMPを起動します。 |
| |
私は JMP Pro 16 を使用していますが、通常の JMP でも動作します。 |
| |
このスクリプトは、私たちが検討する論文とともに、会議資料に含まれていることをお伝えしておきます。 |
| |
はい、それで。 |
| |
ここで何を設定しているのでしょうか?まず、データの保存場所としてドキュメントフォルダを使用し、covid19_de.jmp というテーブルに保存します。 |
| |
後ほどレポートを生成する際に、常にこの名前が使用されるようにします。この場合、標準化された名前にすることが非常に重要です。その理由は後ほど説明します。 |
| |
最後に、自分の名前とファイル内のドキュメントのパスを、使用する完全なパスに変換します。 |
| |
さて、ここでは日付フォーマット関数については気にせず、データを取得する方法の核心部分について説明します。 |
| |
そうですね、ここでパターンを使います。 |
| |
このスクリプトをまだ実行したことがないと仮定します。 |
| |
以前にデータを蓄積したファイルが見つからない場合は、データテーブルを作成し、そこに値を入力します。ただし、既にデータテーブルが見つかった場合は、最新の数日分のデータ、つまり1つの値でテーブルを更新します。 |
| |
そうすれば、以前に実行したことがあるかどうかを気にする必要がなくなります。このスクリプトを何も考えずに実行すれば、他の人に渡しても問題なく動作します。 |
| |
さて、ここで |
| |
ファイルが存在する場合、つまりドキュメント フォルダー内にデータ テーブルが存在する場合は、それを開いて、既にデータがあることを示すフラグを設定します。 |
| |
それ以外の場合は、データ テーブルを作成し、日付、列、ケース、および毎日の変化を使用して作成します。 |
| |
右。 |
| |
次は、ジョンズ・ホプキンス大学への通話用に文字列をフォーマットします。開始と終了の範囲を指定する必要があったことを思い出してください。さて、先ほど確認した文字列がこちらです。これは今日の値です。 |
| |
さて、値だけが必要な場合は... |
| |
現在の日の値、データを更新しているだけです。 |
| |
基本的には昨日から今日までです。さて、今日から2日引いて昨日を作成し、今日まで進みます。 |
| |
私は 2 日間行います。ジョンズ ホプキンスでデータが更新される時間とタイミングに応じて、1 つの値が得られることもあれば、2 つの値が得られることもあるからです。 |
| |
2 つを取得した場合は、最新の値を取得するだけですが、何かを確実に取得できるようにしたいのです。 |
| |
さて、次は、もしデータを取得したことがない場合、開始日を設定します。ここでは2020年9月1日から開始することにしますが、好きな日付を入力してください。ここでは実際には8月31日を使用していますが、これはジョンズ・ホプキンス大学が実際には提供していないためです。 |
| |
日ごとの変化を表す値なので、パンデミックデータでは累計感染者数しか表示されません。そのため、変化を計算するには、 |
| |
昨日の値から今日の値。 |
| |
そうですね、9 月 1 日から開始する場合、9 月 1 日の変化を計算するには 8 月 31 日のデータが必要なので、そのようにします。 |
| |
ジョンズホプキンス大学のプレミアムAPIをご利用の場合、 |
| |
変更値を取得します。 |
| |
さて、先ほど説明した URL はこちらです。 |
| |
さて、ここが重要です。URLが昨日から開始されるデータがあるのに、実際にはデータがない場合、このif文を使って、もしURLが昨日から開始されない場合は、開始日である9月1日から開始することになります。 |
| |
それでは今日に続きます。 |
| |
この URL はデバッグの目的でのみ表示していますが、実際にはここでリクエストを実行し、呼び出しを送信します。 |
| |
右。 |
| |
実行されるチャンスがあることを確認するために、少し待ちました。 |
| |
ここで JSON データが返されますが、JMP にはこの点に関して非常に便利な機能があります。 |
| |
Parse JSONは、この大きな文字列ブロックを名前と値のペアの配列に分解します。そして、その配列の項目を呼び出すことで、取得したデータの数を確認できます。 |
| |
そして、そのデータを配列の添字を持つ配列として参照することができます。 |
| |
わかった。 |
| |
それでは、少し下に移動してみましょう。 |
| |
ここでデータテーブルに入力します。すでにデータがある場合は |
| |
最後に表に1行追加します |
| |
そして、そのデータ値と、今日の値と昨日の値から計算した変化を入力します。 |
| |
それからそれを保存するだけです。 |
| |
今。 |
| |
これまでに作成したことがない場合は、ヘッダー情報があるため行数を1減じて追加し、これを繰り返して毎日の変更をすべて計算します。 |
| |
日付値と |
| |
症例データを表にまとめます。これを最初から実行してみると、163日くらい経っていることがわかります。 |
| |
そして、そのテーブルをドキュメント フォルダーに保存します。 |
| |
さて、データが揃ったので、JMP Live への公開を検討できます。 |
| |
しかし、これはおそらく、JMP Live で JSL プログラミングを行う方法と、JMP Live 16 および JMP 16 でそれがどのように変更されたかについて説明する良い機会でしょう。 |
| |
この講演に関連する論文を紹介しておきます。これもコミュニティで公開されます。 |
| |
さて、JMP 16 では、スクリプトを書き直して、より強力かつ使いやすくしました。スクリプトは、接続または管理された接続情報を保存するというアイデアを中心に展開されています。 |
| |
それで。 |
| |
何が起こるかというと...JMP をもう一度起動してみましょう。 |
| |
それが何を意味するのかお見せしましょう。ファイル、公開、接続の管理に進みます。 |
| |
よし。 |
| |
そして、もう 1 つ追加できます。 |
| |
ここでは、任意の接続名と、JMP LiveサイトのURL(JMP Liveは基本的にRESTサービスです)を指定します。管理者がスクリプトを有効にするために秘密のAPIキーを要求している場合は、ここで入力する必要があります。 |
| |
これを実行して「次へ」ボタンをクリックすると、資格情報の認証メカニズムに応じてプロンプトが表示されます。 |
| |
これらを入力すると、基本的にアクセス トークンが付与されます。つまり、資格情報ではなく、このサイトにアクセスしてスクリプトを実行できるようにするこのアクセス トークンがディスクに保存されます。 |
| |
こうすることで、スクリプト内でこれらの情報を一切指定することなく、指定した接続名を参照するだけで済みます。例えば、JMP Live Daily という接続名を使用します。こちらが私の URL と API キーです。 |
| |
JMP Live Daily を参照するだけで、スクリプト内での接続方法がわかります。 |
| |
わかった。 |
| |
接続を作成するには、「new JMP Live」と接続名を入力します。ここで「必要に応じてプロンプトを表示する」と設定しています。これはどういう意味でしょうか?例えば、何らかの理由で |
| |
資格情報の有効期限が切れていたり、アクセストークンが古い場合は、資格情報を入力するように求められます |
| |
スクリプトが起動したら、これを指定します。これを指定せず、資格情報の有効期限が切れている場合、スクリプトは失敗します。 |
| |
では、実際にJMP Liveにレポートを出力するにはどうすればいいのでしょうか?Big Classで実行できるような単純な二変量の例を以下に示します。 |
| |
したがって、これを公開レポートにするには、新しい Web レポートを作成し、それを変数に割り当てるだけです。 |
| |
そして、この二変量参照を取得して、そのレポートを Web レポートに追加します。 |
| |
オプションでタイトルと説明を入力します。 |
| |
そして、publish を呼び出すと、publish によって結果が返されます。 |
| |
さて、JMP Live に公開すると、次のような感じになるかもしれません。 |
| |
必要であれば、結果から成功したかどうかが分かります。公開されているので…公開はHTTP呼び出しのようなものなので、必要に応じてステータスやエラーメッセージを確認することもできます。わかりました。 |
| |
よし。 |
| |
もう一つ興味深いのは |
| |
操作の結果が、JMP Live にレポートやフォルダーを追加するなどの場合、返される結果には、その項目をさらに操作できる情報が含まれます。 |
| |
これを「As Scriptable」と呼び出すことで、その情報を使ってスクリプト内でオブジェクト(レポートなど)を作成し、アクセスできるようになります。例えば、この設定を済ませたら、レポートを使ってレポートタイトルを設定できます。するとJMP Liveに反映され、レポートタイトルが変更されます。 |
| |
わかった。 |
| |
現在、JMP Live の全体的な考え方は、レポートとフォルダーの操作、フォルダーの検索、レポートの検索などといったことに集中しています。 |
| |
報告書は |
| |
識別子があることです。この識別子は、見てみると長い英数字の文字列で、スクリプトに入力したり覚えたりするのは非常に面倒です。 |
| |
しかし、レポートを一意に識別する必要があるのです。レポートを一意に識別する必要がある理由は、例えばレポートを削除したい場合です。 |
| |
JMP Live にレポートを削除したい旨を伝えると、レポートは…レポート オブジェクトの Get ID を使用して一意の ID を指定し、JMP Live が削除するレポートを認識できるようになります。 |
| |
これらの特定の項目を紹介するのは、私たちの |
| |
私たちが制作したい究極の脚本です。 |
| |
本当に重要になる可能性があるもう 1 つの領域は、ID が検索にあるという点です。 |
| |
ここでレポートを検索できます。例えば、「Biv」で始まる二変量レポートをすべて検索したいとします。JMP Liveにレポートを検索させ、結果のリストを返すように指示するだけです。そして、そのリストをレポートのリストに変換できます。 |
| |
レポート リストには Get Number of Items という関数があり、これを使用すると、サブスクリプトによって各項目を循環表示できます。 |
| |
そして、もし必要であれば、例えばすべて削除することもできます。この検索機能は新しく、JMP Liveサイトで大規模な操作を行う際に非常に強力なものになることを期待しています。 |
| |
そうです、スクリプトをもう少し詳しく説明する前に、対処する必要のある操作が 1 つあります。 |
| |
これが更新データです。 |
| |
JMP Live 16では、 |
| |
レポート全体を JMP Live に再公開することなく、レポートのデータのみを更新する機能を追加しました。 |
| |
希望どおりのレポートを取得し、少しカスタマイズされていて見た目が気に入っているため変更したくないとします。 |
| |
しかし、データを更新して再計算したい場合、レポートのデータテーブルだけをJMP Liveに渡すことで、転送時間も短縮できます。 |
| |
これを実行するには、Update Data を呼び出し、レポート ID を指定してから、更新されたデータを含むデータ テーブルのみを指定します。 |
| |
レポートはデスクトップで再計算する必要はなく、JMP Liveで再計算されます。 |
| |
そして、そのレポートを閲覧しているユーザーにも更新内容が表示されます。 |
| |
さて、これでスクリプトを実際に実行するために必要なツールがすべて揃ったので、確認してみましょう。 |
| |
よし。 |
| |
それで、 |
| |
ここで JMP Live 接続を作成します。 |
| |
さて、管理図を作成します。管理図は理想的なものではありません |
| |
このデータの分析プラットフォームは素晴らしいのですが、なぜ私がこれを使用しているのでしょうか?理由は2つあります。1つ目は、日々の変化を確認できることです。 |
| |
2 つ目は、JMP Live 16 に管理図の警告を表示するという新しい機能が追加されていることを宣伝または宣伝できることです。 |
| |
管理図を公開し、範囲外の観測値がある場合 |
| |
JMP Liveに公開したり、データを更新したりすると、デスクトップに警告が表示されます。 |
| |
JMP Liveは、レポートを購読しているユーザーに対して、範囲外のデータが見つかった場合にメールやウェブサイト内で通知を受け取るための警告を生成することもできます。これは、プロセス制御などの用途に非常に役立ちます。 |
| |
私の同僚たちは |
| |
管理図の警告についての講演を行っていますので、機会があればぜひそちらもご覧ください。 |
| |
これはどうやって生成したのでしょうか?実はJMPを使って、古いデータをいくつか使ってみたんです。例えば、分析をするときにJMPには「スクリプトをスクリプトウィンドウに保存」という機能がありますよね。 |
| |
私はその情報を取得してこのスクリプトに組み込んだだけなので、非常に便利です。 |
| |
わかった。 |
| |
それでは、レポートの公開方法について詳しく説明します。 |
| |
しばらくしてからこれを実行してください。 |
| |
はい、それで。 |
| |
ここでもパターンがあります。JMP Liveに既に掲載されているレポートがあるかどうか確認します。 |
| |
もし公開されていない場合は公開しますが、すでに公開されている場合は、先ほど作成した更新されたデータテーブルを使用します。 |
| |
そして、サーバー側でデータを更新し、必要に応じてレポートを再計算できるようにします。 |
| |
では、どうすればいいのでしょうか? まず、レポートを検索します (先ほど指定した標準化されたレポート名を使用しているので、常に同じレポートを検索します)。 |
| |
また、万が一、他の誰かが同じ名前のレポートを書いていたら大変なので、私だけが発表したとだけ言っておきます。そんなことは受けたくないですから。 |
| |
わかりました。リストにして見てみましょう。そして、 |
| |
reports がゼロの場合、以前に公開されたレポートが見つからなかったことを意味します。 |
| |
新しいWebレポートを作成し、管理図ビルダーの出力を追加して公開します。公開範囲を「Public(1)」に設定して、誰でもアクセスできるようにします。 |
| |
見つかった場合は、返された最初の項目を参照してそのレポートを取得し、以前に生成した更新されたテーブルを使用してここでデータを更新します。 |
| |
残りは、すべてがうまくいったかどうかを確認するためにログに表示したデバッグ情報ですが、実際には必要ありません。 |
| |
最後に、ここの最後に Quit ステートメントがあります。 |
| |
実際にこれを自動化するときには |
| |
これはJMPをシャットダウンし、すべてのウィンドウを閉じる必要があるため重要です。そうしないと、次回JMPを起動したときに、JMPが既に実行中であると判断し、以前の操作が原因でハングアップしていると誤認識されてしまう可能性があります。 |
| |
ただし、対話型操作の場合は、これを今すぐコメントアウトします。 |
| |
わかった。 |
| |
だから私は |
| |
準備はできていると思います。試してみて、うまくいくことを祈ります。ジョンズ・ホプキンス大学は時々非常に忙しく、データ取得のリクエストを拒否することがあります。それは残念ですが。 |
| |
これを試してみましょう。 |
| |
ご覧の通り、この時点ではドキュメントフォルダに、私が指定した名前のJMPテーブルがありません。 |
| |
公開したいJMP Liveサイトには何も表示されません |
| |
そこに管理図ビルダーからの出力があります。 |
| |
よし、試してみよう。 |
| |
はい、これが私たちの管理図です。 |
| |
JMP Live を更新します。 |
| |
はい、これが管理図ビルダーの出力です。これには警告が出ていました。 |
| |
これをJMP Liveで見ると、 |
| |
ポイントにマウスオーバーすると、最新のデータを確認できます。これは2月10日のデータです。私は11日なので、最新のデータです。これは、1月と12月下旬の移動平均に基づくと、制御不能と見なされるデータです。 |
| |
はい、ここまでは順調です。 |
| |
もし私が |
| |
ドキュメントフォルダを開いて更新します。 |
| |
JMP テーブルが作成されたことがわかります。 |
| |
よし。 |
| |
さて、これは1分前に公開されたことがわかります。 |
| |
わかりました。それでは、これを終了しましょう。 |
| |
そして私たちは...実はそれをしたくなかったのですが...ちょっと待ってください。 |
| |
ここで少しズルをします。 |
| |
最後に取得した値を削除して保存します |
| |
閉じます。それでは、今日まだ実行していないことをシミュレートして、もう一度実行してみましょう。 |
| |
はい、最後の値を取得します。 |
| |
そして、私たちのウェブサイトにアクセスします。 |
| |
数秒前に再生成されたのが分かります。つまり、この場合はデータを更新して、最新の値を取得したところです。 |
| |
もし私が |
| |
育てる |
| |
私のメールは警告の受信登録をしているので、 |
| |
こちらでも少し更新があるかもしれません。通知が届いています |
| |
この管理図ビルダーには公開情報があり、警告もありました。必要に応じて、どこで失敗したか、どのポイントが範囲外であるかを確認できます。 |
| |
わかった。 |
| |
さあ、自動化タスクを試す準備は万端ですね。それでは先に進み、この投稿を削除します。 |
| |
右。 |
| |
これを止めましょう。 |
| |
これをシャットダウンします。 |
| |
自動化された方法で一方向実行するために、終了をそこに戻します。 |
| |
これで終わりにします。 |
| |
ドキュメントフォルダに移動して削除します |
| |
データを取得して、これを最初から実行しているふりをします。 |
| |
右。 |
| |
JMP がシャットダウンされていることを確認しましょう。 |
| |
わかった。 |
| |
今。 |
| |
以前のDiscovery講演をご覧になった方は、私がタスクスケジューラを使っているのをご覧になったことがあるかもしれません。これは私にとって人気のトピックです。 |
| |
Windows では、ここで「タスク スケジューラ」と入力するだけです。ご覧いただけたかと思います。 |
| |
Macでは、Automatorかchronジョブを使う必要があります。Automatorをお勧めします。 |
| |
わかりました。タスク スケジューラを使用すると、ほぼ何でも定期的に実行できます。 |
| |
それでは、 |
| |
新しいタスクを作成します。ここでタスクを作成し、名前を付けます |
| |
ドイツのCOVIDデータ。 |
| |
高い権限で実行したい。 |
| |
資格情報を入力したくないので、ユーザーがログインしているときのみ実行するつもりですが、 |
| |
ユーザーがログオンしているときに実行するかどうかを選択する(本番環境でこれを実行する場合) |
| |
Windowsのアップデートなどによりマシンが再起動した場合でも、引き続き動作させたい場合、このオプションを指定することでそれが可能になります。このタスクを保存する際には、資格情報の入力が必要になります。 |
| |
大丈夫。 |
| |
では、トリガーとは何でしょうか?トリガーとは、実行したいタイミングのことです。では、実行してみましょう。 |
| |
そして、明日から毎日実行したいとします。 |
| |
朝6時に出勤前に走らせたいだけかもしれない |
| |
入るということはもう何を意味するのか。 |
| |
ベッドから起きて仕事に行く前に。よし。 |
| |
したがって、このタスクが 30 分以上実行される場合は、おそらくハングしていることを意味するため、このタスクを停止します。 |
| |
そうでなければ、そこに行くのは大丈夫だと思います。 |
| |
では、どのようなアクションを実行すればよいでしょうか?JMPを実行したいので、jmp.exeがインストールされている場所(プログラムファイル、SAS、JMPまたはJMP Pro 16のいずれか)に移動する必要があります。それを選択してください。 |
| |
そして、私たちの引数はJSLスクリプトですが、残念ながら手動で入力する必要があります。 |
| |
そうします。 |
| |
ただし、その点には注意してください。 |
| |
わかった。 |
| |
さて、設定で「常に許可」になっていることを確認します。オンデマンドで実行する必要があります。そうすることで、今すぐ試して正しく動作するか確認できるようになります。 |
| |
すでに実行中のタスクがある場合は、必ず停止してください。おそらくハングアップしている可能性が高いので、再度1時間以上実行された場合は、念のためタスクを停止してください。 |
| |
さあ、毎日実行するタスクができました。いつでも実行できるように設定しているので、今すぐ試してデバッグすることができます。さあ、マウスボタンを右クリックして「実行」を実行しましょう。 |
| |
うまくいけばタスクバーが表示されます。JMP が一時的に起動し、実行されてから消えます。 |
| |
ここから見下ろすと、何かが起きているような気がします。 |
| |
はい、そして消えてしまいます。 |
| |
当社の Web サイトを見てみましょう。更新されます。 |
| |
そして、数秒前に生成されたレポートがあります。 |
| |
フォルダを見ると、JMPテーブルが生成されていることがわかります。明日の朝6時には |
| |
タスクが実行され、最新のデータと最新のレポートが取得されます。コーヒーや紅茶を持って帰ってきて、そのデータを確認して、その日の意思決定をすることができます。 |
| |
これで私の講演は終わりです。今日お話しした3つの点のうち、 |
| |
インターネットベースのデータ収集、 |
| |
JMP Live スクリプト、つまり自動タスク生成は、あなたの仕事に役立ちます。 |
| |
ご参加ありがとうございました。カンファレンスの残りの時間も楽しんでいただければ幸いです。それでは。 |