mcpField
M
makefile-for-telegram

makefile-for-telegram

github.com/htlin222クラウド・DevOps7835 回インストール3 週間前に更新
リポジトリ

makefile-for-telegram について

Bunを使うTelegram Botプロジェクト向けに、セットアップ、開発、テスト、macOS LaunchAgent管理用のMakefileを生成するスキルです。ローカル実行とバックグラウンドサービスの運用設定に使えます。

主な機能

  1. 01setup、run、devターゲットの生成
  2. 02LaunchAgentの起動・停止コマンド
  3. 03状態確認とログ表示コマンド
  4. 04install、test、typecheckターゲット
  5. 05プロジェクト固有の名前とパスを設定

活用シーン

  1. 01Telegram Botプロジェクトの初期設定
  2. 02macOSバックグラウンドサービスとしてBotを実行
  3. 03Bot開発用の簡易操作コマンドを追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/htlin222/dotfiles --skill makefile-for-telegram

インストール後、Claude Code で/makefile-for-telegramを入力して読み込まれたか確認します。

詳細

Telegram Bot 用の Makefile

LaunchAgent のバックグラウンドサービスに対応した、macOS 上で動作する Telegram Bot プロジェクト向けの本番環境対応 Makefile を生成します。

使用する場面

  • 新しい Telegram Bot プロジェクトをセットアップするとき
  • macOS の LaunchAgent サービス管理を追加するとき
  • Bot の起動、停止、再起動をすばやく実行したいとき
  • Bot をバックグラウンドサービスとして管理したいとき

生成される機能

クイックスタート
コマンド説明
make setup初回セットアップ(依存関係をインストールし、.env を作成)
make runBot をフォアグラウンドで実行
make dev自動リロードで実行(ウォッチモード)
バックグラウンドサービス(macOS LaunchAgent)
コマンド説明
make startバックグラウンドサービスをインストールして起動
make stopバックグラウンドサービスを停止
make restartバックグラウンドサービスを再起動
make statusサービスが実行中か確認
make logs標準出力ログを末尾まで表示
make logs-err標準エラーログを末尾まで表示
make uninstallバックグラウンドサービスを削除
開発
コマンド説明
make install依存関係をインストール
make testテストを実行
make typecheckTypeScript の型チェックを実行
make clean一時ファイルとログを削除

要件

生成する前に、プロジェクトに以下があることを確認してください。

  1. launchagent/com.{project-name}.plist.template にある LaunchAgent plist テンプレート
  2. .env.example にある 環境ファイルのテンプレート
  3. ランタイムとしての Bun(または npm/node 用に変更)

手順

ステップ 1:プロジェクト情報を収集する

ユーザーに以下を尋ねます。

  • プロジェクト名(plist のラベルに使用します。例:claude-telegram-ts)
  • ランタイムコマンド(デフォルト:bun run src/index.ts)
  • ログファイルのパス(デフォルト:/tmp/{project-name}.log)
ステップ 2:Makefile を生成する

以下を含む Makefile を作成します。

# {Project Name} - Makefile
# Usage: make <target>

SHELL := /bin/bash

PLIST_NAME := com.{project-name}
PLIST_PATH := ~/Library/LaunchAgents/$(PLIST_NAME).plist
PLIST_TEMPLATE := launchagent/$(PLIST_NAME).plist.template
LOG_FILE := /tmp/{project-name}.log
ERR_FILE := /tmp/{project-name}.err

.PHONY: help install setup run dev stop start restart status logs logs-err clean typecheck test uninstall

