npm create svelte@latest sveltestudytanforssr
cd sveltestudytanforssr
npm i
firebase experiments:enable webframeworks
firebase init
Firebase Hostingを選択して、プロジェクトも選択してください。
その後、SvelteKitを自動感知できて、Enterを押してください。
{
"hosting": {
"source": ".",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"frameworksBackend": {
"region": "asia-northeast1",
"maxInstances": 1
}
}
}
npm i bootstrap
npm i firebase-admin
npm install @google-cloud/bigquery
※Firebaseサービスアカウントは、「Firebaseプロジェクト」→「プロジェクト設定」→「サービスアカウント」の順で獲得できます。
/src/lib/firebase/myfirebaseadmin.js
// @ts-nocheck
import admin from 'firebase-admin';
import serviceAccount from '$lib/firebase/keys/pcom-azest-blog-firebase-adminsdk-6ootr-c3f8fa001f.json'
function initFirebase(){
let firebaseadmin = null;
// Firebase Admin SDKの初期化
if (!admin.apps.length) {
firebaseadmin = admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
}
else{
firebaseadmin = admin.apps[0];
}
console.log(`admin.apps.length:${admin.apps.length}`);
return firebaseadmin;
}
export const firestore = initFirebase().firestore();
export const storage = initFirebase().storage();
// @ts-nocheck
import {firestore} from '$lib/firebase/myfirebaseadmin';
export async function load() {
const snapshot = await firestore.collection('blog').get();
const bloglist = snapshot.docs.map(doc=>{
var doctemp = doc.data();
doctemp.blogid = doc.id;
return doctemp;
});
return {bloglist};
};
<script>
// @ts-nocheck
export let data;
</script>
<div class="py-4">
<div class="container">
<div class="d-flex flex-column">
{#each data.bloglist as item}
<a href={`/blog/${item.blogid}`} class="my-2">{item.title}</a>
{/each}
</div>
</div>
</div>
// @ts-nocheck
import {firestore} from '$lib/firebase/myfirebaseadmin';
export async function load({ params }) {
// console.log(params)
const snapshot = await firestore.collection('blog').doc(params.blogid).get();
var bloginfo = snapshot.data();
bloginfo.blogid = params.blogid;
return {bloginfo};
};
<script>
// @ts-nocheck
export let data;
</script>
<div class="py-4">
<div class="container">
<div class="d-flex flex-column">
<div class="">{data.bloginfo.title}</div>
<div class="">{data.bloginfo.body}</div>
<div class="">{data.bloginfo.blogid}</div>
</div>
</div>
</div>
{JSON.stringify(data)}
<script>
// @ts-nocheck
</script>
2.開発する時、バックエンドのconsole.logが表示したい時、
「firebase server」ではなく、下記のコマンドを使って開発してください。
npm run dev