LINEがLIFFアプリをミニアプリに統合すると発表したので違いを調べてみた

## はじめに

タイトルの記事を置いておきます。

https://developers.line.biz/ja/news/2025/02/12/line-mini-app/

私は基本的にLIFFで色んなプロジェクトを作成することが多いのですが、上の発表があった時にミニアプリで実装してみたことが無いなと思ったのでドキュメントを読みつつLIFFとの差分などをまとめていきます。

## ドキュメント

https://developers.line.biz/ja/docs/line-mini-app/discover/introduction/#what-you-can-do-with-the-liff-app-or-mini-app

## 差分１：外部ブラウザで開いた時の表示の仕方

個人的にはメリットだと感じています。

|            | LIFF                                 | ミニアプリ                                                                |
| -------------- | ------------------------------------ | ------------------------------------------------------------------------- |
| 外部ブラウザで   | 基本的に開くことができる             | 開こうとするとLIFF上で動作させるための動線（QRやボタン）を自動的に表示 |

実際LIFFを使用する場合、外部ブラウザで動作させてもLIFFを使うメリットが得られないのでliff.isInClient()などを用いてLIFF上で動作しているかを判断してLIFF上でなければLIFF上に誘導するという機能を実装する場面も多くあります。

LIFFは、LIFF URLをLINEのアプリケーションの外に設置した場合、そのリンクをクリックするユーザーが使用している端末が最後にブラウザで開いたかLINEアプリで開いたかなどの情報から意図せず外部ブラウザで開かれてしまって、liff.init()などが実行できないという問題に直面することもありますので上記の対策は基本的に必須となります。

その対策の実装をこちら側がせずとも標準的に実装されるようになったのは個人的にはとてもありがたいです。外部ブラウザでも問題ないというウェブアプリの場合はLIFFをそもそも使う必要がないのでは？とも思いますので基本的にデメリットとなる場面は非常に少ないのかなというのが個人的な意見です。

↓外部ブラウザで開かれた場合のスマホの表示（ダークモードだと手の部分の表示が崩れるみたいです）

![LINE_browser.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3734276/f156c784-8807-4e13-a0cf-3b620fc0a963.png)


![スクリーンショット 2025-03-17 17.47.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3734276/03714a91-8b19-4cdb-83f4-233ba355ed31.png)



## 差分２：アクションボタンの非表示

### まずアクションボタンとは？
下の赤丸で囲まれているボタンのことです。

![IMG_0205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3734276/4e96cb55-d70a-4457-a44a-1b5938daaf47.png)

LIFF アプリではこれを「モジュールモード」という設定で表示させないようにすることができました。

これに関しては個人的にデメリットを感じています。
表示非表示を切り替えられる状況から強制的に表示されるようになってしまったので基本的にメリットを上げることは難しいというのもありますが。


#### デメリット：LIFF URLをクローズドなURLとして扱うことができなくなった

以前のモジュールモードをオンにした時はLIFF URLをユーザーが知る術のない状態にすることが可能でした。なので、こちらが意図した動線からのみの流入に限定することができました。（リッチメニューからのみ、FlexMessageのボタンからのみ etc）

そして、なので特定の条件を満たした人のみがアクセスできるページという状況を作ることが可能でしたが、それが出来なくなってしまいました。

## 差分３：同一チャネルへの複数のLIFFアプリの追加

これは別に手間が少し増えるだけで、そんなに影響はないのかなと思っています。

ただ、企業によっては特定のプロジェクトや、何かしらの関連性をもとに幾つかのLINE ログインチャネルでまとめて複数のLIFFアプリを管理している場合も想定されるのでそのような場合は今後自分たちで管理していかないといけません。

非常に多くのLIFFアプリを開発していくことを考えるとLINE Developersの画面にチャネルが乱立してしまって、管理がしにくくなるのは間違いありません。

毎回チャネルを作成する手間と、情報を入力する手間などが増えますが、一つのMessagingAPIチャネルに対して複数のミニアプリチャネルを紐づければ、複数のLIFFアプリを同一チャネルに作成した場合のLIFFと同じような状況に出来るので、やはり手間の問題かと思います。

## 差分４：認証を受けないと出来ないことが結構ある

LIFFは認証を受けていないことで制限される機能というのは基本的には、なかったように思います。
そもそもアカウント自体の認証というものはあってもLINE ログインチャネル自体に認証というもの自体がなかった気がしますのでこれは大きな違いかと思います。

