Skip to content
This repository has been archived by the owner on Jul 31, 2024. It is now read-only.

freee/freee-app-template-firebase

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

89 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ใ“ใฎใƒชใƒใ‚ธใƒˆใƒชใฏ2024ๅนด7ๆœˆใซใ‚ตใƒใƒผใƒˆใ‚’็ต‚ไบ†ใ—ใพใ™ใ€‚ ่ฉณ็ดฐใฏใ€Œfreee ไผš่จˆ Firebase SDK / freee-app-template-firebaseใฎใƒกใƒณใƒ†ใƒŠใƒณใ‚น็ต‚ไบ†ใซใคใ„ใฆใ€ใ‚’ใ”่ฆงใใ ใ•ใ„ใ€‚

freee-app-template-firebase

ใ“ใฎใ‚ขใƒ—ใƒชใฏ Firebase ไธŠใงๅ‹•ไฝœใ™ใ‚‹ freee SDK ใ‚’ๅˆฉ็”จใ—ใฆใ€ freee ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใฎ่ช่จผใ‚„ freee API ใฎๅ‘ผใณๅ‡บใ—ใ‚’่กŒใ†ใ‚ตใƒณใƒ—ใƒซใ‚ขใƒ—ใƒชใงใ™ใ€‚

ใ“ใฎใƒชใƒใ‚ธใƒˆใƒชใ‚’ใ‚ณใƒ”ใƒผใƒปใ‚ฏใƒญใƒผใƒณใ—ใฆใ€็‹ฌ่‡ชใฎ freee ใ‚ขใƒ—ใƒชไฝœๆˆๆ™‚ใฎใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใจใ—ใฆๅˆฉ็”จใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚๏ผˆใ“ใฎใƒชใƒใ‚ธใƒˆใƒชใฏMITใƒฉใ‚คใ‚ปใƒณใ‚นใงใ™ใ€‚๏ผ‰

ใ“ใฎใ‚ขใƒ—ใƒชใงใงใใ‚‹ใ“ใจ

  • ใƒญใ‚ฐใ‚คใƒณ๏ผˆfreee ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใฎ่ช่จผ๏ผ‰
    • freee ใƒญใ‚ฐใ‚คใƒณ็”ป้ขใฎ่กจ็คบ
    • freee ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใฎ่ช่จผใจ่ชๅฏ
    • ใ‚ณใƒผใƒซใƒใƒƒใ‚ฏใง freee ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใฎๆƒ…ๅ ฑใ‚’ Firebase ใซไฟๅญ˜
    • ใƒญใ‚ฐใ‚คใƒณๅพŒใฎใƒ›ใƒผใƒ ็”ป้ขใฎ่กจ็คบ
  • ใƒญใ‚ฐใ‚ขใ‚ฆใƒˆ
  • ไบ‹ๆฅญๆ‰€ๆƒ…ๅ ฑใฎๅ–ๅพ—
    • SDK ใ‚’ๅˆฉ็”จใ—ใฆ freee API ใฎ GET api/1/users/me ใ‚’ๅ‘ผใณๅ‡บใ—ใพใ™
  • ๅ–ๅผ•ๆƒ…ๅ ฑใฎ็™ป้Œฒ
    • SDK ใ‚’ๅˆฉ็”จใ—ใฆ freee API ใฎ POST api/1/deals ใ‚’ๅ‘ผใณๅ‡บใ—ใพใ™
  • freee API ใฎๅ‘ผใณๅ‡บใ—ใซๅฟ…่ฆใชใ‚ขใ‚ฏใ‚ปใ‚นใƒˆใƒผใ‚ฏใƒณใจใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒˆใƒผใ‚ฏใƒณใฎใ€ๆš—ๅทๅŒ–ใจ key rotation

ๅฎŸ่กŒ็’ฐๅขƒ

Windows็’ฐๅขƒใฏใ‚ตใƒใƒผใƒˆใ—ใฆใŠใ‚Šใพใ›ใ‚“ใ€‚

ใƒ•ใ‚ฉใƒซใƒ€ๆง‹ๆˆ

