Google Workspace割引クーポン無料配布中! 詳しくはこちら

【GAS】Kintoneのデータをスプレッドシートに連携して書き出す方法

  • URLをコピーしました!

Kintone APIを使って、アプリ内のレコード情報をGoogle Apps Script(GAS)で連携させてスプレッドシートに書き出す方法を紹介します。

私の会社ではKitoneを運用しています。

ここで作成したデータをスプレッドシートに書き込んでお見積書やら発注書を出す必要があるのですが・・・・・・

Kintoneから「データをダウンロード」とか「コピー&ペースト」してなどなど・・・・・・

面倒だなあと思ったので、GASを使って自動書き出しが出来るようにしました。

この方法を利用すれば、Kintoneのデータを1クリックでスプレッドシートに書き出すことが可能です。

GASにはタイマー機能があるので、指定した時刻になったらデータを自動で取得する・・・・・・

なんてこともできます。

GASコードの紹介から、Kintone APIを使った連携方法まで丁寧に解説したいと思います。

それではさっそく参りましょう。

この記事でわかること
  • KintoneのデータのAPI発行方法
  • GASを使ってレコードデータをスプレッドシートに記載する方法
タップできる目次
スポンサー

Kintoneアプリの準備

Kintoneアプリの作成

まず、Kintoneでアプリを作成しましょう。

フィールドを設定することで、必要なデータ構造を構築します。

ここでは例として、顧客管理アプリを作成します。

アプリが完成したら、テストデータをいくつか登録しておきましょう。

Kintone APIトークンの生成

KintoneのAPIトークンは、GASからKintoneのデータにアクセスするための鍵です。

Kintoneの設定画面からAPIトークンを生成し、記録しておきます。

手順も乗せておきますが、公式サイトも参考にしてください。

STEP
『設定』→『APIトークン』をクリック

アプリ設定から

設定』タブ → 『APIトークン』をクリック

STEP
APIトークン生成

『生成する』をクリック

STEP
アクセス権を編集して保存する

APIトークンが生成されたら、アクセス権を編集して保存します。

このとき、生成されたAPIトークンをメモ(コピペ)しておきます。

STEP
アプリを更新

最後にアプリの更新、もしくは保存します。

以上でKintone側の設定は完了です。

このトークンをGASのコード内で使用して、Kintoneのデータにアクセスします。

生成したAPIトークンは、第三者に知られないようにしてください!

Kintoneアプリ番号を確認する

Kintoneには作成したアプリごとに自動で番号が振られます。

URLを見ればアプリ番号がわかるので、控えておきましょう。

下の写真の例でいうと、『93』がアプリ番号です。

Kintoneの独自URLを確認する

数字部分と同様、Kintoneアカウントを作成したときの独自URLも使用します。

コピペしておきましょう。

以上でKintone側の準備は完了です。

Googleスプレッドシートの準備

データを書き込むスプレッドシートを準備します。

スプレッドシートを作成

新しいシートを作成します。

このときに書き出すシートの名称も変更しておくと便利です。

今回は「Kintoneデータ」とさせていただきます。

GASを登録

最重要項目のGASコードです。

GASのスクリプトエディタからスプレッドシートを指定し、スクリプトを記述します。

スクリプトは以下の通りです。

