【Python】体重管理スクリプトを改良した

夏だ!体重管理だ!!

以前、「Notion API を使って体重管理」と題してブログ記事とプログラムを公開した。半年がたって思ったのは「パソコン起動して…コマンド打って…ってだれもやらねえだろ」ということだった。というわけで今回は Notion のデータベースで記録した体重遷移のグラフを Slack で通知する機能を設けた。

github.com

スクリプトの動作

(0. ユーザが Notion データベースに日付・体重を記録する)

  1. 月末にスクリプトが動く
  2. Notion データベースからひと月分の日付・体重を取得する
  3. グラフを作成して Slack で通知する

以下準備など。

準備1: Notion の体重管理データベースを作成する

Noiton でデータベースを作成する。データベースといっても身構えることはない。今回の用途では単なるエクセルの表みたいなものぐらいの認識で構わない。

まずはプロパティを編集する。タイトルプロパティの「名前」を「Date」に変更し、もう片方のプロパティも種類を「数値」にした上で「タグ」を「Weight」に変更する。

あとは日々体重を記録する。Date は「2023/07/08」という形式(yyyy/MM/dd とかいわれるやつ)にする。Weight の方は体重を数値のみで記録する(65.4 など)。ID はつけてもつけなくてもいい。

今回のスクリプトと Notion を連携させるには Notion のトークンが必要となるが、ここに書くと尺を取りすぎる気がするので各自調べてほしい。

準備2: 通知先の Slack チャンネル・bot を作成する

Slack のチャンネルはすぐ作れる。bot はまあまあゴニョゴニョする必要がある気がするがここに書くと尺を(略)。

準備3: サーバ内に配置する

このスクリプトはサーバ上で自動で実行されることを前提に作られているのでサーバを準備し、その中にスクリプトを配置して実行させる必要がある。「サーバなんてもってねーよ」というパンピーでも「GCP GCE」などと検索するといいことがあるかもしれない(要は Google 様がサーバを貸してくれるからそのサーバの無料枠内で運用するという感じ)。

ダウンロード

まずはサーバ内でダウンロードする。コマンドは以下の通り。自分の場合は変な場所に clone すると権限がうんぬんでよくわかんないッピ…となるのでだいたいホームディレクトリに clone している。

$ cd ~
$ git clone https://github.com/koi-7/weight-manager.git

設定ファイルの作成

中身をみると config ディレクトリになかに sample.ini ファイルがあるのが確認できる。

[Notion]
database_url = https://www.notion.so/xxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?v=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
token = secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

[Slack]
channel_url = https://xxxxx.slack.com/archives/xxxxxxxxxxx
token = xoxb-xxxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx

このファイル内の xxxxxx 等となっている部分を書き換えて config.ini として保存する。

Notion のデータベース URL はデータベースの から「ビューのリンクをコピー」を選択することで得られる。

Slack のチャンネル URL はチャンネルを右クリック →「コピー」→「リンクをコピー」とすることで得られる。

あとは Notion、Slack それぞれのトークンを記述する。

スクリプトの配置

スクリプトを配置する前に pip3 で Python3 のサードパーティライブラリをインストールする。インストールすべきライブラリは requirements.txt に記述してあるのでそれを利用する。

$ cd weight-manager/
$ pip3 install -r requirements.txt

スクリプトを配置する。自分は /opt/ 配下に置く派。

$ sudo mv weight-manager/ /opt/

準備4: cron を設定する

cron とはプログラムを自動実行させるやつである(なんていっていいかわかんないやつ)。

$ crontab -e

とコマンドを打つと設定ファイルを書けるようになるので例えば次のように記述する。

CRON_TZ=Asia/Tokyo

PYTHONPATH=$PYTHONPATH:/opt/weight-manager/
55 23 28-31 * * /usr/bin/test $(date -d '+1 day' +\%d) -eq 1 && /usr/bin/python3 -m weight-manager

このように記述することで毎月末の 23 時 55 分にスクリプトが動く。ここではタイムゾーンの設定をしているのでそれも反映させるために cron を再起動する。

$ sudo systemctl restart cron

以上で準備は終了である。あとは日々 Notion に体重を記録しつつ月末を待つだけである。

所感

このスクリプトを書いたばかりなので動作の所感は特にない。たぶん動く、というか月末にうまく動いてくれと願うのみである。スクリプトを書いての所感としては時間の計算が難しかった。yyyy/MM/dd で扱いたいのに yyyy-MM-dd でしか計算できないとか、型が合わないと当然計算できないとかでてんやわんやであった。でもまぁプログラミングってそんなもんよねーみたいな感想もあったりである。

ところで以下の画像が先月のグラフであるが……全然体重が減ってない。プログラムする時間でジム通った方がよかったな!