ใ“ใฎใ‚ขใƒ—ใƒชใงใฏไปฅไธ‹ใฎ Firebase ใฎใ‚ตใƒผใƒ“ใ‚นใ‚’ๅˆฉ็”จใ—ใพใ™ใ€‚

  • ้™็š„ใƒ•ใ‚กใ‚คใƒซใ‚’ไปปๆ„ใฎใƒ‰ใƒกใ‚คใƒณใง้…ไฟกใ™ใ‚‹ Firebase Hosting
  • freee API ใ‚’ๅ‘ผใณๅ‡บใ™ Firebase Cloud Functions
  • ใƒ‡ใƒผใ‚ฟใฎไฟๅญ˜ใ‚’่กŒใ† Cloud FireStore

Firebase ใงใฎ Web ใ‚ขใƒ—ใƒชไฝœๆˆใซใคใ„ใฆใฏๅ…ฌๅผใƒชใƒ•ใ‚กใƒฌใƒณใ‚นใ‚‚ใ”ๅ‚็…งใใ ใ•ใ„ใ€‚

ใƒชใƒใ‚ธใƒˆใƒชใฎใƒซใƒผใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช
โ”œ functions .. Firebase Cloud Functions ใซใƒ‡ใƒ—ใƒญใ‚คใ•ใ‚Œใ‚‹ใ‚ฝใƒผใ‚นใฎใƒซใƒผใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช
โ”‚ใ€€โ”” src .. Firebase Cloud Functions ็”จใฎไธป่ฆใชใ‚ฝใƒผใ‚นใ‚’็ฝฎใ„ใฆใ„ใ‚‹ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช
โ”‚ใ€€ใ€€ใ€€โ”œ config .. ๅ„็จฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’็ฝฎใ„ใฆใ„ใ‚‹ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช
โ”‚ใ€€ใ€€ใ€€โ”‚ใ€€ใ€€โ”œ config.xxxx.json .. freee ใฎ SDK ็”จใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซ
โ”‚ใ€€ใ€€ใ€€โ”‚ใ€€ใ€€โ”” service-account.xxxx.json .. Firebase ็”จใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซ
โ”‚ใ€€ใ€€ใ€€โ”œ freee_sdk .. freee ใฎ SDK ใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—ใƒ•ใ‚กใ‚คใƒซ็ฝฎใๅ ด
โ”‚ใ€€ใ€€ใ€€โ”œ routes .. freee ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใฎ่ช่จผใ‚’ๅˆถๅพกใ™ใ‚‹ใƒ•ใ‚กใ‚คใƒซ็ฝฎใๅ ด
โ”‚ใ€€ใ€€ใ€€โ”œ services .. Firebase Cloud Functions ใซ็™ป้Œฒใ™ใ‚‹ API ็”จใฎใ‚ฝใƒผใ‚น็ฝฎใๅ ด
โ”‚ใ€€ใ€€ใ€€โ”” index.tx .. Firebase Cloud Functions ใซ็™ป้Œฒใ™ใ‚‹ API ็”จใฎใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆใ‚’ๅฎš็พฉใ™ใ‚‹ใƒ•ใ‚กใ‚คใƒซ
โ”‚
โ”” hosting .. Firebase Hosting ใซใƒ‡ใƒ—ใƒญใ‚คใ•ใ‚Œใ‚‹ใ‚ฝใƒผใ‚นใฎใƒซใƒผใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช
ใ€€ใ€€โ”” src .. Firebase Hosting ็”จใฎไธป่ฆใชใ‚ฝใƒผใ‚นใ‚’็ฝฎใ„ใฆใ„ใ‚‹ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช
ใ€€ใ€€ใ€€ใ€€โ”œ services .. Firebase Cloud Functions ใจใฎๆŽฅ็ถš็”จใฎใ‚ฝใƒผใ‚นใ‚’็ฝฎใ„ใฆใ„ใ‚‹ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช
ใ€€ใ€€ใ€€ใ€€โ”œ utils .. ใ‚ขใƒ—ใƒชใ‚’ๆ›ธใไธŠใงไพฟๅˆฉใชใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚’็ฝฎใ„ใฆใ„ใ‚‹ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช
ใ€€ใ€€ใ€€ใ€€โ”œ index.html .. ใ‚ขใƒ—ใƒชใฎ็”ป้ขใƒ•ใ‚กใ‚คใƒซ
ใ€€ใ€€ใ€€ใ€€โ”œ main.css .. ใ‚ขใƒ—ใƒชใฎCSSใƒ•ใ‚กใ‚คใƒซ
ใ€€ใ€€ใ€€ใ€€โ”” main.ts .. ใ‚ขใƒ—ใƒชใฎ็”ป้ข็”จใฎใ‚ฝใƒผใ‚นใƒ•ใ‚กใ‚คใƒซ