以下のカスタム機能のページを見ていただくのが一番手取り早いのですが、それぞれ未認証ミニアプリと認証済ミニアプリで出来ること出来ないことがまとめられています。

https://developers.line.biz/ja/docs/line-mini-app/discover/custom-features/

### 認証されないと使えない機能一覧
- サービスメッセージ
- Custom Path
- チャネル同意のプロセスをスキップする
- ユーザー端末のホーム画面にLINEミニアプリへのショートカットを追加する
- LINE Profile+

### 従来のLIFFとしての機能を求めて作成するのであれば機能的に不足はない

私がドキュメントを読んだ限りだと、LIFFの頃はできたのに、未認証ミニアプリだとできない項目というのは「モジュールモード」を除いて特に無いように感じました。

LIFF APIは全て使用できますし、フロントエンド側でUIDと、AccsessTokenの取得もできるのでバックエンド側でのUIDの取得も問題なくできるかと思います。

なので、認証していないとできないことが多くありますが、それはLIFFアプリとしてではなく、ミニアプリとしてできない機能が多くあるというイメージです。

## 差分５：権限許可のフロー

LIFFの時はDevelopersで設定したscopeの権限を最初の画面で一括取得していましたが、ミニアプリでは最初にopenidの権限を必ず要求して、そのほかの権限に関しては必要になったタイミングで許可画面をハーフのLIFFのような画面で随時許可を行う形になるそうです。（下記のリンクの画面の「 友だち追加オプションによる友だち追加について」の上にある画像を見ると実際の動きがわかります。）

ですが、その実装をこちら側で行う必要はありません。
例えば、liff.getProfile()を実行するタイミングでprofileに対する許可画面が自動的に表示されるようになっています。

https://developers.line.biz/ja/docs/line-mini-app/develop/channel-consent-simplification/#detailed-workflow

## 差分６：パーマネントリンク

アクションボタンからシェアした際は、自動的にそのページのパーマネントリンクが作成されるそうですが、自分でアクションボタンなどを作成してリンクを仕込むような場合には、以下の式でパーマネントリックを作成するそうです。

簡単にまとめると、Pathとパラメータを含めたLIFF URLというイメージで私は理解をしました。今までのLIFF URLでもPathやパラメータを使用できていたので差分なのか？というのが個人的な意見ですが、ドキュメントにはパーマネントリンクという名称でまとめられていたためシェアのURLを作成する場合はお気をつけいただければと思います。

```sh
LIFF URL + (LINEミニアプリページのURL - エンドポイントURL) = パーマネントリンク
```

## 差分７：チャネルステータスの切り替えがない

### LIFFアプリ
LIFFアプリは作成したら、「開発中」のチャネルステータスとなっており権限設定で許可したユーザーしかそのLIFFアプリにアクセスする事はできません。「開発中」→「公開」とすることでLIFF URLを知っているすべてのユーザーがアクセス可能になります。

### ミニアプリ
ミニアプリは、チャネルを作成した瞬間に3つのアプリが作成されます。「開発用」「審査用」「本番用」の３つです。以下のような役割に分かれており、ステータスをこちらで切り替える事はなく、両方の状態が最初から用意されているようなイメージです。

| 環境　　| 説明                                                                                |
| ------ | ----------------------------------------------------------------------------------- |
| 開発用 | LIFFの開発中の環境とほぼ同じ                                                        |
| 審査用 | 開発用とほぼ同じだが、LINEヤフー株式会社の審査担当者が見るための環境らしい|
| 本番用 | LIFFの公開中の環境と同じ   

## 差分８：特定の条件下で外部ブラウザでも限定的なLIFF APIが使用可能

↓外部ブラウザでも使用可能情報

https://developers.line.biz/ja/docs/line-mini-app/discover/custom-features/#redirect-non-line-users-to-browser

> 日本、タイ、台湾以外のLINE未使用ユーザーはウェブブラウザでLINEミニアプリのサービスを利用できるようになります。

どの国かというのは、ブラウザの言語設定から取得しているようです。

ですが、例えば英語の学習のためにスマホの言語設定や、その他ブラウザなどの設定を、英語に設定している方もいらっしゃるかと思います。それに、普通に海外の方が日本で生活をしておりLINEがスマホの中に入っているケースもあります。このような場合はどちらが優先されるのでしょうか？

