メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

การใช้ Composer Plugin

บทความนี้กล่าวถึงการใช้ Composer Plugin เพื่อเพิ่มขีดความสามารถของ Composer โดย Plugin สามารถติดตั้งได้ง่ายด้วย `composer require` และช่วยให้เราสร้าง Custom Com...

การใช้ Composer Plugin: เพิ่มพลังให้ Composer ของคุณ

ในบทก่อนหน้านี้ เราได้เรียนรู้วิธีการสร้าง Package Composer ของตัวเอง เพื่อแบ่งปันโค้ดและนำกลับมาใช้ใหม่ได้อย่างมีประสิทธิภาพ ในบทนี้ เราจะก้าวไปอีกขั้นด้วยการเรียนรู้วิธีการใช้ Composer Plugin เพื่อขยายขีดความสามารถของ Composer ให้ตอบโจทย์ความต้องการเฉพาะของคุณได้มากยิ่งขึ้น

Plugin Installation: ติดตั้ง Plugin ง่ายๆ ด้วย Composer

Composer Plugin ก็เหมือนกับ Package Composer ทั่วไป นั่นคือเราสามารถติดตั้งมันได้ง่ายๆ ด้วยคำสั่ง composer require ตัวอย่างเช่น หากเราต้องการติดตั้ง Plugin ที่ช่วยในการตรวจสอบ Code Style เราสามารถใช้คำสั่ง:

composer require friendsofphp/php-cs-fixer

หลังจากติดตั้งแล้ว Composer จะทำการ Register Plugin โดยอัตโนมัติ หาก Plugin นั้นถูกออกแบบมาอย่างถูกต้อง (ซึ่งเราจะพูดถึงในภายหลัง) Composer จะรับรู้ถึง Plugin และสามารถใช้งาน Functionality ที่ Plugin นั้นมอบให้ได้ทันที

Trade-off: การใช้ Plugin ช่วยให้เราไม่ต้องเขียนโค้ดเองทั้งหมด แต่ก็ต้องพึ่งพา Third-party Library ซึ่งอาจมีปัญหาเรื่อง Security หรือ Maintenance ในระยะยาว ดังนั้นจึงควรเลือก Plugin ที่น่าเชื่อถือและมีการดูแลอย่างสม่ำเสมอ

Custom Commands: สร้างคำสั่ง Composer ของคุณเอง

Plugin สามารถเพิ่ม Custom Commands ให้กับ Composer ได้ ทำให้เราสามารถรัน Task ต่างๆ ได้อย่างสะดวกสบายจาก Command Line ตัวอย่างเช่น Plugin ที่เราติดตั้งไปก่อนหน้านี้ (friendsofphp/php-cs-fixer) จะเพิ่มคำสั่ง php-cs-fixer ให้เราสามารถรัน Code Style Fixer ได้โดยตรงจาก Composer

composer php-cs-fixer fix

เหตุผลเชิงออกแบบ: การสร้าง Custom Commands ช่วยให้เราสามารถ Automate Task ที่ซ้ำซากจำเจได้ เช่น การ Compile Assets, การ Generate Documentation หรือการ Deploy Application

ตัวอย่าง: สมมติว่าเราต้องการสร้าง Plugin ที่ช่วยในการ Generate Migration Files สำหรับ Database เราสามารถสร้าง Custom Command ชื่อ generate-migration ที่รับ Parameter เป็นชื่อ Migration และสร้างไฟล์ Migration ให้เราโดยอัตโนมัติ

แนวปฏิบัติที่ดี: ควรตั้งชื่อ Command ให้สื่อความหมายและสอดคล้องกับ Functionality ที่ Command นั้นมอบให้ และควรมี Documentation ที่ชัดเจนเกี่ยวกับการใช้งาน Command

Event Listeners: ตอบสนองต่อเหตุการณ์ต่างๆ ใน Composer

Composer มี Event System ที่อนุญาตให้ Plugin ทำงานเมื่อมีเหตุการณ์ต่างๆ เกิดขึ้น เช่น ก่อนหรือหลังการ Install Dependencies, ก่อนหรือหลังการ Update Dependencies หรือเมื่อมี Error เกิดขึ้น

เหตุผลเชิงออกแบบ: Event Listeners ช่วยให้ Plugin สามารถทำงานใน Background โดยไม่ต้องรบกวนการทำงานหลักของ Composer ตัวอย่างเช่น Plugin ที่ใช้สำหรับ Logging สามารถ Listen ไปยัง Event pre-command-run เพื่อบันทึกว่า Command อะไรกำลังจะถูกรัน หรือ Listen ไปยัง Event post-command-run เพื่อบันทึกผลลัพธ์ของ Command นั้น

ตัวอย่าง: สมมติว่าเราต้องการสร้าง Plugin ที่ส่ง Notification ไปยัง Slack เมื่อมีการ Update Dependencies เราสามารถ Listen ไปยัง Event post-dependencies-update และส่ง Notification ไปยัง Slack API

วิธีการทำงาน: Plugin จะต้อง Register Event Listeners ในไฟล์ composer.json โดยระบุชื่อ Event และ Class ที่จะ Handle Event นั้น ตัวอย่างเช่น:

{
  "name": "my-vendor/my-plugin",
  "type": "composer-plugin",
  "require": {
    "composer-plugin-api": "^2.0"
  },
  "autoload": {
    "psr-4": {
      "MyVendor\\MyPlugin\\": "src/"
    }
  },
  "extra": {
    "class": "MyVendor\\MyPlugin\\Plugin"
  },
  "config": {
    "allow-plugins": {
      "my-vendor/my-plugin": true
    }
  },
  "scripts": {
    "post-dependencies-update": [
      "MyVendor\\MyPlugin\\EventHandler::onPostDependenciesUpdate"
    ]
  }
}

ในตัวอย่างนี้ เราได้กำหนด Script post-dependencies-update ที่จะถูกรันหลังจาก Dependencies ถูก Update Script นี้จะเรียก Method onPostDependenciesUpdate ใน Class MyVendor\MyPlugin\EventHandler

Trade-off: การใช้ Event Listeners อาจทำให้ Code Base ซับซ้อนขึ้น และอาจ Debug ยากกว่าการเขียนโค้ดแบบ Synchronous ดังนั้นจึงควรใช้ Event Listeners อย่างระมัดระวังและมี Documentation ที่ชัดเจน

แนวปฏิบัติที่ดี: ควรแยก Logic ของ Event Listener ออกจาก Logic หลักของ Plugin เพื่อให้ Code สามารถ Maintain ได้ง่าย และควรมี Unit Test สำหรับ Event Listeners เพื่อให้มั่นใจว่ามันทำงานได้อย่างถูกต้อง

สรุป

Composer Plugin เป็นเครื่องมือที่มีประสิทธิภาพที่ช่วยให้เราสามารถขยายขีดความสามารถของ Composer ได้อย่างง่ายดาย ไม่ว่าจะเป็นการเพิ่ม Custom Commands หรือการตอบสนองต่อเหตุการณ์ต่างๆ ใน Composer การใช้ Plugin ช่วยให้เราสามารถ Automate Task ที่ซ้ำซากจำเจ และปรับแต่ง Composer ให้ตอบโจทย์ความต้องการเฉพาะของเราได้มากยิ่งขึ้น

ในบทถัดไป เราจะเรียนรู้เกี่ยวกับการ Config Composer สำหรับ Project ขนาดใหญ่ เพื่อให้มั่นใจว่า Composer ทำงานได้อย่างมีประสิทธิภาพและสามารถจัดการ Dependencies จำนวนมากได้อย่างราบรื่น

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る