こちらはゆるWeb勉強会@札幌 Advent Calendar 2023の15日目の記事です。
皆さんは日記を書いていますか?
私は過去に「5年日記」なる紙の日記を購入しましたが、過ぎ去った4年分がスッカスカです!あと1年あります(笑)
実は、PC作業ばかりで字を書かなくなったこともあり、字が下手です。
ミミズのような文字になるので、イマイチ書いていてテンションが上がらず、日記は3日坊主になります。
アプリなら字の汚さを気にしなくて良いので、この機会に作成することにしました。
作成するもの
日記アプリを作成します。
要件
とにかくハードルを下げたいです。
- 入力のハードルが低い
- 無料で利用できる
- 簡単に作成できる
使用技術
今回は、Googleスプレッドシートをもとにアプリが作成できるGoogle Cloud の 「AppSheet」を使用します。
※AppSheetの料金プランを見ると無料がなさそうに見えますが、個人利用なら無料で使用できるようです。
作成の流れ
- スプレッドシートを作成する
- 拡張機能から、AppSheetを作成する
- スマートフォンでAppSheetのアプリを表示する
アプリ作成の手順
スプレッドシートの作成
日記の記録場所となるスプレッドシートを作成します。
1行目にアプリ作成に使用するラベルを入力します。(A1が空白だとエラーになるようですので、A1から記入します)
AppSheetの作成
初期設定
スプレッドシートのメニュー[拡張機能]→[ApSheet]→[アプリを作成]を選択します。
認証の設定などを行います。Googleアカウントを選択します。
基本的に次へを選択していきます。
[Your ◯◯◯ app is ready!]の画面で[Customize with AppSheet]ボタンをクリックします。
AppSheetの画面が表示されます。
左の[Data]をクリックし、設定をしていきます。
アプリのプレビュー
画面の右にある◀(または▶)をクリックすると、プレビュー画面が開閉します。
こちらで表示や動作の確認が出来ます。
AppSheetの設定
公式の設定項目の説明はこちらをご参照ください。
- KEYの設定
データを識別するためのKEYを設定します。
今回は年月日と時間にチェックを入れ、上部の[Save]ボタンをクリックして保存します。
KEYは1つのみ指定可能のようです。
AppSheet側で_ComputedKey項目を自動で作成してくれました。
- 表示の設定
UIDは管理用のため、非表示にします。SHOW?のチェックを外します。
ビューの設定
アプリで表示する際の画面を編集します。
左のメニューから[Views]を選択します。
View nameをアプリのメニューとして表示したい名前に変更します。
アプリでは下のタブに表示されます。
- Sort by
表示順を指定します。日時の降順(新しい日付→古い日付)にします。 - Group by
項目のグルーピングを指定します。年月日ごとにまとめるようにします。
リストに表示する項目を指定します。
Primary headerがタイトル、Secondary headerがタイトル下に表示される項目です。
プレビューを見てみます。大分出来てきました。
カレンダービューの追加
リスト表示するビューを設定したため、次にカレンダー表示するビューを追加します。Views画面で[Add View]をクリックします。
補完され、Add calendar view with 年月日...が表示されていれば、そちらをクリックします。
表示されない場合は[Create a new view]ボタンをクリックします。
View name(アプリのタブに表示される名前)は「カレンダー」にします。
日記と表示する日付を紐づけます。
Start date、End dateを「年月日」、Descriptionを「出来事」にします。
プレビューで内容を確認します。
見た目の変更
左メニューの[Settings]で設定を変更できます。
今回は[Theme & Brand]メニューで色とアプリのロゴを指定しました。
リスト選択を設定
感情欄はテキストではなく、用意したリストから入れるように変更します。
スプレッドシートに「リスト」シートを追加します。
AppSheetの左メニューで[Data]を選択し、Data画面で[+(Add new Data)]ボタンをクリックします。
Add data画面で[Google Sheets]を選択します。
対象のファイル名と、シート名を指定します。[Add This Table]ボタンをクリックします。
追加されるとTOPページに遷移するため、Dataアイコンをクリックします。
シート1の感情行の一番左にあるアイコンをクリックし、編集画面を開きます。
Typeを[Ref]、Source Tableを[リスト(追加したリストシートのData)]を選択します。
プレビューでリストをクリックすると、選択リストが表示されるようになりました。
アプリの使用
アプリ作成後、認証に使用したGmailアカウントにメールが届いています。
[Install アプリ名]のボタンをクリックします。
アプリが開きます。
以降は、以下の方法でアプリを開くことができます。
- AppSheetのアプリをインストールし、Googleアカウントでログイン
- AppSheetのリンクから開く
感想
30分もかからずアプリができてしまいました。
アプリでは、表示、新規作成、編集、削除、検索ができます。
一から作成する場合は、それなりに時間がかかる機能です。良い世の中になりました。
(おまけ)リマインダーの設定
3日坊主防止のため、リマインダーを設定します。
Automation機能の定期実行を使用する予定でしたが、デプロイが必須で有償(2023年12月現在)となるため、今回はApps Scriptを使用します。
(ここでは少しコードを追加します)
スプレッドシートのメニューから[拡張機能]-[Apps Script]を選択します。
以下のコードを貼り付けます。貼付け後、[保存]ボタンをクリックします。
/**
* 日記アプリのリマインダー
*/
function checkAndSendNotification() {
// スプレッドシートのIDを指定
var spreadsheetId = "Your sheet ID";
// シートの名前を指定
var sheetName = "シート1";
// 送信先のメールアドレスを指定
var sendAddress = 'Your email address';
// App SheetのURL
var appLink = 'Your App Sheet URL';
// 検索する列名
var targetCol = '年月日';
// 現在の日付を取得
var currentDate = new Date();
// スプレッドシートを開く
var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
// シートを取得
var sheet = spreadsheet.getSheetByName(sheetName);
// 年月日の列を検索
var headerRow = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var colNum = findColumnNumber(headerRow, targetCol);
// シートの年月日列のデータを取得
// Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)
var dateColumnData = sheet.getRange(2, colNum, sheet.getLastRow() - 1, 1).getValues();
// 当日の日付の文字列を取得(年月日のフォーマットに合わせて調整が必要)
var formattedCurrentDate = Utilities.formatDate(currentDate, "JST", "yyyy/MM/dd");
// 当日の日付が含まれたレコードがあるか判定
var hasRecordForToday = dateColumnData.some(function (row) {
if (row[0]) {
var targetDate = Utilities.formatDate(row[0], "JST", "yyyy/MM/dd");
return targetDate === formattedCurrentDate;
}
});
// 当日の日付のレコードがない場合
if (!hasRecordForToday) {
// 通知メッセージを作成
var notificationMessage = `日記を書きませんか?\n${appLink}`;
// メッセージを送信(例: メール送信)
MailApp.sendEmail({
to: sendAddress,
subject: `${formattedCurrentDate}の日記が未記入です`,
body: notificationMessage,
});
}
}
/**
* 指定した文字を含む列番号を返す
*/
function findColumnNumber(header, searchStr) {
var columnIndex = header.indexOf(searchStr) + 1;
return columnIndex;
}
トリガーを追加します。
左メニューの[トリガー]を選択し、[トリガーを追加]ボタンをクリックします。
設定し、[保存]ボタンをクリックします。
項目 | 値 |
---|---|
実行する関数を選択 | checkAndSendNotification (先程作成した関数名) |
実行するデプロイを選択 | Head(デフォルト) |
イベントのソースを選択 | 時間主導型 |
時間ベースのトリガーのタイプを選択 | 日付ベースのタイマー |
時刻を選択 | 午後8時~9時 |
エラー通知設定 | 毎日通知を受け取る |
リマインドのメールが届くようになりました。
参考資料
AppSheetの設定については、こちらの書籍を元に作成しました。
AppSheet以外にもNotionやAdobe Expressの内容もありお得です。
私は校閲で参加させていただいています^^