้–‹็™บ็’ฐๅขƒใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—

ไบ‹ๅ‰ใซๅฟ…่ฆใชใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณ

  • git
  • Node.js 10
  • Google Chrome

Step 1: Firebase ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใจ freee ใ‚ขใƒ—ใƒชใฎไฝœๆˆ

  1. ใƒชใƒใ‚ธใƒˆใƒชใ‚’ใ‚ฏใƒญใƒผใƒณใ™ใ‚‹ใ€‚
    $ git clone https://github.com/freee/freee-app-template-firebase.git
    $ cd freee-app-template-firebase
    
  2. firebase-tools ใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ใ€‚
    npm install -g firebase-tools@7.16.2
    
  3. Firebase ใซใƒญใ‚ฐใ‚คใƒณใ™ใ‚‹ใ€‚๏ผˆใƒ–ใƒฉใ‚ฆใ‚ถใง่ช่จผ็”ป้ขใŒ่กจ็คบใ•ใ‚Œใ‚‹ใฎใงใ€ๆ‰ฟ่ชใ—ใฆใใ ใ•ใ„ใ€‚๏ผ‰
    firebase login
    
  4. Firebase ใฎใ‚ณใƒณใ‚ฝใƒผใƒซใง Firebase ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ™ใ‚‹ใ€‚๏ผˆ https://console.firebase.google.com/u/0/?hl=ja ใ‚’ๅ‚่€ƒใซใ—ใชใŒใ‚‰ Firebase ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ—ใฆใใ ใ•ใ„ใ€‚๏ผ‰
  5. ไฝœๆˆใ—ใŸ Firebase ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎ่ฉณ็ดฐ็”ป้ขใ‚’้–‹ใใ€ใ‚ตใ‚คใƒ‰ใƒใƒผใ‹ใ‚‰ Authentication ใ‚’้ธๆŠžใ— ๅง‹ใ‚ใ‚‹ ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆ Authentication ใ‚’ใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ™ใƒผใƒˆใ™ใ‚‹ใ€‚
  6. ๅŒๆง˜ใซใ‚ตใ‚คใƒ‰ใƒใƒผใ‹ใ‚‰ Firestore ใ‚’้ธๆŠžใ— ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฎไฝœๆˆ ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆ Firestore ใ‚’ใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ™ใƒผใƒˆใ™ใ‚‹ใ€‚
    • ใƒ†ใ‚นใƒˆใƒขใƒผใƒ‰ใง้–‹ๅง‹ใ™ใ‚‹ใซใƒใ‚งใƒƒใ‚ฏใ‚’ๅ…ฅใ‚Œใฆใใ ใ•ใ„ใ€‚
    • ใƒญใ‚ฑใƒผใ‚ทใƒงใƒณใฏ asia-northeast1 ใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚
  7. ๅŒๆง˜ใซใ‚ตใ‚คใƒ‰ใƒใƒผใ‹ใ‚‰ Storage ใ‚’้ธๆŠžใ— Storage ใ‚’ใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ™ใƒผใƒˆใ™ใ‚‹ใ€‚
  8. ไฝœๆˆใ—ใŸใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎ [Project ID] ใ‚’็ขบ่ชใ™ใ‚‹ใ€‚
    firebase projects:list
    
    ๅ‡บๅŠ›ไพ‹)
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚ Project Display Name         โ”‚ Project ID                        โ”‚ Resource Location ID โ”‚
    โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
    โ”‚ template-firebase-local      โ”‚ template-firebase-local           โ”‚ asia-northeast1      โ”‚
    โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
    
  9. Firebase ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’็ดไป˜ใ‘ใ‚‹ใ€‚
    firebase use [Project ID]
    
    ๅฎŸ่กŒไพ‹)
    firebase use template-firebase-local
    
  10. freee ใ‚ขใƒ—ใƒชใ‚นใƒˆใ‚ขใง freee ใ‚ขใƒ—ใƒชใ‚’ไฝœๆˆใ™ใ‚‹ใ€‚๏ผˆ ใ“ใกใ‚‰ใ‚’ๅ‚่€ƒใซใ—ใชใŒใ‚‰ freee ใ‚ขใƒ—ใƒชใ‚’ไฝœๆˆใ—ใฆใใ ใ•ใ„ใ€‚๏ผ‰
    • ใ‚ณใƒผใƒซใƒใƒƒใ‚ฏ URL ใฏ http://localhost:5001/{{project-id}}/us-central1/api/auth/callback ใซใ—ใฆใใ ใ•ใ„ใ€‚

