fbpx
「給与DXのエムザス」 給与とシステム両方を本業に約20年

kintone proxyで外部API連携!文字列制限とBase64を使ったファイル送受信のコツ

公開日:2025.07.03
最終更新日:2025.07.03

kintoneを使っていると、「外部サービスと連携したい」「APIを呼び出したい」と思う場面が出てきます。
そんな時に活躍するのが kintone.proxy() という機能です。

非常に便利なこの機能ですが、「文字列しか扱えない」という制限があることをご存知でしょうか?
本記事ではその制約と、Base64を使ってファイルも扱えるようにする方法を、具体例付きで解説します。

お知らせ①

🌟無料&登録不要でプラグインのお試しが可能!🌟

kintoneユーザーの皆さん!

エムザスのkintoneプラグインはもう試しましたか?🤔
エムザスでは以下のようなプラグインを開発しています!👇

EMレポ - レコードの内容をPDF / Excelに出力できるプラグイン
EMレポのプラグイン画像
EMsheet - kintoneのレコードをExcelのように表示して編集できるプラグイン
EMsheetのプラグイン画像
EMdocMaker - アプリの関連図や定義書を出力し、アプリの分析ができるプラグイン
EMdocMakerのプラグイン画像
       
EMログ - 標準の監査ログでは取得できないアプリの操作ログを取得できるプラグイン
EMログのプラグイン画像
   
 
 
 

 

デモ環境で、ほとんどの機能が今すぐお試しいただけます✨

 

さらに、お客様のドメインで無料で3ヶ月間、すべての機能を試すこともできます!🎉

\たった1分で申し込み完了!/

それでは、本題に入ります!


1. kintone proxyとは?

kintone proxyは、kintoneアプリにJavaScriptを組み込むことで、外部のREST APIと通信できるようにする関数です。
書き方は非常にシンプルで、以下のように使います。

kintone.proxy(URL, METHOD, HEADERS, BODY, CALLBACK);

サーバーを経由するため、CORS制限を回避して外部APIと通信できるのが最大のメリットです。

2. kintone proxyの主な特徴

✅ CORS制限の回避

ブラウザのクロスオリジン制限により通常は別ドメインへの通信が制限されますが、kintone.proxyならkintoneのサーバーを経由して通信できるため、CORSの問題を回避できます。

✅ セキュリティ面の強化

APIキーやトークンなどの機密情報をクライアント側に露出せずに扱えるため、セキュリティを確保した連携が可能です。

✅ 多様なHTTPメソッドに対応

GETだけでなく、POST、PUT、DELETEなどのメソッドに対応。多くのREST APIとやり取りできます。


3. 【注意点】文字列しか扱えない制限に注意!

便利なkintone proxyですが、大きな制限があります。

🔒 「送受信できるのは文字列だけ」

  • バイナリ形式(画像、PDF、CSVなど)をそのまま送ることはできない
  • multipart/form-data などのフォーム形式にも非対応

つまり、ファイルアップロード・ダウンロードのような処理は、文字列変換が必要になるということです。


4. Base64でファイルも扱える!

この制限を回避するために使えるのが Base64エンコードです。

🔄 Base64とは?

  • バイナリデータをテキストデータに変換する方法
  • 画像やPDFも、Base64化すれば文字列として送受信可能

つまり、kintone.proxyではBase64を使うことで「ファイルも扱える」ようになるというわけです。


5. 【例付き】Base64でファイルを送受信する方法

📤 例1:画像をBase64に変換して外部APIにアップロード

ステップ1:ファイルをBase64に変換する関数

function fileToBase64(file, callback) {
  const reader = new FileReader();
  reader.onload = function () {
    const base64 = reader.result.split(',')[1]; // Base64部分だけ抽出
    callback(base64);
  };
  reader.readAsDataURL(file); // ファイルをData URIで読み込む
}

ステップ2:Base64文字列をAPIに送信する

fileToBase64(file, function(base64Data) {
  const body = JSON.stringify({
    filename: file.name,
    content: base64Data,
    mimetype: file.type
  });

  const headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  };

  kintone.proxy('https://api.example.com/upload', 'POST', headers, body, function(responseBody, status, headers) {
    console.log('アップロード成功:', responseBody);
  });
});

📥 例2:APIからBase64形式のファイルを受け取ってkintoneに保存

ステップ1:Base64 → Blob に変換

function base64ToBlob(base64, mime) {
  const binary = atob(base64);
  const array = [];
  for (let i = 0; i < binary.length; i++) {
    array.push(binary.charCodeAt(i));
  }
  return new Blob([new Uint8Array(array)], { type: mime });
}

ステップ2:ファイルAPIでkintoneにアップロード

kintone.proxy('https://api.example.com/download', 'GET', {
  'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}, {}, function(body, status, headers) {
  const res = JSON.parse(body);
  const blob = base64ToBlob(res.content, res.mimetype);

  const formData = new FormData();
  formData.append('file', blob, res.filename);

  kintone.api(kintone.api.url('/k/v1/file', true), 'POST', formData, function(resp) {
    console.log('kintoneファイル保存成功', resp.fileKey);
  });
});

6. まとめ

  • kintone.proxy()は、CORS回避やセキュアな外部API連携ができる便利な機能
  • ただし、「文字列しか使えない」制限があるため、バイナリ通信にはBase64が必須
  • Base64を使えば、画像やPDFなどのファイルも安全に送受信できる

kintoneと外部サービスをつなげて業務を自動化したい方には、この手法を覚えておくことがとても重要です!


7. 関連リンク・参考資料

公式ドキュメント:kintone.proxy()

Base64とは(MDN)