目次


Minecraft とBluemix

第 4 回 Bluemix 上で Minecraft に Watson を統合する

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: Minecraft とBluemix

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:Minecraft とBluemix

このシリーズの続きに乞うご期待。

第 1 回第 2 回、そして第 3 回にわたり、Docker コンテナー内で独自の Minecraft を起動する方法を見てきました。最初はローカルで起動する方法を、次は Bluemix 上の IBM Container 内で起動する方法を紹介しました。さらに、サーバー・サイドの Minecraft 用プラグインを作成し、作成したプラグインを Docker 内で稼働する Minecraft サーバーに追加する方法について説明しました。

これらすべての内容は、このチュートリアルの序章です。シリーズ最終回のこのチュートリアルでは、プラグイン開発で IBM Bluemix 環境の強力さを利用すると同時に、Minecraft のゲーム・プレイに科学的な知識を少し加えます。今回は、Watson コグニティブ・サービスを利用するプラグインによって Spigot サーバーを拡張する方法を紹介します。

IBM では、コグニティブ・ソリューションを作成するために利用できる Watson のサービスを Bluemix 上にいくつか用意しています。これらのサービスには、Dialog サービス、Personality Insights サービス、Natural Language Classifier サービス、Tradeoff Analytics サービス、その他のサービスがあります。Watson のサービスのすべてを網羅したリストを参照してください。

このチュートリアルでは、Watson の Dialog サービスを利用して病気に関する質問に答えるプラグインを作成する方法を説明した後、このプラグインを、Minecraft の村に感染症を流行らせる別のサード・パーティー製 Minecraft プラグインと結合する方法を説明します。この 2 つのプラグインを結合すると、プレイヤーはゲームの中で病気について学ぶ動機が得られるほか、病気を診断する方法と治療する方法についても学ぶ動機が得られます。この概念実証の統合では、サード・パーティー製プラグインと独自のプラグインを結合して、Watson と Bluemix の強力さを活用する方法を紹介します。

Bluemix アプリを作成して Watson の Dialog サービスの資格情報を取得する

それでは早速始めましょう。まず始めに、Dialog サービスのインスタンスを用意する必要があります。そして、そのサービス・インスタンスから資格情報を取得して、新しいプラグインで使用できるようにします。その後、プラグインを作成し、そのプラグインを Docker にインストールして Docker コンテナーごと IBM Container にプッシュします。

Bluemix 内の Dialog サービス・インスタンスにアクセスするのに必要な資格情報を取得するには、遠回りのプロセスに従わなければなりません。Cloud Foundry ランタイムのいずれかを使用してアプリを作成している場合は、サービスを作成した後、そのサービスをランタイムにバインドして、サービスの資格情報を取得することができます。その資格情報は、一連の環境変数を通じて自動的にランタイムに取り込まれます。ただし、このバインディング・プロセスは今のところまだ、Docker コンテナーに対してシームレスに機能しません。そのため、ダミーのアプリを導入し、そのアプリに Dialog サービスをバインドして適切な資格情報を取得する必要があります。それには、以下の手順に従います。

  1. IBM ID およびパスワードを使用して Bluemix にログインします (IBM ID をまだ取得していない場合は、無料の Bluemix トライアル・アカウントを登録するときに取得することができます)。
  2. 新規アプリを作成するために、「CREATE APP (アプリの作成)」 > 「Web」 > 「SDK for Node.js」 > 「Continue (続行)」の順にクリックします。
    「APP Name (アプリ名)」に、一意のアプリ名を指定します (この例では「WatsonSpigotApp」とします)。WatsonSpigotApp が作成されたら、概要ページに戻ります (左側の列で「Overview (概要)」をクリックします)。
  3. 作成したアプリに Watson のサービスを追加するために、「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。アプリの概要ページのスクリーンショット
    アプリの概要ページのスクリーンショット
  4. サービスのカタログから Watson の「Dialog」サービスを選択します。Bluemix カタログに表示された Watson の Dialog サービスのスクリーンショット
    Bluemix カタログに表示された Watson の Dialog サービスのスクリーンショット
  5. 次に表示されるポップアップで、「USE (使用)」をクリックして新規サービスを追加します。生成されるサービス名 (必要に応じて変更できます) と、このサービスが WatsonSpigotApp にバインドされたことを確認します。左下にある「VIEW DOCS (資料の表示)」ボタンをクリックすると、このサービスと、このサービスにアクセスするために使用できる REST API の詳細を知ることができます。Bluemix カタログに含まれる Watson の Dialog サービスの詳細を示す画面のスクリーンショット
    Bluemix カタログに含まれる Watson の Dialog サービスの詳細を示す画面のスクリーンショット
  6. 左側の列で「Overview (概要)」をクリックして、WatsonSpigotApp の概要ページに戻ると、新しく追加された Dialog サービスがあることに気付くはずです。このサービスのタイルで「Show Credentials (資格情報の表示)」をクリックして資格情報を表示します。プロビジョニングされたこの Dialog サービスのインスタンスにアクセスするには、この資格情報が必要です。Dialog サービスの資格情報を表示する画面のスクリーンショット
    Dialog サービスの資格情報を表示する画面のスクリーンショット
  7. 資格情報 (具体的には、URL、ユーザー名、パスワード) を保存します。これらの情報は、後でこの Dialog サービスに接続するときに必要になります。資格情報は一意の情報です。以下のサンプルは、これらの資格情報がどのような形をとるかを示す目的でのみ記載しています。
    "url": "https://gateway.watsonplatform.net/question-and-answer-beta/api",
    "username": "some-long-hyphenated-set-of-characters",
    "password": "AVeryL0ngSer1esOfCharact3rs"

