'簡易API'を構築して個人開発のモチベーションを上げる

## 個人開発のモチベーション
私の場合画面に表示させたい情報をどのように取り扱うかでモチベーションが決まります。
Webページを個人開発する場合においても埋め込む動的データを扱う方法がある程度決まってないとモチベーションが上がりません。

## Google スプレッドシートをDBとして利用する
「行」と「列」でデータを管理することができるものはDBです（暴論）
個人開発における規模のものであればスプレッドシートで十分です。
**REST**で構築するのである程度規模が大きくなってきた段階でAPI側の構築を変更をすれば良いです。
またスプレッドシートをCSVでDBにインポートする事も考慮すれば初期段階はスプレッドシートで十分です。

## Google Cloud 利用を可能にする
下記リンクから「無料で開始」から登録を行ってください。

https://cloud.google.com/?hl=ja

※クレジットカードの登録など個人情報が多い項目なので詳細は省きますが基本的に入力フォームに従うだけです

## Google Sheets APIを有効にする

サイドメニューから「API と サービス」→「API」→「有効なAPIとサービス」を選択し
画面上部にある「＋APIとサービスを有効にする」をクリックしてください。
「APIとサービスを検索」の検索バーに「Google Sheets API」と入力してください。

「Google Sheets API」を選択して「有効にする」をクリックしてください。
有効にできると画像のように「APIが有効です」と表示されます。

![682d7bd933fc68-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822984/55fd226c-a82c-69c1-abf7-81207db554ee.png)


## APIキーの取得

サイドメニューから「API と サービス」→「認証情報」→「認証情報を作成」を選択してください。
認証は今回APIキーで行います

![682d7bd933fc68-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822984/c76c3160-918e-1872-8c14-a9ac5faa29fa.png)



### APIの制限の設定
APIの生成直後はAPIの利用制限に関する警告が出るので設定を行います

キーを制限にチェックエを入れ、選択項目から「Google Sheets API」を選択してください。

![682d7bd933fc68-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822984/90d0c13f-28b8-c91d-7999-3ec801dc3435.png)



### APIキーを表示
APIキーを編集する画面に下記ボタンがあるのでそこからAPIキーを取得する事ができます。
必要になるタイミングでここから取得してください

![682d7bd933fc68-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822984/7e197148-3720-5748-f4c3-7ed712c01c0f.png)



## スプレッドシートを作成する
Google Cloudを登録したアカウントでスプレッドシートを作成します

![682d7bd933fc68-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822984/c13a7e0d-1f8a-5bb0-2305-9c9c653bb442.png)


### スプレッドシートの設定

共有設定の一般的なアクセスを「リンクを知っている人全員」に設定してください

![682d7bd933fc68-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822984/c6c1d37c-7c84-1a35-1ce2-c03302a7fdf0.png)


## スプレッドシートを取得するURLを作成

スプレッドシートの共有リンクから「スプレッドシートID」をメモしておきます

```
https://docs.google.com/spreadsheets/d/{スプレッドシートID}/edit?usp=drive_link
```

スプレットシートのタブ名もメモしておく必要があります

### Google Sheets API　のエンドポイント

```
https://sheets.googleapis.com/v4/spreadsheets/{スプレッドシートID}/values/{シートのタブ名}?key={APIキー}
```

:::note alert
スプレッドシート名ではなく **タブ名です** !!!
:::

## PostmanでAPIをテストする

コーディングして動作確認するのも良いですが、手間がかかるのでPostmanでテストします

https://www.postman.com/

メソッドはGETで下記が実行結果になります

```json
{
  "range": "Zenn!A1:Z1000",
  "majorDimension": "ROWS",
  "values": [
    [
      "タイトル",
      "記事の概要",
      "記事のURL"
    ],
    [
      "今話題のClineを使って'じゃんけん'してみた",
      "Clineの所感",
      "https://zenn.dev/shunsuke_stack/articles/b7394a213a273b"
    ],
    [
      "AIを部下にしてペアプロした話",
      "Aiderの所感",
      "https://zenn.dev/shunsuke_stack/articles/eb9cd6c167b835"
    ],
    [
      "GitHub Copilotは自動補完してくれるだけのAIだと思ってた",
      "Copilotの所感",
      "https://zenn.dev/shunsuke_stack/articles/499f6d4bcda795"
    ]
  ]
}

```

### 感想
実行してみた感想は、カラム名とデータが紐づいて取得できているわけではないので整形する必要はあると思います。
またはそういう設計と割り切る使い方をする必要が出てくるとは思いますが、これで簡易的な「REST API」を作成することができます。

## あとがき
少しでも実践的で実用的な環境に近づける事で個人開発でもデプロイするまでの道のりを着実に歩む事に繋がり、生産性のあるものを作った気になると思います。
モチベーションを下げる要因に生産性がなく誰かに公開するわけでもないものを闇雲に作る事だと思います。
今回の記事で個人開発でも動的なデータを使ったアプリケーションが簡単にできる事を知っていただければ幸いです。

## 一緒に働く仲間を募集しています！
株式会社コネクター・ジャパンでは一緒に働いてくれる仲間を募集しています！

事業拡大に伴い、エンジニアを大募集しています。
興味のある方は下記リンクから弊社のことをぜひ知っていただき応募してもらえると嬉しいです。

▼会社について

https://www.wantedly.com/companies/cnctor/about

▼代表メッセージ

https://cnctor.jp/10years-anniversary/

▼応募はこちら

https://www.wantedly.com/companies/cnctor/projects