📝 はじめに
こんにちは、piyovateです。
今回は自分用のちょっとしたツール開発として、BMP → PNG 変換スクリプト を作り、それを Git + uv環境 で管理するようにしました。
普段から業務でGitを使っているものの、「自分用スクリプトをリポジトリ化」するのは初めての試み。
実際にやってみて感じたことやポイントをまとめておきます。
🎯 背景
- 画像を一括で変換する処理を手元で使いたかった
- どうせならGitで管理して育てていきたい
- 依存関係は乱雑にしたくないので、話題の uv を使って環境を構築
「小さな便利スクリプトでも、ちゃんとリポジトリにしておくと後で便利だよね」という実験です。
🛠 実装内容
ディレクトリ構成
format-converters/
converters/ # ソースコード
bmp_to_png.py
replace/ # 置き換え前(入力ファイル)
replaced/ # 置き換え後(出力ファイル)
README.md
pyproject.toml
uv.lock
.gitignore
bmp_to_png.py
from PIL import Image
from pathlib import Path
# ベースディレクトリ
BASE_DIR = Path(__file__).resolve().parent.parent
INPUT_DIR = BASE_DIR / "replace"
OUTPUT_DIR = BASE_DIR / "replaced"
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
# BMPとBMP大文字に対応
bmp_files = list(INPUT_DIR.rglob("*.bmp")) + list(INPUT_DIR.rglob("*.BMP"))
for src in bmp_files:
try:
rel = src.relative_to(INPUT_DIR)
dst_subdir = OUTPUT_DIR / rel.parent
dst_subdir.mkdir(parents=True, exist_ok=True)
dst = dst_subdir / (src.stem + ".png")
with Image.open(src) as img:
img.save(dst, "PNG", optimize=True)
print(f"✅ {src} -> {dst}")
except Exception as e:
print(f"⚠️ エラー {src}: {e}")
.gitignore
__pycache__/
*.pyc
.venv/
replaced/
replace/
.vscode/
Thumbs.db
.DS_Store
⚙ 環境構築(uv利用)
-
uv 初期化
uv init
-
Pillow 追加
uv add pillow
-
実行
uv run python converters/bmp_to_png.py
-
replace/
に.bmp
を置くと、replaced/
に.png
が出力されます。
📌 Git管理のポイント
-
管理対象
-
converters/
のスクリプト -
pyproject.toml
,uv.lock
-
.python-version
(バージョン固定) -
.gitignore
,README.md
-
-
管理対象外
-
replace/
(入力データ) -
replaced/
(出力データ) -
.venv/
(仮想環境)
-
🙌 おわりに
今回は BMP → PNG 変換というシンプルなスクリプトでしたが、
- Gitで管理することで育てやすくなる
- uvで依存関係がきれいに管理できる
というメリットを実感しました。
今後は音声(WAV → MP3)やテキスト(CSV → JSON)など、他の変換スクリプトも追加して「自分用便利ツール集」として育てていく予定です。