ダイアログを作成して Watson の Dialog サービスの dialog_id を取り込む

以下に示すように、ダイアログを作成してそのダイアログ ID を取り込むために、curl コマンド・ラインを使用します。

それには、カレント・ディレクトリーを minecraft project ディレクトリーに変更します。

cd ~/minecraft project

以下のコードに示すように curl コマンドを入力します。Web ページからコピーしている場合は、二重引用符の書式設定が正しくなっていることを確認してください。

curl -X POST -u "bxxxx69b-6xx1-45xx-axx9-03xxxxxxx925":"35533rrNN" --form name=kyletest --form file=@./spigot-plugin-watson/input/DialogTest.xml https://gateway.watsonplatform.net/dialog/api/v1/dialogs

これにより、以下の結果が得られるはずです。

{"dialog_id": "exxxxx2-0xx2-4bxc-xxf-48fffdddddd34"}

Watson の Dialog サービスを利用する Spigot プラグインを作成する

ここまでで適切な資格情報を取得できたので、Spigot プラグインを作成することができます。

: このチュートリアル・シリーズで参照するコードはすべて、第 1 回で複製した (GitHub 上の) プロジェクトから入手することができます。まだプロジェクトを複製していなければ (例えば、以前のチュートリアルをスキップして今回のチュートリアルから始めた場合)、以下のプロジェクトを GitHub から複製してください。

git clone  https://github.com/kgb1001001/minecraft-project.git

minecraft-project/spigot-plugin-watson/ ディレクトリーに格納されている spigot-plugin-watson.zip は、Eclipse アーカイブ・プロジェクトです。ここに、このチュートリアルの以降で参照するコードが含まれています。

