ダレモノガレラレナイ明美～クソアプリ制作日記vol.1～

# はじめに
人は忘れる生き物です。
明日の予定、昨日のご飯、お薬の時間、孫の顔、帰る場所、自分の名前、、、
筆者は職場のロッカーのカギを閉め忘れることが多々あるため、リマインダーを作ることにしました。

# コンセプト
ただのリマインダーツールならこの世に星の数ほどあります。
が、ここは学習を兼ねて世界に一つだけのオリジナルリマインダーツールを作ってみましょう。
1. 指定した時刻になったらウィンドウを表示。
2. 画像ともにメッセージが表示される。
というシンプルな作りにしたいと思います。


～～～～～～～～～～～～～イメージ～～～～～～～～～～～～～～～
（そろそろ定時か、今日も疲れたな…）
パッ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406309/d4c202b8-525c-23f6-5eeb-e2a5e010e2fb.png)

～～～～～～～～～～～～～～～～～～～～～～～～～～～～～～～～
# 実装手順①（ソースコード）
```Reminder.py
import tkinter
from PIL import Image, ImageTk

root = tkinter.Tk()
root.attributes("-topmost", True)
root.minsize(width=500, height=500)
root.title('リマインダー')

# ウィジェットの作成
frame1 = tkinter.Frame(root, width=500, height=500, bg="black")
frame1.propagate(False)
frame1.pack()

#画像配置
#お好きな画像をjpgで同階層に保存してください。
img = Image.open("(画像の絶対パス)")  #絶対、絶対パスにしてください　タスクスケジューラで実行できなくなります
original_size = img.size
resize_width = 400
img_resized = img.resize((resize_width, int(original_size[1]*(resize_width/original_size[0])))) # 画像の縦横比を保ったままサイズ変更。元の高さ×横幅の拡大比。<https://3pysci.com/pillow-2/>参照
yamena_jpg = ImageTk.PhotoImage(img_resized)
image = tkinter.Label(frame1, image=yamena_jpg, bg="black")
image.pack()

# テキスト配置
text = tkinter.Label(frame1, text='カギ閉めな～', fg="white", bg="black", font=("MSゴシック", "50", "bold"))
text.pack()

root.mainloop()
```
ここまで作ったら、お好きな画像を同階層に配置。

コマンドプロンプトより実行できることを確認します。
```
>python Reminder.py
```

# 実装手順②（ビルド）
そのまま実行してもいいのですが、せっかくなので
pythonのコードをビルドしexe化し、それをタスクスケジューラで定期実行するように設定しましょう。

ビルドにはpyinstallerを使うのですが、
様々な外部ライブラリをインストールしている筆者の環境でこのままビルドするとめちゃんこ重くなってし~~まった~~まうので、
「pipenv」でビルド用の環境を用意します。
こうすると作業ディレクトリごとに最低限のライブラリのみをインストールした環境が作れるので便利です。
（詳しく知りたい方は調べてください。）

※ここでpipenvのパスを通しておくと後々楽です。
```pipenvインストール
>pip install pipenv
```
先ほどReminder.pyと画像を格納したフォルダをコピーして「〇〇ビルド用」とでもリネームしておいてください。
```
>cd ~/〇〇ビルド用
```
端末にインストール済みのpythonの中からバージョンを指定します。
```
pipenv --python 3.9
```
今回必要な外部ライブラリはImageのみですので、pillowをインストールします。
（よく考えたらこれも標準ライブラリで代用できますが、まあ今回はお勉強ということで。）
```
~/〇〇ビルド用>pipenv install pillow
```

ではようやくpyinstallerでビルドです。
```
>pip install pyinstaller
```
```
>cd ~/〇〇ビルド用
```
```
~/〇〇ビルド用>pyinstaller Reminder.py --onefile –-noconsole
```
すると「〇〇ビルド用」の中に「dist」というフォルダができており、その中に
「Reminder.exe」が生成されているはずです。

# 実装手順③（定期実行の設定）

「タスクの作成」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406309/fce58038-bcc4-1e5e-dbfb-3df684a55f07.png)
名前はご自由に。念のため「最上位の特権で実行する」にチェックを入れておきましょう。
「トリガー」タブより実行時刻を設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406309/99c9c8a1-61b3-eb8f-e379-9178dbe5c428.png)
「操作」タブより…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406309/b0ae4e66-302e-889a-9be6-6e07d77dc1bd.png)
先ほどビルドしたexeファイル（もしくは.pyファイル）のパスを設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406309/34e57fd8-324e-43ca-8873-e5d09d6abf1f.png)

すると指定した時刻にプログラムが実行されるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406309/6a1f73f3-7ae1-4927-3ce6-4b81ed63f9ff.png)

Diggy-MO'に言わせてもいいですね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406309/86d5beea-1a6e-bbf3-3c69-a660ea70691d.png)


以上です。


# 参考にさせていただいた記事
https://3pysci.com/pillow-2/