Amanity
LIFFアプリ廃止に向けた移行ガイド
ブログ技術解説2026-06-23約15分

LIFFアプリ廃止に向けた移行ガイド——LINEミニアプリへの統合で何が変わる?

対象読者: LIFFアプリを運用中・開発中のエンジニア・テックリード

なぜ今LINEミニアプリを把握すべきか

LINEプラットフォームにおけるチャネル種別と包含関係
LINEプラットフォームにおけるチャネル種別と包含関係

2025年2月12日、LINEヤフー株式会社はLINE Developersを通じて重要なアナウンスを公開しました。タイトルは「LIFFアプリを新規作成する際は、LINEミニアプリとして作成することを推奨します」——このひと言が、LINE上でWebアプリを開発してきたすべてのエンジニアに影響します。

発表の骨子は3点です。

1. 新規開発はLINEミニアプリチャネルで行うことを推奨
LIFFチャネルへの新規アプリ登録は非推奨となりました。今後LINE上にWebアプリを公開する場合は、LINEミニアプリチャネルを使うのが公式の方針です。

2. 将来的にLIFFはLINEミニアプリに統合される予定
「LIFFとLINEミニアプリという2つの区分を1本化し、LINEミニアプリに統合していく」方向性が明示されました。ただし現時点で既存のLIFFアプリが即座に停止するわけではなく、移行手段については公式ドキュメントで随時案内される予定です(2026年6月時点では専用の移行ツールは確認されていません)。

3. 既存LIFFアプリのユーザーへの影響はいまのところない
現在稼働中のLIFFアプリは引き続き動作します。ただし新機能の追加やサポートの重点はLINEミニアプリ側に移っていくと考えるのが自然です。

「廃止」という言葉が一人歩きしがちですが、正確には段階的な統合・移行への誘導です。即日対応が必要なわけではありませんが、「新規はLINEミニアプリ」「既存は移行計画を立てる」という方針は、今すぐ開発ロードマップに組み込む必要があります。

なぜ今か——理由は審査です。LINEミニアプリはLIFFと異なり公式審査が必要で、通過まで数週間かかることがあります。「来月リリースしたいのに審査が終わらない」という事態を避けるためにも、早めの把握と準備が欠かせません。

重要な点として、LINEミニアプリでも liff.init() を使って開発する点はLIFFと変わりません。また、URLドメインは liff.line.me から新しいドメイン miniapp.line.me に変わります。これらの変化を含め、本記事では、チャネル構成の違いから認証コードの差分、メッセージ送信の3パターン比較、URLドメインの変化、そして具体的な移行ステップまでをまとめます。

認証の変化点【コード比較】——liffId の差し替えとinit()オプションの違い

認証フロー比較:LIFFアプリ vs LINEミニアプリ(liffId差し替えとwithLoginOnExternalBrowserの違いを強調)
認証フロー比較:LIFFアプリ vs LINEミニアプリ

移行における最大の疑問のひとつが「コードはどこまで変わるのか」という点です。結論から言うと、LINEミニアプリでも @line/liff SDK(LIFF SDK)をそのまま使います。LIFFとLINEミニアプリはAPIレベルで共通の部分が多く、認証フロー自体の構造は大きく変わりません。変わるのは「どのチャネルのLIFF IDを指定するか」と、一部のinit()オプションです。

LIFFでの認証フロー

LINEログインチャネルに登録したLIFFアプリでは、以下のように liff.init() にLIFF IDを渡し、liff.getProfile() でユーザー情報を取得します。

typescript
// components/LiffAuth.tsx
import { useEffect, useState } from "react";
import liff from "@line/liff";

const LIFF_ID = process.env.NEXT_PUBLIC_LIFF_ID!; // 例: "1234567890-AbcdEfgh"

export default function LiffAuth() {
  useEffect(() => {
    liff
      .init({ liffId: LIFF_ID })
      .then(() => {
        if (!liff.isLoggedIn()) {
          liff.login();
          return;
        }
        return liff.getProfile();
      })
      .then((profile) => {
        if (profile) console.log(profile.displayName);
      });
  }, []);

  return <div>...</div>;
}

LINEミニアプリでの認証フロー

