Customine(kintone)で週報アプリを作ってみました
はじめに
前回の記事で、Customineの機能であるJob Runnerの定期実行タスクが便利だと書きましたが、その便利さを改めて実感しています。Job Runnerを使えば、AWS LambdaやGoogle Cloud Functionsなどのサーバーレスサービスを準備することなく、簡単に定期実行タスクを実現することができます。そのため、これを利用した週報アプリを作成してみることにしました。前回の記事もぜひご一読ください。
やりたいこと
週報アプリで実現したい機能を簡単にまとめます。
1.週初めに、所属部門の全社員に週報登録の依頼(通知)をする
2.依頼(通知)を受け取った社員は、自分の週報に日々の作業を登録する
3.週終わりに、所属部門の部長に週報を提出(通知)する
具体的な作業
次にやりたいことを実現するための具体的な作業をまとめてみます。
Job Runnerの定期実行タスクに以下の設定をします。
実行間隔:毎週月曜日のAM.0:00時
実行内容:
週報アプリにレコードを作成します。
レコードには、社員マスタから取得した「氏名」「部署名」「部長」をコピーします。
所属部門の全社員分を繰り返して処理します。
リマインダーの条件通知に以下の設定をします。
通知のタイミング:レコード「作成日」のAM.9:00時
通知先:「氏名」に設定された社員
通知内容:『週報の作成をお願いします。』、レコードのURL
これで、毎週月曜日のAM.0:00時に、所属部門の全社員分のレコードが作成され、レコード作成日のAM.9:00時に、社員宛てにリマインダー通知が送信されます。次に通知を受け取った社員が週報を提出する手順をまとめます。
通知を受け取った社員は以下の手順で操作を行います。
レコードに日々の作業を入力して更新します。
日々の作業はサブテーブルに1日1行として1週間分を登録します。
週の最終日の作業入力後にレコードの状態を「完了」に変更します。
レコードの条件通知に以下の設定をします。
レコードの条件:状態が「完了」
通知先:所属部門の「部長」
通知内容:『週報の作成が完了しました。』、レコードのURL
アプリの構成
Job Runnerの定期実行タスクで所属部門の全社員を取得する必要がありますが、kintoneのグループ(ロール)や組織を取得するやり方は中々難しそうです。その為、あらかじめ(kintoneライセンスを持つ)社員を社員マスタに登録しておく方法で実現することにしました。
一般社員は社員マスタにアクセス不可にする
一般社員は週報アプリにアクセス可能にする
※「氏名」に設定されたレコードのみ閲覧、編集可
週報アプリの作成
入力項目は、下記サイトのOffice テンプレート > 業務報告書 (日報・週報)を参考にして作成しました。連絡事項や相談事項を追加する等して、各自でアレンジしてください。
作成日(日付):定期実行タスクで入力される
所属部署(文字列(1行)):定期実行タスクで入力される
氏名(ユーザー選択):定期実行タスクで入力される、作成日(AM.9:00)に通知するユーザーになる
題名(文字列(1行)):作成日より週報期間を自動計算(※1)
今週の目標(文字列(複数行))
今週の作業(サブテーブル):1行1日として作業を登録する
下記はテーブル内のフィールド
日付(日付)
曜日(文字列(1行)):日付から曜日を自動計算(※2)
業務内容(文字列(複数行))
備考(文字列(複数行))
今週の反省点(文字列(複数行))
来週の目標(文字列(複数行))
状態(ドロップダウン):「新規」(初期値)、「完了」の選択肢(※3)
部長(ユーザー選択):定期実行タスクで入力される。状態が「完了」時に通知するユーザーになる(※3)
※1「題名」の自動計算(作成日より週報期間を自動計算)
※2「曜日」の自動計算(日付から曜日を自動計算)
※3 週報アプリには、参考テンプレートの項目以外に、通知設定で利用する「状態」「部長」の項目を追加しました。
部門マスタの作成
部署名(文字列(1行))
部長(ユーザー選択):部署名の部門長を選択する
社員マスタの作成
所属部署(ルックアップ):部門マスタから「部署名」をルックアップでコピーする
部長(ユーザー選択):部門マスタから「部長」をルックアップでコピーする
役職(ドロップダウン):「管理職」、「一般社員」の選択項目
氏名(ユーザー選択):所属部署の社員を選択する
週報アプリの設定
一覧表示の設定
条件:「氏名」がログインユーザーのレコードのみ表示する
ソート:「作成日」を降順にする
今週の作業(サブテーブル)を表示項目に設定する
※展開すると一週間の作業を確認できる
レコードのアクセス権
このままでは、全社員のレコードを閲覧できてしまうので、下記サイトを参考にレコードのアクセス権の設定で自分が「氏名」となるレコードのみが表示させるように設定します。所属部門は閲覧可にするなど、各自で設定してください。
自分のレコードだけを表示させるアクセス権設定方法
また、レコードの閲覧権限を持たないユーザーには通知が飛ばないとありますので、「部長」が所属するグループ(上のSSでは「管理職」)にも閲覧権限を付与しています。
通知の設定
リマインダーの条件通:「氏名」に設定されたユーザーに作成日のAM.9:00に通知を送る
レコードの条件通知:「状態」を"完了"に変更すると、所属部門の「部長」に通知を送る
定期実行タスク
Job Runnerの定期実行タスクを利用して、社員マスタから取得した情報を元にして、週報アプリにレコードを追加する処理を作成しました。以下のようにアクションを設定しました。
アクション1:「kintone 接続設定を行う」で社員マスタに接続する
APIトークン:レコード閲覧
アクション2:「条件を組み立ててレコードを取得する」で社員マスタからローコード開発部の一般社員のみ取得する
アクション3:「kintone 接続設定を行う」で週報アプリ(業務週報)に接続する
APIトークン:レコード閲覧、レコード追加
アクション4:「レコードをもとにレコードを追加する」でアクション2で取得した情報(社員マスタ)を元に週報アプリにレコードを追加する
最後に毎週月曜日のAM.0:00時に動作するようにスケジュール設定を忘れずに行います。
定期実行タスクの作成は、最初は上手く動作せずにチャットサポートに色々と助けてもらいながら進めました。以下の点を意識するようにアドバイスをもらい無事に作成できました。
上手く動作しない場合、アクショングラフを活用する
アクションの実行順はアクションの配置ではなく「条件」で決まる
アクションを直接繋ぐ必要はなく、線の上に配置されていれば参照可能になる
完成
以上でCustomineを利用しての週報アプリを作成する方法の説明は終わります。最後に、実際に動作確認をしてみましょう。
Job Runnerでテスト実行
Job Runnerを実行する前に「テスト実行」を利用すると、実行時間を消費せず、料金を気にせずに動作確認が行えます。詳細は下記のサポートページを確認してください。
Job Runnerテスト実行の使い方
下記のSSはテスト実行の結果になります。問題なくレコードが追加されていることが確認できます。
Job Runnerで直ちに実行
それでは、次回月曜日のAM.0:00時にタスクが実行されるか楽しみに待ちましょう!…しかし、これでは困りますので、定期実行タスクを直ちに実行して本当にレコードが追加されるのか確認してみました。
週報アプリに部門の全メンバーのレコードが追加されることが確認できました。また、実行履歴を確認すると、きちんと月曜日のAM.0:00時頃に実行されていることがわかりました。
通知の確認
最後に、kintoneで通知が行われるかの確認をしてみます。月曜日のAM.9:00時頃にきちんと通知が届いていました!これで日々の業務を入力できますね。今週一週間も頑張りましょう。💪
おまけ1 サブテーブルの日付設定を自動化する
ここまでJSカスタマイズなしで進めて来ましたが、このままでは今週の作業(サブテーブル)に一週間分の日付をいちいち入力する手間が発生します。
そこで、下記を参考に日付設定を自動化するコードを書いてみました。
レコード追加時にテーブルへ初期値を入れる!
Luxon を使って kintone の日付や日時フィールドのフォーマットをカスタマイズする
下記のスクリプトは「作成日」を元に今週の作業(サブテーブル)の日付を自動入力しています。これで日付をいちいち入力する手間を省けますね。
※Customineのカスタマイズでも実現できそうです。
(() => {
'use strict';
kintone.events.on('app.record.edit.show', (event) => {
// リビジョン番号が1より大きい場合(最初の編集以外)は何もしない
if (event.record['$revision']['value'] > 1) return;
// 行の作成
const dateFieldValue = event.record.作成日.value;
const dateFieldDate = luxon.DateTime.fromISO(dateFieldValue);
const newRow1 = createValue_(dateFieldValue);
const newRow2 = createValue_(dateFieldDate.plus({ days: 1 }).toISODate());
const newRow3 = createValue_(dateFieldDate.plus({ days: 2 }).toISODate());
const newRow4 = createValue_(dateFieldDate.plus({ days: 3 }).toISODate());
const newRow5 = createValue_(dateFieldDate.plus({ days: 4 }).toISODate());
// Tableに初期値を定義する
event.record.今週の作業.value = [
newRow1,
newRow2,
newRow3,
newRow4,
newRow5,
];
return event;
});
const createValue_ = (day) => (
{
'value': {
'日付': {
'type': 'DATE',
'value': day,
},
'曜日': {
'type': 'SINGLE_LINE_TEXT',
'value': '',
},
'業務内容': {
'type': 'MULTI_LINE_TEXT',
'value': '',
},
'備考': {
'type': 'MULTI_LINE_TEXT',
'value': '',
},
},
}
);
kintone.events.on('app.record.create.show', function (event) {
const record = event.record;
// レコード再利用の場合はサブテーブルを初期化する
if (event.reuse === true) {
record.今週の作業.value = [];
}
return event;
});
})();
おまけ2 日報アプリにレコードをコピーする
サブテーブルの「日付」フィールドを有効活用し、日報アプリでカレンダー表示を実現しようと考えました。TISの「テーブルデータコピープラグイン」を利用すれば、週報アプリから日報アプリに簡単にレコードをコピーできます。kintoneのカレンダー表示機能を合わせて使えば、日々の業務をより簡単に把握できるようになるかも!?
日報アプリの作成
日付(日付)
曜日(文字列(1行))
氏名(ユーザー選択)
業務内容(文字列(複数行))
備考(文字列(複数行))
はじめに、週報アプリでプラグインの設定を行います。コピーボタンのラベルを「日報アプリへコピー」にします。
週報アプリのレコードの詳細画面に「日報アプリへコピー」ボタンが現れました。これをクリックします。
すると、「今週の作業」のコピーが実行されます。コピー完了のダイアログで「OK」ボタンをクリックすると、日報アプリに遷移します。
週報アプリの「今週の作業」(月~金の5行)が日報アプリのレコード5行として、コピーされました。
カレンダー表示に切り替えると、日付ごとの作業内容が把握しやすくなりますね!
おわり!
お問い合わせ
Kintone導入検討時のご相談から、導入後の利活用・定着化に至るまで、私たちは、お客様と「伴走」しながら思いを込めてサポートいたします。ご相談無料ですので、ぜひお気軽にお問い合わせください。
記事作成
kintone推進チーム