help:
	@echo "{Project Name}"
	@echo ""
	@echo "Quick start:"
	@echo "  make setup      - First-time setup (install deps, create .env)"
	@echo "  make run        - Run bot in foreground"
	@echo "  make dev        - Run with auto-reload (watch mode)"
	@echo ""
	@echo "Background service (macOS LaunchAgent):"
	@echo "  make start      - Install and start background service"
	@echo "  make stop       - Stop background service"
	@echo "  make restart    - Restart background service"
	@echo "  make status     - Check if service is running"
	@echo "  make logs       - Tail stdout logs"
	@echo "  make logs-err   - Tail stderr logs"
	@echo "  make uninstall  - Remove background service"
	@echo ""
	@echo "Development:"
	@echo "  make install    - Install dependencies"
	@echo "  make test       - Run tests"
	@echo "  make typecheck  - Run TypeScript type check"
	@echo "  make clean      - Remove temp files and logs"

install:
	bun install

setup: install
	@if [ ! -f .env ]; then \
		cp .env.example .env; \
		echo "Created .env from template"; \
		echo ">>> Edit .env with your credentials"; \
	else \
		echo ".env already exists"; \
	fi

run:
	bun run start

dev:
	bun run dev

test:
	bun test

typecheck:
	bun run typecheck

start:
	@if [ ! -f .env ]; then \
		echo "Error: .env not found. Run 'make setup' first."; \
		exit 1; \
	fi
	@echo "Installing LaunchAgent..."
	@mkdir -p ~/Library/LaunchAgents
	@export $$(grep -v '^#' .env | xargs) && \
	sed -e "s|/Users/USERNAME/.bun/bin/bun|$$(command -v bun)|g" \
	    -e "s|/Users/USERNAME/Dev/{project-path}|$$(pwd)|g" \
	    -e "s|USERNAME|$$(whoami)|g" \
	    -e "s|your-bot-token-here|$${TELEGRAM_BOT_TOKEN}|g" \
	    -e "s|<string>123456789</string>|<string>$${TELEGRAM_ALLOWED_USERS}</string>|g" \
	    $(PLIST_TEMPLATE) > $(PLIST_PATH)
	@echo "Created $(PLIST_PATH) with values from .env"
	@launchctl unload $(PLIST_PATH) 2>/dev/null || true
	@launchctl load $(PLIST_PATH)
	@echo "Service started. Check 'make logs' for output."

stop:
	@launchctl unload $(PLIST_PATH) 2>/dev/null || echo "Service not running"
	@echo "Service stopped"

restart:
	@launchctl kickstart -k gui/$$(id -u)/$(PLIST_NAME) 2>/dev/null || \
		(echo "Service not loaded. Run 'make start' first." && exit 1)
	@echo "Service restarted"

status:
	@if launchctl list | grep -q $(PLIST_NAME); then \
		echo "Service: RUNNING"; \
		launchctl list $(PLIST_NAME); \
	else \
		echo "Service: NOT RUNNING"; \
	fi

uninstall: stop
	@rm -f $(PLIST_PATH)
	@echo "Service uninstalled"

logs:
	@if [ -f $(LOG_FILE) ]; then \
		tail -f $(LOG_FILE); \
	else \
		echo "No log file yet. Start the service first."; \
	fi

logs-err:
	@if [ -f $(ERR_FILE) ]; then \
		tail -f $(ERR_FILE); \
	else \
		echo "No error log yet."; \
	fi

clean:
	rm -f $(LOG_FILE) $(ERR_FILE) 2>/dev/null || true
	@echo "Cleaned temp files"
ステップ 3:sed の置換をカスタマイズする

start ターゲットでは、plist テンプレートに一致する sed パターンが必要です。一般的なパターンは以下のとおりです。

  • your-bot-token-here → ${TELEGRAM_BOT_TOKEN}
  • 123456789 → ${TELEGRAM_ALLOWED_USERS}
  • /Users/USERNAME → $(whoami) で展開されるパス
  • その他の環境変数には、-e "s|pattern|replacement|g" を追加します
ステップ 4:検証する
make help
make setup
make run  # Test in foreground first
make start  # Then as service
make status

例

入力:「Telegram Bot プロジェクト用の Makefile を作成してください」

出力: 完全な Makefile を生成し、プロジェクト固有の値(名前、パス)を尋ね、plist テンプレートに基づいて sed パターンをカスタマイズします。

コメント