LINEミニアプリでは同じ @line/liff SDKを使いますが、init()に渡すオプションに2点の違いがあります。

typescript
// components/MiniAppAuth.tsx
import { useEffect, useState } from "react";
import liff from "@line/liff";

// LINEミニアプリチャネルは内部チャネル(Developing / Published)ごとに
// 異なるLIFF IDが発行される。環境変数で切り替える。
const MINI_APP_LIFF_ID = process.env.NEXT_PUBLIC_MINI_APP_LIFF_ID!;

export default function MiniAppAuth() {
  useEffect(() => {
    liff
      .init({
        liffId: MINI_APP_LIFF_ID,          // ← LINEミニアプリチャネルのLIFF IDに変更
        withLoginOnExternalBrowser: true,   // ← 外部ブラウザ対応のため追加推奨
      })
      .then(() => {
        if (!liff.isLoggedIn()) {
          liff.login();
          return;
        }
        return liff.getProfile();
      })
      .then((profile) => {
        if (profile) console.log(profile.displayName);
      });
  }, []);

  return <div>...</div>;
}

withLoginOnExternalBrowser: true は、LINEミニアプリが外部ブラウザからもアクセス可能になった(2025年10月対応)ことに対応したオプションです。これを指定すると init() の内部で自動的に liff.login() が実行されるため、外部ブラウザでの未ログイン時の処理を個別に書く必要がなくなります。

移行時に変更が必要な具体的な箇所

typescript
// ============================================================
// 1. .env ファイルの変更
// ============================================================

// --- 移行前(LIFFチャネル) ---
NEXT_PUBLIC_LIFF_ID=1234567890-AbcdEfgh
LINE_CHANNEL_ID=1234567890

// --- 移行後(LINEミニアプリチャネル) ---
NEXT_PUBLIC_MINI_APP_LIFF_ID=0987654321-XyZwVuts
LINE_CHANNEL_ID=0987654321

// ============================================================
// 2. liff.init() の変更点(差分のみ)
// ============================================================

// 移行前
liff.init({ liffId: process.env.NEXT_PUBLIC_LIFF_ID! });

// 移行後
liff.init({
  liffId: process.env.NEXT_PUBLIC_MINI_APP_LIFF_ID!, // ← 環境変数名を変更
  withLoginOnExternalBrowser: true,                   // ← 追加推奨
});

// ============================================================
// 3. URLスキームの変更(OGPメタタグ・シェアリンク等)
// ============================================================
// 移行前:  https://liff.line.me/{liffId}
// 移行後:  https://miniapp.line.me/{liffId}
// ※ コード内に liff.line.me をハードコードしている箇所を全件検索・置換する

メッセージ送信の変化点【3パターン比較】

メッセージ送信パターンの選択フロー(サービスメッセージ・Messaging APIプッシュ・liff.sendMessages()の使い分け)
メッセージ送信パターンの選択フロー

LINEミニアプリへ移行する際、認証フローと並んで見直しが必要になるのがメッセージ送信の実装です。LIFFとLINEミニアプリでは、ユーザーへのメッセージ送信に使えるAPIが異なり、それぞれ送信先・コスト・前提条件が大きく違います。

整理すると、選べる手段は3パターンです。

  1. LIFFでの liff.sendMessages() — LIFFブラウザ内でユーザー自身として送信
  2. LINEミニアプリ × サービスメッセージ — テンプレート形式・無料・友だち追加不要
  3. LINEミニアプリ × Messaging APIプッシュ通知 — 任意タイミング・友だち追加が前提・従量課金

3パターンの使い分け判断フロー

判断軸LIFF sendMessages()サービスメッセージMessaging APIプッシュ
送信主体ユーザー自身システム(バックエンド)Bot(公式アカウント)
送信先開いているトーク画面専用通知トークルーム公式アカウントのトーク
友だち追加の要否不要不要必要
料金無料無料従量課金(プラン次第)
テンプレート制約なし(自由形式)あり(申請・登録必須)なし(自由形式)
利用条件LIFFブラウザ内のみ認証済みミニアプリのみMessaging APIチャネルが必要

まず確認すべきは「サービスメッセージで対応できるか」です。対応できる場合は、コストと友だち追加の不要さから第一候補になります。ただしテンプレート形式に縛られるため、自由な文面が必要な通知には向きません。

