📝

dusterを使ってLaravel用コードフォーマットCIを構築する

2024/08/18に公開

概要

dusterというLaravelに特化したコードフォーマットライブラリを使って、GitHub ActionsとhuskyによるコードフォーマットCIを導入する

dusterとは

Tighten社が公開しているLaravel用コードフォーマットライブラリ
https://github.com/tighten/duster

デフォルトで適用されるコードスタイル
https://github.com/tighten/duster/blob/3.x/style-guide.md

ここ人によって揺れるよな〜という部分を統一してくれる印象です。

手順

1. dusterのインストール

composer require tightenco/duster --dev

2. GitHub Actionsワークフローファイルの生成

./vendor/bin/duster github-actions

 What is the name of your primary branch? [main]:
 > main

 Which GitHub action would you like? [Lint only]:
  [0] Lint only
  [1] Fix and commit
  [2] Fix, commit, and update .git-blame-ignore-revs
 > 2

The resulting commit will stop any currently running workflows and will not trigger another.
Checkout Duster's documentation for a workaround.

 Do you wish to continue? (yes/no) [yes]:
 > yes


   Success  GitHub Actions added

以下ファイルが生成されます。

.github/workflows/duster-fix-blame.yml

name: Duster Fix

# Commits made in here will not trigger any workflows
# Checkout Duster's documentation for a workaround

on:
    push:
        branches: [ main ]
    pull_request:

jobs:
  duster:
    runs-on: ubuntu-latest

    permissions:
      contents: write

    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.ref }}
          repository: ${{ github.event.pull_request.head.repo.full_name }}

      - name: "Duster Fix"
        uses: tighten/duster-action@v3
        with:
          args: fix

      - uses: stefanzweifel/git-auto-commit-action@v5
        id: auto_commit_action
        with:
          commit_message: Dusting
          commit_user_name: GitHub Action
          commit_user_email: actions@github.com

      - name: Ignore Duster commit in git blame
        if: steps.auto_commit_action.outputs.changes_detected == 'true'
        run: echo ${{ steps.auto_commit_action.outputs.commit_hash }} >> .git-blame-ignore-revs

      - uses: stefanzweifel/git-auto-commit-action@v5
        with:
          commit_message: Ignore Dusting commit in git blame
          commit_user_name: GitHub Action
          commit_user_email: actions@github.com

push, pull_requestの対象ブランチは適宜変更する

3. huskyの導入

./vendor/bin/duster husky-hooks

 Which Husky hook would you like? [Lint only]:
  [0] Lint only
  [1] Fix and commit
 > 1

   INFO  Installing and building Node dependencies.

.huskyディレクトリ、lint-staged.config.jsが生成される

lint-staged.config.js

export default {
    "**/*.php*": [
        "vendor/bin/duster fix"
    ]
}

※ ローカルコミット時にフォーマット対象にするファイルや実行コマンドを適宜指定する

(optional) tailwindcssクラスの並び順フォーマット設定

prettierとpluginを使うと実現できる。
手順は以下ブログを参照
https://mattstauffer.com/blog/how-to-set-up-prettier-on-a-laravel-app-to-lint-tailwind-class-order-and-more/

参考

以下のLaracasts動画でdusterを知りました
https://laracasts.com/series/lets-build-a-saas-in-laravel/episodes/2

Discussion