diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 54b49da..381c56f 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -34,4 +34,4 @@ Please see [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/
 - [ ] I have commented my code, particularly in hard-to-understand areas
 - [ ] I have made corresponding changes to the documentation
 - [ ] My changes generate no new warnings
-- [ ] I have checked my code and corrected any misspellings
\ No newline at end of file
+- [ ] I have checked my code and corrected any misspellings
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 762c050..4602417 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -4,7 +4,7 @@ on:
   workflow_dispatch:
     inputs:
       zip:
-        description: 'The url to the zip file'
+        description: "The url to the zip file"
         required: true
 
 jobs:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index a178f1a..d1dd4eb 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -9,15 +9,15 @@ env:
   # MINIMUM_VERSION: The minimum version of Unity.
   MINIMUM_VERSION: 2019.4
   # EXCLUDE_FILTER: The excluded versions of Unity.
-  EXCLUDE_FILTER: '(2020.2.0|2021.1|2023.3)'
+  EXCLUDE_FILTER: "(2020.2.0|2021.1|2023.3)"
 
 on:
   workflow_dispatch:
-    inputs: 
+    inputs:
       usePeriodVersions:
-        description: 'Use the period versions (.0f1, .10f1, 20f1, ...).'
+        description: "Use the period versions (.0f1, .10f1, 20f1, ...)."
         required: false
-        default: 'true'
+        default: "true"
   push:
     branches:
       - develop
@@ -45,7 +45,7 @@ jobs:
         id: setup
         run: |
           echo "==== Target Unity Versions ===="
-          LATEST_VERSIONS=`npx unity-changeset list --versions --latest-patch --min ${MINIMUM_VERSION} --json --all`
+          LATEST_VERSIONS=`npx unity-changeset@latest list --versions --latest-patch --min ${MINIMUM_VERSION} --json --all`
           if [ "${{ inputs.usePeriodVersions }}" = "true" ]; then
             ADDITIONAL_VERSIONS=`npx unity-changeset list --versions --grep '0f' --min ${MINIMUM_VERSION} --json`
           else
@@ -86,7 +86,7 @@ jobs:
           git config user.name "GitHub Actions"
           git config user.email "actions@github.com"
           git merge origin/${{ github.event.pull_request.base.ref }} --no-edit
-        
+
       - name: 📥 Cache library
         uses: actions/cache@v4
         with:
@@ -109,13 +109,16 @@ jobs:
           UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
           UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
 
-      # - name: 🧪 Run tests
-      #   uses: game-ci/unity-test-runner@v4
-      #   timeout-minutes: 45
-      #   with:
-      #     customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }}
-      #     # unityVersion: ${{ matrix.unityVersion }}
-      #     customParameters: -nographics
-      #     checkName: ${{ matrix.unityVersion }} Test Results
-      #     githubToken: ${{ github.token }}
-      #     coverageOptions: "dontClear;generateHtmlReport;generateBadgeReport;pathFilters:+**/Packages/src/**;assemblyFilters:+<packages>,-*.Editor,-*.Test"
+      - name: 🧪 Run tests
+        uses: game-ci/unity-test-runner@v4
+        timeout-minutes: 45
+        with:
+          customImage: ghcr.io/mob-sakai/unity3d:${{ matrix.unityVersion }}
+          # unityVersion: ${{ matrix.unityVersion }}
+          customParameters: -nographics
+          checkName: ${{ matrix.unityVersion }} Test Results
+          githubToken: ${{ github.token }}
+        env:
+          UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
+          UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
+          UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
diff --git a/Packages/src/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
similarity index 53%
rename from Packages/src/CODE_OF_CONDUCT.md
rename to CODE_OF_CONDUCT.md
index e963f2b..d93a24c 100644
--- a/Packages/src/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -2,7 +2,10 @@
 
 ## Our Pledge
 
-We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
+We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for
+everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity
+and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion,
+or sexual identity and orientation.
 
 We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
 
@@ -29,45 +32,61 @@ Examples of unacceptable behavior include:
 
 ## Enforcement Responsibilities
 
-Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
+Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take
+appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
 
-Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
+Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
+issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for
+moderation decisions when appropriate.
 
 ## Scope
 
-This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
+This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing
+the community in public spaces. Examples of representing our community include using an official e-mail address, posting
+via an official social media account, or acting as an appointed representative at an online or offline event.
 
 ## Enforcement
 
-Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at sakai861104@gmail.com. All complaints will be reviewed and investigated promptly and fairly.
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible
+for enforcement at sakai861104@gmail.com. All complaints will be reviewed and investigated promptly and fairly.
 
 All community leaders are obligated to respect the privacy and security of the reporter of any incident.
 
 ## Enforcement Guidelines
 
-Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
+Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem
+in violation of this Code of Conduct:
 
 ### 1. Correction
 
-**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
+**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the
+community.
 
-**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
+**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation
+and an explanation of why the behavior was inappropriate. A public apology may be requested.
 
 ### 2. Warning
 
 **Community Impact**: A violation through a single incident or series of actions.
 
-**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
+**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including
+unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding
+interactions in community spaces as well as external channels like social media. Violating these terms may lead to a
+temporary or permanent ban.
 
 ### 3. Temporary Ban
 
 **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
 
-**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
+**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified
+period of time. No public or private interaction with the people involved, including unsolicited interaction with those
+enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
 
 ### 4. Permanent Ban
 
-**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior,  harassment of an individual, or aggression toward or disparagement of classes of individuals.
+**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate
+behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
 
 **Consequence**: A permanent ban from any sort of public interaction within the community.
 
@@ -76,9 +95,11 @@ Community leaders will follow these Community Impact Guidelines in determining t
 This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0,
 available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
 
-Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
+Community Impact Guidelines were inspired
+by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
 
 [homepage]: https://www.contributor-covenant.org
 
 For answers to common questions about this code of conduct, see the FAQ at
-https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
\ No newline at end of file
+https://www.contributor-covenant.org/faq. Translations are available
+at https://www.contributor-covenant.org/translations.
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..1a8422e
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,42 @@
+# Contributing
+
+## How to Contribute
+
+#### Code of Conduct
+
+This repository has adopted the Contributor Covenant as it's
+Code of Conduct. It is expected that participants adhere to it.
+
+#### Proposing a Change
+
+If you are unsure about whether or not a change is desired,
+you can create an issue. This is useful because it creates
+the possibility for a discussion that's visible to everyone.
+
+When fixing a bug it is fine to submit a pull request right away.
+
+#### Sending a Pull Request
+
+Steps to be performed to submit a pull request:
+
+1. Fork the repository.
+2. Clone the repository.
+3. Checkout `develop` branch.
+4. Develop the package.
+5. Test the package with the test runner (`Window > Generals > Test Runner`).
+6. Commit with a message based
+   on [Angular Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) as follows:
+   - `fix:` fix a bug
+   - `feat:` new feature
+   - `docs:` changes only in documentation
+   - `style:` changes only in formatting, white-space, etc
+   - `refactor:` changes only in code structure (extract method, rename variable, move method, etc)
+   - `perf:` changes only in code performance
+   - `test:` add or update tests
+   - `chore:` changes to the build process or auxiliary tools and libraries such as documentation generation
+
+7. Create a pull request on GitHub. Fill out the description, link any related issues and submit your pull request.
+
+#### License
+
+By contributing to this repository, you agree that your contributions will be licensed under its MIT license.
\ No newline at end of file
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..0962b93
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,7 @@
+Copyright 2018-2024 mob-sakai
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/Packages/src/CODE_OF_CONDUCT.md.meta b/Packages/src/CODE_OF_CONDUCT.md.meta
deleted file mode 100644
index b354851..0000000
--- a/Packages/src/CODE_OF_CONDUCT.md.meta
+++ /dev/null
@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 5f41710f6064b41fbaf51e156c625d77
-TextScriptImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Packages/src/CONTRIBUTING.md b/Packages/src/CONTRIBUTING.md
deleted file mode 100644
index 85176fb..0000000
--- a/Packages/src/CONTRIBUTING.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Contributing
-
-## How to Contribute
-
-#### Code of Conduct
-
-This repository has adopted the Contributor Covenant as it's
-Code of Conduct. It is expected that participants adhere to it.
-
-#### Proposing a Change
-
-If you are unsure about whether or not a change is desired,
-you can create an issue. This is useful because it creates
-the possibility for a discussion that's visible to everyone.
-
-When fixing a bug it is fine to submit a pull request right away.
-
-#### Sending a Pull Request
-
-Steps to be performed to submit a pull request:
-
-1. Fork the repository and create your branch from `develop`.
-2. If you have fixed a bug or added code that should be tested, add tests.
-3. Click `Window > Generals > Test Runner` to test
-4. Commit with a massage based on [Angular Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153).
-5. Fill out the description, link any related issues and submit your pull request.
-
-#### License
-
-By contributing to this repository, you agree that your contributions will be licensed under its MIT license.
diff --git a/Packages/src/CONTRIBUTING.md.meta b/Packages/src/CONTRIBUTING.md.meta
deleted file mode 100644
index b136aa3..0000000
--- a/Packages/src/CONTRIBUTING.md.meta
+++ /dev/null
@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 5f0ea36eaae4d4ed48433b77e190bd6d
-TextScriptImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Packages/src/README.md b/Packages/src/README.md
index 685e76f..33738b5 100644
--- a/Packages/src/README.md
+++ b/Packages/src/README.md
@@ -39,7 +39,7 @@ Enhance Unity UI (uGUI) with advanced soft-masking features to create more visua
     - [Component: RectTransformFitter](#component-recttransformfitter)
     - [Project Settings](#project-settings)
     - [Usage with Scripts](#usage-with-scripts)
-    - [Usage with TextMeshPro](#usage-with-textmeshpro)
+    - [Usage with TextMeshPro or Spine](#usage-with-textmeshpro-or-spine)
     - [Usage with Your Custom Shaders](#usage-with-your-custom-shaders)
     - [Usage with Canvas ShaderGraph](#usage-with-canvas-shadergraph)
     - [:warning: Limitations](#warning-limitations)
@@ -89,7 +89,7 @@ Enhance Unity UI (uGUI) with advanced soft-masking features to create more visua
   ![](https://github.com/user-attachments/assets/8ae038cd-b8da-4b83-ac48-15083fb2e3a6)
 - **TextMeshProUGUI Support**: Support `TextMeshProUGUI` by importing additional shaders.  
   It also supports TextMeshPro v3.2/4.0 (pre-release) and uGUI 2.0 (Unity 2023.2+/6.0+).
-  For details, please see [Support TextMeshPro](#usage-with-textmeshpro).  
+  For details, please see [Support TextMeshPro or Spine](#usage-with-textmeshpro-or-spine).  
   ![](https://github.com/user-attachments/assets/6e33fce4-526c-41af-9894-36da1ccb2f51)
 - **Better Editor Experience**: In the Scene view, objects outside the screen are displayed as stencil masks, allowing
   for more intuitive editing.  
@@ -97,6 +97,10 @@ Enhance Unity UI (uGUI) with advanced soft-masking features to create more visua
 - **Soft Maskable Shader Variant Stripping**: SoftMaskable shaders are automatically included at build time. You can
   remove unused shader variants.  
   ![](https://github.com/user-attachments/assets/e413a5a1-424e-4edb-9e5e-8639c0f3a967)
+- **Spine Support**: Support [Spine (SkeletonGraphic)](https://esotericsoftware.com/spine-in-depth) by importing
+  additional shaders.  
+  For details, please see [Support TextMeshPro or Spine](#usage-with-textmeshpro-or-spine).  
+  ![](https://github.com/user-attachments/assets/37f54634-0b52-4ba3-a322-22e0f45f60ee)
 
 <br><br>
 
@@ -122,7 +126,7 @@ _This package requires **Unity 2019.4 or later**._
 - To update the package, use Package Manager UI (`Window > Package Manager`) or run the following command with
   `@{version}`:
   ```
-  openupm add com.coffee.softmask-for-ugui@3.0.0
+  openupm add com.coffee.softmask-for-ugui@3.2.0
   ```
 
 ### Install via UPM (with Package Manager UI)
@@ -132,7 +136,7 @@ _This package requires **Unity 2019.4 or later**._
   `https://github.com/mob-sakai/SoftMaskForUGUI.git?path=Packages/src`  
   ![](https://github.com/user-attachments/assets/f88f47ad-c606-44bd-9e86-ee3f72eac548)
 - To update the package, change suffix `#{version}` to the target version.
-    - e.g. `https://github.com/mob-sakai/SoftMaskForUGUI.git?path=Packages/src#3.0.0`
+    - e.g. `https://github.com/mob-sakai/SoftMaskForUGUI.git?path=Packages/src#3.2.0`
 
 ### Install via UPM (Manually)
 
@@ -147,7 +151,7 @@ _This package requires **Unity 2019.4 or later**._
   ```
 
 - To update the package, change suffix `#{version}` to the target version.
-    - e.g. `"com.coffee.softmask-for-ugui": "https://github.com/mob-sakai/SoftMaskForUGUI.git?path=Packages/src#3.0.0",`
+    - e.g. `"com.coffee.softmask-for-ugui": "https://github.com/mob-sakai/SoftMaskForUGUI.git?path=Packages/src#3.2.0",`
 
 ### Install as Embedded Package
 
@@ -163,7 +167,8 @@ _This package requires **Unity 2019.4 or later**._
 
 Additional resources can be imported to extend functionality.
 
-- [Usage with TextMeshPro](#usage-with-textmeshpro).
+- [Usage with TextMeshPro or Spine](#usage-with-textmeshpro-or-spine).
+- [Usage with Canvas ShaderGraph](#usage-with-canvas-shadergraph).
 
 <br><br>
 
@@ -395,7 +400,7 @@ You can adjust the project-wide settings for SoftMaskForUGUI. (`Edit > Project S
     - The shader variant will be automatically added to the `Unregistered Variants` list.
 - **Upgrade All Assets For V3**: Upgrade all assets for v3.
     - ⚠️ This will apply the changes to all assets in the project.
-    - For details, please see [Upgrade All Assets For V3](#upgrade-all-assets-for-v3).
+    - For details, please see [Upgrade All Assets For V3](#-upgrade-all-assets-for-v3).
 
 <br><br>
 
@@ -410,18 +415,22 @@ softMask.softnessRange = new MinMax01(0.5f, 0.75f);
 
 <br><br>
 
-### Usage with TextMeshPro
+### Usage with TextMeshPro or Spine
 
-1. First, you must
-   import [TMP Essential Resources](https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.0/manual/index.html#installation)
-   before using.  
-   ![](https://github.com/user-attachments/assets/70653ccf-0b5e-4352-ac62-76bdd49c5f92)
+To use SoftMask with TextMeshPro or Spine, you need to import additional resources.  
+When a shader included in the samples is requested, an import dialog will automatically appear.  
+Click the `Import` button.
 
-2. Open the `Package Manager` window and select the `UI Soft Mask` package in the package list and click the
-   `TextMeshPro Support > Import` button.  
-   ⚠️ If you are using `Unity 2023.2/6000.0+` or `TextMeshPro 3.2/4.0+`, click the
-   `TextMeshPro Support (Unity 6) > Import` button instead.  
-   ![](https://github.com/user-attachments/assets/1fc9d0d8-e7be-4a67-b0f0-0529b29855d2)
+![](https://github.com/user-attachments/assets/9d4c5f71-1d1a-4f2c-a04e-4549e384fa36)
+
+Alternatively, you can manually import the resources by following these steps:
+
+1. Open the `Package Manager` window and select the `UI Soft Mask` package from the package list.
+2. Click the `Import` button for each sample to import the required resources.  
+    ![](https://github.com/user-attachments/assets/d3f83102-4617-4993-9f00-c0c7641633cd)
+    - TextMeshPro (Unity 2023.1 or earlier): `TextMeshPro Support`
+    - TextMeshPro (Unity 2023.2, 6000.0 or later): `TextMeshPro Support (Unity 6)`
+    - Spine: `Spine Support`
 
 3. The assets will be imported under `Assets/Samples/UI Soft Mask/{version}`.
 
@@ -522,7 +531,7 @@ Issues are incredibly valuable to this project:
 
 Pull requests offer a fantastic way to contribute your ideas to this repository.  
 Please refer to [CONTRIBUTING.md](https://github.com/mob-sakai/SoftMaskForUGUI/tree/develop/CONTRIBUTING.md)
-and [develop branch](https://github.com/mob-sakai/SoftMaskForUGUI/tree/develop) for guidelines.
+and [develop branch](https://github.com/mob-sakai/SoftMaskForUGUI/tree/develop).
 
 ### Support
 
@@ -548,4 +557,4 @@ Your support allows me to dedicate more time to development. 😊
 * GitHub page : https://github.com/mob-sakai/SoftMaskForUGUI
 * Releases : https://github.com/mob-sakai/SoftMaskForUGUI/releases
 * Issue tracker : https://github.com/mob-sakai/SoftMaskForUGUI/issues
-* Change log : https://github.com/mob-sakai/SoftMaskForUGUI/blob/main/CHANGELOG.md
+* Change log : https://github.com/mob-sakai/SoftMaskForUGUI/blob/main/Packages/src/CHANGELOG.md