liff.sendMessages() はユーザーがアプリを開いている瞬間にのみ動作するため、「操作完了直後の確認メッセージをトーク画面に残したい」というUXに限定して使うのが適切です。

チャネル登録・構成の違い——見落としやすい「1チャネル1アプリ」の制約

移行を検討する際、コードの書き換えより先に設計として把握しておくべきことがあります。それがチャネル構成の根本的な違いです。

LIFFチャネル(LINEログインチャネル)では、1つのチャネルに対して複数のLIFFアプリを登録できます。たとえば「会員登録ページ」「予約ページ」「マイページ」を同一チャネル配下に並べるケースは珍しくありません。

LINEミニアプリでは、1チャネルに登録できるミニアプリは1つのみです。複数のWebアプリをLINEミニアプリとして公開したい場合は、その数だけチャネルを作成する必要があります。

text
【LIFFの構成例(現行)】
LINEログインチャネルA
├── LIFFアプリ: 会員登録ページ(LIFF ID: aaa)
├── LIFFアプリ: 予約ページ(LIFF ID: bbb)
└── LIFFアプリ: マイページ(LIFF ID: ccc)

【LINEミニアプリへの移行後】
LINEミニアプリチャネルA → 会員登録ページ(1チャネル = 1アプリ)
LINEミニアプリチャネルB → 予約ページ
LINEミニアプリチャネルC → マイページ

また、LIFFにあったモジュールモードはLINEミニアプリでは廃止されています。モジュールモードを活用していたアプリは、表示UXの再設計が必要になる場合があります。

審査・申請プロセス——「未認証」制度で即公開が可能になった

2024年11月28日、LINEヤフーは未認証ミニアプリ制度を導入しました。この制度により、審査を受けることなくLINEミニアプリを公開できるようになっています。

text
未認証ミニアプリ: 審査なし → 即公開可能(LIFFと同等のスピード感)
認証済みミニアプリ: LINEによる審査 → 通過後に公開

未認証 vs 認証済みの機能差異

機能未認証認証済み
LINEミニアプリとして公開利用可利用可
LINEログイン / ユーザープロフィール取得利用可利用可
Messaging API連携利用可利用可
サービスメッセージ(公式通知枠での配信)利用不可利用可
カスタムパス(miniapp.line.me/xxx 形式)利用不可利用可

審査期間の目安は実績ベースで1〜4週間です(公式には期間の明示なし)。プライバシーポリシーの記載不足が最頻出の差し戻し理由のため、LINEを通じて取得するユーザー情報(LINEユーザーID・プロフィール等)の取り扱いを明記しておくことが審査通過の近道です。

URLパス・外部ブラウザ対応の変化点

LIFFアプリのURLは liff.line.me/{liffId} という形式でした。LINEミニアプリでは miniapp.line.me/{liffId} に変わります。認証済みになるとカスタムパスを取得でき、miniapp.line.me/your-service-name のような覚えやすいURLで公開できます。

bash
# コードベース内の liff.line.me を一括検索する例
grep -r "liff.line.me" . \
  --include="*.ts" \
  --include="*.tsx" \
  --include="*.js" \
  --include="*.json" \
  --include="*.env*" \
  -l

URLの変更は「コードを直す」だけでは終わりません。OGPメタタグ・LINEメッセージのボタンURL・リッチメニュー・チラシに掲載されたQRコードも含めて棚卸しが必要です。

外部ブラウザ対応(2025年10月以降)

2025年10月1日をもって、LINEミニアプリは外部ブラウザでの表示に対応しています。liff.init()withLoginOnExternalBrowser: true を指定することで有効になります。ただし liff.sendMessages()liff.scanCode() など、LINEブラウザ内でしか動作しないAPIは引き続き制約があります。

動作環境の制約と注意点——「なぜスマホ前提なのか」を理解する

環境動作
Android LINEアプリ内動作する
iOS LINEアプリ内動作する
PCのLINEアプリ(Windows/macOS)内動作する(一部機能制限あり)
PCブラウザ(Chrome/Safari等)単体動作しない
スマホのSafari/Chrome等(LINEアプリ外)条件付き(withLoginOnExternalBrowser: true指定時)