Ubuntu 環境 (第 1 回、第 2 回、第 3 回で使用してきた環境) で、以下の手順に従います。

  1. 以下の JAR を $HOME/refLibs ディレクトリーにダウンロードします。以降の手順では、これらの JAR ファイルが必要になります。
    • http://mvnrepository.com/artifact/commons-codec/commons-codec/1.10
      (commons-codec-1.10.jar)
    • http://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl/1.9.13
      (jackson-core-asl-1.9.13.jar)
    • http://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl/1.9.13
      (jackson-mapper-asl-1.9.13.jar)
  2. https://github.com/watson-developer-cloud/java-sdk から jdk-sdk-2.8.0-jar-with-dependencies.jar をダウンロードします。

    それには、この URL のページの「Installation」セクションにアクセスして「Download」ボタンをクリックします。

  3. 以下のステップを実行して、craftbukkit-1.8.8.jar を作成します。
    • cd $HOME/refLibs
    • mkdir minecraft
    • wget "https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" -O minecraft/BuildTools.jar
    • git config --global core.autocrlf input
    • java -jar minecraft/BuildTools.jar

    以上のステップが完了すると、ディレクトリーに craftbukkit-1.8.8.jar が作成されているはずです。

  4. 以下の内容を実行して Eclipse を起動します。
    ./eclipse/eclipse

    ワークスペース・ディレクトリーを選択します (Eclipse は、ここで選択されたディレクトリーにファイルを書き込みます)。
    注: Eclipse が起動された時点で「File (ファイル)」メニューが表示されていない場合は、Eclipse を一旦終了し、以下のコマンドで再起動します。
    UBUNTU_MENUPROXY=0 ./eclipse/eclipse

  5. 新規プロジェクトを作成するために、「File (ファイル)」 > 「New (新規)」 > 「Java Project (Java プロジェクト)」の順にクリックします。 新規プロジェクトを作成する画面のスクリーンショット
    新規プロジェクトを作成する画面のスクリーンショット

    プロジェクト名を「WatsonSpigotPlugin」と指定します。

    新規プロジェクトの名前を指定する画面のスクリーンショット
    新規プロジェクトの名前を指定する画面のスクリーンショット

    「Next (次へ)」をクリックし、「Libraries (ライブラリー)」タブで「Add External Jars... (外部 JAR の追加...)」をクリックします。

    JAR を追加する画面のスクリーンショット
    JAR を追加する画面のスクリーンショット

    カレント・ディレクトリーを $HOME/refLibs に変更して、「craftbukkit-1.8.8.jar」を選択します。

    JAR を選択する画面のスクリーンショット
    JAR を選択する画面のスクリーンショット

    「OK」をクリックし、次に表示される画面で「Finish (完了)」をクリックします。これにより、Eclipse ワークスペースには「WatsonSpigotPlugin」という名前の新規プロジェクトが作成されます。

  6. 次は、必須の依存関係 JAR を追加する必要があります。

    WatsonSpigotPlugin プロジェクト配下に新規フォルダーを作成し、「lib」という名前を付けます。

    新規フォルダーを作成する画面のスクリーンショット
    新規フォルダーを作成する画面のスクリーンショット

    $HOME/refLibs ディレクトリー内にある以下の 4 つの jar を、上記で作成した lib ディレクトリーにコピーします。

    • commons-codec-1.10.jar
    • jackson-core-asl-1.9.13.jar
    • jackson-mapper-asl-1.9.13.jar
    • java-sdk-2.7.0-jar-with-dependencies.jar

    上記の JAR をプロジェクトのビルド・パスに追加します。それには、Eclipse で JAR を選択し、右クリックして「Build Path (ビルド・パス)」 > 「Add to Build Path (ビルド・パスに追加)」の順に選択します。

    JAR を移動する画面のスクリーンショット
    JAR を移動する画面のスクリーンショット
  7. 新規パッケージを作成し、「com.ibm.minecraft.spigotplugin」という名前を付けます。
  8. com.ibm.minecraft.spigotplugin パッケージ内に新規 Java クラスを作成し、「WatsonDialog」という名前を付けます。これにより、新規クラスが作成されて Eclipse にこの新規クラス・ファイルがロードされます。新規クラス・ファイルを作成してロードする画面のスクリーンショット
    新規クラス・ファイルを作成してロードする画面のスクリーンショット
  9. 以下のコードを WatsonDialog.java に追加します。
    package com.ibm.minecraft.spigotplugin;
    
    //import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import com.ibm.watson.developer_cloud.dialog.v1.DialogService;
    import com.ibm.watson.developer_cloud.dialog.v1.model.Conversation;
    import com.ibm.watson.developer_cloud.dialog.v1.model.Dialog;
    
    
    public class WatsonDialog extends JavaPlugin {
    	DialogService DIALOG_SERVICE=null;
    	//Dialog DIALOG=null;
    	Conversation CONVERSATION=null;
    	static String USER_ID=null;
    	static String USER_PASS=null;
    	static String DIALOG_ENDPOINT=null;
    	static String DIALOG_ID=null;
    	
    	static {
    		try (InputStream is = WatsonDialog.class.getResourceAsStream("dialog.properties")) {
    			Properties properties = new Properties();
    			properties.load(is);
    			USER_ID = properties.getProperty("userid", "");
    			USER_PASS = properties.getProperty("userpass", "");
    			DIALOG_ENDPOINT=properties.getProperty("dialog_endpoint", "");
    			DIALOG_ID=properties.getProperty("dialog_id","");
    		}
    		catch (IOException e) {
    			throw new RuntimeException(e);
    		}
    	}
    	
    	// Fired when plugin is first enabled
    	@Override
        public void onEnable() {
    		//getLogger().info("WatsonSpigotPlugin");
    		DIALOG_SERVICE=setupDialogService(); 
    		//DIALOG=setupDialog(DIALOG_SERVICE);
        }
    	
       // Fired when plugin is disabled
       @Override
       public void onDisable() {
       }
        
       public boolean onCommand(CommandSender sender, Command cmd, String label,
    		   					String[] args) {
    	  // getLogger().info("command: " + cmd.getName());
    	   //getServer().dispatchCommand(getServer().getConsoleSender(), cmd.getName());
    	   if (cmd.getName().equalsIgnoreCase("hello")) {
    		   sender.sendMessage("Welcome to Watson");
    	   }
    	   if (cmd.getName().equalsIgnoreCase("watson")) {
    		   if (args.length == 0) {
    			   sender.sendMessage("WATSON Rocks!!");
    			   return true;
    		   } 	
    		   if (args.length >= 1) {
    			   StringBuilder str = new StringBuilder();
    			   for(int i=0; i < args.length; i++) {
    				   str.append(args[i]);
    				   if(i < args.length-1) {
    					   str.append(" ");
    				   }
    			   }
    			   String input = str.toString();
    			   
    			   String response = getResponse(input,DIALOG_SERVICE,CONVERSATION);
    			   sender.sendMessage("Watson response: " + response);	
    		   
    			   return true;
    		   }	
    	   }
    	   return false;
    	}
       
       public DialogService setupDialogService() {
    	   DialogService service = new DialogService();
    	   service.setEndPoint(DIALOG_ENDPOINT);
    	   service.setUsernameAndPassword
    		(
    				// account username from VCAP_SERVICES env variable of the Dialog service instance
    				USER_ID,
    				// account password from VCAP_SERVICES env variable of the Dialog service instance
    				USER_PASS
    		);
    	   //getLogger().info("dialog service: " + service);
    	   
    	   return service;
       }   
      
       public Dialog setupDialog (DialogService service) {
    	   return null;
       }
    	
       public String getResponse(String input, DialogService service, Conversation conversation) {
       // Create conversation
    	   Map<String, Object> params = new HashMap<String, Object>();
    	   params.put(DialogService.DIALOG_ID, DIALOG_ID);
    	   if(conversation == null) {
    		   conversation = service.converse(params);
    		   CONVERSATION = conversation;
    	   }
    	   
     
    	   // Ask question
    	   params.put(DialogService.CLIENT_ID, conversation.getClientId());
    	   params.put(DialogService.INPUT, input);
    	   params.put(DialogService.CONVERSATION_ID, conversation.getId());
    	   conversation = service.converse(params);
    	   return conversation.getResponse().get(0);
       }
       
       public void deleteDialog(DialogService service, Dialog dialog) {
    	   if (dialog != null) {
    		   service.deleteDialog(dialog.getId());
    	   }
       }
       
    }
    // End WatsonDialog.java

    WatsonDialog.java に追加する上記のサンプル・コードは、Spigot サーバーのプラグイン開発を開始する際に使用したサンプル・コードと似ています。

    注意する点として、このコードで使用している Watson の Dialog サービスの実際の URL は以下のとおりです。
    https://gateway.watsonplatform.net/dialog/api/

  10. サーバーに Watson のプラグインに関する情報を提供するために、src フォルダーに新規ファイルを追加します。それには、「src」 > 「New (新規)」 > 「File (ファイル)」の順に選択し、ファイルには「plugin.yml」という名前を付けます。plugin.yml を追加する画面のスクリーンショット
    plugin.yml を追加する画面のスクリーンショット
  11. plugin.yml に以下の行を追加します。
    name: WatsonDialogPlugin
    main: com.ibm.minecraft.spigotplugin.WatsonDialog
    version: 1.0
    
    commands:
      hello:
        description: A new command
      watson:
        description: watson initial command
  12. サーバーに Watson のプラグインに関する情報を提供するには、WatsonDialog.java の下に dialog.properties ファイルを追加する必要があります。これを実行するには、「WatsonSpigotPlugin」を右クリックして表示されるメニューで「New (新規)」 > 「File (ファイル)」の順にクリックし、パス WatsonDialogSpigot/src/com/ibm/minecraft/spigotplugin へトラバースします。以下に示すように、ファイル名として「dialog.properties」と入力し、「Finish (完了)」をクリックします。 dialog.properties ファイルを作成する画面のスクリーンショット
    dialog.properties ファイルを作成する画面のスクリーンショット

    続いてこのファイルを編集し、Bluemix の Dialog サービスに関する資格情報が集められているところから取り込んだ情報を反映させます。具体的には、以下に示す必須情報をファイルに反映させます。

    • userid=ef06ad46-xxxx-43c3-xxxx-7727fe766f11
    • userpass=GVxxxxEWqs
    • dialog_endpoint=https://gateway.watsonplatform.net/dialog/api
    • dialog_id=<この情報を取得するには以下のステップに従います>

    反映させる必要がある dialog_id プロパティーは、curl コマンドを使用して取得したのと同じものです。最終的な dialog.properties ファイルは以下のようになるはずです。

    • userid=ef06ad46-xxxx-43c3-xxxx-7727fxxx6f11
    • userpass=GVxxxxEWqs
    • dialog_endpoint=https://gateway.watsonplatform.net/dialog/api
    • dialog_id = c704xxx-32e5-42fc-a89e-d907xxxx667

    DialogTest.xml に関する注意事項: DialogTest.xml ファイルは、このプロジェクトで使用する対話シナリオを作成するために使われる基本的な制御ファイルです。DialogTest.xml の構成と、このファイルの使用方法に関する追加の情報は以下の URL に用意されています。

  13. プラグインの依存関係 JAR を参照する MANIFEST.MF を定義します。WatsonSpigotPlugin プロジェクト内に新規フォルダーを作成して「META-INF」という名前を付けます。META-INF フォルダー内に、「MANIFEST.MF」という名前の新規ファイルを作成します。
  14. MANIFEST.MF に以下の行を追加します。必ず、ファイルの最後の行は改行 (キャリッジ・リターン) にしてください。
    Manifest-Version: 1.0
    Main-Class: com.ibm.minecraft.spigotplugin.WatsonDialog
    Class-Path: lib/jackson-core-asl-1.9.13.jar lib/commons-codec-1.10.jar lib/jackson-mapper-asl-1.9.13.jar lib/java-sdk-2.7.0-jar-with-dependencies.jar
  15. ターミナル・ウィンドウで、Watson Spigot プラグインを使用する Spigot サーバーを実行するディレクトリーを作成します。
    mkdir  $HOME/watsonspigot
  16. Eclipse で以下の手順に従って、WatsonDialogSpigot プロジェクトを JAR にエクスポートします。
    1. 「File (ファイル)」 > 「Export (エクスポート)」の順にクリックします。
    2. Java 配下の「JAR File (JAR ファイル)」を選択し、「Next (次へ)」をクリックします。
    3. 「Resources to Export (エクスポートするリソース)」で、「WatsonDialogSpigot」を選択し、.classpath と .project のチェック・マークを外します。JAR のエクスポート先を Spigot サーバーを起動するディレクトリーと同じ $HOME/watsonspigotdir に指定し、エクスポート・ファイルに「watsonqa.jar」という名前を付けます ($HOME/watsonspigot/watsonqa.jar)。
    4. 「Next (次へ)」をクリックします (「Finish (完了)」はまだクリックしないでください)。
    5. 「Next (次へ)」をもう一度クリックします。
    6. 「JAR Manifest Specification (JAR マニフェストの指定)」ページで、必ず「Use existing manifest from workspace (ワークスペース内の既存のマニフェストを使用)」オプションを選択します。
    7. 「Finish (完了)」をクリックします。

    「JAR export finished with warnings (JAR のエクスポートは警告付きで完了しました)」という警告が表示された場合は、使用している依存関係 JAR ファイルのバージョンが違う可能性があります。

    プロジェクトを JAR にエクスポートする画面のスクリーンショット
    プロジェクトを JAR にエクスポートする画面のスクリーンショット
  17. WatsonSpigotPlugin プラグインを使用する新規イメージを作成するために、Docker を実行します。このステップのために、以下のファイルを必要とする $HOME/watsonspigot ディレクトリーにカレント・ディレクトリーを変更することになります。
    • Dockerfile
    • watsonqa.jar
  18. $HOME/watsonspigot ディレクトリーにカレント・ディレクトリーを変更して、以下の行を含む Dockerfile を作成します。
    # Version 0.0.3
    # This version builds a spigot server
    # using the recommended build strategy for spigot
    # This is advantageous in that it's better for plugin development
    # and fits well with the Docker approach
    # it also adds a first Minecraft plugin into the bare spigot server
    #
    FROM ubuntu:14.04
    MAINTAINER Kyle Brown “brownkyl@us.ibm.com”
    RUN apt-get update
    RUN apt-get install -y git
    RUN apt-get install -y default-jdk
    RUN apt-get install -y wget
    RUN mkdir minecraft
    RUN wget "https://hub.spigotmc.org//jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" -O minecraft/BuildTools.jar
    RUN git config --global core.autocrlf input
    RUN java -jar minecraft/BuildTools.jar
    RUN echo "eula=true" > eula.txt
    RUN mkdir plugins
    ADD watsonqa.jar /plugins/watsonqa.jar
    # Install unzip
    RUN apt-get install -y unzip
    RUN unzip -uo /plugins/watsonqa.jar -d /plugins/
    CMD java -XX:MaxPermSize=128M -Xms512m -Xmx1024m -jar spigot-1.8.8.jar nogui
    EXPOSE 25565

    上記のコード・リストの中で、太字で強調表示されている行が、これまでのチュートリアルで扱ってきた他の Dockerfile との主な違いです。これらの行で実質的に行っていることは、$HOME/watsonspigot の下に「plugins」という名前の新規ディレクトリーを作成し、その plugins ディレクトリーに watsonqa.jar をコピーして、この同じ plugins ディレクトリーに watsonqa.jar を unzip した後、Spigot サーバーを実行することです。Eclipse プロジェクトの lib ディレクトリーにコピーされて、前に説明したように MANIFEST.MF ファイルで参照されるすべての必須の依存関係 JAR にプラグインがアクセスできるようにするには、こうする必要があります。

    この時点で、watsonspigot ディレクトリーは以下のようになっているはずです。

    watsonspigot ディレクトリーの内容を一覧表示した画面のスクリーンショット
    watsonspigot ディレクトリーの内容を一覧表示した画面のスクリーンショット
  19. 以下のコマンドを実行して、新規 Docker イメージを作成します (「parallels」は自分のログイン名で置き換えてください)。
    docker build -t="parallels/watsonspigotplugin" .
  20. 以下の場所から、Watson Dialog プラグインを使用する Spigot サーバーを実行します。
    docker run -i -t -p=25565:25565 parallels/watsonspigotplugin

    以下の行が表示されたら、Watson のプラグインを使用する Spigot サーバーは正常に起動されています。

    [00:04:07 INFO]: [WatsonSpigotPlugin] Enabling WatsonSpigotPlugin v1.0
    [00:04:07 INFO]: [WatsonSpigotPlugin] WatsonSpigotPlugin
    [00:04:07 INFO]: Done (12.659s)! For help, type "help" or "?"
  21. Minecraft クライアントをサーバーに接続します (このシリーズの以前のチュートリアルで説明した手順に従います)。
  22. 接続が完了したら、Watson に対し、例えば「What is diabetes (糖尿病とは何か)」といった質問をします。質問のテキストが Watson の Dialog インスタンスに渡されて、プレイヤーに応答が返されます。 Watson に質問する画面のスクリーンショット
    Watson に質問する画面のスクリーンショット

