こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • Unity UIでソフトマスクを使いたい
  • RectMask2DとSoftMaskForUGUIはどっちを使えばいい?
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    「ソフトマスク」とは以下の画像の通り 少しずつ透明になっていくマスク表現 です。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_0
    ↑の画像は女の子の顔を中心に円形のソフトマスクを適用したサンプルです。

    ※このイラストアセットは中世ファンタジーRPG風2Dキャラクターパックを使わせていただいてます。

    ゲームUIをデザインする際には表現の候補に入るのではないでしょうか。

    かつてのUnityはソフトマスク未対応で、UIデザイナーを長年悩ませてきました。しかし Unity2020以降は標準機能のRectMask2Dでソフトマスクを実装可能 です。Unity 6になった現在もこの仕組みは現役で使えます。

    ただしRectMask2Dは 矩形限定 という条件付き。円形など自由な形のソフトマスクには別の手段が必要です。

    本記事では5年前の初公開からアップデートを重ねてきた、uGUIでソフトマスクを作る方法を 2026年現在の定番3パターン に整理して紹介します。この記事を読むだけでソフトマスクは実現できると思いますので、ぜひ最後まで読んでみてください。

    矩形はRectMask2D、自由な形はSoftMaskForUGUI

    先に結論です。

    uGUIでソフトマスクを作る3つの方法

    ①RectMask2D(標準機能・矩形のみ)

    ②SoftMaskForUGUI(外部アセット・自由な形に対応)

    ③uGUIシェーダーを自作(学習・特殊要件向け)

    スクロールの境界をふわっと消したいなど 矩形のソフトマスク なら、標準機能の RectMask2D だけで完結します。

    円形マスクや任意形状のマスク画像を使いたい場合は、オープンソースの定番アセット SoftMaskForUGUI がおすすめです。

    ここからは順番に解説していきます。

    もくじ

    方法①ソフトマスク可能な「RectMask2D」の特徴4選

    RectMask2DとはUnityのコンポーネントの1種で、矩形型のマスクを作ることができます。

    👉 【保存版】Unityのコンポーネント徹底解説【Unity基礎】

    Unity2020でこのRectMask2Dにソフトマスク機能(Softness)が追加されました。

    元画像(マスクなし)ソフトマスク後
    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_1【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_1

    RectMask2Dコンポーネントを使うとこのようなソフトマスクが簡単に作れます。

    時間のない方は次の15秒ショート動画で確認してみてください。RectMask2Dの使い方を紹介しています。

    ここからは、文字でじっくりとRectMask2Dの使い方を解説していきます。

    RectMask2Dの特徴4選

    ①パフォーマンスの良いマスク

    ②マスク画像は不要

    ③マスク対象はRectMask2Dの子階層

    ④X・Y軸それぞれ具合の設定可

    特徴①パフォーマンスの良いマスク

    RectMask2Dとはマスクコンポーネントの1種です。特徴は マスク領域を四角形にしぼり、従来のMaskコンポーネントよりパフォーマンスが良い点

    ステンシルバッファを使わないため、ドローコールもマテリアルも増えません。

    特徴②マスク画像は不要

    RectMask2Dにマスク画像は不要です。なぜなら四角形に限定したマスク領域だからです。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_2

    マスクの範囲はRectTransformのWidth(幅)とHeight(高さ)です。

    特徴③マスク対象はRectMask2Dの子階層

    RectMask2DコンポーネントをアタッチしたGameObjectの子階層がマスク対象です。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_3

    子階層であれば複数のGameObjectもまとめてマスク可能です。

    特徴④X・Y軸それぞれ具合の設定可

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_4

    RectMask2Dコンポーネントの Softness の値を0以上にすると、X軸・Y軸それぞれグラデーション具合を調整できます。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_5

    スクロールリストにソフトマスクを適用する4ステップ

    ソフトマスクの使い所の1つは スクロールの境界表現 です。

    今までUIデザイナーから 「スクロールの境界をグラデーションできれいに消したい」 という要望が多くありました。

    RectMask2Dを使うことで実現可能です。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_6

    スクロールリストにソフトマスクを適用する4ステップ

    ①ヒエラルキーに「Scroll View」を追加

    ②Viewportの「Mask」を削除

    ③「RectMask2D」をAddComponent

    ④ソフトマスク具合の調整

    上記の手順でソースコードを書かずにソフトマスク付きのスクロールリストを作れます。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_7

    ステップ①ヒエラルキーに「Scroll View」を追加

    まずはヒエラルキー上で右クリック。 UI > Scroll Viewをクリックしましょう。

    ステップ②Viewportの「Mask」を削除

    作成されたScrollViewを調整していきます。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_8

    ViewportにはデフォルトでMaskコンポーネントがくっついています。この「Mask」を削除します。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_9

    ステップ③「RectMask2D」をAddComponent

    Maskを削除したGameObjectにRectMask2Dをアタッチします。
    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_10

    以上で準備は完了です。

    ステップ④ソフトマスク具合の調整

    最後に「Softness」でソフトマスクの消え方具合を調整します。
    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_11

    Softnessを調整することでマスクのグラデーション具合を調整可能です。

    ソフトマスク付きScrollViewの完成

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_12

    このようにソースコードを1行も書くことなく、ソフトマスク付きScroll Viewを作ることができるのです。

    ※本記事のエディタ画像はUnity2020当時の画面です。Unity 6でも手順は同じですが、見た目が多少異なる場合があります。

    Unityには難しいUI表現がいくつかあります。 「マスク表現」もその1つです。 Unity開発では重要なのは「簡単に実装することが難しいことを事前に知っておくこと」です。 次の記事ではUnityの難しい表現をまとめました。Unityエンジニアのほか、UIデザイナーもぜひ読んでUIデザインに生かしてみてください。

    RectMask2Dの3つの制限を知っておこう

    便利なRectMask2Dですが、使う前に知っておきたい制限が3つあります。

    RectMask2Dの3つの制限

    ①マスクは矩形のみ(円形は不可)

    ②Softnessは軸単位の設定

    ③自作シェーダーはSoftness対応が必要

    制限①マスクは矩形のみ

    RectMask2Dはあくまで四角形のマスクしか作れません。例えば 円形のマスクを作ることはできない のです。

    冒頭のような円形ソフトマスクを作りたい場合は、後述するSoftMaskForUGUIの出番です。

    制限②Softnessは軸単位の設定

    SoftnessはX軸・Y軸の2つの値で設定します。

    つまり 「下端だけぼかしたい」といった辺ごとの個別設定はできません。 Y軸のSoftnessを上げると、上端と下端の両方がぼけます。

    制限③自作シェーダーはSoftness対応が必要

    RectMask2DのSoftnessは、描画するシェーダー側の対応があって初めて機能します。

    Unity標準のUIシェーダーは対応済みなので通常は意識不要です。しかしUI用の 自作シェーダー を使っている場合、_UIMaskSoftnessX / _UIMaskSoftnessY を組み込んでいないとSoftnessが効きません。

    「RectMask2Dを付けたのにぼけない」というときは、まずシェーダーを疑ってみてください。

    方法②外部アセット「SoftMaskForUGUI」できれいなマスクを作る

    矩形以外のソフトマスクを作りたい場合の定番が「SoftMaskForUGUI」です。mob-sakai氏が開発しているオープンソースのアセットで、MITライセンスのため無料で使用できます。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_13
    ↑このとおり、とてもきれいなソフトマスクを表現できます。

    2026年8月時点の最新はv3系。 Unity 6(uGUI 2.0)にも対応しており、今も活発に更新が続いています。 長期運用するプロジェクトでも採用しやすい安心感があります。

    SoftMaskForUGUIのインストール方法

    SoftMaskForUGUIはパッケージで提供されているため、Package Managerでインストールするのがおすすめです。 メニューWindow > Package Manager からPackage Managerウィンドウを開きます。

    「+」ボタンから Add package from git URL を選択して、次のURLを入力してください。

    https://github.com/mob-sakai/SoftMaskForUGUI.git?path=Packages/src  
    

    v3からはURL末尾の ?path=Packages/src まで必要 です。昔の解説記事にあるリポジトリURLだけの指定ではインストールできないので注意してください。

    「Add」をクリックするとインストールは完了します。

    SoftMaskForUGUIの使い方

    では具体的なSoftMaskForUGUIの使い方を解説します。まずはマスクする側を親、マスクされる側を子という関係のGameObjectを作ります。
    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_14
    ↑上図のようにMaskがマスクする側、Imageがマスクされる側です。

    マスクする側には「SoftMask」と「Image」の2つのコンポーネントをセットします。標準のMaskコンポーネントは不要です。Imageコンポーネントにセットする画像がマスク画像になります。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_15
    今回使用するマスク画像は↑上の円形グラデーションにしました。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_16
    TextureTypeを「Sprite(2D and UI)」に設定します。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_17
    Imageの「Source Image」に設定してみましょう。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_18
    すると↑上図のとおりきれいなソフトマスクが作れます。

    マスクされる側に必要な「SoftMaskable」コンポーネントは、 v3では実行時に自動で付与される ため手動セットは不要です。

    ※インスペクタの画像は初公開当時(v1)のものです。「マスクする側にSoftMask+Image」という基本構造はv3でも同じですが、コンポーネントの設定項目は変わっています。

    SoftMaskForUGUIは多階層に対応

    SoftMaskForUGUIは「マスクされる側」の階層に依存せずマスクをかけられます。つまり子階層が深かろうときれいなソフトマスクを作れるのです。
    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_19
    上図のようにマスクされる側を3階層にするとどうなるでしょうか。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_20
    SoftMaskForUGUIは子階層の階層数に関係なく、きれいにソフトマスクを作ることができるのです。

    v3で追加されたMaskingShapeも便利

    v3では「MaskingShape」というコンポーネントが追加されました。

    マスク領域に対して形状を 足したり引いたり できる機能です。複数の形を組み合わせた複雑なマスクも、コンポーネントの追加だけで作れます。

    またSoftMaskableの設定によって、Maskの子階層にあるオブジェクトをマスク対象から除外することも可能です。チュートリアルUIなどで重宝します。

    とても便利で使いやすいSoftMaskForUGUIですが、処理を見る限り標準のマスクより負荷は上がります。使用する際は負荷計測しつつ使ってみてください。

    → SoftMaskForUGUIの公式リポジトリはこちら

    【前提知識】標準のMaskコンポーネントできれいなソフトマスクは作れない

    ここで「標準のMaskコンポーネントにマスク画像をセットすればいいのでは?」と思った方のために、Maskの仕様を確認しておきましょう。

    元画像マスク画像
    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_21【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_21
    image.pngmask.png

    ↑このように2つの画像を用意します。

    理想現実
    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_22【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_22

    理想と現実にはギャップあり。思ったのと違うものができあがります。

    MaskはON/OFF2択のみ

    Maskコンポーネントにグラデーション表現はありません。白から黒にかけてグラデーション画像を用意したとしても、 グレーだからといって半透明表現になりません。

    つまり Maskコンポーネントでソフトマスクは表現できない のです。

    マスクの縁が汚い

    もう少し、Maskコンポーネントの特徴を紹介します。Maskコンポーネントの マスクの縁は汚い です。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_23

    ご覧の通りガタガタです。アンチエイリアスが効かない ため曲線を持つ図形ではジャギが目立ちます。

    マスクの輪郭を 上から別の画像で隠す といった工夫でしのぐことが多いです。別の対策として マスク画像の解像度を高くする ことでかなり軽減します。

    しかし、ソフトマスクの根本解決にはなりません。だからこそRectMask2DやSoftMaskForUGUIを使うのです。

    方法③uGUI用のマスクシェーダーを自作する

    最後は自作派向けの方法です。uGUIシェーダーをカスタマイズしてソフトマスクを実現します。

    外部アセットへの依存を増やしたくない場合や、 シェーダーの仕組みを学びたい場合 におすすめです。

    uGUIのシェーダーを作成する際はUnity公式のビルトインシェーダーをダウンロードしてカスタマイズします。公式のシェーダーをコピーして最低限の変更を加える方針です。

    → Unityダウンロードアーカイブはこちら

    あなたが使っているUnityバージョンのシェーダー をダウンロードしましょう。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_24

    1. お使いのUnityバージョンのダウンロードメニューを開く
    2. Built in shaders をクリック

    ↑の動画の通りこの手順でシェーダーをダウンロードします。
    (動画はUnity2020当時の配布ページです。現在はページデザインが変わっていますが、Built in shadersをダウンロードする流れは同じです)

    使っているUnityのバージョンがわからない方は、こちらの記事を参考にしてみてください。

    uGUIシェーダーのカスタマイズ

    Unity公式からuGUIシェーダーをダウンロードできたら早速カスタマイズしていきます。カスタマイズするシェーダーは UI-Default.shader です。格納場所はこちら DefaultResourcesExtra/UI/UI-Default.shader

    UI-Default.shaderをコピーして、プロジェクトに追加しておきましょう。「UI-SoftMask.shader」という名前にしました。

    今回の実装で重要なのは次の2点です。

    1. Mask画像をセットできるようにする
    2. マスク画像のアルファ値を参照してカラー合成

    ステップ①Mask画像をセットできるようにシェーダーを修正

    Mask画像をインスペクタからセットできるようにシェーダーを調整します。
    Propertiesを調整 します。

    Properties  
    {
        // マスク画像を外からセットできるようにする  
        _MaskTex("MaskTexture", 2D) = "white"{}  
    

    Propertiesブロックに _MaskTex 変数を定義します。

    Pass  
    {
        // Mask画像を定義  
        sampler2D _MaskTex;  
    

    Passブロック中に Propertiesで定義した同名の _MaskTex 変数を定義します。

    マスク画像の用意

    今回のシェーダーで必要なソフトマスクを作る画像を用意します。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_25

    マスク画像はグレースケール(白黒の濃淡画像)で作ります。白から黒に向かって透明になるのです。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_26

    TextureのインスペクタでAlpha from Grayscale にチェックを入れましょう。すると、黒に近づくにつれて透明(アルファ:0)に変換されます。

    ステップ②マスク画像のアルファ値を参照してカラー合成

    シェーダーの中で最も重要なのは次の2行です。

    // マスク画像のカラーを取得  
    half4 maskCol = tex2D(_MaskTex, IN.texcoord);  
    // マスク画像の透明度を出力のカラーにセット  
    color.a = maskCol.a;  
    

    フラグメントシェーダーで取得したマスク画像のピクセル色が大事なポイントです。

    ピクセルごとのアルファ値にマスク画像のアルファ値をセット します。つまり 各ピクセルの透明度はマスク画像の透明度になる のです。

    【Unity6対応】uGUIできれいなソフトマスクを作る3つの方法_27

    このように きれいなソフトマスク を表現できました。


    uGUIシェーダーをカスタマイズすることは意外とあります。 基本機能では乗算しかできませんが、加算合成する場合はシェーダーをカスタマイズ します。次の記事ではUIの加算合成するシェーダーの作り方を紹介しています。本記事とあわせて読んでみてください。

    【補足】UI Toolkitのソフトマスク事情

    「これからのUnity UIはUI Toolkitでは?」と気になる方もいると思います。

    UI Toolkitのマスクは overflow: hidden などによる クリッピングが基本 です。グラデーションでふわっと消えるソフトマスクは、2026年8月時点で標準サポートされていません。

    つまり ソフトマスクを含むリッチなマスク表現をしたいなら、引き続きuGUIが有力 です。本記事の3つの方法は当分現役だと思います。

    Unity UIでソフトマスクを作る方法まとめ

    記事前半では標準機能である RectMask2Dのソフトマスク を紹介しました。

    簡単にソフトマスクを作れるRectMask2D

    ・RectMask2Dの子階層がマスク対象

    ・SoftnessでX、Y軸それぞれ設定可

    ・要望の多かったソフトマスク付きスクロールがデフォルトで実装可能

    ・プログラミングはいっさいなし

    また、記事後半ではRectMask2Dの使えない状況におけるソフトマスクの実装方法を紹介しました。

    RectMask2Dを使わないソフトマスク

    ・SoftMaskForUGUI(無料・Unity 6対応)を使う

    ・uGUIシェーダーをカスタマイズして自作

    矩形ならRectMask2D、自由な形ならSoftMaskForUGUI。

    2026年現在、uGUIのソフトマスクはこの使い分けで落ち着いています。SoftMaskForUGUIは今も更新が続いている、信頼できるアセットです。

    とりあえず、今Unityのソフトマスクで悩んでいる方がこの記事を読んで課題を解決できていると嬉しいです。もしこの記事を読んでいるのがデザイナーさんだった場合、ぜひUI実装担当のエンジニアに見せてあげてください。なにか実装のヒントになるかもしれません。

    この記事があなたのゲーム開発に少しでもお役に立てたら嬉しいです。

    今回使ったソースコード公開

    今回作成したシェーダーコード全文はこちらです。
    ご自由にお使いください。

    // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)  
    Shader "UI/SoftMask"  
    {
        Properties  
        {
            [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}  
            _Color ("Tint", Color) = (1,1,1,1)  
    
            _StencilComp ("Stencil Comparison", Float) = 8  
            _Stencil ("Stencil ID", Float) = 0  
            _StencilOp ("Stencil Operation", Float) = 0  
            _StencilWriteMask ("Stencil Write Mask", Float) = 255  
            _StencilReadMask ("Stencil Read Mask", Float) = 255  
    
            _ColorMask ("Color Mask", Float) = 15  
    
            [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0  
    
            _MaskTex("MaskTexture",2D) = "white"{}  
        }
    
        SubShader  
        {
            Tags  
            {
                "Queue"="Transparent"  
                "IgnoreProjector"="True"  
                "RenderType"="Transparent"  
                "PreviewType"="Plane"  
                "CanUseSpriteAtlas"="True"  
            }
    
            Stencil  
            {
                Ref [_Stencil]  
                Comp [_StencilComp]  
                Pass [_StencilOp]  
                ReadMask [_StencilReadMask]  
                WriteMask [_StencilWriteMask]  
            }
    
            Cull Off  
            Lighting Off  
            ZWrite Off  
            ZTest [unity_GUIZTestMode]  
            Blend One OneMinusSrcAlpha  
            ColorMask [_ColorMask]  
    
            Pass  
            {
                Name "Default"  
            CGPROGRAM  
                #pragma vertex vert  
                #pragma fragment frag  
                #pragma target 2.0  
    
                #include "UnityCG.cginc"  
                #include "UnityUI.cginc"  
    
                #pragma multi_compile_local _ UNITY_UI_CLIP_RECT  
                #pragma multi_compile_local _ UNITY_UI_ALPHACLIP  
    
                struct appdata_t  
                {
                    float4 vertex   : POSITION;  
                    float4 color    : COLOR;  
                    float2 texcoord : TEXCOORD0;  
                    UNITY_VERTEX_INPUT_INSTANCE_ID  
                };  
    
                struct v2f  
                {
                    float4 vertex   : SV_POSITION;  
                    fixed4 color    : COLOR;  
                    float2 texcoord  : TEXCOORD0;  
                    float4 worldPosition : TEXCOORD1;  
                    half4  mask : TEXCOORD2;  
                    UNITY_VERTEX_OUTPUT_STEREO  
                };  
    
                sampler2D _MainTex;  
                fixed4 _Color;  
                fixed4 _TextureSampleAdd;  
                float4 _ClipRect;  
                float4 _MainTex_ST;  
                float _UIMaskSoftnessX;  
                float _UIMaskSoftnessY;  
                sampler2D _MaskTex;  
    
                v2f vert(appdata_t v)  
                {
                    v2f OUT;  
                    UNITY_SETUP_INSTANCE_ID(v);  
                    UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);  
                    float4 vPosition = UnityObjectToClipPos(v.vertex);  
                    OUT.worldPosition = v.vertex;  
                    OUT.vertex = vPosition;  
    
                    float2 pixelSize = vPosition.w;  
                    pixelSize /= float2(1, 1) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));  
    
                    float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);  
                    float2 maskUV = (v.vertex.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy);  
                    OUT.texcoord = TRANSFORM_TEX(v.texcoord.xy, _MainTex);  
                    OUT.mask = half4(v.vertex.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_UIMaskSoftnessX, _UIMaskSoftnessY) + abs(pixelSize.xy)));  
    
                    OUT.color = v.color * _Color;  
                    return OUT;  
                }
    
                fixed4 frag(v2f IN) : SV_Target  
                {
                    half4 color = IN.color * (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd);  
                    half4 maskCol = tex2D(_MaskTex, IN.texcoord);  
                    color.a = maskCol.a;  
    
                    #ifdef UNITY_UI_CLIP_RECT  
                    half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw);  
                    color.a *= m.x * m.y;  
                    #endif  
    
                    #ifdef UNITY_UI_ALPHACLIP  
                    clip (color.a - 0.001);  
                    #endif  
    
                    color.rgb *= color.a;  
    
                    return color;  
                }
            ENDCG  
            }
        }
    }
    

    このシェーダーをUnityプロジェクトにコピー後、Materialにアタッチしてお使いください。

    マスク表現の次は描画順を理解しよう

    マスク表現を突き詰めると、必ず 描画順 の理解が必要になります。

    オオバが執筆した 「Unity描画順の教科書」 では、CanvasやSortingOrder、Shaderまで、Unityの描画順 を基礎から体系的に解説しています。

    描画まわりの理解を一度整理しておきたい方は、ぜひ確認してみてください。

    Unity描画順の教科書
    Unityの描画順を体系的に学べる入門書。ゲーム開発中に登場するさまざまなオブジェクトの描画順を思ったとおりに制御してみ...
    詳しくはこちら
    Unity描画順の教科書

    記事の内容やUnityゲーム開発について、個別で相談したい 方は「オオバの公式LINE」からご連絡ください。

    いまなら期間限定で、Unity開発を加速させる 無料特典 も配布中です! → 公式LINEに登録して特典を受け取る

    最後まで読んでいただきありがとうございました!
    すばらしいソフトマスクライフをお過ごしください。

    オススメ記事
    検証環境
    参考サイト