2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeを使い、ネクストエンジンとGoogleスプレッドシートをAPI接続する:認証編

Last updated at Posted at 2025-09-03

経緯

前提として我が社はネット販売を行っていて、いくつかのモールに出店しておりますので、Order Management System(OMS)としてネクストエンジンを使用しております

一方、商品の売れ数などについては、私が入社した頃にExcelを使用していましたが、クラウドの需要が高まってきたことから、私がGoogleドライブの導入を行いました。
中でも、Googleスプレッドシートは多人数同時編集が可能な設計になっていて(Googleが提唱する超並列処理?)、個人のPCに保存していたExcelのデータをすべてGoogleスプレッドシートに移行させました。
この経緯があり、Googleスプレッドシートは見た目の変更も簡単に行えることから我が社では多用しております。

多人数同時編集が可能なGoogleスプレッドシートで例えば在庫数の管理を行う場合、ネクストエンジンからCSVをダウンロードして、Googleスプレッドシートにアップロードすることで、その瞬間から最新の情報に書き換えられます。
そこに人が介入していたのですが、大切な情報ほど、人が介入していると忙しくて忘れるということも発生するために自動更新をさせることにしました。

そこで行ったことが、社内にSFTPサーバーを立てて、ネクストエンジンからSFTPサーバーに対してCSVを出力させることで、Googleドライブまで連携させ、GoogleドライブにアップロードされたCSVをスクリプトでGoogleドライブに時間指定して取り込むということを行っていました。

ですが、もっと多くのデータを多頻度で更新したいという思いから、ネクストエンジンとGoogleスプレッドシートをAPI接続させようと思いコーディングをしようと思いましたが・・・
50才手前の私に一からコーディングするのは中々ハードルが高い・・・
Google Apps Script(GAS)は数年前にすこし触ったことがありましたが、その時とはあからさまにハードルの高さが異なっていました(-_-;)

なので、必然的にコーディングが出来るAIと作業を行うことになりました。
使用したAIは

  • Gemini 2.5 Flash
  • Gemini 2.5 Pro
  • GTP-5
  • Github Copilot
ですが、どれもUIDの取得が出来ず・・・(-_-;)

で、Claudeを使用することで認証まで出来るようになりましたので、備忘録代わりに記事をUpすることにしました。
また、社内のナレッジベースとして蓄積する目的もあります。

ではよろしくお願い致します。

1.アプリを作る


まずは、ネクストエンジン側でアプリを作るというところから始めます。

左バーの"アプリを作る"→"新しいアプリを作成"と進みます


アプリの種類選択は"メイン機能と連携するアプリ"
販売形態はまずは"特定の企業に公開"
アプリ名は"認証"と仮にしておきます。
アプリ説明文は審査時必須となっていたので任意かと思いきや入力しないと進まなかったので"Googleスプレッドシートと認証するアプリ"
ついでに、接続先メイン機能は自社を選択しておきました。
これで下にスクロールしていった先にある"内容を保存"をクリックすると保存できました。

2.Google Apps Script(GAS)の作成

ネクストエンジンの設定はここで中断しまして、Google Apps Script(GAS)の作成を行います。

GASはその後のメンテナンスのことを考えて、スプレッドシート内に書くコンテナバインドではなく、スクリプト単体を保存できるスタンドアロンにします。

また、Redirect URI、クライアントID、クライアントシークレット等の大切な項目につきましては、スクリプトの中に記載するのではなく、スクリプトプロパティに保存するようにします。
スクリプトプロパティにつきましては後ほど追記していきますのでこの手順に従って作業を行ってもらえればと思います。
安心してください。必ず認証まで成功します。
本コードではなく認証専用コードを新しく作成したうえでこちらの記事を書いています。

こうすることで、Qiitaへの記事Up時に大切な情報が入らないようにしました。


Googleドライブの"新規作成"


"その他"→"Google Apps Script"とたどると、スタンドアロンのGASが作成できます。