ドキュメント上には明言はされていませんでしたが、日本、タイ、台湾以外の設定でLINEがインストールされている場合、LINEで開かれることがあります。ということでした。

> ただし、ユーザーの端末にLINEアプリがインストールされている場合は、LINEアプリが起動してLINEミニアプリに遷移する場合があります。

その他にも添付した「外部ブラウザでも使用可能情報」のドキュメントに、外部ブラウザでも使用可能なLIFF APIが一覧で表示されていましたので興味のある方はご確認いただければと思います。

## まとめ
実際はもっと多くの差分があります。

認証されるとどのようなことができるようになるかなどは、しっかりと確認しておいた方が良いと思います。

その他にも様々な差分がありますが、今回はミニアプリを作るためというよりも、ミニアプリチャネルで従来のようなLIFFアプリを作成しようとした場合に変わってきそうだという部分をメインにまとめました。

公式ドキュメントを読んで自分のプロジェクトに必要な部分は随時ご確認ください。

## ミニアプリ移行に対する個人的感想

ミニアプリに対して思ったことは、LINE的にはLIFFを短期的に使用してもらうのではなく継続的に長期間使用をしてもらいたいのかなという感想を抱きました。

ホーム画面へのアイコン追加や、認証のプロセス、認証すると使用可能になる機能、CustomPath。既存のLIFFには無い様々な機能全てが継続的に利用する場合に欲しい機能や、継続的に利用する場合のメリットとなるようなことが多いと感じます。

個人的には、どのようなLIFFを作成するかによってメリットが全く無い場合もあれば、多くの恩恵を受けることができる場合もあるなと思いました。

### メリットがあまりない場合（個人の見解）

- 短期的に使用されるページの場合
- すでに外部ブラウザで開かれた時の動線が確立されている場合
- LIFFアプリへの動線を特定の動線からのみに限定したい場合

### メリットがある場合（個人の見解）

- 長期的な利用を想定している場合
- モバイルオーダーアプリ
- 予約アプリ
- 順番待ち・呼び出し
- デジタル会員証
- インバウンド対応を想定し、もし海外のLINEをインストールしていないユーザーにはブラウザ上で操作してもらうことを想定している場合

他にもあるとは思いますが、ざっと思いついた部分を書かせていただきました。

## 乗り換えても問題ないの？認証したほうがいいの？

基本的にはミニアプリでの作成が推奨されていますので、ミニアプリで作成していくべきだとは思います。ですが、モジュールモードが必須の場合のみLIFFを使用せざるを得ないのかなと思います。

個人的にも微妙だなと思う図ですが、以下のようなイメージを持っています。

![スクリーンショット 2025-03-19 15.10.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3734276/21c7e78b-4694-48dd-9859-9411da4b2fd9.png)

認証済みの時の、サービスメッセージの機能にフォーカスして最後分岐していますが、認証されると使用できるようになる機能全般が当てはまる質問になるかなと思います。

:::note warn
サービスメッセージは、ご使用のLINE公式アカウントから送信されるものではなく、様々なミニアプリ共有で「LINEミニアプリ お知らせ」のLINEアカウントから送信されますのでご注意ください。
:::

私はドキュメントをざっと読んで、こんな感じで判断すればいいのではないかなと個人的に考えていますが、要件に合わせて自分でドキュメントを見てしっかりと選びましょう。

## まとめ

現時点では、推奨されていなければ引き続きLIFFで作成していくので問題ないしデメリットもなさs。というのが正直な感想です。（あくまで私が作成するLIFFアプリと、ミニアプリのシナジーがあまりないだけの可能性も大いにあります。）

> 既存のLIFFアプリや今後作成されるLIFFアプリについては、ブランド統合後も引き続きご利用いただけます。

LIFFは引き続き利用できると明言されていますので、要件に応じて判断しましょう。

> 2025年の後半に、LINEログインチャネルのLIFFアプリからLINEミニアプリへの移行手段を提供する予定です。

今年中に移行手段が提供されるようですが、LIFFで作っているけども認証済みミニアプリの機能が欲しいという場合には移行も一つの手段として出てくるのかもしれません。

現在、統合の時期は未定ですが、統合された時にどうなるか分かりませんので、引き続きウォッチしていきたいと思います。