Spigot サーバーを Watson Dialog プラグインと併せて Bluemix 内でホストする

ここまでで、Watson のプラグインを使用する Spignot サーバーの機能をローカルの Docker コンテナー内で検証する作業が完了しました。次は、このサーバーを Bluemix 上にホストしてみましょう。

  1. Linux ターミナルで、新規ディレクトリー $HOME/watsonspigotbluemix を作成します。
    mkdir $HOME/watsonspigotbluemix
  2. $HOME/watsonspigot に解凍した watsonqa.jar をコピーします。
    cp $HOME/watsonspigot/watsonqa.jar $HOME/watsonspigotbluemix/
  3. server.properties ファイルを作成します (vi server.properties)。
    #Minecraft server properties
    #(File modification datestamp)
    spawn-protection=16
    max-tick-time=60000
    generator-settings=
    force-gamemode=false
    allow-nether=true
    gamemode=0
    enable-query=false
    player-idle-timeout=0
    difficulty=1
    spawn-monsters=true
    op-permission-level=4
    resource-pack-hash=
    announce-player-achievements=true
    pvp=true
    snooper-enabled=true
    level-type=DEFAULT
    hardcore=false
    enable-command-block=false
    max-players=20
    network-compression-threshold=256
    max-world-size=29999984
    server-port=9085
    server-ip=
    spawn-npcs=true
    allow-flight=false
    level-name=world
    view-distance=10
    resource-pack=
    spawn-animals=true
    white-list=false
    generate-structures=true
    online-mode=false
    max-build-height=256
    level-seed=
    use-native-transport=true
    motd=A Minecraft Server
    enable-rcon=false
  4. dockerfile を作成し (vi dockerfile)、以下のコードを含めます。
    # Version 0.0.3
    # This version builds a spigot server
    # using the recommended build strategy for spigot
    # This is advantageous in that it's better for plugin development
    # and fits well with the Docker approach
    # it also adds a first Minecraft plugin into the bare spigot server
    #
    FROM ubuntu:14.04
    MAINTAINER Kyle Brown “brownkyl@us.ibm.com”
    RUN apt-get update
    RUN apt-get install -y git
    RUN apt-get install -y openjdk-7-jre-headless
    RUN apt-get install -y wget
    RUN mkdir minecraft
    RUN wget "https://hub.spigotmc.org//jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" -O minecraft/BuildTools.jar
    RUN git config --global core.autocrlf input
    RUN java -jar minecraft/BuildTools.jar
    RUN echo "eula=true" > eula.txt
    ADD server.properties ./server.properties
    RUN mkdir plugins
    ADD watsonqa.jar /plugins/watsonqa.jar
    RUN apt-get install -y unzip
    RUN unzip -uo /plugins/watsonqa.jar -d /plugins/
    CMD java -XX:MaxPermSize=128M -Xms512m -Xmx1024m -jar spigot-1.8.8.jar nogui
    EXPOSE 9085

    Spigot サーバーをローカルで実行するために、以前に作成した Dockerfile との違いは、server.properties を追加して、9085 ポートを公開していることだけです。

  5. 現時点で、$HOME/watsonspigotbluemix ディレクトリーは以下のようになっているはずです。 watsonspigotbluemix ディレクトリーの内容を示す画面のスクリーンショット
    watsonspigotbluemix ディレクトリーの内容を示す画面のスクリーンショット
  6. Bluemix ID、パスワード、dev スペースを使用して Bluemix にログインします (名前空間をすでに設定してある場合は、再び設定する必要はありません)。
    cf login
    cf ic login
    cf ic namespace set kozhaya
  7. 新規 Docker イメージを作成します。
    docker build -t watsonspigotbluemix .
  8. 作成されたイメージにタグを付けます。
    docker tag watsonspigotbluemix registry.ng.bluemix.net/kozhaya/watsonspigot
  9. Docker イメージを Bluemix にプッシュします。
    docker push registry.ng.bluemix.net/kozhaya/watsonspigot
  10. Docker コンテナーを Bluemix 上で実行します。
    cf ic run --name=watsonspigot  --publish=9085 
    registry.ng.bluemix.net/Kozhaya/watsonspigot

    正常に実行されている場合、ID として 1b5fa8fe-c988-4b64-b238-546d6031da1e が返されます。

    返された ID を示す画面のスクリーンショット
    返された ID を示す画面のスクリーンショット
  11. 使用可能な IP アドレスをリクエストします。
    cf ic ip request
    IP アドレスをリクエストするコマンドと、得られた応答を示す画面のスクリーンショット
    IP アドレスをリクエストするコマンドと、得られた応答を示す画面のスクリーンショット
  12. 返された IP アドレスを、ステップ 10 で実行した Bluemix Docker コンテナーにバインドします。
    cf ic ip bind <ip address> watsonspigot
    返された IP アドレスを Bluemix Docker コンテナーにバインドするコマンドと、得られた応答を示す画面のスクリーンショット
    返された IP アドレスを Bluemix Docker コンテナーにバインドするコマンドと、得られた応答を示す画面のスクリーンショット
  13. IP アドレスが Bluemix Docker コンテナーにバインドされたことを確認します。 IP アドレスが Bluemix Docker コンテナーにバインドされたことを確認するコマンドと、得られた応答を示す画面のスクリーンショット
    IP アドレスが Bluemix Docker コンテナーにバインドされたことを確認するコマンドと、得られた応答を示す画面のスクリーンショット
  14. クライアントを、Bluemix 上にホストされている Spigot サーバーに接続します。四角で囲まれた IP アドレスと丸で囲まれたポート番号に注目してください。 IP アドレスとポート番号を示す画面のスクリーンショット
    IP アドレスとポート番号を示す画面のスクリーンショット
  15. Watson に質問して、機能を検証します。
    /watson “What is Diabetes”
    Watson への質問と、それに対する応答を示す画面のスクリーンショット
    Watson への質問と、それに対する応答を示す画面のスクリーンショット

