Contentful による位置情報API提供

Drupal、WordPress 試してますが、なかなか決定打と言いにくい。

https://qiita.com/JQinglong/items/7676f17c91528af107ee

https://qiita.com/JQinglong/items/fbfac876ae8b069a9296

では、もっと手を広げてみようということで、Contentful にも手を出してみます。
英語の勉強も兼ねて・・・

## 入門

どこから始めればよいのか。
公式だとここか。

https://www.contentful.com/help/contentful-overview/

### Introduction to Contentful

- Work quickly and independently
    - コンテンツ（データ）と開発の分離。「反映してね」みたいなフローがなくなる。
- Manage all your content in one place
    - 考えるべきはどこに配布するかであり、データとしては1箇所で管理する。
- Write once, reuse everywhere
- Training courses

### Web app overview

ContentfulとしてのWebアプリは下記のような構成

- Content page:
    - メイン機能。コンテンツの一覧を見て、ステータスを確認できる等。

- Entry editor:
    - 各コンテンツエントリーを管理。

- Media page:
    - images, videos, PDF 等をアップロードする。 

- Media file editor:
    - 上記メディアファイルの編集。

- Space selector:
    - 組織の中に、スペース、チームがある。

### Spaces and organizations

スペースと組織と、ロールと権限でユーザ管理

- What are spaces and organizations?
    - 特定の目的ごとにスペースを用意する。スペースに対して、以下のような設定をする。
        - Webhooks
        - API keys
        - Locales
        - Content preview
        - Space roles
    - 組織はスペースの上位にあり、例えば、組織内に開発用スペースと制作用スペースを分けたりする。プランや請求の単位になる。ユーザは組織に所属し、ロールを持っている。ロール・所属は、スペースに対してのものと、組織に対してのものがある。

- Belonging to a space
    - スペースにおけるロールとしては、Adminの定義がある。Adminは、その他のユーザのロール設定や、スペースの削除等ができる。
- Belonging to an organization
    - 組織としては、４つのロールが定義されている。
    - owner, admin, developer and member
- Fold together: considering both kinds of roles
    - スペースと組織のロールを重層的に定義する
- Takeaways
    - スペースは、特定の目的のためにコンテンツを扱う場所。組織の中で、スペースを管理する。ユーザは２面のロールを持っている。

## The beginner’s guide to Contentful

ということで本題。

本来コンテンツモデルの全体像をしっかり作る必要があるわけですが、まずは実用的な例を参照するのが良いでしょう、ということで、サンプルプロジェクトを作成します。

### Our example project

ブログをサンプルとします。記事内容だけでなく、画像等のメディア、投稿者プロフィール、タグ情報などがあるわけで、これらをコンテンツタイプとしてまとめるわけです。

### Step 1: Get an account

Githubアカウントでサインアップできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/711aff72-ab41-9c14-c2db-eb53357f505f.png)

次の画面で会社名も必須なのは、ちょっとなという感じ。
というか、これが組織名なのですね。実際の勤め先を入れてしまうとややこしいと思うので、後ほど変更しておきました。

https://www.contentful.com/help/change-organization-name/

その後もいろいろ聞かれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/da0c5462-8363-34b4-f77b-8b7ab8b3695d.png)

そしてスタートすると、最初にこの画面が表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/8b1eccff-bfa0-95ee-76cc-f517b2c4d731.png)


これをやってみた方が良いのかなとも思いましたが、まずはスペースかなと思うので、ガイドに従います。


### Step 2: Create a space

左上部分、組織名の下にスペース名「Blank」が表示されています。
この部分をクリックすると、下記メニューが表示されるので、「Add space」。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/54b3ca1c-7874-ab8a-babc-0eb7b316eef8.png)

ところが、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/523922aa-ddf4-6627-03a9-ab583f1b4502.png)

無料の「Community」プランは
Single space for up to 5 users
となってました。

https://www.contentful.com/pricing/

では、名前だけ変えておきます。

右上「Settings」から。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/c6903183-32cd-7cc0-2ec1-3620eae32c68.png)

### Step 3: Create the content model

