

# ステップ 1: ローカルにデプロイおよびテストを実行します
<a name="TicTacToe.Phase1"></a>

**Topics**
+ [1.1: 必要なパッケージのダウンロードとインストール](#TicTacToe.Phase1.InstallApp)
+ [1.2: ゲームアプリケーションをテストします](#TicTacToe.RunAppLocally)

このステップでは、Tic-Tac-Toe ゲームアプリケーションをローカルコンピュータにダウンロード、デプロイ、およびテストします。Amazon DynamoDB ウェブサービスを使用する代わりに、DynamoDB をコンピュータにダウンロードして必要なテーブルを作成します。

## 1.1: 必要なパッケージのダウンロードとインストール
<a name="TicTacToe.Phase1.InstallApp"></a>

このアプリケーションをローカルでテストするには、次のものが必要です。
+ Python 
+ Flask（Python 用のマイクロフレームワーク）
+ AWS SDK for Python (Boto)
+ ローカルコンピュータ上で実行される DynamoDB
+ Git 

これらのツールを入手するには、以下の作業を実行します。

1. Python をインストールします。詳しい手順については、「[Python のダウンロード](https://www.python.org/downloads/)」を参照してください。

   Tic-Tac-Toe アプリケーションは、Python バージョン 2.7 を使用してテスト済みです。

1. Python パッケージインストーラ（PIP）を使用して Flask および AWS SDK for Python (Boto) をインストールします。
   + PIP をインストールします。

     手順については、「[PIP のインストール](http://pip.readthedocs.org/en/stable/installing/)」を参照してください。インストールページで、**get-pip.py** リンクを選択して、ファイルを保存します。次に、管理者としてコマンドターミナルを開き、コマンドプロンプトで以下のように入力します。

     ```
     python.exe get-pip.py
     ```

      Linux では、`.exe` 拡張子を指定しません。`python get-pip.py` のみを指定します。
   + PIP で、次に示すコードを使用して Flask と Boto パッケージをインストールします。

     ```
     pip install Flask
     pip install boto
     pip install configparser
     ```

1. DynamoDB をローカルのコンピュータにダウンロードします。その実行方法については、「[DynamoDB local (ダウンロード可能バージョン) のセットアップ](DynamoDBLocal.md)」を参照してください。

1. Tic-Tac-Toe アプリケーションをダウンロードします。

   1. Git をインストールします。手順については、「[Git のダウンロード](http://git-scm.com/downloads)」を参照してください。

   1. アプリケーションをダウンロードするには、次のコードを実行します。

      ```
      git clone https://github.com/awslabs/dynamodb-tictactoe-example-app.git
      ```

## 1.2: ゲームアプリケーションをテストします
<a name="TicTacToe.RunAppLocally"></a>

Tic-Tac-Toe アプリケーションをテストするには、ローカルコンピュータで DynamoDB を実行する必要があります。

**tic-tac-toe アプリケーションを実行するには**

1. DynamoDB を起動します。

1. Tic-Tac-Toe アプリケーション用のウェブサーバーを起動します。

   そのためには、コマンドターミナルを開き、Tic-Tac-Toe アプリケーションをダウンロードしたフォルダに移動し、次に示すコードを使用してアプリケーションをローカルに実行します。

   ```
   python.exe application.py --mode local --serverPort 5000 --port 8000
   ```

   Linux では、`.exe` 拡張子を指定しません。

1. ウェブブラウザを開き、次のように入力します。

   ```
   http://localhost:5000/ 
   ```

   ブラウザにホームページが表示されます。  
![作成ボタンおよびゲーム、招待状、最近の履歴へのリンクを持つアプリケーションのホームページのスクリーンショット。](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-5.png)

1. **[Log in]** (ログイン) ボックスに **user1** と入力し、user1 としてログインします。
**注記**  
このサンプルアプリケーションは、ユーザー認証を実行しません。ユーザー ID のみがプレーヤーを識別するために使用されます。2 人のプレーヤーが同じエイリアスでログインすると、アプリケーションは 2 つの別のブラウザでプレイしているかのように動作します。

1. 初めてゲームを実行する場合は、DynamoDB で必要なテーブル (`Games`) を作成するように促すページが表示されます。[**テーブルの作成**] を選択します。  
![アプリケーションのテーブル作成ボタンのスクリーンショット。](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-10.png)

1. [**作成**] を選択して、最初の Tic-Tac-Toe ゲームを作成します。

1. **[Choose an Opponent]** (対戦相手の選択) ボックスに **user2** と入力し、**[Create Game\!]** (ゲームを作成する\!) を選択します。  
![[対戦相手を選択] ダイアログボックスと [ゲームを作成] ボタンを表示するスクリーンショット。](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-20.png)

   この操作を行うと、`Games` テーブルに項目を追加してゲームが作成されます。これにより、ゲームのステータスが `PENDING` に設定されます。

1. 別のブラウザウィンドウを開き、次のように入力します。

   ```
   http://localhost:5000/ 
   ```

   ブラウザは Cookie を通じて情報を渡すので、Cookie を引き継がないように、匿名モードまたはプライベートブラウジングを使用します。

1. user2 としてログインします。

   user1 からの保留中の招待を示すページが表示されます。  
![保留中の招待があるアプリケーションのホームページを表示するスクリーンショット。](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-30.png)

1. [**accept (受け入れる)**] を選択して招待を受け入れます。  
![ゲームのステータスが進行中の空の TAC-TAC-TOE グリッドのスクリーンショット。](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-40.png)

   ゲームページが、空の Tic-Tac-Toe グリッドとともに表示されます。このページには、ゲーム ID、誰の番か、ゲームのステータスなど、関連するゲーム情報も表示されます。

1. ゲームをプレイします。

ユーザーが動くたびに、ウェブサービスは、`Games` テーブルのゲーム項目に条件付き更新を実行するためのリクエストを DynamoDB に送信します。たとえば、条件により、動きが有効で、ユーザーが選択した四角形が利用可能で、動いたユーザーの番であったことを確認できます。動きが有効な場合、更新操作により、ボードでの選択に対応する新しい属性が追加されます。また、既存の属性値が、次に動くことができるユーザーに設定されます。

アプリケーションは、ゲームページから非同期の JavaScript 呼び出しを毎秒、最大 5 分にわたって実行し、DynamoDB 内のゲームの状態に変化があったかどうかを確認します。変わった場合、アプリケーションは新しい情報でページを更新します。5 分後に、アプリケーションはリクエストを中止します。ユーザーはページを更新して、更新された情報を取得する必要があります。