Disease プラグインを追加してドクター Watson に相談する

このセクションでは、サード・パーティー製プラグインとして、プレイヤーが Minecraft タウンに感染症の恐怖と不安を蔓延させるために使用できる Disease プラグインを導入します。これらの感染症をゲームに盛り込むことで、これらの病気に関する最善の治療方法のほか、病気の定義と症状についての情報を得るためにも、これまで説明したプラグインを介してドクター Watson を利用することができます。

Disease プラグインを追加するには、Watson のプラグインを作成するために先ほど使用した Dockerfile にもう 1 ステップ追加する必要があります。具体的には、Disease プラグインの JAR をダウンロードして plugins ディレクトリーに追加する必要があります。参照用に、Dockerfile (以下にコピーを記載します) を編集して、太字で強調表示されている 1 行を (リストの末尾近くに) 追加する必要があります。

# Version 0.0.3
# This version builds a spigot server
# using the recommended build strategy for spigot
# This is advantageous in that it’s better for plugin development
# and fits well with the Docker approach
# it also adds a first Minecraft plugin into the bare spigot server
#
FROM ubuntu:14.04
MAINTAINER Kyle Brown “brownkyl@us.ibm.com”
RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y default-jdk
RUN apt-get install -y wget
RUN mkdir minecraft
RUN wget "https://hub.spigotmc.org//jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" -O minecraft/BuildTools.jar
RUN git config --global core.autocrlf input
RUN java -jar minecraft/BuildTools.jar
RUN echo "eula=true" > eula.txt
RUN mkdir plugins
ADD watsonqa.jar /plugins/watsonqa.jar
# Install unzip
RUN apt-get install -y unzip
RUN unzip -uo /plugins/watsonqa.jar -d /plugins/
RUN wget “http://dev.bukkit.org/media/files/898/525/Disease-1.7.jar” -O plugings/Disease-1.7.jar
CMD java -XX:MaxPermSize=128M -Xms512m -Xmx1024m -jar spigot-1.8.8.jar nogui
EXPOSE 25565