Step 2: Firebase Cloud Functions ใฎ่จญๅฎš

Firebase Cloud Functions ใฏใ‚ตใƒผใƒใƒผใƒฌใ‚นใงๅฎŸ่กŒใงใใ‚‹้–ขๆ•ฐใงใ€ใƒญใƒผใ‚ซใƒซใงๅ‹•ใ‹ใ™ใ“ใจใ‚‚ใงใใพใ™ใ€‚

ใ“ใ“ใงใฏใ€ใƒญใƒผใ‚ซใƒซใง Firebase Cloud Functions ใ‚’ๅ‹•ไฝœใ•ใ›ใ‚‹ๆ‰‹้ †ใ‚’็ดนไป‹ใ—ใพใ™ใ€‚

  1. functions/.runtimeconfig.json ใ‚’่จญๅฎšใ™ใ‚‹ใ€‚
    {
      "env": {
        "serviceaccountpath": "config/service-account.local.json",
        "mode": "local"
      },
      "freee": {
        "client_id": "ไฝœๆˆใ—ใŸ freee ใ‚ขใƒ—ใƒชใฎ client_id",
        "client_secret": "ไฝœๆˆใ—ใŸ freee ใ‚ขใƒ—ใƒชใฎ client_secret"
      }
    }
    
  2. Firebase ็”จใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ๆบ–ๅ‚™ใ™ใ‚‹ใ€‚ใ“ใกใ‚‰ ใ‚’ๅ‚่€ƒใซ JSON file ใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใ€ functions/src/config/service-account.local.json ใจใ„ใ†ใƒ•ใ‚กใ‚คใƒซๅใงไฟๅญ˜ใ—ใฆใใ ใ•ใ„ใ€‚ service-account.local.json ใฎไธญ่บซใฎไพ‹
    {
      "type": "service_account",
      "project_id": "sample-pjt-xxx",
      "private_key_id": "xxx",
      "private_key": "xxx",
      "client_email": "xxx",
      "client_id": "xxx",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://oauth2.googleapis.com/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "xxx"
    }
    
  3. freee SDK ็”จใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ๆบ–ๅ‚™ใ™ใ‚‹ใ€‚ functions/src/config/config.local.json ใซไปฅไธ‹ใฎใƒ•ใ‚กใ‚คใƒซใ‚’ๆบ–ๅ‚™ใ—ใฆใใ ใ•ใ„ใ€‚ [ใ‚ฆใ‚งใƒ– API ใ‚ญใƒผ] ใฏ ไปฅไธ‹ใฎๆ‰‹้ †ใง็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ Firebase ใฎใ‚ณใƒณใ‚ฝใƒผใƒซใงใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎๆฆ‚่ฆใฎๅณๅดใซใ‚ใ‚‹ๆญฏ่ปŠใ‚ขใ‚คใ‚ณใƒณใ‹ใ‚‰ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎ่จญๅฎšใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ใ€‚ ๅ…จ่ˆฌใ‚ฟใƒ–ๅ†…ใซใ‚ใ‚‹ ใ‚ฆใ‚งใƒ– API ใ‚ญใƒผ ใฎๅ€คใ‚’็ขบ่ชใ™ใ‚‹ใ€‚
    {
      "freee": {
        "authHost": "http://localhost:5001/[Project ID]/us-central1/api/auth",
        "appHost": "http://localhost:5000",
        "homePath": "/select_company",
        "tokenHost": "https://accounts.secure.freee.co.jp",
        "apiHost": "https://api.freee.co.jp"
      },
      "firebase": {
        "apiKey": "[ใ‚ฆใ‚งใƒ– API ใ‚ญใƒผ]",
        "cryptoKeyBucket": "[Project ID].appspot.com"
      }
    }
    

