13
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LIFFアプリ開発徹底入門

Posted at

はじめに

業務でLIFFについて扱っているので、自身の学びのために一から簡易的なアプリを作って、その全体像を把握してみます。
LIFFアプリはReactとTypeScriptで作成します。

前提

本記事は以下の3つを前提として進めていきます

  • Node.jsの導入が終わっていること
  • LINE Buisinessアカウントのプロバイダーが作成済であること
  • Renderのアカウントを作成済であること

LINEの設定、およびRenderアカウントの作成については以下の記事で触れていますので参考にしてみてください。

また上記以外の付加情報として、私の環境は
OSがMac Ventura 13.6.7
Node.jsのバージョンはv20.10.0
使用している開発ツールがVS Code
となっています。

LIFFとは

LIFFとはLINE Front-end Frameworkの略で、LINEが提供するWebアプリのプラットフォームです。
LIFFを使うことでLINEの情報を使用したアプリケーションを作成することができます。

何ができるのか

何ができるかを確認するための簡易アプリをLINEが用意してくれています。
LINEプレイグラウンド
image.png

ざっとページを確認すると分かりますが、LINEログインや、OSの情報の取得、LINEプロフィールの取得など、様々な機能が用意されています。

こちらの調査によれば、スマホ・携帯利用者の8割がLINEを利用しているらしいので、LIFFを使うことでLINEと連携した便利なアプリケーションを作成することができそうです。
https://www.moba-ken.jp/project/service/20240422.html

習うより慣れよ、なので実際にLIFFアプリの開発を一から行ってみましょう。

LIFFで簡単なアプリを作る

環境構築

viteの導入

npm create viteでReactのプロジェクトを生成しましょう。
プロジェクト名、使用するフレームワーク、JavaScriptかTypeScriptかを選択します。
今回は以下のような設定とします。

生成したプロジェクトのディレクトリへ移動し、依存関係のインストールを行います。

npm run devでアプリを立ち上げます。

Localのアドレスへアクセスし、以下のような画面が表示されれば成功です。

通常、viteのポート番号は5173ですが、私は別で使っていたので5174となっています。

LIFF SDKの導入

立ち上げたアプリを一旦終了し、以下のコマンドでLIFF SDKをインストールします。
npm install @line/liff

アプリの作成

ファイル・フォルダの整理

今回はユーザー名を取得して、「こんにちは、〇〇さん」と出力するだけのお手軽アプリを作ります。

まず、元から用意されているファイルやフォルダのうち、不要なものをは削除して以下の通りにします。

そして2つのファイルを編集します。

index.htmlの編集

こちらはほぼ初期値のままですが、以下のようにしておきます。

index.html
<!DOCTYPE html>
<html lang="jp">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>LIFF DEMO</title>
  </head>
  <body>
    <div id="root"></div>
    <script type="module" src="/src/main.tsx"></script>
  </body>
</html>

こちらは今回のアプリの動きに大きく寄与しないので特に解説しません。

App.tsxの編集

つぎに、App.tsxです。

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

function App() {
  const [userName, setUserName] = useState("名無し");
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  useEffect(() => {
    liff
      .init({
        liffId: import.meta.env.VITE_LIFF_ID,
        withLoginOnExternalBrowser: true,
      })
      .then(() => {
        console.log("init");
        liff
          .getProfile()
          .then((profile) => {
            console.log("get profile");
            setIsLoggedIn(liff.isLoggedIn());
            setUserName(profile.displayName);
          })
          .catch(() => {
            console.log("get profile failed");
          });
      })
      .catch(() => {
        console.log("init failed");
      });
  }, []);

  return <h1>{isLoggedIn ? `こんにちは、${userName}さん` : "Loading..."}</h1>;
}

export default App;

一見複雑なように見えますが、抑えておくべきポイントは3つです。

liff.initの使用

LIFFアプリを使う上で、これは必ず必要になります。
この初期化を行うことで、ほかのliffのメソッドを使用可能になります。

initメソッドにはオブジェクトの形式で設定を渡すことができ、liffidのみが必須になります。
ここではliffidには環境変数から取得した値を設定するようにします。
この値はLIFFアプリを登録したあとでないと取得できないため、一旦このようにしておきます。