function getRecordsAndWriteToSheet() {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    
    //以下を書き換える↓↓
    const appId = 93; //アプリ番号
    const apiToken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; //APIトークン
    const kintoneURL = 'https://yourcompany.cybozu.com/k/'; //Kintone URL
    //ここまでを書き換える↑↑

    const params = {
        "app": appId
    };
    const queryString = Object.keys(params).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`).join('&');
    const url = `${kintoneURL}v1/records.json?${queryString}`; //Kintone URL

    const options = {
        "method": 'GET',
        "headers": {
            "X-Cybozu-API-Token": apiToken
        },
        "muteHttpExceptions": true
    };

    try {
        var response = UrlFetchApp.fetch(url, options);
        var responseCode = response.getResponseCode();
        var responseBody = response.getContentText();

        if (responseCode >= 200 && responseCode < 300) {
            // レスポンスボディをJSONオブジェクトに変換
            var data = JSON.parse(responseBody);

            if (data.records && data.records.length > 0) {
                // スプレッドシートに書き込む
                writeToSheet(data.records);
            } else {
                Logger.log("No records found."); //データがなければないとログを出す
                //Browser.msgBox("レコードがありませんでした。");
            }
        } else {
            Logger.log(`Error: ${responseCode}, Body: ${responseBody}`); //データ取得に失敗したらエラーを吐き出す。
            Browser.msgBox(`Error: ${responseCode}, Body: ${responseBody}`)
        }
    } catch (error) {
        Logger.log(`Exception caught: ${error.toString()}`);
    }
}

function writeToSheet(records) {
  //フィールド名も取得
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = ss.getSheetByName('Kintoneデータ');

    // 既存のデータをクリアする場合(オプション)
    sheet.clearContents();

    // ヘッダーを設定する場合(レコードの最初のキーから取得)
    const headers = Object.keys(records[0]);
    sheet.appendRow(headers);

    // レコードをスプレッドシートに書き込む
    records.forEach(record => {
        const row = headers.map(header => {
            // フィールドがオブジェクトであり、valueプロパティを持つ場合はその値を使用
            if (record[header] && typeof record[header] === 'object' && 'value' in record[header]) {
                return record[header].value;
            }
            // そうでない場合は、フィールドの値をそのまま使用(または空文字列)
            return record[header] || '';
        });
        sheet.appendRow(row);
    });
}

コードを書き換える

Kintoneアプリで確認した以下の3つをGASコードに書き加えます。

    //以下を書き換える↓↓
    const appId = 93; //アプリ番号
    const apiToken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; //APIトークン
    const kintoneURL = 'https://yourcompany.cybozu.com/k/'; //Kintone URL
    //ここまでを書き換える↑↑

書き換えが完了し、GASの承認をすれば準備完了です。

GASを実行する

書き換えが完了したら、「getRecordsAndWriteToSheet」を実行してください。

無事に書き出せていれば終了です。

Kintone APIを使う際の注意点

Kintone APIを使う際の注意点です。

フィールド名とフィールドコードをあわせる

このGAS出力は『フィールドコード』で出されます。

フィールド名とフィールドコードが同じ名前になるようにしておきましょう。

出力されるのはフィールドの追加順

このコードだと、出力されるデータはフィールドの更新が新しいものとなります。

並び替えたいのであれば、GASコードを追加する必要があるので注意してください。

日付や数字の扱いは注意

日付や電話番号の数字はそのままだと扱いづらいデータで出てきます。

GASのformatDateformatString関数を使って文字列の変換を行ってください。

テーブルデータの取得はできない

今回ご紹介したコードだと、テーブルデータの取得はできません。

Kintone一覧で表示される1行のレコードデータだけが対象となります。

入れ子構造になっているので、取り出すために工夫が必要です。

まとめ

GASとKintone APIを連携して、レコード情報をスプレッドシートに書き出す方法について解説しました。

この記事で紹介した方法を使えば、Kintoneのデータをダウンロードしたりコピペする手間が省けます

また、GASのタイマー機能を使えば指定した時間にKintoneのデータを取得することも可能です。

効率的なデータ管理で、作業時間の短縮になれば嬉しいです。

以上、ごすけでした。

スプシのカスタマイズ承ります

職場で使用している形式にスプレッドシート×GASをカスタマイズすることも可能です。

ご希望の方は『お問い合わせページ』よりご連絡ください。

ごすけ|生産技術者

1989年生まれの30代。妻と娘の3人家族。
大手メーカーからスタートアップ企業に転職。工程設計の仕事の傍ら、Google Workspaceを使って社内DXを推進中。
Google Workspaceの使い方・DX活用事例をブログで発信しています。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
タップできる目次