Step 3: Firebase Hosting ใฎ่จญๅฎš

Firebase Hosting ใฏ้™็š„ใชใƒ•ใ‚กใ‚คใƒซ๏ผˆHTML, JavaScript็ญ‰๏ผ‰ใ‚’ใƒ‡ใƒ—ใƒญใ‚คใ—ใฆไปปๆ„ใฎใƒ‰ใƒกใ‚คใƒณใงๅ…ฌ้–‹ใงใใ‚‹ใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใ‚ตใƒผใƒ“ใ‚นใงใ™ใ€‚

ใ“ใฎใ‚ขใƒ—ใƒชใงใฏ Firebase Hosting ใ‹ใ‚‰ Firebase Cloud Functions ใ‚’ๅ‘ผใณๅ‡บใ—ใฆใ€ใ‚ขใƒ—ใƒชใ‚’ๅ‹•ไฝœใ•ใ›ใฆใ„ใพใ™ใ€‚

  1. .env.development ใ‚’่จญๅฎšใ™ใ‚‹ใ€‚ hosting/.env.development ใซไปฅไธ‹ใฎ่จญๅฎšใ‚’่จ˜่ผ‰ใ—ใฆใใ ใ•ใ„ใ€‚
    # functions ใฎ URL
    CLOUD_FUNCTION_HOST=http://localhost:5001/[Project ID]/us-central1
    
    # fucntionsใฎonCallๅ‘ผใณๅ‡บใ—ใ‚’ใƒญใƒผใ‚ซใƒซใงๅ‹•ใ‹ใ™ๆ™‚ใซๅฟ…่ฆ่จญๅฎš(CORSใ‚จใƒฉใƒผๅฏพ็ญ–)
    CLOUD_FUNCTION_LOCAL_HOST=http://localhost:5001
    
    # hosting ใŒๆŽฅ็ถšใ™ใ‚‹ functions ใฎใƒชใƒผใ‚ธใƒงใƒณใ‚’ๆŒ‡ๅฎšใ™ใ‚‹
    HOSTING_REQUEST_FUNCTIONS_REGION=us-central1
    
    # freee ไผš่จˆใฎใƒ‰ใƒกใ‚คใƒณ
    CFO_DOMAIN=https://secure.freee.co.jp
    

Step 4: ใ‚ขใƒ—ใƒชใฎ่ตทๅ‹•

  1. npm run setup ใ‚’ๅฎŸ่กŒใ™ใ‚‹ใ€‚
  2. npm start ใ‚’ๅฎŸ่กŒใ—ใ€http://localhost:5000 ๏ผˆhosting ใฎURL๏ผ‰ใซใ‚ขใ‚ฏใ‚ปใ‚นใ™ใ‚‹ใ€‚

ๆœฌ็•ช็’ฐๅขƒใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—

Step 1: Firebase ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎไฝœๆˆ

  1. ๆœฌ็•ช็’ฐๅขƒ็”จใซๆ”นใ‚ใฆ Firebase ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใจ freee ใ‚ขใƒ—ใƒชใ‚’ไฝœๆˆใ—ใฆใใ ใ•ใ„ใ€‚๏ผˆ้–‹็™บ็’ฐๅขƒใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—ใฎStep 1ใ‚’ๅ‚่€ƒใซใ—ใฆใใ ใ•ใ„ใ€‚๏ผ‰
    • freee ใ‚ขใƒ—ใƒชใฎใ‚ณใƒผใƒซใƒใƒƒใ‚ฏ URL ใซใฏใ€ไปฅไธ‹ใ‚’่จญๅฎšใ—ใฆใใ ใ•ใ„ใ€‚
      • https://asia-northeast1-[Project ID].cloudfunctions.net/api/auth/callback
  2. ใ‚ณใƒžใƒณใƒ‰ใƒฉใ‚คใƒณใ‹ใ‚‰ๆœฌ็•ช็’ฐๅขƒ็”จใซไฝœๆˆใ—ใŸใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎๅˆฉ็”จใ™ใ‚‹ใ‚ˆใ†ใซๅˆ‡ใ‚Šๆ›ฟใˆใพใ™ใ€‚
    firebase use [Project ID]
    

