Google Apps Script(GAS)の定期実行機能を使えば、外部APIを呼び出し、必要なデータをkintoneに蓄積・保存して利用できます。
今回はGASを使って為替レートのAPIを定期的に呼び出し、最新の為替情報をkintoneに保存します。
さらに、海外経費精算アプリでその為替情報をルックアップして選択し、経費の円換算を自動的に計算するしくみを作ります。
kintoneアプリの作成 : 為替レートアプリ
固定リンクがコピーされました
アプリの設定のフォームタブにて画像を参考に「為替レート」アプリを作成します。
以下のフィールドを追加します。
フィールド名
フィールドタイプ
フィールドコード
備考
日付
日付
date
レコード登録時の日付を初期値にする
通貨コード
文字列(1行)
currency_name
レート
数値
rate
日本円換算
計算
japanese_yen
計算式:ROUND(1/rate),2
「フォームを保存」して、アプリの「設定」画面に移動します。
「APIトークン」をクリックします。
「生成する」ボタンをクリックします。
生成されたAPIトークンの「アクセス権」に「レコード追加」をチェックして保存します。
「アプリを更新」ボタンをクリックして、変更を反映します。
以上でアプリの作成は終了です。
Google Apps Scriptでの定期実行プログラムの作成
固定リンクがコピーされました
次のURLを指定して、
https://script.google.com/home/
Google Apps Scriptのホーム画面を開き、ログイン後、左側メニューの「新しいプロジェクト」の「+」サインをクリックします。
以下の画面が開くので、任意のプロジェクト名、ファイル名に変更します。
manifestファイルに、OAuth scopeを記載します。
プロジェクトの設定ボタンから 「appsscript.json」マニフェスト ファイルをエディタで表示する にチェックを入れます。
エディタに戻り、appsscript.jsonに、次のようにOAuth scopeを追加します。
1
"oauthScopes" : ["https://www.googleapis.com/auth/script.external_request" ],
為替レートの取得に今回は、
ExchangeRate-API
を使用します。
サイトより、メールアドレスを入力し、フリープランのAPIキーを取得します。
下記を参考にコーディングします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
* Exchange Ratesを取得する定期実行サンプルプログラム
* Copyright (c) 2025 Cybozu
*
* Licensed under the MIT License
* https://opensource.org/license/mit/
*/
const exrate_api_url = '{Exchange Rate APIのURL}' ;// Exchange Rate API リソースURL
const exrate_api_token = '{Exchange RateのAPIトークン}' ;// Exchange Rate API トークン
const kitone_api_url = 'https://{subdomain}.cybozu.com/k/v1/records.json' ;// kintone API リソースURL
const kintone_token = '{kintoneアプリのAPIトークン}' ;// kitone API トークン
const kintone_app_id = {kintoneアプリのID};// kintoneアプリのID
// 為替レートを取得する関数
const fetch_exchange_rates = () => {
Logger.log('Fetching exchange rates...' );
// GETリクエストを作成
const options = {
method: 'get' ,
contentType: 'application/json' ,
headers: {Authorization: 'Bearer ' + exrate_api_token},
};
// GETリクエストを実行
const response = UrlFetchApp.fetch(exrate_api_url, options);
Logger.log('Response is "%s"' , response.getContentText());
// 為替レートレコードをkintoneに保存
send_to_kintone(response.getContentText());
};
// 為替レートのレコードをkinotneに送信する関数
const send_to_kintone = (response_text) => {
Logger.log('Sending exchange rates to kintone' );
// 為替レートを設定
const exchange_rates = JSON.parse(response_text).conversion_rates;
Logger.log('Exchange rates are "%s"' , JSON.stringify(exchange_rates));
const exchange_records = [];
const targetKeys = new Set(['USD' , 'AUD' , 'BGN' , 'CHF' , 'CAD' , 'SEK' , 'NOK' , 'HKD' , 'SGD' , 'THB' , 'CNY' ]);
for (const [record_key, record_value] of Object .entries(exchange_rates)) {
if (targetKeys.has(record_key)) {
const exchange_rate = {};
exchange_rate.currency_name = {value: record_key};
exchange_rate.rate = {value: record_value};
exchange_records.push(exchange_rate);
}
}
Logger.log('Payload is "%s"' , JSON.stringify(exchange_records));
// POSTリクエストを作成
const records = {app: kintone_app_id, records: exchange_records};
const options = {
method: 'post' ,
contentType: 'application/json' ,
// JavaScriptオブジェクトをJSON文字列に変換
payload: JSON.stringify(records),
headers: {'X-Cybozu-API-Token' : kintone_token},
};
// POSTリクエストを実行
const response = UrlFetchApp.fetch(kitone_api_url, options);
Logger.log('Response is "%s"' , response.getContentText());
};
コーディング終了後、保存します。
解説
各定数の設定
Exchnage rate APIのリソースURL、APIキー、kintoneのリソースURLおよびAPIトークン、アプリのIDを定数として設定しています。
1
2
3
4
5
const exrate_api_url = '{Exchange Rate APIのURL}' ;// Exchange Rate API リソースURL
const exrate_api_token = '{Exchange RateのAPIトークン}' ;// Exchange Rate API トークン
const kitone_api_url = 'https://{subdomain}.cybozu.com/k/v1/records.json' ;// kintone API リソースURL
const kintone_token = '{kintoneアプリのAPIトークン}' ;// kitone API トークン
const kintone_app_id = {kintoneアプリのID};// kintoneアプリのID
Exchange Rate APIのリソースURLには、Base Currencyを日本円にするため、次の値を設定してください。
1
const exrate_api_url = 'https://v6.exchangerate-api.com/v6/latest/JPY' ;
為替レートの取得
Exchange Rate APIより、為替レートを取得します。
以下のAPI関数で、GETリクエストを実行できます。
UrlFetchApp.fetch(exrate_api_url, options);
1
2
3
4
5
6
7
8
// GETリクエストを作成
const options = {
method: 'get' ,
contentType: 'application/json' ,
headers: {Authorization: 'Bearer ' + exrate_api_token},
};
// GETリクエストを実行
const response = UrlFetchApp.fetch(exrate_api_url, options);
為替レートのレコードをkintoneのリクエストデータ形式に変換
Exchange Rate APIより取得したレコードを以下のコードでkintone形式へ変換します。
1
2
3
4
5
6
7
8
9
10
11
12
13
// 為替レートを設定
const exchange_rates = JSON.parse(response_text).conversion_rates;
Logger.log('Exchange rates are "%s"' , JSON.stringify(exchange_rates));
const exchange_records = [];
const targetKeys = new Set(['USD' , 'AUD' , 'BGN' , 'CHF' , 'CAD' , 'SEK' , 'NOK' , 'HKD' , 'SGD' , 'THB' , 'CNY' ]);
for (const [record_key, record_value] of Object .entries(exchange_rates)) {
if (targetKeys.has(record_key)) {
const exchange_rate = {};
exchange_rate.currency_name = {value: record_key};
exchange_rate.rate = {value: record_value};
exchange_records.push(exchange_rate);
}
}
今回のサンプルでは、以下の為替レートのみ保存しています。
'USD', 'AUD', 'BGN', 'CHF', 'CAD', 'SEK', 'NOK', 'HKD', 'SGD', 'THB', 'CNY'
Exchange Rate APIのレスポンスデータのJSON形式の詳細は
Usage Guide
を参照してください。
また、kintoneへ送信するリクエストデータのJSON形式の詳細は
1件のレコードを登録する
を参照してください。
kintoneへ為替レートデータを送信
kintone APIのPOSTリクエストを作成します。
1
2
3
4
5
6
7
8
9
// POSTリクエストを作成
const records = {app: kintone_app_id, records: exchange_records};
const options = {
method: 'post' ,
contentType: 'application/json' ,
// JavaScriptオブジェクトをJSON文字列に変換
payload: JSON.stringify(records),
headers: {'X-Cybozu-API-Token' : kintone_token},
};
次のAPI関数でkintoneへデータを送信します。
UrlFetchApp.fetch(kitone_api_url, options);
1
2
// POSTリクエストを実行
const response = UrlFetchApp.fetch(kitone_api_url, options);
次の形式でレスポンスが返ってくれば成功です。
{"ids":["レコードID"],"revisions":["リビジョン番号"]}
1
Logger.log('Response is "%s"' , response.getContentText());
トリガーの設定画面を表示し、「トリガーを追加」からトリガーを追加します。
以下のように設定し保存します。
「実行する関数」に作成した関数を選択(画面では「fetch_exchange_rates」)
「イベントのソース」として「時間主導型」を選択
「時間ベースのトリガーのタイプ」に「日付ベースのタイマー」を選択
「時刻」に希望の時間帯を設定(画面では「午後1-2時」)
以上でGoogle Apps Scriptの設定は完了です。
kintoneアプリの作成:海外経費精算アプリ
固定リンクがコピーされました
アプリの設定のフォームタブにて画像を参考に「海外経費精算」アプリを作成します。
以下のフィールドを追加します。
フィールド名
フィールドタイプ
フィールドコード
備考
申請者
ユーザー選択
applicant
精算日
日付
expense_date
申請内容
文字列(複数行)
description
為替
ルックアップ
currency
画面の設定を参照
現地為替申請額
数値
local_currency_amount
現地通貨で入力
為替レート
数値
exchange_rate
ルックアップで自動設定:単位記号「¥」
日本円換算申請額
計算
amount_in_yen
計算式:local_currency_amount*exchange_rate
ルックアップは以下の画像を参考にしてください。
関連付けるアプリ:為替レート
コピー元のフィールド:通貨コード
ほかのフィールドのコピー:通貨レート ←[為替レート]日本円換算
計算式は以下の画面を参考にしてください。
計算式:local_currency_amount*exchange_rate
計算式を表示しない:チェック
数値(例:1,000)
単位記号:¥
「アプリを更新」ボタンをクリックして、変更を反映します。
以上でアプリの作成は終了です。
為替レートアプリ動作確認
固定リンクがコピーされました
Google App Script
https://script.google.com/home/
のホーム画面を開き、エディタをクリックします。
実行する関数を選択し(画面では、「fetch_exchange_rates」),「実行」をクリックします。
「実行ログ」欄に「実行完了」と表示され、エラーがなければ成功です。
kintoneの「為替レート」アプリにレコードが追加登録されているのを確認します。
海外経費精算アプリ動作確認
固定リンクがコピーされました
kintoneの「海外経費精算」アプリを開き、レコードを新規追加します。
「申請者」、「精算日」、「申請内容」を入力し、「為替」を選択後、「為替レート」が自動表示され、「現地為替申請額」を入力した後、「日本円換算申請額」が自動計算されれば成功です。
サンプルのようにGASの定期実行機能を利用してAPIを呼び出し、データの保存先にkintoneを利用すれば、今回の為替レートの計算のようにさまざまな業務用アプリへ応用できます。
株価、天気、各地気温などのAPIと連携することでそれぞれのニーズに応じたkintoneアプリの作成ができます。