Click the Content Model tab, then Add content type
と書いてますが、Content Model タブをクリックすると、この画面になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/7ad2139d-3c21-7e96-f746-1ff206c40601.png)

そこで、ボタンをクリックすると、コンテンツタイプ作成のボタンが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/f4e9bf17-6110-babf-d554-f1781c2835fd.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/3af78ad9-c6e7-434a-b216-ea1cccb225df.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/a1482f26-4f42-d1f8-a5e3-b53dc79bce24.png)

フィールド追加のボタンが出るので、クリックして次に進みます。

### Step 4: Add information to content model

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/eac1c853-d015-937e-c87c-5d9e89d7b176.png)

Textをクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/70651ec2-40f6-e384-e60a-966a3b3e7de2.png)

Nameだけ指定して、Create。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/ed4b7d4a-0ce7-0d13-5d64-64fa05ceb61c.png)

こんな感じで追加されるので、同様に、２項目追加。
そして、右上のSave。
こんな感じに表示されるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/ceca6b89-816f-f836-33c7-49efa29cc4d3.png)


### Step 6: Add content

今度は、Contentタブから、データの追加。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/ae39f138-185f-bd96-26b9-3755e238d751.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/1b3cb812-771c-99a6-3f0e-4e7cae8aa2c7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/869f1187-fd42-807e-dbdc-78092c07bc95.png)

Publishすると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/c9389051-3bd2-bf00-5db1-32cdecaf0bab.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/c5129b00-7c2d-dc1e-09eb-651b72b78eae.png)

良い感じです。

この後は、いろいろ足してみましょうという話なので、一旦終了。

## Location（位置情報）

直近で目的としているのが、住所、位置情報を持ったデータのAPI提供なので、Locationフィールドの追加も確認しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/bf9f18f8-9da9-81ca-016d-d9535d40e811.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/484be161-ef35-8fc2-6d72-0e18755242fd.png)

これを追加した状態で、コンテンツ追加。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/f9dd1815-0623-4fd8-c3bf-5c4873876750.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/155ef8a8-9bc1-129e-7b40-102d9ff70a25.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/3c79f9b1-a41c-6d16-c91e-513460c7488b.png)

データ形式は択一ですかね。
ではなくて、入力方式をどちら行うかを選択するのであり、出力は、緯度・経度の模様。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/b5913bec-b80c-652d-5c75-c82dcf2f08ed.png)

## Previewing an entry

データのプレビューについては、説明が少ない。

https://www.contentful.com/help/previewing-an-entry/

Open preview ボタンをクリックするということですが、初期状態ではこの状態で、クリックできません。
ので、その下の「Click here to set up a custom content preview.」リンクをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/d8731108-3576-579c-27db-9f77b84af567.png)

下の、「Set up content preview」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/c7a7dc0c-1c5c-7dcb-e0ac-b118bfff7c44.png)

これだけではダメ。

https://www.contentful.com/help/setup-content-preview/?utm_source=webapp&utm_medium=knowledge-base-content_preview&utm_campaign=in-app-help

「Discovery web app」でプレビューができる模様。
リンクにある下記サイトで、Space ID、Delivery API key、Preview API key を登録。

https://discovery.contentful.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/0c623e44-4f68-9292-34c4-af6e0b787033.png)

Space ID は、Setting の SPACE SETTINGS の、General settings で確認できます。
APIキーは、Setting の SPACE SETTINGS の、API Keys で作る必要がありますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/3f5b8929-d776-7247-e3c0-ed6acf341c8b.png)

何か1箇所変えないとSaveできないので、Nameを変更して、Save。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/4423e93a-a062-80b6-05e7-cce5a711dee9.png)

Discovery web app に戻って、これらの情報を登録すると、こんな表示に切り替わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/ee3f7440-5620-a8bd-3b3a-7df63bb0759e.png)

選択すると、画面的に見えるのも良いのですが、API Requests の方で、見えるのも良いですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77307/76576f14-aa7a-060f-9aef-26a653d88a86.png)

## 所感

良いかなとは思います。
ただ、これで十分なのか、SaaS型だと拡張性も限定されると思うので、心配ではあります。
実際、使ってみて判断ですね。