はじめに
業務で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プレイグラウンド
ざっとページを確認すると分かりますが、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の編集
こちらはほぼ初期値のままですが、以下のようにしておきます。
<!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
です。
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.init
はPromiseオブジェクト
を戻り値として返却します。
これは非同期処理に関連するオブジェクトで、LIFF独自のものではなく、JavaScriptの仕様です。
Promiseについての詳細な解説はここではしませんが、成功したときの処理をthen
に、失敗したときの処理をcatch
に書くものと思ってください。
then
、catch
の引数にはそれぞれコールバック関数を渡す必要があるため、それぞれアロー関数で処理を定義しています。
liff.getProfileの使用
liff.init
の成功した場合の処理then
の中で、liff.getProfile
を使っています。
これは、LINEでログインしてきたユーザーのプロフィール情報を取得できます。
liff.getProfile
もPromiseオブジェクト
を戻り値として返却します。
then
に設定するコールバック関数は、引数としてプロフィール情報のオブジェクトを受け取ります。
そのオブジェクトから今回はdisplayName
(表示名)を取得しています。
そのほかログイン状態を取得するliff.isLoggdedIn
も使用していますが、これは見たままになりますので特に解説はしません。
これで、ログインしてきたユーザー名を画面に表示させるためのアプリが完成しました。
次からはアプリのデプロイ作業を行います。
Renderへのデプロイ
GitHubリポジトリの作成
RenderではGigHubリポジトリをもとにアプリをデプロイすることができるので、今回作成したプロジェクトをGitHubにあげます。
冗長になるのでここの手順は割愛します。
デプロイ
Renderのマイページを移動し、「New」から「Static Site」を選択します。
設定情報の入力になりますが、基本デフォルトのままでよいです。
1つだけ修正が必要で、「Publish directory」に「dist」を入力してください。
※画像では空になっていますが、必須項目なので入力するようにしてください。
少し待つと、デプロイが完了します。
表示されているURLは後ほどLIFFアプリの設定で使うのでコピーしておきます。
なお、今このURLにアクセスしてもうまく動きません。
LINEログインが発生しないので、「Loading...」のままになります。
次はRenderにデプロイしたアプリをLIFFアプリとして登録します。
LIFFアプリの登録
作成したチャネルの「LIFF」タブを選択します。
ページ下部の「追加」を押下します。
以下の通り、必要事項を入力してください。
「エンドポイントURL」は先ほどコピーしておいた、デプロイしたアプリのURLを設定します。
LIFFアプリの作成ができました。
「LIFF ID」をメモしておきます。
「LIFF URL」も後で使うのでメモしておきましょう。
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と連携させることができるので、色々便利な使い方が考えられそうです。
次はもっと実践的な内容にチャレンジしてみたいと思いました。