この Dockerfile を基に、前と同じステップを実行して Docker イメージを作成して実行する必要があります。

  1. カレント・ディレクトリーを、Dockerfile が置かれているディレクトリーに変更します。説明のために、ここでは前に参照したディレクトリー (すなわち、$HOME/watsonspigot) がカレント・ディレクトリーであるという前提で、Watson Dialog プラグインを使用するサーバーを起動します。
    cd $HOME/watsonspigot
  2. 以下のコマンドを実行して、新規 Docker イメージを作成します。
    docker build -t="parallels/diseasewatsonspigotplugin" .
  3. ダウンロードしたサード・パーティー製 Disease プラグインと、Watson Dialog プラグインを使用する Spigot サーバーを実行します。それには、以下のコマンドを実行します。
    docker run -i -t -p=25565:25565 parallels/diseasewatsonspigotplugin

    以下の行が表示されたら、サード・パーティー製 Disease プラグインと Watson Dialog プラグインを使用する Spigot サーバーは、正常に起動されています。

    Spigot サーバー起動時の出力画面のスクリーンショット
    Spigot サーバー起動時の出力画面のスクリーンショット

     

  4. Minecraft クライアントをサーバーに接続します (以前のチュートリアルで説明した手順に従います)。

接続が完了したら、Disease プラグインとそれに関連するコマンドを調べます。コマンドの一例を以下に示します。

  • /disease help
  • /disease list
  • /disease check
  • /disease infect <player> <disease>