プロジェクトの名前とスクリプト名の表示は変更が必須ではないのですが、あとから見てわかりやすく認証とつけてみました。

認証.gs
/**
 * ネクストエンジンAPI認証テスト用スクリプト
 * 
 * 【目的】
 * ネクストエンジンAPIとの認証を確立し、アクセストークンの取得を行う
 * 
 * 【機能】
 * 1. OAuth2認証フローの実行
 * 2. アクセストークンとリフレッシュトークンの取得・保存
 * 3. トークンの有効性確認
 * 
 * 【設定方法】
 * スクリプトプロパティに以下の値を設定してください:
 * - CLIENT_ID: ネクストエンジンのクライアントID
 * - CLIENT_SECRET: ネクストエンジンのクライアントシークレット
 * - REDIRECT_URI: リダイレクトURI(スクリーンショット参照)
 * 
 * 【注意事項】
 * - テスト環境での動作確認を前提としています
 * - 本番環境での使用前に十分なテストを行ってください
 * - アクセストークンは安全に管理してください
 */

// ネクストエンジンAPIのエンドポイント
const NE_BASE_URL = 'https://base.next-engine.org';
const NE_API_URL = 'https://api.next-engine.org';

/**
 * WebアプリとしてのGETリクエスト処理
 * ネクストエンジンからのリダイレクト時にuidとstateを受け取る
 */
function doGet(e) {
  const uid = e.parameter.uid;
  const state = e.parameter.state;
  
  if (uid && state) {
    try {
      // 自動的にアクセストークンを取得
      const result = getAccessToken(uid, state);
      
      return HtmlService.createHtmlOutput(`
        <html>
          <head>
            <title>ネクストエンジン認証完了</title>
            <style>
              body { 
                font-family: 'Helvetica Neue', Arial, sans-serif; 
                max-width: 600px; 
                margin: 50px auto; 
                padding: 20px;
                background-color: #f5f5f5;
              }
              .container {
                background: white;
                padding: 30px;
                border-radius: 10px;
                box-shadow: 0 2px 10px rgba(0,0,0,0.1);
              }
              .success { color: #28a745; }
              .info { color: #17a2b8; }
              .code { 
                background: #f8f9fa; 
                padding: 10px; 
                border-radius: 5px; 
                font-family: monospace;
                margin: 10px 0;
              }
            </style>
          </head>
          <body>
            <div class="container">
              <h2 class="success">✅ 認証成功!</h2>
              <p>ネクストエンジンAPIの認証が完了しました。</p>
              
              <h3>取得した情報:</h3>
              <div class="code">
                <strong>UID:</strong> ${uid}<br>
                <strong>State:</strong> ${state}<br>
                <strong>Access Token:</strong> ${result.access_token.substring(0, 20)}...<br>
                <strong>Refresh Token:</strong> ${result.refresh_token.substring(0, 20)}...
              </div>
              
              <h3 class="info">次のステップ:</h3>
              <p>GASエディタに戻り、<code>testApiConnection()</code> を実行してAPI接続をテストしてください。</p>
              
              <p><small>このページを閉じて構いません。</small></p>
            </div>
          </body>
        </html>
      `);
      
    } catch (error) {
      return HtmlService.createHtmlOutput(`
        <html>
          <head>
            <title>認証エラー</title>
            <style>
              body { 
                font-family: Arial, sans-serif; 
                max-width: 600px; 
                margin: 50px auto; 
                padding: 20px;
              }
              .error { color: #dc3545; }
            </style>
          </head>
          <body>
            <h2 class="error">❌ 認証エラー</h2>
            <p>認証処理中にエラーが発生しました:</p>
            <p><strong>${error.message}</strong></p>
            <p>GASエディタでログを確認してください。</p>
          </body>
        </html>
      `);
    }
  } else {
    return HtmlService.createHtmlOutput(`
      <html>
        <head>
          <title>パラメータエラー</title>
          <style>
            body { 
              font-family: Arial, sans-serif; 
              max-width: 600px; 
              margin: 50px auto; 
              padding: 20px;
            }
            .error { color: #dc3545; }
          </style>
        </head>
        <body>
          <h2 class="error">❌ パラメータエラー</h2>
          <p>必要なパラメータ(uid、state)が見つかりません。</p>
          <p>認証URLから正しくリダイレクトされていない可能性があります。</p>
          <p>GASエディタで <code>generateAuthUrl()</code> を実行して、正しい認証URLを取得してください。</p>
        </body>
      </html>
    `);
  }
}