デバッグにはLIFF Inspectorが有効です。LINEアプリ内WebViewの状態をPC側のブラウザから検査できるLINE公式のデバッグツールで、コンソールログやネットワーク通信をPC側から確認できます。

bash
# LIFF Inspectorのインストール
npm install -g @line/liff-inspector

# Inspectorサーバーを起動
liff-inspector

既存LIFFアプリをLINEミニアプリへ移行するステップ

移行ステップ全体像(チャネル作成→PP整備→コード修正→動作確認→未認証公開+認証申請→カスタムパス申請の6フェーズ)
移行の6フェーズ全体像

移行作業は大きく6つのフェーズで進みます。

text
フェーズ1: LINEミニアプリチャネル作成
フェーズ2: プライバシーポリシーの整備
フェーズ3: コード修正(ミニアプリSDK対応)
フェーズ4: 動作確認(開発・テスト環境)
フェーズ5: 未認証で先行公開 → 認証申請
フェーズ6: カスタムパス申請

フェーズ5の段階的アプローチがリスクを下げる鍵です。未認証のまま先行公開して本番環境での動作を検証し、問題がないことを確認してから認証申請に進む流れが安全です。

移行プロジェクトのスケジュール目安

フェーズ工数目安備考
影響範囲チェック・計画策定0.5〜1日既存コードの複雑度に依存
チャネル作成・PP整備0.5〜1日法務確認が必要な場合は別途
コード修正・テスト2〜5日sendMessages()の代替実装が必要な場合は追加
未認証公開・本番検証1〜2週間検証期間として確保
認証審査1〜4週間LINEの審査期間に依存(コントロール不可)
カスタムパス申請・URL切り替え0.5〜1日審査完了後

まとめと次のアクション

  • LIFFは「廃止」ではなく「LINEミニアプリへの段階的統合」。既存LIFFアプリは引き続き動作するが、新規開発はLINEミニアプリチャネルが公式推奨(2025年2月12日発表)
  • コードの差分は小さいliff.init() のLIFF ID参照先変更、URLスキームのliff.line.meminiapp.line.me置換、バックエンドのチャネルID更新が主な変更点
  • メッセージ送信の選択肢が変わる。代替は「サービスメッセージ(無料・テンプレート制)」または「Messaging APIプッシュ通知(有料・自由書式)」の2択
  • 最大の落とし穴は審査期間。認証審査は1〜4週間かかる。リリース計画に審査期間を必ず組み込む
  • ドメインの変化はコード外にも影響する。OGPメタタグ・チラシ・QRコード・外部サイト掲載のリンクも含めてliff.line.me参照箇所をすべて洗い出す

今すぐ移行すべきか、待つべきか

状況判断
新規にLINE上のWebアプリを作る今すぐLINEミニアプリチャネルで開始。LIFFチャネルへの新規登録は非推奨
既存LIFFアプリを運用中・機能追加予定がある近い開発機会に合わせて移行計画を立てる。審査期間を考慮して早めに動く
既存LIFFアプリを安定運用中・当面変更予定なし即日対応は不要。ただし移行のための影響範囲チェック(1日以内)は今すぐ実施
liff.sendMessages()に強く依存している代替手段(サービスメッセージ or Messaging API)の選定が必要。設計検討を先行させる

LINEミニアプリ開発・LIFF移行のご相談はAmanityへ

Amanityでは、LINEミニアプリの新規開発および既存LIFFアプリからの移行支援を承っています。

  • チャネル設計・審査申請のサポート
  • 既存LIFFコードの影響範囲チェックと移行計画の策定
  • サービスメッセージ・Messaging API連携を含む実装
  • Next.js / TypeScriptを用いたLINEミニアプリ開発

「自社のLIFFアプリがどのくらいの工数で移行できるか知りたい」「新規でLINEミニアプリを作りたいが何から始めればよいか分からない」など、お気軽にご相談ください。

Amanity

株式会社Amanity

福岡を拠点に、モバイル・LINE・Webアプリの受託開発を行っています。LINEミニアプリの開発実績多数。まずはお気軽にご相談ください。

無料で相談する