結論:Notionに作業ログを記録し、GASでスプレッドシートに同期、案件ごとの実質時給を自動計算するようにしました。結果、金額だけでは分からなかった「時間対効果の悪い案件」が具体的に見えるようになりました。
この記事でわかること
- なぜ金額ではなく「時給」で仕事を見るべきか
- Notionでの作業ログの記録方法
- スプレッドシートでの自動集計・時給換算の計算式
- 実際に集計してわかったこと
前回の記事で、Notionを原本にしてスプレッドシートへ自動同期する仕組みを作りました。今回はこの土台の上に、作業時間の記録と時給換算を積み上げます。
なぜ「時給」で自分の仕事を見るべきか
案件を選ぶとき、多くの人は「金額」だけを見ます。しかし同じ5万円の案件でも、10時間で終わるものと30時間かかるものでは、実質時給が3倍違います。金額ベースで案件を選び続けると、気づかないうちに時間対効果の悪い仕事が積み重なっていきます。これを可視化するのが今回のゴールです。
時間記録の設計
前回のルールどおり、記録の起点はNotionです。案件管理DBとは別に「作業ログ」という簡易データベースを作り、以下のプロパティを持たせました。
- 案件名(案件管理DBとのリレーション)
- 作業日
- 作業時間(分)
Notionには開始・終了時刻から自動で時間を計算するロールアッププロパティがないため、今回は作業後に分数を手入力する方式にしています。1エントリ1〜2秒で終わるので、これくらいの手間なら継続できると判断しました。
GASでの同期処理
前回作った同期の仕組みをそのまま流用し、「作業ログ」DBも同じようにスプレッドシートへ同期します。
const WORKLOG_DB_ID = 'ここに作業ログDBのIDを入れる';
const WORKLOG_SHEET_NAME = '作業ログ(同期)';
function syncWorklog() {
const results = queryNotionDatabaseById_(WORKLOG_DB_ID);
const sheet = getOrCreateNamedSheet_(WORKLOG_SHEET_NAME);
sheet.clearContents();
sheet.appendRow(['案件名', '作業日', '作業時間(分)']);
results.forEach(page => {
const props = page.properties;
const project = props['案件名']?.relation?.[0]?.id ? getRelatedPageTitle_(props['案件名'].relation[0].id) : '';
const date = props['作業日']?.date?.start || '';
const minutes = props['作業時間(分)']?.number ?? 0;
sheet.appendRow([project, date, minutes]);
});
}getRelatedPageTitle_は、リレーション先の案件ページIDからタイトルを取得する小さな関数です(Notion APIはリレーションを貼るとIDしか返さないため、別途ページ取得が必要になります)。
スプレッドシート側の集計・時給換算
同期した「作業ログ」シートと、前回の「案件一覧(同期)」シートを組み合わせて、案件ごとの実質時給を計算します。
| 項目 | 計算式(例) |
|---|---|
| 案件ごとの合計時間(分) | =SUMIF(作業ログ!A:A, A2, 作業ログ!C:C) |
| 合計時間(時間) | =B2/60 |
| 実質時給 | =案件一覧!C2/C2(金額 ÷ 稼働時間) |
つまずいたポイント:Notionのリレーションプロパティは、同期のたびにAPI呼び出し回数が増えます。案件数が多いと実行時間が伸びるので、Claude Codeと一緒に「関連ページのタイトルをキャッシュして再利用する」処理を追加し、無駄な呼び出しを減らしました。
実際に集計してわかったこと
2週間分のデータで集計した結果、案件によって実質時給に2倍以上の差があることが分かりました。金額だけを見ていたときは気づけなかった差です。まだサンプルが少ないので断定はできませんが、次にどの案件を優先すべきかの判断材料が1つ増えました。
よくある質問
作業時間の記録を忘れてしまいそうです。どう対策していますか?
まだ良い解決策はなく、正直に言うと数回記録漏れがありました。次回以降、リマインド通知の仕組みを検討する予定です。
分単位ではなく時間単位で記録してもいいですか?
問題ありません。計算式の分母を調整すれば同じように使えます。
案件が少ない場合でも意味がありますか?
データが少ないうちは参考程度になりますが、傾向を掴むためにも早めに記録を始めておくことをお勧めします。
次回は、この作業ログをもとに、月次の稼働実績を自動でレポート化する仕組みを作ります。