Step 2: Firebase Cloud Functions ใฎ่จญๅฎš

้–‹็™บ็’ฐๅขƒ็”จใซ่จญๅฎšใ—ใŸๅ„็จฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใซใคใ„ใฆใ‚‚ใ€ ๆœฌ็•ช็’ฐๅขƒ็”จใฎใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

  • functions/src/config/service-account.production.json
  • functions/src/config/config.production.json

functions/src/config/config.production.json ใฎ่จญๅฎšไพ‹

{
  "freee": {
    "authHost": "https://asia-northeast1-[Project ID].cloudfunctions.net/api/auth",
    "appHost": "https://[Project ID].web.app/home",
    "homePath": "/select_company",
    "tokenHost": "https://accounts.secure.freee.co.jp",
    "apiHost": "https://api.freee.co.jp"
  },
  "firebase": {
    "apiKey": "[ใ‚ฆใ‚งใƒ– API ใ‚ญใƒผ]",
    "cryptoKeyBucket": "[Project ID].appspot.com"
  }
}

ใพใŸๆœฌ็•ช็’ฐๅขƒใง Firebase Cloud Functions ใ‚’ๅ‹•ไฝœใ•ใ›ใ‚‹ใŸใ‚ใซใฏใ€.runtimeconfig.json ใฎๅ†…ๅฎนใ‚’ Firebase Cloud Functions ใซ่จญๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

ไปฅไธ‹ใ‚’ๅ‚่€ƒใซใ‚ณใƒžใƒณใƒ‰ใƒฉใ‚คใƒณใ‹ใ‚‰่จญๅฎšใ—ใฆใใ ใ•ใ„ใ€‚๏ผˆใ“ใกใ‚‰ใ‚‚ๅ‚่€ƒใซใ—ใฆใใ ใ•ใ„๏ผ‰

firebase functions:config:set env.mode=production env.region="asia-northeast1" freee.client_id=xxx freee.client_secret=xxx env.serviceaccountpath="config/service-account.production.json"

Step 3: Firebase Hosting ใฎ่จญๅฎš

Firebase Hosting ใ‚‚ๅŒๆง˜ใซใ€ๆœฌ็•ช็’ฐๅขƒ็”จใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

  • hosting/.env.production
# functions ใฎ URL
CLOUD_FUNCTION_HOST=https://asia-northeast1-[Project ID].cloudfunctions.net

# hosting ใŒๆŽฅ็ถšใ™ใ‚‹ functions ใฎใƒชใƒผใ‚ธใƒงใƒณใ‚’ๆŒ‡ๅฎšใ™ใ‚‹
HOSTING_REQUEST_FUNCTIONS_REGION=asia-northeast1

# freee ไผš่จˆใฎใƒ‰ใƒกใ‚คใƒณ
CFO_DOMAIN=https://secure.freee.co.jp

Step 4: Cloud Build API

Firebase Cloud Functions ใฎใƒ‡ใƒ—ใƒญใ‚คใซใ€ Cloud Build API ใ‚’ๅˆฉ็”จใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใฎใง Cloud Build API ใ‚’ๆœ‰ๅŠนใซใ—ใพใ™ใ€‚

https://console.cloud.google.com/apis/library/cloudbuild.googleapis.com?project=[Project ID] ใ‚’้–‹ใใ€ๆœ‰ๅŠนใซใ™ใ‚‹ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„ใ€‚

Step 5: ใƒ‡ใƒ—ใƒญใ‚คใฎๅฎŸ่กŒ

npm run deploy ใ‚’ๅฎŸ่กŒใ—ใฆใใ ใ•ใ„ใ€‚

FAQ

Q. Firebase ใฎๆ–™้‡‘ใƒ—ใƒฉใƒณใฏใฉใ†ใ—ใŸใ‚‰่‰ฏใ„ใ‹๏ผŸ

A. ้–‹็™บ็’ฐๅขƒ็”จใฎ Firebase ใฏ็„กๆ–™ใฎ Spark ใƒ—ใƒฉใƒณใงๅ‹•ไฝœใ•ใ›ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ๆœฌ็•ช็’ฐๅขƒ็”จใฎ Firebase ใฏ Blaze ใƒ—ใƒฉใƒณใซใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