가계부 데이터를 노드로.js로 전자 표 결합

이 글은 레코드 제작사의 11일째 글이다.
개시하다
처음 뵙겠습니다. 요즘 사우나에 푹 빠진 주식회사 리코쿠의 술자리입니다.
사활이야말로 정의다.
저도 음악을 좋아해요. 유명한 곳만 알 수도 있지만 학창시절부터 명곡이 많았어요.
예술가의 음악과 함께 지냈다.
저는 BUMP OF CHICKEN/ELLE GARDEN/ONE OK ROCK/UVER World 일대를 매우 좋아합니다. 울고 등을 밀고 정서를 고조시키고 깊은 생각에 잠긴 표정을 짓고 있습니다.(알 수 있겠지)
저는 평소에 서버 측 엔지니어로서 PHP를 접할 기회가 많습니다.
이번에는 노드다.js를 사용하여 Google 스프레드시트에 대한 데이터 결합을 작성하고 싶습니다.
전제로 삼다
나는 가계부 대신 전자 표를 쓴다.
컴퓨터에서 입력하는 부분은 신경 안 썼지만 스마트폰에서 입력하는 건 힘들었어요
애플리케이션으로 만들려고 원래 사용하던 스프레드시트를 DB로
쓰고 싶은 데가 있어.
단도직입적으로 말하면 Firebase Cloud Firestore를 사용하는 것이 더 쉽다
응용 프로그램 측의 실제 설치와 스프레드시트의 API 환경 준비 등은 이번에 하지 않는다.
애플리케이션 구성
구성을 간략하게 소개해드려요.
응용 프로그램
  • Flutter( version.2.5.2)
  • 서버측
  • Node.js( version.14 )
  • Firebase-functions(실행 환경은 Firebase Function을 사용합니다.)
  • google-spreadsheet
  • 이번에는 JavaScript로 기술합니다.
    데이터베이스
  • 스프레드시트
  • Node.프로젝트 만들기
    환경을 구축하기 시작하다.먼저 카탈로그 제작부터 시작하겠습니다.
    $ mkdir sheet-expenses-app
    $ cd sheet-expenses-app
    
    다음 노드.js 프로그램을 만듭니다.
    $ npm init
    
    포장 이름과 다양한 질문을 받고 YES MAN에게 답했다.(이곳을 좋아하세요.)
    다음 패키지.제이슨을 만들었어요.
    {
      "name": "sheet-expenses-app",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    
    Firebase Function을 사용할 수 있습니다.
    이번엔 자바스크립트로
    $ npm install @Google Cloud Monitoring/functions-framework -g
    $ firebase init functions
    
    이렇게 환경 자체가 형성되었다.
    기분을 올리고 싶으니까 헬로, 월드로 소통을 확인해 보세요.
    index.js
    const functions = require("firebase-functions");
    
    exports.helloWorld = functions.https.onRequest(async (request, response) => {
      response.json({result: 'Hello , World!'});
    });
    
    방문/helloWorld 후 답장Hello , World!만 하면 됩니다.
    로컬 환경을 시작하고 확인합니다.
    $ firebase emulators:start
    

    응, 괜찮은데(미소)
    연합 스프레드시트
    그러면 스프레드시트에 쓰기 시작합니다.
    프로그램 라이브러리에 미리 넣습니다.
    $ npm install google-spreadsheet
    
    또한 GCP 측에서 Google Sheets API를 유효화하고 서비스 계정과 인증 키를 준비합니다.
    여기까지 환경 준비가 끝났습니다.
    코드를 계속 씁니다.
    index.js
    const functions = require("firebase-functions");
    const { GoogleSpreadsheet } = require('google-spreadsheet');
    
    // 認証ファイルパス
    const CREDENTIALS_PATH = "./config/sheet_credential.json"; 
    // スプレッドシートのIDを指定
    const SHEET_KEY = 'XXXXXYYYYYZZZZZ';
    
    exports.addGoogleSheetData = functions.https.onRequest(async (request, response) => {
      // データ連携用にインスタンスを生成
      const doc = new GoogleSpreadsheet(SHEET_KEY);
      const credentials = require(CREDENTIALS_PATH);
      await doc.useServiceAccountAuth(credentials);
    
      // シート情報読み取り
      await doc.loadInfo();
      const sheet = await doc.sheetsById[1491717139];
      // 連携用のデータは配列形式で指定する
      let addData = [
        '=ROW()-1',
        '2021-10-20',
        'CD',
        'YOASOBI THE BOOK',
        '3957',
      ];
      //  書き込み処理
      await sheet.addRow(addData);
      response.json({ resultCode: 200});
    });
    
    쓴 수조에도 포함되지만 문자열 형식이라면 스프레드시트의 함수도 추가할 수 있다.
    동작을 시도해 보았다.

    좋아, 안에 있어.
    그러면 직접 쓴 곳을 수정하여 동적으로 변경합니다.
    index.js
    exports.addGoogleSheetData = functions.https.onRequest(async (request, response) => {
      // リクエストパラメータを取得
      let requestData = request.body.data;
    
      // データ連携用にインスタンスを生成
      const doc = new GoogleSpreadsheet(SHEET_KEY);
      const credentials = require(CREDENTIALS_PATH);
      await doc.useServiceAccountAuth(credentials);
      await doc.loadInfo();
      const sheet = await doc.sheetsById[1491717139];
    
      // 連携用のデータは配列形式で指定する
      let addData = [
        '=ROW()-1',
        requestData.purchaseDate,
        requestData.category,
        requestData.item,
        requestData.price,
      ];
      await sheet.addRow(addData);
      return response.json({resultCode: 200});
    });
    
    제작 방법의 개발을 진행하다.
    $ firebase deploy
    
    Deploy complete! 이렇게 표시하면 됩니다.
    그러면 응용 프로그램에서 바디까지 다음 인자를 설정합니다
    디버그를 수행하는 API입니다.
    {
      "data": {
        "purchaseDate": "2021-11-05",
        "category": "CD",
        "item": "BUMP aurora arc",
        "price": "4653"
      }
    }
    
    앱에서는 이런 느낌.

    스프레드시트를 확인합니다.

    응, 안에 응용 프로그램이 투입한 데이터가 있어.
    자, 완성!
    총결산
    이번에는 노드다.js에서 전자 표로 쓰기 처리되었습니다.
    스프레드시트는 업무나 개인이 사용할 기회가 많기 때문에 더욱 효과적으로 활용할 수 있었으면 좋겠다고 생각합니다.
    업데이트/delete도 했지만 길어지기 때문에 이번엔 여기서 마치겠습니다.
    읽어주셔서 감사합니다.
    내일레코드 제작사은 12일째인 미끄럼틀이 쉽게 만들어질 줄 몰랐다는 것이다.기대하세요~.
    이 기사는 RecoChoku의 엔지니어 블로그를 옮긴 기사다.

    좋은 웹페이지 즐겨찾기