【Python】オブジェクト指向で作るメンタルログ2

IT

こんにちは!Yuinaです。

以前こちらでご紹介したメンタルログアプリから少し修正をしてみました。

以前まではPythonファイルを実行すると、すぐに「メンタルルーティン」が自動的に開始され、続いて3つの機能が順番に表示されていましたが、今回の修正ではユーザーが3つの機能の中から希望の機能を選択できるようにしました。

構造はこんな感じです!

環境はこちらです。

・言語:Python3

・エディタ:VSCODE

・OS:MAC(M3チップ)

では、よろしくお願いいたします!

コードはこちらです。

main.py

import sys
import json
import os

from routines.negative_reflection import NegativeReflectionRoutine
from routines.present_moment import PresentMomentRoutine
from routines.breathing import BreathingRoutine
from routines.gratitude import GratitudeRoutine
from logger import MentalLogger

def load_settings():
config_path = os.path.join("config", "settings.json")
if not os.path.exists(config_path):
print(f"❌ 設定ファイルが見つかりません: {config_path}")
return {
"default_emotion": 3,
"routine_order": ["breathing", "gratitude"]
}
with open(config_path, "r", encoding="utf-8") as f:
return json.load(f)

def main():
# コマンドライン引数からroutine_setを取得
routine_set = None
for arg in sys.argv: # sys.argv の中を1つずつ見て
if arg.startswith("--routine_set="): # "--routine_set=" で始まる文字列を探して
routine_set = arg.split("=")[1] # "=" の右側だけ取り出して routine_set に入れてる。

# ルーティンセットごとに順番を切り替え
routine_orders = {
"breathing_gratitude": ["breathing", "gratitude"],
"breathing_negative": ["breathing", "negative_reflection"],
"breathing_present": ["breathing", "present_moment"],
}

if routine_set not in routine_orders:
print("⚠️ ルーティンセットが指定されていないか不正です。デフォルトの呼吸+感謝ルーティンで実行します。")
routine_set = "breathing_gratitude"

settings = load_settings()
#routine_ordersは、routine_setを使って引き継がれている
settings["routine_order"] = routine_orders[routine_set]

print("🧠 メンタルルーティン開始!")

logger = MentalLogger("mental_log.db")

routine_map = {
"breathing": BreathingRoutine,
"gratitude": GratitudeRoutine,
"present_moment": PresentMomentRoutine,
"negative_reflection": NegativeReflectionRoutine,
}

for r_name in settings.get("routine_order", []):
cls = routine_map.get(r_name)
if not cls:
print(f"⚠️ 未知のルーティン名: {r_name}")
continue
routine = cls()
result = routine.run()
emotion = result.get("emotion", settings.get("default_emotion", 3))
note = result.get("note", "")
logger.save_log(emotion, note)

logger.close()
print("✅ メンタルルーティン終了!")

if __name__ == "__main__":
main()

scripts/mental_launcher.sh

#!/bin/bash

CYAN='\033[0;36m'
NC='\033[0m'

clear
echo -e "${CYAN}🧠 メンタルサポートツール ランチャー${NC}"
echo "==============================="
echo "1: メンタルルーティンを実行する"
echo "2: ログを見る"
echo "3: 終了する"
echo "==============================="
read -p "👉 選択肢を数字で入力してください: " choice

cd "$(dirname "$0")"
cd ..

#ツールを選択する機能
case $choice in
1)
echo "🧘‍♀️ メンタルルーティンを開始します..."
echo "実行するルーティンを選んでください:"
echo " 1) 呼吸 + 感謝"
echo " 2) 呼吸 + ネガティブ感情整理"
echo " 3) 呼吸 + 今ここ"
read -p "👉 ルーティン番号を入力: " routine_choice

#ツールを選択する機能
case $routine_choice in
1)
echo "呼吸 + 感謝ルーティンを実行します..."
#実行
python3 main.py --routine_set=breathing_gratitude
;;
2)
echo "呼吸 + ネガティブ感情整理ルーティンを実行します..."
#実行
python3 main.py --routine_set=breathing_negative
;;
3)
echo "呼吸 + 今ここルーティンを実行します..."
#実行
python3 main.py --routine_set=breathing_present
;;
*) #1,2,3以外
echo "⚠️ 無効な選択肢です。メインメニューに戻ります。"
;;
esac
;;
2)
echo "📖 ログを表示します..."
#実行
python3 show_logs.py
;;
3)
echo "👋 またね!"
exit 0 #正常終了は0、異常終了は1
;;
*)
echo "⚠️ 無効な選択肢です。1〜3を選んでください。"
;;
esac

そのほかのファイルは修正なしです。こちらに載ってます。

実行結果はこちらになります。

🔽初期画面

🔽1)呼吸+感謝

🔽2)呼吸+ネガティブ感情整理

ログもしっかり取れています。

🔽2.ログを見る

まとめ

Pythonファイルに.shファイルを組み合わせることで

できることも増えてきました。

変数の引き継ぎの部分がややこしいので

しっかり学習してもっと面白いアプリが作れるようになりたいです。

ありがとうございました!

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