/**
 * スクリプトプロパティから設定値を取得
 */
function getScriptProperties() {
  const properties = PropertiesService.getScriptProperties();
  
  const clientId = properties.getProperty('CLIENT_ID');
  const clientSecret = properties.getProperty('CLIENT_SECRET');
  const redirectUri = properties.getProperty('REDIRECT_URI');
  
  if (!clientId || !clientSecret || !redirectUri) {
    throw new Error('必要なスクリプトプロパティが設定されていません。CLIENT_ID, CLIENT_SECRET, REDIRECT_URIを設定してください。');
  }
  
  return {
    clientId,
    clientSecret,
    redirectUri
  };
}

/**
 * ステップ1: 認証URLを生成してログ出力
 * 手動でブラウザでアクセスして認証を行う
 */
function generateAuthUrl() {
  try {
    const config = getScriptProperties();
    
    // ネクストエンジンの認証URL
    const authUrl = `${NE_BASE_URL}/users/sign_in?client_id=${config.clientId}&redirect_uri=${encodeURIComponent(config.redirectUri)}`;
    
    console.log('=== ネクストエンジン認証URL ===');
    console.log(authUrl);
    console.log('');
    console.log('上記URLをブラウザでアクセスしてください');
    console.log('認証後、リダイレクトURLに uid と state パラメータが付与されて戻ってきます');
    console.log('例: https://your-redirect-uri?uid=XXXXX&state=YYYYY');
    
    return authUrl;
    
  } catch (error) {
    console.error('認証URL生成エラー:', error.message);
    throw error;
  }
}

/**
 * ステップ2: uidとstateを使用してアクセストークンを取得
 * @param {string} uid - 認証後に取得されるuid
 * @param {string} state - 認証後に取得されるstate
 */
