Skip to content

Packagist経由で配布するpre-commitテンプレート管理リポジトリを作成(PHP/JS/Docker対応) #19

@mg1986jp

Description

@mg1986jp

※この機能自体は gild-corporate-wordpress で実装するものではなく、課題管理の場所がないため暫定的にここでトラッキングします。

背景・目的

  • 各リポジトリの pre-commit に phpcs や lint を仕込むと人によってブレるため、テンプレートを一元管理して配布したい。
  • Packagist 経由で配布し、composer install/update 時に .git/hooks/pre-commit を自動で最新化する運用にしたい。

既存リポジトリとの関係

  • gild-inc/lib_php-fixed が既に存在し、PHP向けに pre-commit/pre-push を配布し、phpcs/phpcbf を実行する仕組みを提供している。
  • ただし PHP専用・テンプレート1種のみ。今回の課題はプロジェクト種別ごとにテンプレートを切り替える(PHP/JS/Dockerなど)仕組みを追加すること。

スコープ

  • 新規リポジトリ(名前は後決め)を作成し、pre-commit テンプレートと配布スクリプトを管理。
  • Packagist に登録する。
  • 利用側は composer 依存を追加するだけで、post-install/post-update で .git/hooks/pre-commit がコピーされる。

テンプレート初期対応範囲

  • php 用(phpcs/phpcbf など)
  • js 用(eslint/prettier などを想定)
  • docker 用(必要なら簡易 lint。不要なら空でも可)
  • テンプレート例: local-ci-php / local-ci-js / local-ci-docker

テンプレート選択ロジック(実装指針)

  1. .local-ci-template があれば、その内容(php/js/docker)を採用。
  2. 無ければ自動判定: composer.json があれば php / package.json があれば js / 両方ある場合は php > js(要相談で変更可)/ どちらも無ければスキップして警告。
  3. 判定できない・衝突時はコピーせず警告のみ。

フックの配置方法

  • composer.json の post-install-cmd / post-update-cmd で .git/hooks/pre-commit にテンプレートをコピーし、chmod +x を付与。
  • 既存 .git/hooks/pre-commit がある場合は上書きせず pre-commit.bak に退避(推奨)。上書き方針にするなら明記して実装。

フック内の実行対象

  • git diff --cached --name-only で変更ファイルのみに絞る(php/js いずれも)。
  • 自動整形(phpcbf/prettier 等)を行う場合、整形後に git add -u を実行するかはテンプレート側で定義。

エラーハンドリング

  • 判定不可/衝突時は警告を出して処理スキップ(非0終了させない)。
  • コピーに失敗した場合はメッセージを表示。

受け入れ条件

  • Packagist 登録済みで、composer install/update 時に post-install/post-update が走り、テンプレートが .git/hooks/pre-commit にコピーされる。
  • 選択ロジックに従ってテンプレートが選ばれること(php-only / js-only / 両方 / 何もなしのケースをテスト)。
  • 既存フックがある場合、定義した方針通りに扱われる(例: バックアップに退避)。
  • テンプレート内で変更ファイルのみを対象にチェック/整形する。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions