LIFFの開発環境をどうにかする


レバウェル開発部 アドベントカレンダー 11日目

レバウェル開発部の松浪です。 普段は介護事業の転職サイトを中心とした求職者向けサービスのバックエンド開発を担当しております。 今回は、LIFFの開発を始めるにあたって起きた特有の問題と、その対処法をまとめます。

## LIFFとは

LIFFとは LINE Front-end Framework を略した呼称で、LINEが提供するWEBアプリのプラットフォームです。

LIFFには利用者の個人情報やLINEの連絡先を安全に取得できる機能などが実装されています。それを活用してWEBアプリの挙動に応じて求職者にメッセージを送るといったサービスを可能にします。

LINEアプリ内の組み込みブラウザのみで利用できる機能が多く、特に連絡先を取得する機能はLINEを用いたWEBサービスを構築したい理由と密接に結びついているケースが多く見られます。

## LIFFのつらいところ

上述した事情により、LIFFの開発においては通常のWEB開発のほか、2点の問題に対処する必要があります。

まず、スマートフォンのLINEアプリで開く必要があること。 WEB開発におけるスマートフォン向け開発は、開発者ツールやWEBインスペクタを使うことが多く、必ずしも実機で確認する必要はありません。 しかし、LIFFの開発ではスマートフォンのLINEアプリで開発環境を開く必要があるため、なんらかの手段でローカル環境を開けるようにする必要があります。

次に、組み込みブラウザの標準機能ではデバッグができないこと。 スマートフォン版のChromeやSafariでは、開発PCに繋ぐことでWEBインスペクタをつかった実機確認が可能です。

しかし、LINEブラウザには組み込みのWEBインスペクタ機能がないため、別途デバッグ手段を用意する必要があります。LIFFアプリを開発する機会があまり多くない場合はほぼ初見のライブラリを触ることになるため、メソッドの呼び出し方やデータ型の確認にデバッグが必須になります。

## ngrokでローカル環境を見れるようにする

まずはローカル環境をLINEアプリから見れるようにします。 ngrokを利用して一時的にローカルの開発環境を公開し、LINEアプリの入ったスマートフォンからアクセスします。

### 手順

ローカルでhttps接続できる開発環境が立っているところからスタートします。

1. アカウント登録
[https://ngrok.com](https://ngrok.com) にアクセスしてアカウントを登録します。  
     
2. インストール
  `$ brew install \--cask ngrok `
     
3. ngrokの認証を行う
下記ページでアカウント取得後にConnect your accountに記載されたコマンドを実行します。 [https://dashboard.ngrok.com/get-started/setup](https://dashboard.ngrok.com/get-started/setup)  
     
4. 起動
 `ngrok http --region=ap --host-header=rewrite your.server.com:443` を実行すると、コンソールが次のように表示されます。

```
ngrok                                                                                                                             (Ctrl+C to quit)

Sign up to try new private endpoints https://ngrok.com/new-features-update?ref=private                                                            

Session Status                online                                                                                                              
Account                       your.email@email.jp (Plan: Free)                                                                           
Update                        update available (version 3.18.4, Ctrl-U to update)                                                                 
Version                       3.16.0                                                                                                              
Region                        Asia Pacific (ap)                                                                                                   
Web Interface                 http://127.0.0.1:4040                                                                                               
Forwarding                    https://xxxx-xx-xxx-xxx-xx.ngrok-free.app -> https://your.server.com:443 `                                               

Connections                   ttl     opn     rt1     rt5     p50     p90                                                                         
                              0       0       0.00    0.00    0.00    0.00                                                                        
```

実機から `ngrok-free.app` で終わるURLにアクセスすると、開発環境が表示されます。 アクセスした時は、ngrokのコンソールにアクセス履歴も表示されます。

```
21:00:00.000 JST GET /images/sample.png  200 OK
```

これでLINEアプリから開発環境が見れるようになりました。

## vConsoleでデバッグ環境を整える

次にデバッグ環境を整えます。 初回の実装の時は適当なtextareaを設定し、その中にオブジェクトの情報を書き出す形でデバッグを強行していましたが、ちゃんとしたツールが見つかったためそちらを利用します。

スマートフォンの端末上でも開発者ツールを表示できる vConsole というライブラリを利用して、ブラウザ上で挙動を確認しようと思います。 弊チームのフロントエンドではVueを利用していますが、フレームワーク依存はなくどのフレームワークでも利用できます。

### 手順

1. vConsole をインストール

```
$ yarn add vconsole
```
2\. デバッグしたいコード側で利用  
   vConsoleインスタンスを生成するのみで利用できます。 デバッグしたい対象に対してconsole.log等を設定し、画面側で確認することが可能です。

```javascript
import Vue from "Vue";
import VConsole from "vconsole";

new Vue({
  created() {
    const vConsole = new VConsole();
    console.log(window.liff)
  }
  //略
});
```

3\. 確認  
   検証用スマホやPCで対象ページを開きます。  
   検証したいページの右下に `vConsole` というボタンが追加され、 そこから設定したデバッグやエラーが表示できます。 `command` 欄から `console.log(window)` などを実行し、画面からの情報を抽出することも可能です。

## さいごに

これでLINEの開発ができる環境が整いました。 弊チームではあまり頻度の多くないLIFFの開発ですが、だからこそ準備やデバッグといった基礎の段階でつまづきがちです。 そんな時、このようなツールを利用することができれば、LINEに限らず他のケースにも生きてくるかと思います。

次回のレバウェル開発部のアドベントカレンダーもよろしくお願いします！