また、LINE以外のブラウザから開いたときにLINEログインを強制できるようにwithLoginOnExternalBrowserオプションをtrueで設定しておきましょう。

非同期処理の使用

liff.initPromiseオブジェクトを戻り値として返却します。
これは非同期処理に関連するオブジェクトで、LIFF独自のものではなく、JavaScriptの仕様です。
Promiseについての詳細な解説はここではしませんが、成功したときの処理をthenに、失敗したときの処理をcatchに書くものと思ってください。

thencatchの引数にはそれぞれコールバック関数を渡す必要があるため、それぞれアロー関数で処理を定義しています。

liff.getProfileの使用

liff.initの成功した場合の処理thenの中で、liff.getProfileを使っています。
これは、LINEでログインしてきたユーザーのプロフィール情報を取得できます。
liff.getProfilePromiseオブジェクトを戻り値として返却します。

thenに設定するコールバック関数は、引数としてプロフィール情報のオブジェクトを受け取ります。
そのオブジェクトから今回はdisplayName(表示名)を取得しています。

そのほかログイン状態を取得するliff.isLoggdedInも使用していますが、これは見たままになりますので特に解説はしません。

これで、ログインしてきたユーザー名を画面に表示させるためのアプリが完成しました。

次からはアプリのデプロイ作業を行います。

Renderへのデプロイ

GitHubリポジトリの作成

RenderではGigHubリポジトリをもとにアプリをデプロイすることができるので、今回作成したプロジェクトをGitHubにあげます。
冗長になるのでここの手順は割愛します。

デプロイ

Renderのマイページを移動し、「New」から「Static Site」を選択します。

先ほど作成したリポジトリを選択します。

設定情報の入力になりますが、基本デフォルトのままでよいです。
1つだけ修正が必要で、「Publish directory」に「dist」を入力してください。
※画像では空になっていますが、必須項目なので入力するようにしてください。
image.png

少し待つと、デプロイが完了します。
表示されているURLは後ほどLIFFアプリの設定で使うのでコピーしておきます。

なお、今このURLにアクセスしてもうまく動きません。
LINEログインが発生しないので、「Loading...」のままになります。

コンソールにも初期化失敗のログが出力されています。

次はRenderにデプロイしたアプリをLIFFアプリとして登録します。

LIFFアプリの登録

チャネルを新規作成します。

LINEログインを選択します。

それぞれ必要事項を入力してください。

以下のようにチャネルが作成されます。

作成したチャネルの「LIFF」タブを選択します。
ページ下部の「追加」を押下します。

以下の通り、必要事項を入力してください。
「エンドポイントURL」は先ほどコピーしておいた、デプロイしたアプリのURLを設定します。

LIFFアプリの作成ができました。
「LIFF ID」をメモしておきます。
「LIFF URL」も後で使うのでメモしておきましょう。

最後に、同じページの上部にある「開発中」をクリックします。

「公開」を押下してください。

「公開済」になればLINE側の設定は完了です。

LIFF IDの設定

先ほどメモした「LIFF ID」をRenderにデプロイしたアプリケーションの環境変数に設定します。
「Environment」から
「Key」にVITE_LIFF_ID
「Value」にメモした「LIFF ID」を設定し、保存します。
保存すると、自動的に再度デプロイされます。

これでアプリの作成は完了です。

LIFFアプリへアクセス

LIFF URLにアクセスします。

RenderのURLではなく「https://liff.line.me~」で始まるLIFFアプリ用のURLです。
LINEチャネルのLIFFタブから確認できます。

以下のようにログインを求められるのでご自身のアカウントでログインしてください。

ログインが完了すると、以下のように取得したユーザー名が表示されます。

まとめ

LIFFアプリを一から作成してデプロイまで持っていくような方法がよくわからなかったので、備忘も兼ねて記事を作成しました。

これだけではまだうまい使い方が思いつきませんが、自分で作成したアプリを簡単にLINEと連携させることができるので、色々便利な使い方が考えられそうです。

次はもっと実践的な内容にチャレンジしてみたいと思いました。

13
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?