ネタ系アプリ「キモツイ」で使用した技術（Vue.js+Firebase+Buefy）の基本的なセッティング方法

構想から半日の爆速でリリースしたネタ全振りWebサービス「キモツイ」の構成技術とその基本的なセッティング部分の解説です。

作ったサイトはこちら
[キモツイ](https://kimotwi.ameneko.com/)
>「クソツイ」じゃない「キモツイ」だ！
「キモツイ」は「クソツイ」とは違う新たな概念です。ちょっとキモい感じが漂うツイートを「キモツイ」と私たちは愛を込めて呼びます。
当サイトは、キモいツイートを誰でも投稿・シェアできるサービスです。
お気に入りキモツイには「キモ投票」ができ、100票集まると殿堂入りします。
ぜひお気に入りのキモツイを投稿・シェアしてみてください。

ブログに遊び方書いています。[ブログ](https://www.katonobo.com/entry/kimotwi-release)

##Vue.js + Firebase + Buefy(Bulma)のお手軽三点セット
気軽な個人開発ではもうおなじみの、フロントは「Vue.js」バックエンドはサーバレスの「Firebase」という構成です。加えてUIも楽したいのでBulmaベースでVue.js用に作られたUIフレームワークの「Buefy」を使っています。
この３点セットは何か突発的にサービスを作りたいときに本当に簡単でオススメです。
[Vue.js](https://jp.vuejs.org/index.html)
[Firebase](https://firebase.google.com/?hl=ja)
[Buefy](https://buefy.org/)

今回はこの3つのセッティングの方法を紹介します。

###Vue.jsのセットアップ

VueのプロジェクトはVue CLI３を使って設定しました。
まずCLIをインストール

```sh

npm install -g @vue/cli
```

次にプロジェクト作成

```console
$ vue create my-project
```

色々質問されるから今回は以下のように作成

```
? Please pick a preset: 
  example (vue-router, vuex, stylus, babel, eslint, unit-mocha) 
  default (babel, eslint) 
❯ Manually select features 

? Check the features needed for your project: 
 ◉ Babel
 ◯ TypeScript
 ◯ Progressive Web App (PWA) Support
 ◉ Router
❯◉ Vuex
 ◯ CSS Pre-processors
 ◉ Linter / Formatter
 ◯ Unit Testing
 ◯ E2E Testing
 
? Use history mode for router? (Requires proper server setup for index fal
lback in production) (Y/n) y

? Pick a linter / formatter config: (Use arrow keys)
❯ ESLint with error prevention only 
  ESLint + Airbnb config 
  ESLint + Standard config 
  ESLint + Prettier
 
? Pick additional lint features: (Press <space> to select, <a> to toggle a
ll, <i> to invert selection)
❯◉ Lint on save
 ◯ Lint and fix on commit

? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? (Us
e arrow keys)
❯ In dedicated config files 
  In package.json
 
? Save this as a preset for future projects? (y/N) n
```
あとはプロジェクトのディレクトリに移動し、

```console

$ npm run serve
```
うまくローカルホストで表示されれば成功です。
これでVue.jsのセットアップは完了です。

###Firebaseのプロジェクト作成とVue.jsとの連携
まずFirebaseのアカウントを作ってください。

「プロジェクトの作成」でプロジェクトの名前を入力
次にアナリティクスの登録を聞かれるので、今回は設定しないを選択
これだけでプロジェクトの作成ができます。

次に、プロジェクト内の管理画面でウェブを選択し、コードを取得します。

```html

<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/6.6.0/firebase-app.js"></script>

<!-- TODO: Add SDKs for Firebase products that you want to use
     https://firebase.google.com/docs/web/setup#config-web-app -->

<script>
  // Your web app's Firebase configuration
  var firebaseConfig = {
    apiKey: "XXXXXXXXXX",
    authDomain: "XXXXXXX.firebaseapp.com",
    databaseURL: "https://XXXXXXX.firebaseio.com",
    projectId: "XXXXXXXX",
    storageBucket: "",
    messagingSenderId: "XXXXXXXXXX",
    appId: "XXXXXXXXXXXXXXXXX"
  };
  // Initialize Firebase
  firebase.initializeApp(firebaseConfig);
</script>
```
このコードです。
ここの「script」で囲まれている部分を使います。
そして、Vue CLIで作ったプロジェクトのsrcの下に「firebase.js」ファイルを作成してこのコードを貼り付けてください。

src/firebase.js

```html

<script>
  // Your web app's Firebase configuration
  var firebaseConfig = {
    apiKey: "XXXXXXXXXX",
    authDomain: "XXXXXXX.firebaseapp.com",
    databaseURL: "https://XXXXXXX.firebaseio.com",
    projectId: "XXXXXXXX",
    storageBucket: "",
    messagingSenderId: "XXXXXXXXXX",
    appId: "XXXXXXXXXXXXXXXXX"
  };
  // Initialize Firebase
  firebase.initializeApp(firebaseConfig);
</script>
```
保存したら、firebaseを初期化します。

```sh

npm install firebase --save
```
次に「firebase.js」に以下のようにコードを変更追加し、さらに「main.js」で最初に読み込むように設定します。ここのやり方は色々あるので好みの問題です。

src/ firebase.js

```js

import firebase from "@firebase/app";
import "@firebase/auth";
import "@firebase/firestore";
import "@firebase/storage";

const config = {
    apiKey: "XXXXXXXXXX",
    authDomain: "XXXXXXXXXX.firebaseapp.com",
    databaseURL: "https://XXXXXXXXXX.firebaseio.com",
    projectId: "XXXXXXXXXX",
    storageBucket: "",
    messagingSenderId: "XXXXXXXXXX",
    appId: "XXXXXXXXXX"
};
export default {
    init() {
        firebase.initializeApp(config);
    }
  }
```

src/main.js

```js

import Vue from 'vue'
import router from './router'
import store from './store'
import Firebase from "./firebase"

Vue.config.productionTip = false

Firebase.init();

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
```
ポイントは、main.jsで「Firebase.init()」で読み込ませているところです。これを忘れるとうまく動きません。

これでVue.jsとFirebaseの連携ができるようになりました。

###Buefyの設定

Buefyの設定は簡単です。
npmでインストールします。

```sh

npm install buefy
```
次に、「main.js」に以下の加えます。

```js

import Vue from 'vue'
import Buefy from 'buefy'
import 'buefy/dist/buefy.css'

Vue.use(Buefy)
```
これで完了です。アイコンを使いたい場合は「head」要素にCDNを追加すれば使えるようになります。

###シンプルだけど強力な組み合わせ
以上で簡単に開発する準備ができました。
個人開発など一人の開発ならこれで事足りるので本当に便利だなぁと思います。
ホスティングもFirebase hostingで行えば本当に一瞬ですからオススメです。

最後にツイッターをやっている方はぜひ「キモツイ」で遊んでみてください。
[キモツイ](https://kimotwi.ameneko.com/)