kintoneでVue.jsを使ってみる

今回はkintone + Vue.js で「Hello Vue!」してみたいと思います。

# アプリの準備
公式ドキュメントを参考に
一覧と各レコードの詳細・追加・編集画面に`Hello Vue!`を表示させます。

https://jp.vuejs.org/v2/guide/

CDNはこちらから探してね！

https://developer.cybozu.io/hc/ja/articles/202960194-Cybozu-CDN

## フォームの設定

スペースフィールドを一つ貼り付けます。
要素IDは`spVue`としておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/d0114ba5-2fbb-c7c8-bfd3-b9795109989f.png)

## 一覧の設定
`カスタマイズビュー`、`PC版とモバイル版で表示する`　を選択して、htmlは下記の様にします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/e2d50f1f-9da9-f286-6008-8c3c251bce7b.png" width=500>


```html
<div id="app">
  {{ message }}
</div>
```

# JavaScript

詳細・追加・編集画面表示イベントでは、スペースフィールドに先程のhtmlを追加します。

PC版とモバイル版でAPIがちょっとだけ違います。要注意！

## PC版
```js
// 一覧画面表示
kintone.events.on(["app.record.index.show"], async (event) => {
  const app = new Vue({
    el: "#app",
    data: {
      message: "Hello Vue!",
    },
  });
  return event;
});

// 詳細・追加・編集画面表示
kintone.events.on(
  [
    "app.record.detail.show",
    "app.record.create.show",
    "app.record.edit.show",
  ],
  async (event) => {
    const sp = kintone.app.record.getSpaceElement("spVue");
    const div = document.createElement("div");
    div.id = "app";
    div.textContent = "{{message}}";
    sp?.appendChild(div);

    const app = new Vue({
      el: "#app",
      data: {
        message: "Hello Vue!",
      },
    });

    return event;
  }
);
```

## モバイル版
APIの`app`の前に`mobile`が必要です。

```js
// 一覧画面表示
kintone.events.on(["mobile.app.record.index.show"], async (event) => {
  const app = new Vue({
    el: "#app",
    data: {
      message: "Hello Vue!",
    },
  });
  return event;
});

// 詳細・追加・編集画面表示
kintone.events.on(
  [
    "mobile.app.record.detail.show",
    "mobile.app.record.create.show",
    "mobile.app.record.edit.show",
  ],
  async (event) => {
    const sp = kintone.mobile.app.record.getSpaceElement("spVue");
    const div = document.createElement("div");
    div.id = "app";
    div.textContent = "{{message}}";
    sp?.appendChild(div);

    const app = new Vue({
      el: "#app",
      data: {
        message: "Hello Vue!",
      },
    });

    return event;
  }
);
```

# JavaScriptファイル追加時の注意！

kintone Tech Channel キンテク　チャンネルを参考に開発環境を構築しました。
ローカルのjsファイルをいちいちアップロードすることなく、楽にkintoneアプリに適用することができる素敵な開発環境が出来上がります。

https://youtu.be/1bdDxz2WZhQ

しかし、要注意！

このようにローカルのjsファイルのままでは、
開発PC内のローカルファイルを見ている状態なので、開発PC以外からはファイルにアクセスできません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/fe406bfa-5de1-b816-ad0b-985328590c6b.png)


ですので、他のPCやモバイル端末等で試す場合は、
ファイル自体をアップロードするか、モバイルからもアクセスできる場所のURLを設定するかにしましょう。

(2時間ほど気づけなくてアワアワしていました）

# 動作確認＆まとめ
というわけで、無事にVue.jsでHello Vue!することができました。
kintone開発環境でVue.jsの勉強をお手軽にできる環境も手に入れることができたような気がします。

| PC 一覧 | PC 詳細 | PC 追加・編集 |
|:-:|:-:|:-:|
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/b253d1ef-9909-d1ba-9963-85fc8d2de30a.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/d7b9c50c-ddd9-f0ff-4e3e-6080e0ca636b.png)  |   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/46b96db6-93a6-66cf-e360-5c302c8fce8b.png)|
| **モバイル 一覧** | **モバイル 詳細** | **モバイル 追加・編集** |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/c4cf6709-e022-ad1b-a6de-0826aa1c4f98.png" width=200>  | <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/58afb0ff-3607-2d6e-c412-dfbddd7807b0.png" width=200>   |  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/189d503a-d7ba-6416-710a-4c3faa65cb79.png" width=200> |