すべてのコマンドを網羅したリストを調べてください (一部のコマンドには、管理者権限が必要です)。

これで、プラグインを通じて医療用 Watson Dialog にもアクセスできるようになったので、病気に関する質問をドクター Watson に送信することができます。例えば、以下のコマンドを発行して、肺炎に最も効果的な治療方法を Watson に質問してみます。

/watson “How to treat Pneumonia”
Watson に対する質問を示す画面のスクリーンショット
Watson に対する質問を示す画面のスクリーンショット

このサード・パーティー製 Disease プラグインと Watson Dialog プラグインを使用する Spigot サーバーを Bluemix 上にホストする作業については、読者の演習用に残しておきます。これで皆さんは、Watson のサービスを含む複数のプラグインを Minecraft サーバー内で結合して、さらに興味をそそるゲーム・エクスペリエンスを創出する方法を理解できたはずです。

まとめ

このチュートリアルでは、Watson の Dialog サービスを Spigot サーバーに統合して、Bluemix 上の Docker コンテナー内でホストする方法を説明しました。今回は Watson の Dialog サービスにフォーカスしましたが、同じ方法で Watson の他のサービスを利用して、さらに興味をそそるゲームへと拡張することができます。例えば、Personality Insights サービスを利用して、プレイヤーで構成されるチームを作ることや、Natural Language Classifier サービスを利用して、プレイヤーの質問からプレイヤーの意図を理解できるようにすること、Visual Recognition サービスを利用して、画像から病気の症状を認識できるようにすることなどが考えられます。

これで、developerWorks のこのチュートリアル・シリーズは終わりです。皆さんの Minecraft の経験がワンランク、アップしたことを祝して乾杯!


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Java technology
ArticleID=1025327
ArticleTitle=Minecraft とBluemix: 第 4 回 Bluemix 上で Minecraft に Watson を統合する
publish-date=06022016