{"id":650,"date":"2020-04-04T14:29:37","date_gmt":"2020-04-04T05:29:37","guid":{"rendered":"https:\/\/www.typea.info\/blog\/?p=650"},"modified":"2020-10-30T13:04:23","modified_gmt":"2020-10-30T04:04:23","slug":"firebase-hosting-firestore-release","status":"publish","type":"post","link":"https:\/\/www.typea.info\/blog\/index.php\/2020\/04\/04\/firebase-hosting-firestore-release\/","title":{"rendered":"Firebase Hosting \u306b Angular \u3092\u7d71\u5408\u3057\u3066 Firestore \u306b\u63a5\u7d9a"},"content":{"rendered":"<p><a href=\"https:\/\/www.amazon.co.jp\/Angular-Web%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA-%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF-%E5%A4%A7%E6%BE%A4-%E6%96%87%E5%AD%9D-ebook\/dp\/B07BXY3V2L\/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;dchild=1&amp;keywords=Angular&amp;qid=1585977615&amp;sr=8-3&amp;linkCode=li2&amp;tag=typea09-22&amp;linkId=150ce20f6f76ff9ef9336a9472c95b73\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"\/\/ws-fe.amazon-adsystem.com\/widgets\/q?_encoding=UTF8&amp;ASIN=B07BXY3V2L&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=typea09-22\" border=\"0\" \/><\/a><img loading=\"lazy\" decoding=\"async\" style=\"margin: 0px !important; border: currentcolor !important; border-image: none !important;\" src=\"https:\/\/ir-jp.amazon-adsystem.com\/e\/ir?t=typea09-22&amp;l=li2&amp;o=9&amp;a=B07BXY3V2L\" alt=\"\" width=\"1\" height=\"1\" border=\"0\" \/><\/p>\n<ul>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/17\/google-cloud-functinos\/\">Cloud Functions \u3092\u8a66\u3057\u3066\u307f\u308b<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/22\/cloud_functions_for_firebase_dev_env\/\">Cloud Functions for Firebase\u306e\u958b\u767a\u74b0\u5883\u3092\u3068\u3068\u306e\u3048\u308b<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/28\/firebase-hosting-firestore\/\">Firebase Hosting \u3068 Firestore\u3092\u8a66\u3059<\/a><\/li>\n<li><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/29\/cloud-functions-firestore-bind\/\">Cloud Functions \u3068 Firestore\u3092\u9023\u643a\u3055\u305b\u308b<\/a><\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/28\/firebase-hosting-firestore\/\">Firebase Hosting \u3092\u5229\u7528\u3057\u3066\u3001\u751f\u306eJavaScript\u3067\u8a18\u8ff0\u3057\u305f\u30b5\u30f3\u30d7\u30eb\u304b\u3089Firestore\u306b\u63a5\u7d9a\u3057\u3066\u78ba\u8a8d\u3067\u304d\u305f<\/a>\u306e\u3067\u3001Angular \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u540c\u69d8\u306e\u52d5\u4f5c\u78ba\u8a8d\u3092\u884c\u3046\u3002<\/p>\n<h2>1.Angular \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f5c\u6210 VSCode\u3067\u958b\u3044\u3066\u8d77\u52d5<\/h2>\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3092\u3001angularfb \u3068\u3057\u3001Angular\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u65b0\u898f\u4f5c\u6210\u3057\u3001VSCode\u3067\u8d77\u52d5\u3001\u3068\u308a\u3042\u3048\u305a\u8d77\u52d5\u3057\u3066\u307f\u308b\u3002<\/p>\n<pre class=\"prettyprint\">&gt; ng new angularfb\n&gt; code .\\angularfb\\\n&gt; ng serve<\/pre>\n<p>OK\uff01<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firebase_run.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"angular_firebase_run\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firebase_run_thumb.png\" alt=\"angular_firebase_run\" width=\"486\" height=\"281\" border=\"0\" \/><\/a><\/p>\n<p>\u7acb\u3061\u4e0a\u304c\u308b\u3053\u3068\u3092\u78ba\u8a8d<\/p>\n<h2>2.Angular\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092Firebase \u3068\u7d71\u5408<\/h2>\n<h3>2.1 Firebase\u306b\u30ed\u30b0\u30a4\u30f3<\/h3>\n<p>&gt; firebase login<\/p>\n<p>\u3057\u3066\u304a\u304f\u3002\u30d6\u30e9\u30a6\u30b6\u304c\u7acb\u3061\u3042\u304c\u308a\u3001Google\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3002<\/p>\n<h3>2.2 Firebase\u521d\u671f\u8a2d\u5b9a<\/h3>\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d5\u30a9\u30eb\u30c0\u3067\u3001firebase init \u3092\u5b9f\u884c<\/p>\n<p>Firebase Hosting \u3068 Firestore\u3092\u6709\u52b9\u5316<\/p>\n<pre class=\"prettyprint\">angularfb&gt; firebase init\n\n     ######## #### ########  ######## ########     ###     ######  ########\n     ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##      \n     ######    ##  ########  ######   ########  #########  ######  ######  \n     ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##      \n     ##       #### ##     ## ######## ########  ##     ##  ######  ########\n\nYou're about to initialize a Firebase project in this directory:\n\n  C:\\workspaces\\Gcp-workspace\\Gcp_api_trial\\angularfb\n\nBefore we get started, keep in mind:\n\n  * You are currently outside your home directory\n\n? Are you ready to proceed? Yes\n? Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices. \n ( ) Database: Deploy Firebase Realtime Database Rules\n (*) Firestore: Deploy rules and create indexes for Firestore\n (*) Functions: Configure and deploy Cloud Functions\n&gt;(*) Hosting: Configure and deploy Firebase Hosting sites\n ( ) Storage: Deploy Cloud Storage security rules\n ( ) Emulators: Set up local emulators for Firebase features\n:\n? What do you want to use as your public directory? public\n? Configure as a single-page app (rewrite all urls to \/index.html)? Yes\n+  Wrote public\/index.html\n\ni  Writing configuration info to firebase.json...\ni  Writing project information to .firebaserc...\n\n+  Firebase initialization complete!<\/pre>\n<h3>2.3 Angular\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u3068\u30d3\u30eb\u30c9<\/h3>\n<p>Firebase Hosting \u306e\u51fa\u529b\u5148\u3092 firebase \u306e public\u306b\u5909\u66f4<\/p>\n<p>firebase.json \u306e hosting\/public \u30c7\u30d7\u30ed\u30a4\u5bfe\u8c61\u306e\u30d5\u30a9\u30eb\u30c0\u3092\u3001Angular\u306e\u30d3\u30eb\u30c9\u5148\u306e \u30d5\u30a9\u30eb\u30c0\u3001dist\u306b\u5909\u66f4\u3059\u308b<\/p>\n<p>&#8220;hosting&#8221;: {<\/p>\n<p>&#8220;public&#8221;: &#8220;dist&#8221;,<\/p>\n<h2>3. Angular Fire<\/h2>\n<h3>3.1 \u5c0e\u5165<\/h3>\n<p>Angular \u306e\u516c\u5f0f\u30e9\u30a4\u30d6\u30e9\u30ea\u3001Angular Fire \u3092\u5c0e\u5165\u3059\u308b\u3002<\/p>\n<p><a href=\"https:\/\/github.com\/angular\/angularfire\">https:\/\/github.com\/angular\/angularfire<\/a><\/p>\n<pre class=\"prettyprint\">&gt; ng add @angular\/fire@next\n&gt; npm install firebase @angular\/fire --save<\/pre>\n<p>\u30d1\u30c3\u30b1\u30fc\u30b8\u4e0d\u8db3\u30a8\u30e9\u30fc\u306b\u306a\u3063\u305f\u306e\u3067\u9069\u5b9c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/p>\n<pre class=\"prettyprint\">&gt; npm install -g node-gyp\n&gt; npm install -g node-pre-gyp\n&gt; npm install --save grpc\n<\/pre>\n<p>Quick Start<\/p>\n<p><a href=\"https:\/\/github.com\/angular\/angularfire\/blob\/master\/docs\/install-and-setup.md\">https:\/\/github.com\/angular\/angularfire\/blob\/master\/docs\/install-and-setup.md<\/a><\/p>\n<h3>3.2 Firebase \u8a2d\u5b9a\u306e\u8a18\u8ff0<\/h3>\n<p>\/src\/environments\/ \u306b\u3042\u308b\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u305d\u308c\u305e\u308c\u7de8\u96c6<\/p>\n<ul>\n<li>environment.ts\u00a0\u00a0 \uff1a \u30c6\u30b9\u30c8\u7528\u74b0\u5883\u8a2d\u5b9a<\/li>\n<li>environment.prod.ts \uff1a\u672c\u756a\u7528\u74b0\u5883\u8a2d\u5b9a\u00a0 ng build \u2013prod \u306e\u5834\u5408\u4f7f\u7528\u3055\u308c\u308b<\/li>\n<\/ul>\n<p>\u8a18\u8ff0\u5185\u5bb9\u306f\u3001FIrebase \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3001\u8ffd\u8a18\u3059\u308b\u3002<\/p>\n<pre class=\"prettyprint\">export const environment = {\n  production: false,\n  firebase: {\n    apiKey: '&lt;your-key&gt;',\n    authDomain: '&lt;your-project-authdomain&gt;',\/\/ {project-id}.firebaseapp.com\n    databaseURL: '&lt;your-database-URL&gt;',\/\/ <a title=\"https:\/\/project-id.firebaseio.com\" href=\"https:\/\/{project-id}.firebaseio.com\">https:\/\/{project-id}.firebaseio.com<\/a> \n    projectId: '&lt;your-project-id&gt;',\n    storageBucket: '&lt;your-storage-bucket&gt;',\/\/ {project-id}.appspot.com\n    messagingSenderId: '&lt;your-messaging-sender-id&gt;'\n  }\n};\n<\/pre>\n<h2>4.Angular\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f5c\u6210<\/h2>\n<h3>4.1 AppModule \u3067\u5229\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u8a2d\u5b9a<\/h3>\n<p>\/src\/app\/app.module.ts<\/p>\n<ul>\n<li>Firebase\u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u8a2d\u5b9a\u3001\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8a2d\u5b9a\n<ul>\n<li>Firestore\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u3001AngularFirestoreModule \u3092\u30a4\u30f3\u30dd\u30fc\u30c8<\/li>\n<li>\u753b\u9762\u3067\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u7528\u306b\u3001FomsModule\u3092 \u30a4\u30f3\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"prettyprint\">import { BrowserModule } from '@angular\/platform-browser';\nimport { NgModule } from '@angular\/core';\nimport { FormsModule } from '@angular\/forms';\nimport { AppRoutingModule } from '.\/app-routing.module';\nimport { AppComponent } from '.\/app.component';\nimport { AngularFireModule } from '@angular\/fire';\nimport { AngularFirestoreModule } from '@angular\/fire\/firestore';\nimport { environment } from 'src\/environments\/environment';\n\n@NgModule({\n  declarations: [\n    AppComponent\n  ],\n  imports: [\n    BrowserModule,\n    FormsModule,\n    AppRoutingModule,\n    AngularFireModule.initializeApp(environment.firebase),\n    AngularFirestoreModule\n  ],\n  providers: [],\n  bootstrap: [AppComponent]\n})\nexport class AppModule { }\n<\/pre>\n<h3>4.2 AppComponent \u306b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u4f5c\u6210<\/h3>\n<p><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/28\/firebase-hosting-firestore\/\">Firebase \u5358\u72ec\u3067 Firestore\u306e\u52d5\u4f5c\u78ba\u8a8d\u3092\u884c\u3063\u305f\u5185\u5bb9<\/a>\u3092\u3001Angular \u3067\u5b9f\u73fe\u3059\u308b\u3002<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/angular\/angularfire\/blob\/master\/docs\/firestore\/documents.md\">AngularFiresotre<\/a> \u3092DI\u3057\u3066\u4f7f\u7528\u3059\u308b\u3002<\/li>\n<li>save()\u3001load() \u30e1\u30bd\u30c3\u30c9\u3092\u3001\u30dc\u30bf\u30f3\u306e\u30a4\u30d9\u30f3\u30c8\u3068\u30d0\u30a4\u30f3\u30c9\u3059\u308b\u3002<\/li>\n<li>load() \u30dc\u30bf\u30f3\u62bc\u4e0b\u3067\u3001RxJs\u3092\u4f7f\u7528\u3057\u3001Firestore\u306e\u30c7\u30fc\u30bf\u3092\u53d6\u5f97<\/li>\n<\/ul>\n<pre class=\"prettyprint\">import { Component } from '@angular\/core';\nimport { componentFactoryName } from '@angular\/compiler';\nimport { AngularFirestore } from '@angular\/fire\/firestore';\nimport { Observable } from 'rxjs';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: '.\/app.component.html',\n  styleUrls: ['.\/app.component.sass']\n})\nexport class AppComponent {\n  firestore: AngularFirestore;\n  title = 'Hot Dog Status';\n  status = '';\n  \n  hotDog: Observable;\n  constructor(firestore: AngularFirestore) {\n    this.firestore = firestore;\n  }\n\n  save(e: any) {\n    const doc = this.firestore.doc(\"sample\/sandwichData\");\n    \n    doc.update({\"hotDogStatus\":this.status}).then(\n      () =&gt; console.log(\"sucess\")\n    ).catch(\n      (res) =&gt; console.error(\"error\" + res)\n    );\n  }\n  \n  load(e: any) {\n    this.hotDog = this.firestore.doc(\"sample\/sandwichData\").valueChanges();\n    this.hotDog.subscribe((res) =&gt; {\n      this.status = res[\"hotDogStatus\"];\n    });\n  }\n}\n<\/pre>\n<h3>4.3 \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210<\/h3>\n<p>app.component.html \u306e\u4f5c\u6210<\/p>\n<pre class=\"prettyprint\">&lt;h1 id=\"hotDogStatus\"&gt;{{title}}:{{status}}&lt;\/h1&gt;\n&lt;input type=\"textField\" [(ngModel)]=\"status\" \/&gt;\n&lt;button (click)=\"save($event)\"&gt;Save&lt;\/button&gt;\n&lt;button (click)=\"load($event)\"&gt;Load&lt;\/button&gt;\n\n&lt;router-outlet&gt;&lt;\/router-outlet&gt;\n\n<\/pre>\n<h2>5.\u5b9f\u884c<\/h2>\n<pre class=\"prettyprint\">&gt; ng serve<\/pre>\n<h3>5.1 \u753b\u9762\u304b\u3089\u64cd\u4f5c<\/h3>\n<p>\u5b9f\u884c\u30ed\u30b0\u306b\u51fa\u529b\u3055\u308c\u308bURL\u306b\u30a2\u30af\u30bb\u30b9\u3002<a href=\"http:\/\/localhost:4200\">http:\/\/localhost:4200<\/a> \u8d77\u52d5\uff01<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore01.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"angular_firestore01\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore01_thumb.png\" alt=\"angular_firestore01\" width=\"452\" height=\"284\" border=\"0\" \/><\/a><\/p>\n<p>Load \u30dc\u30bf\u30f3\u3092\u62bc\u4e0b\u3001<a href=\"https:\/\/www.typea.info\/blog\/index.php\/2020\/03\/28\/firebase-hosting-firestore\/\">Firestore\u306b\u524d\u56de\u4fdd\u5b58\u3057\u305f\u5024\u304c\u53d6\u5f97\u3067\u304d\u305f<\/a>\uff01<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore02.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"angular_firestore02\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore02_thumb.png\" alt=\"angular_firestore02\" width=\"451\" height=\"300\" border=\"0\" \/><\/a><\/p>\n<p>\u53d6\u5f97\u3057\u305f\u5024\u3092\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u3067\u5909\u66f4\u3002\u53cc\u65b9\u5411\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3067\u3001\u30bf\u30a4\u30c8\u30eb\u304c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u5909\u66f4\u3055\u308c\u308b\u306e\u304c\u898b\u3066\u53d6\u308c\u308b\u3002<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore03.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"angular_firestore03\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore03_thumb.png\" alt=\"angular_firestore03\" width=\"452\" height=\"273\" border=\"0\" \/><\/a><\/p>\n<p>Save \u30dc\u30bf\u30f3\u62bc\u4e0b\u3067\u3001Firesotre\u306b\u30c7\u30fc\u30bf\u66f8\u304d\u8fbc\u307f\u6210\u529f\u3002<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore04.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"angular_firestore04\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore04_thumb.png\" alt=\"angular_firestore04\" width=\"456\" height=\"281\" border=\"0\" \/><\/a><\/p>\n<h3>5.2 Firebase \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u78ba\u8a8d<\/h3>\n<p>\u753b\u9762\u304b\u3089\u66f4\u65b0\u3057\u305f\u5024\u304c\u53cd\u6620\u3055\u308c\u305f\u306e\u304c\u3001Firebase\u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089\u78ba\u8a8d\u3067\u304d\u305f\uff01\uff01\uff01<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore05.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"angular_firestore05\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/angular_firestore05_thumb.png\" alt=\"angular_firestore05\" width=\"674\" height=\"275\" border=\"0\" \/><\/a><\/p>\n<h2>6. \u672c\u756a\u74b0\u5883\u3078\u30c7\u30d7\u30ed\u30a4<\/h2>\n<p>Angular\u3092\u672c\u756a\u7528\u306b\u30d3\u30eb\u30c9\u3057\u3001Firebase\u30c7\u30d7\u30ed\u30a4<\/p>\n<pre class=\"prettyprint\">&gt; ng build \u2013prod\n&gt; firebase deploy --only hosting\n<\/pre>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u304c\u3067\u305f\u3002\u3002<\/p>\n<pre class=\"prettyprint\">Error: HTTP Error: 404, Requested entity was not found.\nPS C:\\workspaces\\Gcp-workspace\\Gcp_api_trial\\angularfb&gt; firebase deploy --only hosting\n\n=== Deploying to 'typea-gcp-api-trial'...\n\ni  deploying hosting\n\nError: HTTP Error: 404, Requested entity was not found.<\/pre>\n<pre class=\"prettyprint\"><\/pre>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/53049152\/firebase-hosting-deploy-error-http-error-404-not-found\">https:\/\/stackoverflow.com\/questions\/53049152\/firebase-hosting-deploy-error-http-error-404-not-found<\/a><\/p>\n<p>firebase init \u3092\u518d\u5b9f\u884c\u3057\u3001\u518d\u5ea6\u30d3\u30eb\u30c9\u3001\u30c7\u30d7\u30ed\u30a4<\/p>\n<pre class=\"prettyprint\"><\/pre>\n<pre class=\"prettyprint\"><strong>\u6210\u529f\uff01\uff01\uff01<\/strong><\/pre>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/firebase_release.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"firebase_release\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/2020\/04\/firebase_release_thumb.png\" alt=\"firebase_release\" width=\"465\" height=\"279\" border=\"0\" \/><\/a><\/p>\n<p>\u3010\u53c2\u8003\u3011\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8<\/p>\n<p><a href=\"https:\/\/firebase.google.com\/docs\/cli\/targets?hl=ja\">https:\/\/firebase.google.com\/docs\/cli\/targets?hl=ja<\/a><\/p>\n<p>\u8a2d\u5b9a<br \/>\n&gt; firebase target:apply hosting angularfb typea-gcp-api-trial.firebaseapp.com<br \/>\n\u8a2d\u5b9a\u30af\u30ea\u30a2<br \/>\n&gt;firebase target:clear hosting angularfb<br \/>\n\u8a2d\u5b9a\u4e00\u89a7<br \/>\n&gt; firebase target<br \/>\nResource targets for typea-gcp-api-trial:<br \/>\n[ hosting ]<br \/>\nangularfb (typea-gcp-api-trial.firebaseapp.com)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cloud Functions \u3092\u8a66\u3057\u3066\u307f\u308b Cloud Functions for Firebase\u306e\u958b\u767a\u74b0\u5883\u3092\u3068\u3068\u306e\u3048\u308b Firebase Hosting \u3068 Firestore\u3092\u8a66\u3059 Cloud Functions [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","_veu_custom_css":"","veu_display_promotion_alert":"","vkexunit_cta_each_option":"","footnotes":""},"categories":[102,104,112],"tags":[],"class_list":["post-650","post","type-post","status-publish","format-standard","hentry","category-angular","category-firebase","category-google-cloud-functions"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=650"}],"version-history":[{"count":2,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/650\/revisions"}],"predecessor-version":[{"id":653,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/650\/revisions\/653"}],"wp:attachment":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}