function getAccessToken(uid, state) {
  try {
    if (!uid || !state) {
      throw new Error('uid と state が必要です');
    }
    
    const config = getScriptProperties();
    
    // アクセストークン取得のリクエスト
    const url = `${NE_API_URL}/api_neauth`;
    
    const payload = {
      'uid': uid,
      'state': state,
      'client_id': config.clientId,
      'client_secret': config.clientSecret
    };
    
    const options = {
      'method': 'POST',
      'headers': {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      'payload': Object.keys(payload).map(key => 
        encodeURIComponent(key) + '=' + encodeURIComponent(payload[key])
      ).join('&')
    };
    
    console.log('アクセストークン取得リクエスト送信中...');
    console.log('使用URL:', url);
    console.log('ペイロード:', payload);
    const response = UrlFetchApp.fetch(url, options);
    const responseText = response.getContentText();
    
    console.log('レスポンス:', responseText);
    
    if (response.getResponseCode() !== 200) {
      throw new Error(`APIリクエストが失敗しました。ステータス: ${response.getResponseCode()}`);
    }
    
    const responseData = JSON.parse(responseText);
    
    if (responseData.result === 'success') {
      // トークンをスクリプトプロパティに保存
      const properties = PropertiesService.getScriptProperties();
      properties.setProperties({
        'ACCESS_TOKEN': responseData.access_token,
        'REFRESH_TOKEN': responseData.refresh_token,
        'TOKEN_OBTAINED_AT': new Date().getTime().toString()
      });
      
      console.log('=== 認証成功 ===');
      console.log('アクセストークン:', responseData.access_token);
      console.log('リフレッシュトークン:', responseData.refresh_token);
      console.log('トークンをスクリプトプロパティに保存しました');
      
      return responseData;
    } else {
      throw new Error(`認証失敗: ${JSON.stringify(responseData)}`);
    }
    
  } catch (error) {
    console.error('アクセストークン取得エラー:', error.message);
    throw error;
  }
}

/**
 * ステップ3: 保存されたトークンでAPI接続をテスト
 * ユーザー情報を取得して認証が正常に動作しているか確認
 */
function testApiConnection() {
  try {
    const properties = PropertiesService.getScriptProperties();
    const accessToken = properties.getProperty('ACCESS_TOKEN');
    const refreshToken = properties.getProperty('REFRESH_TOKEN');
    
    if (!accessToken || !refreshToken) {
      throw new Error('アクセストークンが見つかりません。先にgetAccessToken()を実行してください。');
    }
    
    // ログインユーザー情報取得APIでテスト
    const url = `${NE_API_URL}/api_v1_login_user/info`;
    
    const payload = {
      'access_token': accessToken,
      'refresh_token': refreshToken
    };
    
    const options = {
      'method': 'POST',
      'headers': {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      'payload': Object.keys(payload).map(key => 
        encodeURIComponent(key) + '=' + encodeURIComponent(payload[key])
      ).join('&')
    };
    
    console.log('API接続テスト実行中...');
    console.log('使用URL:', url);
    console.log('ペイロード:', payload);
    
    const response = UrlFetchApp.fetch(url, options);
    const responseText = response.getContentText();
    
    console.log('レスポンスコード:', response.getResponseCode());
    console.log('API レスポンス:', responseText);
    
    const responseData = JSON.parse(responseText);
    
    if (responseData.result === 'success') {
      console.log('=== API接続テスト成功 ===');
      console.log('ユーザー情報:', responseData.data);
      
      // トークンが更新された場合は保存
      if (responseData.access_token && responseData.refresh_token) {
        properties.setProperties({
          'ACCESS_TOKEN': responseData.access_token,
          'REFRESH_TOKEN': responseData.refresh_token,
          'TOKEN_UPDATED_AT': new Date().getTime().toString()
        });
        console.log('トークンが更新されました');
      }
      
      return responseData.data;
    } else {
      throw new Error(`API接続テスト失敗: ${JSON.stringify(responseData)}`);
    }
    
  } catch (error) {
    console.error('API接続テストエラー:', error.message);
    throw error;
  }
}

/**
 * 在庫APIのテスト(最終目標に向けて)
 * 商品マスタ情報の取得をテスト
 */
function testInventoryApi() {
  try {
    const properties = PropertiesService.getScriptProperties();
    const accessToken = properties.getProperty('ACCESS_TOKEN');
    const refreshToken = properties.getProperty('REFRESH_TOKEN');
    
    if (!accessToken || !refreshToken) {
      throw new Error('アクセストークンが見つかりません。');
    }
    
    // 商品マスタ検索API
    const url = `${NE_API_URL}/api_v1_master_goods/search`;
    
    const payload = {
      'access_token': accessToken,
      'refresh_token': refreshToken,
      'fields': 'goods_id,goods_name,stock_quantity', // 必要な項目のみ
      'limit': '5' // テスト用に5件に制限
    };
    
    const options = {
      'method': 'POST',
      'headers': {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      'payload': Object.keys(payload).map(key => 
        encodeURIComponent(key) + '=' + encodeURIComponent(payload[key])
      ).join('&')
    };
    
    console.log('在庫API テスト実行中...');
    console.log('使用URL:', url);
    
    const response = UrlFetchApp.fetch(url, options);
    const responseText = response.getContentText();
    
    console.log('レスポンスコード:', response.getResponseCode());
    console.log('在庫API レスポンス:', responseText);
    
    const responseData = JSON.parse(responseText);
    
    if (responseData.result === 'success') {
      console.log('=== 在庫API テスト成功 ===');
      console.log('取得商品数:', responseData.count);
      console.log('商品情報:', responseData.data);
      
      // トークンが更新された場合は保存
      if (responseData.access_token && responseData.refresh_token) {
        properties.setProperties({
          'ACCESS_TOKEN': responseData.access_token,
          'REFRESH_TOKEN': responseData.refresh_token,
          'TOKEN_UPDATED_AT': new Date().getTime().toString()
        });
        console.log('トークンが更新されました');
      }
      
      return responseData.data;
    } else {
      console.log('在庫API エラー:', responseData);
      
      if (responseData.code === '004001') {
        console.log('');
        console.log('【解決方法】');
        console.log('ネクストエンジンの「アプリを作る」→アプリ編集→「API」タブで');
        console.log('「商品マスタ検索」の権限を有効にしてください');
      }
      
      return responseData;
    }
    
  } catch (error) {
    console.error('在庫API テストエラー:', error.message);
    throw error;
  }
}

/**
 * 保存されているトークン情報を表示
 */
function showStoredTokens() {
  const properties = PropertiesService.getScriptProperties();
  
  console.log('=== 保存されているトークン情報 ===');
  console.log('ACCESS_TOKEN:', properties.getProperty('ACCESS_TOKEN') || '未設定');
  console.log('REFRESH_TOKEN:', properties.getProperty('REFRESH_TOKEN') || '未設定');
  console.log('TOKEN_OBTAINED_AT:', properties.getProperty('TOKEN_OBTAINED_AT') || '未設定');
  console.log('TOKEN_UPDATED_AT:', properties.getProperty('TOKEN_UPDATED_AT') || '未設定');
}

/**
 * スクリプトプロパティをクリア(テスト用)
 */
function clearProperties() {
  const properties = PropertiesService.getScriptProperties();
  properties.deleteProperty('ACCESS_TOKEN');
  properties.deleteProperty('REFRESH_TOKEN');
  properties.deleteProperty('TOKEN_OBTAINED_AT');
  properties.deleteProperty('TOKEN_UPDATED_AT');
  
  console.log('トークン情報をクリアしました');
}

/**
 * 認証フロー全体のガイド表示
 */
function showAuthGuide() {
  console.log('=== ネクストエンジンAPI認証ガイド ===');
  console.log('');
  console.log('【事前準備】');
  console.log('1. スクリプトプロパティに以下を設定:');
  console.log('   - CLIENT_ID: あなたのクライアントID');
  console.log('   - CLIENT_SECRET: あなたのクライアントシークレット');
  console.log('   - REDIRECT_URI: リダイレクトURI');
  console.log('');
  console.log('2. スクリプトをWebアプリとしてデプロイ:');
  console.log('   - 「デプロイ」→「新しいデプロイ」');
  console.log('   - 種類: ウェブアプリ');
  console.log('   - 実行者: 自分');
  console.log('   - アクセス: 全員');
  console.log('   - デプロイ後のURLをREDIRECT_URIに設定');
  console.log('');
  console.log('【認証手順】');
  console.log('1. generateAuthUrl() を実行して認証URLを取得');
  console.log('2. ブラウザで認証URLにアクセス');
  console.log('3. ネクストエンジンにログイン');
  console.log('4. 自動的にアクセストークンが取得されます');
  console.log('5. testApiConnection() で動作確認');
  console.log('');
  console.log('【その他の関数】');
  console.log('- showStoredTokens(): 保存済みトークン情報表示');
  console.log('- clearProperties(): トークン情報クリア');
}

で、コードを全部ぶち込む(笑)


ぶち込んだら保存します。

こちらをWebアプリとして使用するにはデプロイという作業が必要になります。

3.🚀 新しいデプロイの手順

1. 新しいデプロイを作成

GASエディタで「デプロイ」→「新しいデプロイ」をクリック


「種類を選択」で⚙️歯車アイコンをクリック
「ウェブアプリ」を選択

設定:
説明: 「ネクストエンジンAPI認証」(任意)
実行者: 「自分」
アクセスできるユーザー: 「全員」
「デプロイ」をクリック


このウェブ アプリケーションを使用するには、データへのアクセスを許可する必要があります。
と出ますので"アクセスを承認"をクリックします。
するとアカウントを選択するウィンドウが出てきますので、自身のアカウントをクリックします


Googleはこのアプリを検証していませんと表示が出ますので、"Advanced"をクリックします。
アカウント名下の"Go to NE_認証(unsafe)"をクリックすると


Webアプリケーションを認証する画面が表示されますので"Allow"をクリックします。

2. 新しいWebアプリURLを取得
デプロイ完了後、新しいWebアプリのURLが表示されます(例: https://script.google.com/macros/s/AKfyc...新しいID.../exec)
"コピー"をクリックするとURLがクリップボードにコピーされます。

3. スクリプトプロパティを保存

次に、ネクストエンジンのアプリを作る画面に戻ります。
最初に「基本」のタブで必要事項を入力していたので、「API」のタブに移動します。


テスト環境設定のRedirect URIに先ほどデプロしたときに出てきたURIをペーストして"更新"をクリックします。


すると、クライアントIDとクライアントシークレットが表示されます。
これらの情報をGASのプロジェクトプロパティに保存します。

GASエディタで「プロジェクトの設定」→

→「スクリプト プロパティ」と進みます。

CLIENT_ID、CLIENT_SECRET、REDIRECT_URIの3つを入力するのですが、

  • CLIENT_ID:ネクストエンジンで確認したクライアントID
  • CLIENT_SECRET:ネクストエンジンで確認したクライアントシークレット
  • REDIRECT_URI:WebアプリのURL = Redirect URI
と入力して"スクリプト プロパティを保存"をクリックするとスクリプトプロパティの保存が完了します。
これらの情報をコードの中に書かなかった理由はすでに述べましたが、Qiita等への公開を考えてのことです。

4. テスト実行

さて、いよいよテスト実行となります。
テストの順番はClaudeが決めてくれていまして、

  1. showAuthGuide() を実行してガイドを確認
  2. generateAuthUrl() を実行して認証URLを取得
  3. ブラウザで認証URLにアクセスしてネクストエンジンにログイン
  4. リダイレクト後のURLから uid と state を取得
  5. getAccessToken(uid, state) が実行されトークンを取得
  6. testApiConnection() で動作確認
となります。
順番に実行していきます。

1.showAuthGuide() を実行してガイドを確認
"▼"をクリックすると関数を選択できるようになるので"showAuthGuide"を選択します。
"▷実行"をクリックすると、実行ログとして下記が表示されます。

11:40:32 お知らせ 実行開始
11:40:29 情報 === ネクストエンジンAPI認証ガイド ===
11:40:29 情報
11:40:29 情報 【事前準備】
11:40:29 情報 1. スクリプトプロパティに以下を設定:
11:40:29 情報 - CLIENT_ID: あなたのクライアントID
11:40:29 情報 - CLIENT_SECRET: あなたのクライアントシークレット
11:40:29 情報 - REDIRECT_URI: リダイレクトURI
11:40:29 情報
11:40:29 情報 2. スクリプトをWebアプリとしてデプロイ:
11:40:29 情報 - 「デプロイ」→「新しいデプロイ」
11:40:29 情報 - 種類: ウェブアプリ
11:40:29 情報 - 実行者: 自分
11:40:29 情報 - アクセス: 全員
11:40:29 情報 - デプロイ後のURLをREDIRECT_URIに設定
11:40:29 情報
11:40:29 情報 【認証手順】
11:40:29 情報 1. generateAuthUrl() を実行して認証URLを取得
11:40:29 情報 2. ブラウザで認証URLにアクセス
11:40:29 情報 3. ネクストエンジンにログイン
11:40:29 情報 4. 自動的にアクセストークンが取得されます
11:40:29 情報 5. testApiConnection() で動作確認
11:40:29 情報
11:40:29 情報 【その他の関数】
11:40:29 情報 - showStoredTokens(): 保存済みトークン情報表示
11:40:29 情報 - clearProperties(): トークン情報クリア
11:40:32 お知らせ 実行完了

11:40:29 情報 【事前準備】はすでに終わらせています。
11:40:29 情報 2. スクリプトをWebアプリとしてデプロイ: も終えています。

2.generateAuthUrl() を実行して認証URLを取得

"generateAuthUrl"関数を選択して、"▷実行"をクリックします。

3.ブラウザで認証URLにアクセスしてネクストエンジンにログイン

すると、URLが送られてくるので、コピーしてブラウザのアドレスに貼り付けてアクセスします。

3.リダイレクト後のURLから uid と state を取得
4.getAccessToken(uid, state) が実行されトークンを取得

無事認証できました。
取得は関数が自動で行ってくれます。

認証が出来ましたのでスクリプトプロパティの確認を行います。

  • ACCESS_TOKEN:新規取得
  • CLIENT_ID:入力済み
  • CLIENT_SECRET:入力済み
  • REDIRECT_URI:入力済み
  • REFRESH_TOKEN:新規取得
  • TOKEN_OBTAINED_AT:新規取得
となりました。

接続試験の前にアプリの許可設定を行う必要があります。

今回の目的は認証とテストですので、
利用者情報取得を「許可する」
に設定したうえで、少し下にある"内容を保存"ボタンをクリックして、 ネクストエンジンが今回作成したGASに対してユーザーの詳細情報等を取得する許可を与えます。
これをしないとそもそも許可を与えられていないので、接続試験が失敗してしまいます。
一番上のマスタ情報取得については、今回の認証では不要なので「許可しない」で大丈夫です
「許可する」になっているのは先走って許可してしまったためです^^;

6.testApiConnection() で動作確認
ついに接続試験を行います。
"testApiConnection"関数を選択して、"▷実行"をクリックします。

14:17:22 お知らせ 実行開始
14:17:20 情報 API接続テスト実行中...
14:17:20 情報 使用URL: https://api.next-engine.org/api_v1_login_user/info
14:17:20 情報 ペイロード: { access_token: '---割愛---',
refresh_token: '---割愛---' }
14:17:20 情報 レスポンスコード: 200
14:17:20 情報 API レスポンス: {"result":"success" ---割愛---"refresh_token_end_date":"2025-09-06 12:18:20"}
14:17:20 情報 === API接続テスト成功 ===
14:17:20 情報 ユーザー情報: [ { pic_id: '00000',
pic_name: '---割愛---',
pic_kana: '---割愛---',
---割愛---
pic_last_modified_by_name: null,
uid: '---割愛---',
pic_ne_id: '---割愛---' } ]
14:17:20 情報 トークンが更新されました
14:17:23 お知らせ 実行完了

となりまして、接続試験が無事終了しました。

5. まとめ

コーディングの知識が殆ど無い50才手前の私でも
(数年前にGASをすこしかじった程度)
思い立ってコーディングを始めてから2週間強でタイトルの
ネクストエンジンとGoogleスプレッドシートをAPI接続する:認証編
まで行うことが出来ました。
AIに興味を持ったのはここ数ヶ月で、まともに使い出したのはここ数週間ほど。
コーディングを始めてから2週間強で認証まで出来ることが早いのか遅いのかはわかりませんが、
エンジニアとしてこの年になっても前に進めた気がします。
この記事がご覧になられている方々のビジネスに少しでも役立つことを願っております。

因みに、ここまで出来たらどんどん進んでいけると思いますので、
次の記事は在庫数の取得かな?
引き続きよろしくお願い致します。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?