自動で草を生やすスクリプト
毎日コードを書くことを決めたものの、コミットするのがめんどくさくなり、ふと自動で草生やしたら楽じゃないか?と思ったのでスクリプトを書きました草の意味を考えるとあんまりよくないですが、お試しでやってみました
フォルダ構成は以下
リポジトリを作成したら、クローンして以下の構成を作ってください。
D:.
│ daily_commit.py
│ README.md
│
└─.github
└─workflows
daily_commit.yml
ファイルの作成
daily_commit.py
毎日自動でコミットを行うPythonスクリプトを作成しますこのスクリプトは、何らかのファイルを更新(または新規作成)し、コミット、プッシュします
import os
import datetime
import random
import subprocess # subprocessモジュールをインポート
def create_and_commit():
# ユーザー名とメールアドレスを取得
git_username = os.environ.get('GIT_USERNAME')
git_useremail = os.environ.get('GIT_USEREMAIL')
if not git_username or not git_useremail:
print("Error: GIT_USERNAME and GIT_USEREMAIL environment variables must be set.")
return
# タイムスタンプを使ってユニークなファイル名を作成
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
filename = f"daily_update_{timestamp}.txt"
# コミットメッセージ
commit_message = f"Daily automated commit: {timestamp}"
try:
# 既存のファイルに追記するか、新しいファイルを作成
with open("daily_log.txt", "a") as f:
f.write(f"Commit on {timestamp}: {random.randint(1, 100)}\n")
# Gitコマンドの実行
# subprocess.run() を使用して、より安全にコマンドを実行
subprocess.run(["git", "config", "user.name", git_username], check=True)
subprocess.run(["git", "config", "user.email", git_useremail], check=True)
subprocess.run(["git", "add", "."], check=True)
subprocess.run(["git", "commit", "-m", commit_message], check=True)
subprocess.run(["git", "push", "origin", "main"], check=True) # もしデフォルトブランチがmasterならmasterにしてください
print(f"Successfully committed: {commit_message}")
except subprocess.CalledProcessError as e:
print(f"Git command failed: {e}")
print(f"Error output: {e.stderr.decode()}")
except Exception as e:
print(f"An error occurred: {e}")
if __name__ == "__main__":
create_and_commit()
daily_commit.yml
ここではGitHub Actionsを使うにあたって、必要な設定を書いていきます使う人によって変更されるパラメータは以下です
・schedule:コミットプッシュする時間をUTCで設定します。この例では日本時間の9時に実行されます
・GIT_USERNAME:Gitに登録している名前をつけます
・GIT_USEREMAIL:Gitに登録してるメールアドレスをつけます
・token:後述するトークンの名前をつけます。ここでは仮でGH_TOKENとつけました。
# .github/workflows/daily_commit.yml
name: Daily Automated Commit
on:
# 毎日午前0時(UTC)に実行されます。
# 日本時間(JST)で午前9時に実行したい場合は、このまま '0 0 * * *' を使用します。
# 他の時間にしたい場合は、UTCとの時差を考慮して調整してください。
# 例:日本時間の午後5時(JST 17時)に実行したい場合、UTCは8時なので '0 8 * * *' となります。
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
# GitHubトークンを設定してください
token: ${{ secrets.GH_TOKEN }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Run daily commit script
run: python daily_commit.py
env:
# ここをあなたのGitHubユーザー名とメールアドレスに置き換えてください
GIT_USERNAME: TKWebSE
GIT_USEREMAIL: writetechcode@yahoo.co.jp
諸々のフォルダやファイルを作成出来たらコミットプッシュします。
Gitの設定
GitHub Actionsで自動実行できるようにします GitHub Actionsを使えばPCを常に起動しなくても自動で実行してくれるので、電気代節約になります1.Personal Access Token (PAT) の生成
GitHubにログインし、Setting画面のDevelopperSettingsを開きます
そこで下記のPersonal access tokenのtokens(classic)を選択
次に下記を入力します
・Note (メモ): daily-commit-tokenなど、用途がわかる名前
・Expiration (有効期限): 毎日実行することを考えると、No expiration(期限なし)または十分な期間(例: 30日)を設定
・Select scopes (スコープ): repo のチェックボックスにフルアクセス権(すべてのサブオプションも含む)をつけます。これにより、リポジトリへの読み書き権限が付与されます
これで、Generate token ボタンを押下。
表示されたトークンをコピーしておきます(この画面を閉じると、二度と表示されません)
2. GitHub Secrets への追加
生成したPATをGitHubリポジトリのSecretsとして保存します。これにより、トークンが直接コードに露出せず、安全に利用できますまず、GitHubリポジトリにアクセスし、リポジトリのSettingsを開きます
開いたら、左側のメニューで Secrets and variables をクリックし、Actions を選択。New repository secret ボタンを押下
下記画面にて、以下を入力します
・Name:任意のわかりやすい名前(上のymlのtokenでつけたGH_TOKENをここでつけてます)
・Secret:先ほどコピーしたPATをここに貼り付け
入力したらAdd secretを押下して設定完了
動作確認
このスクリプトがちゃんと動くか試してみますリポジトリに移動し、Actionsタブを押下。左側にあるDailyAutomatedCommitを押下。
Run Workflowで実行します
実行後にコミット履歴を見ると、コミットされてました!
翌日確認しても、コミットされてました!