iOS の家計簿アプリをつくる(サーバー実装編)

advent_calendar アドベントカレンダー

はじめに

こちらは個人開発アプリができるまで by am10 Advent Calendar 2024の 3 日目の記事です。

3 日目はスプレッドシートを使ったサーバーサイドの実装についてです。

データ定義

家計簿に必要なデータを定義します。

こんなもんでしょう。

  • ID(とりあえず主キーは必要)
  • 日付(購入日)
  • 品名
  • 金額
  • 項目(食費など)
  • サブ項目(食品、飲料など)

ファイル名は「家計簿_yyyy」で年ごとにつくりシートを月ごとに「1 ~ 12」とログ用に「log」の 13 こ作成します。
1 ファイルにまとめてもいいのですがアプリに飽きた場合に家計簿としてみやすいようにこのような形にしました。

こんな感じです。1 行目はカラム名で 2 行目からデータ入力していきます。ID は UUID で項目とサブ項目は扱いやすさを考えて数値にしています。(ex. 項目の 0 が食費、サブ項目の 1 が飲料)

1

API 作成

API を作成していきます。必要なのは下記 2 つです。

  • データ取得(年月を指定し指定の 1 ヶ月のデータを取得)
  • データ登録(複数件同時可)

スプレッドシートの拡張機能 > Apps Script からコード.gs ファイルを開いて GAS でコードを書いていきます。

データ取得

データ取得から作っていきます。年月を指定して GET でリクエストでいいでしょう。
こんな感じのリクエストが来る想定です。

こんな感じのレスポンスが返ってくる想定です。

実装はこんな感じです。

doGet(e) が GET リクエストを受ける場所なのでここでデータ取得の処理を行います。
全体的な処理の流れは下記です。

  1. GET で年と月を受け取る
  2. 指定の年のファイルを開く
  3. 指定の月のシートを取得する
  4. シートの入力データを取得して JSON のリストで返却する

writeLog(param) はなくてもいいのですがリクエストでエラーになったときに原因特定がむずかしいのでリクエストのパラメータを log シートに書き込むようにしています。

これでデータ取得の API は完成です。

データ登録

次にデータ登録です。データを JSON 形式のリストにして POST でリクエストでいいでしょう。
こんな感じのリクエストが来る想定です。

body

こんな感じのレスポンスが返ってくる想定です。レスポンスは不要なのですがデータの整合性を保つために登録後に再度スプレッドシートから値を取得して返却します。

実装はこんな感じです。

doPost(e) が POST リクエストを受ける場所なのでここでデータ登録の処理を行います。
全体的な処理の流れとしては下記です。

  1. POST でデータのリストを受け取る
  2. 各年月ごとにデータをグルーピングする
  3. 指定の年のファイルを開く
  4. 指定の月のシートを取得する
  5. シートのデータの最終行に新規データを追加する
  6. 入力したデータを JSON 形式で取得する
  7. 3~6 を繰り返す
  8. JSON 形式のリストを返却する

データ取得同様 writeLog(param) で log シートにリクエストを書き出しています。
これで登録 API も完成です。

API を公開する

作った API を iOS アプリで使えるように公開します。本来であれば「実行可能 API」を選択するのですがお手軽なので今回は「ウェブアプリ」を選択します(今回の家計簿アプリはあくまで自分用なのでそこまでセキュリティを気にする必要はないかなと)。

  1. デプロイ > 新しいデプロイ > 種類の選択でウェブアプリを選択する。
  2. アクセスできるユーザーを「自分のみ」から「全員」に変更する
  3. 右下のデプロイ押下
  4. URL が表示されるのでメモする

注意:わりと強い権限を持っているのでこの URL は他人に見られないように保管しましょう。

これで公開は完了です!

修正する場合は「新しいデプロイ」をすると URL が変わってしまうのでデプロイの管理 > 編集 > バージョンで新バージョンを選択してデプロイします。

API を試す

完成した API を試してみます。

まずはデータ取得です。以下 URL をブラウザに入力してみてください(example.com の部分は公開した URL に変えてください)。

添付のような表示になったら成功です。

2

次にデータ登録です。ターミナルを開いて以下コマンドを入力してみてください。

2024_家計簿ファイルのシート 1 にデータが追加されていれば成功です。

おわりに

これでサーバーサイドの実装は完了です!

今回は自分専用の家計簿アプリということでセキュリティ面をあまり考慮していません。ストアで公開する場合はもう少しセキュリティの考慮が必要です。指定のファイルが無かった場合や不正なリクエストの場合などエラー処理も今回は簡略化のため書いていません。

明日からはいよいよ iOS アプリを作っていきます。

Amazon.co.jp: 詳解! Google Apps Script完全入門 [第3版] : 高橋宣成: 本
Amazon.co.jp: 詳解! Google Apps Script完全入門 : 高橋宣成: 本

コメント

タイトルとURLをコピーしました