BLOG

R3 Cloud Journey

AWS

Amazon Honeycode のデータを S3 へ出力する

2020-10-26

Amazon Honeycode は Webアプリをノーコードで開発できるツールです。(現在 パブリック・プレビュー中)

特徴として スプレッドシートをもとにデータ構造を設計していきます。 Google スプレッドシートや AppSheet の方がイメージが近いですね。

みんなスプレッドシートが大好きですね。

Amazon Honeycode

このブログでも、これまでにいくつか記事を投稿しているので、関心があれば参考にしてみてください。

Amazon Honeycode にデータを蓄積していくと、そのデータを BIツール等でも利用したくなるのではないでしょうか?

Honeycode と 他システムを連携するのはどのような方法が良いのかまだよく分かっていませんが、一つの方法として、全データを S3に書き出す方法を考えてみましょう。

ここ に Amazon Honeycode API QuickSight integration というサンプルがあります。  Amazon QuickSight は AWS の BIサービスです。

このサンプルを見ると、Honeycode の API を叩いてデータを取得しているようですね。

データを取得するには GetScreenData を使用します。 以下の例のように workbookId, appId, screenId を指定する必要があります。

const getSurveyResults = nextToken => HC.getScreenData({
    workbookId, appId, screenId: readScreenId, nextToken
}).promise()

取得できるデータは こんな感じ。一回目はヘッダ情報が含まれています。

{
    "results": {
        "Block": {
            "headers": [
                {
                    "name": "DataCell2"
                },
                {
                    "name": "DataCell3"
                },
                {
                    "name": "DataCell4"
                },
                {
                    "name": "DataCell16"
                }
            ],
            "rows": [
                {
                    "dataItems": [
                        {
                            "rawValue": "applicant",
                            "formattedValue": "applicant"
                        },
                        {
                            "rawValue": "work day",
                            "formattedValue": "work day"
                        },
                        {
                            "rawValue": "destination",
                            "formattedValue": "destination"
                        },
                        {
                            "rawValue": "result",
                            "formattedValue": "result"
                        }
                    ]
                }
            ]
        },
        "List": {
            "headers": [
                {
                    "name": "DataCell8"
                },
                {
                    "name": "DataCell9"
                },
                {
                    "name": "DataCell10"
                },
                {
                    "name": "DataCell20"
                },
                {
                    "name": "Expression 20b85bb6_d749_4932_9ca7_c506b335e9c9",
                    "format": "AUTO"
                }
            ],
            "rows": [
                {
                    "rowId": "row:d3d0f969-88f6-4b21-871d-ff29935160f1/021151bc-b614-47d8-888e-b0c390e21595",
                    "dataItems": [
                        {
                            "overrideFormat": "CONTACT",
                            "rawValue": "foo@example.com",
                            "formattedValue": "名無しさん"
                        },
                        {
                            "overrideFormat": "DATE",
                            "rawValue": "44027",
                            "formattedValue": "7/15/20"
                        },
                        {
                            "overrideFormat": "ROWLINK",
                            "rawValue": "row:fae899f2-4511-4a73-b757-f4c086faf1fe/d518a603-b534-3645-83b2-42ee02e4c5ae",
                            "formattedValue": "本社"
                        },
                        {
                            "overrideFormat": "ROWLINK",
                            "rawValue": "row:75d352aa-5c70-4684-adcc-64d0f340344c/e5f55fbf-225e-3a6b-8e81-157fa45bc14c",
                            "formattedValue": "承認"
                        },
                    ],    // データが続く
                }
            ]
        }
    },
    "workbookCursor": 181030083,
    "nextToken": "LWJRBzSxOI0rlm1+NUg4jVZZzYZCbdVXQa17is9Y6y52zZKqI7MAs6zKd/zqWHhwAhYSxK+oTh4JOSiwnnTY9OFFH7OO3L4yaK9WXCQ6wXsxsYZrlzTVeuvbOex+rr1+3B18vM0JyDeJkaC6tloFncwmkhur7x/DXMjMi3mEKewpSUgE5diJfv/W856Y98xBSFX+moArnTEfIJiaWqwT0UFs6x5a3ITaAAQYXxAk8qADLiENF00bxbHCZph+U1tQdBxjaKwdHK2UGVXVY1EJ8enMQ37kIjTx9rXvysa5fSk="
}

どうやら GetScreenData は 今のところ 100件ずつデータを返すようですね。(一回目のみ ヘッダ分があるので response.results["List"].rows.length は 99)

全てのデータを返しておらず、まだ続きがある場合は nextToken が入っています。 GetScreenData の引数に nextToken を指定すれば続きを取得でき、nextToken が undefined になるまで繰り返せば全てのデータを取得できるわけです。

let nextToken
do {
    const response = await HC.getScreenData({workbookId, appId, screenId, nextToken}).promise()
    nextToken = response.nextToken
    
    for (let row of response.results["List"].rows) {
        // 各行を処理
    }
} while (nextToken)

Amazon Honeycode は Basic, Plus, Pro の 3種類の料金プランがあり、それぞれ 1ワークブックあたりの最大行数が決められています。
かつ、API を使用できるのは Plus プラン以上であり Basic(Freeプラン)では API を使用できないため、今回ご紹介した方法を採れるのは 有料プランである Plusプラン以上になります。

今後の機能強化を期待しましょう!

AWS
AWS Lambda
Honeycode

アールスリーインスティテュートで、これまでになかった画期的な kintoneカスタマイズサービス gusuku Customine(カスタマイン) を開発しています。 kintone認定アプリデザイン/カスタマイズ スペシャリスト

R3のご提供サービス
自社のシステム開発・移行などをご依頼したい方
お客様とともに作りながら考える
新しいシステム開発
kintone導入・アプリ開発・カスタマイズにお困りの方
kintoneをもっと使いやすくする
gusukuシリーズ