LINE Developer Days 2018 の自分のセッションふりかえり

この記事は LINEBot&Clova Advent Calendar 2018 の 12 日エントリーです。


2018 年 11 月 21 日に [LINE Developer Days 2018](https://linedevday.linecorp.com/jp/2018/) が開催された。様々なセッションがありましたが、LINE ボットとクローバ開発関係のセッションも多数あり、開発者の方々も楽しめたのではないでしょうか。

早速ビデオも公開されていますが、この記事では私が登壇したセッションについてのまとめと補足をします。

# 公開されているビデオ
[LINE DEVELOPER DAY 2018 日本語音声プレイリスト](https://www.youtube.com/watch?v=9St8v4Z_Bxo&list=PLI2S-k0Fa59uvsnbkf2naoqmpbwtux6sI)

私が登壇させていただいたセッション
[いま考えられる限り最も速く対話型アプリを開発する方法](http://www.youtube.com/watch?v=toR8VIK9hv0)
[![いま考えられる限り最も速く対話型アプリを開発する方法](http://img.youtube.com/vi/toR8VIK9hv0/0.jpg)](http://www.youtube.com/watch?v=toR8VIK9hv0)
[スライドはこちら](https://www.slideshare.net/linecorp/the-fastest-possible-way-to-develop-an-interactive-app)

# 話した内容のまとめと補足

セッションではボット開発のライフサイクルと、それぞれのフェーズで使えるツールについて紹介していきました。ここでは要点をまとめるとともに、当日言わなかった内容も入れておきます。

まず結論から。当たり前だけどこれが出来ていない事が多い。
![conclusion.jpg](https://qiita-image-store.s3.amazonaws.com/0/214116/e3c4c2f8-31a9-3ff7-9e7c-d838b2beabf8.jpeg)

# はじめに : ボット開発のライフサイクル

ボット開発も立派なアプリケーション開発であるため、計画から開発、テストや展開およびフィードバックループまでライフサイクルがあります。イベントではテストまでの話をしましたが、実際には公開から評価、フォードバックまでどうするか設計しておく必要があります。

![ボット開発のライフサイクル](https://docs.microsoft.com/ja-jp/azure/bot-service/media/bot-service-overview.png?view=azure-bot-service-4.0)

主なタスクは以下の通り。

- 計画: モックを使ってどのようなボットにするかの設計を行う
- 開発: コーディング
- テスト: ユニットテスト/ファンクションテスト/ユーザーテスト
- 公開: 本番環境への展開
- 接続: 本番環境とチャットプラットフォームの接続
- 評価とフィードバック: エラーの検知、ユーザーフィードバックの仕組み

一連の流れを DevOps に乗せられるといい感じ。

# 1. 計画

[ボットのデザインガイドライン](https://docs.microsoft.com/ja-jp/azure/bot-service/bot-service-design-principles?view=azure-bot-service-4.0)などを参考に、どのようなボットにするか設計するフェーズ。

モックはツールを活用して効率よく行う。

- [LINE Bot Designer](https://developers.line.biz/en/services/bot-designer/) : LINE 公式ツール。プロジェクトを作成して複数人で共有できる
- [LINE Simulator](https://github.com/kenakamu/LINESimulator/releases) : コミュニティで開発しているツール

また利用する機能の検討

- 入出力 (テキスト、音声、動画、位置、ステッカー等)
- リッチメニュー (共通、動的)
- Flex メッセージ/テンプレートメッセージ
- スキーマ (カメラ、位置）
- LIFF
- LINE Pay/Login/Social
- AI (自然言語解析、メディア解析等)
- プッシュ通知

# 2. 開発

開発の効率性を上げるために、様々なツールを駆使する。

- テンプレートやツール
    - [Visual Studio テンプレート](https://marketplace.visualstudio.com/items?itemName=pierre3.LINEBotCSharpTemplate)
    - [LINE Visual Studio Code 拡張](https://github.com/kenakamu/LINEBotDeveloperUtil)
    - [Yeoman LINE Bot テンプレート](https://github.com/kenakamu/generator-line-bot)
    - [Rich Menus マネージャー](https://github.com/kenakamu/line-richmenus-manager)
- IDE
    - Visual Studio
    - Visual Studio Code
- シミュレータ
    - [LINE シミュレーター](https://github.com/kenakamu/LINESimulator/releases)
    - [Clova シミュレーター](https://github.com/kenakamu/clova-simulator)
    - 実機と [ngrok](https://ngrok.com/)
    - [Flex Message シミュレーター](https://developers.line.biz/console/fx/)
- 各種 SDK

またソース管理、バージョン管理を行う。

- GitHub
- Azure DevOps

シミュレーターがあると、実機では面倒な作業を効率よくデバッグできます。

- フォロー/アンフォロー
- その他のシステムメッセージ
- ビーコン
- 位置情報など

# 3. テスト

クオリティを維持するため、各種テストを導入。また開発もテスト前提で行う。

- テストの種類
    - 単体テスト
    - Visual Studio のリアルタイム単体テスト
    - 他システムを含めたファンクションテスト
- UI テスト
    - 実機
    - シミュレーター

技術としては開発言語や環境に依存するが、外部システムの抽象化は IoC/DI などで必ず行います。

その一方でテストが困難なものもあります。

- LIFF など実機が無いとできない挙動のテスト
- 様々なデバイスにおける画面の表示感の確認

テスト類は DevOps ツールと連動して常に実行。

この辺までをセッションで話しました。
[実際のシミュレーターを使ったデバッグのデモ動画](https://youtu.be/toR8VIK9hv0?t=1171)

# 4. 公開

外部サーバーに公開するフェーズでは以下のポイントを考慮。

- 本番、検証、UAT 環境をそれぞれ用意
    - アプリケーション設定の保持
    - スロットを使った展開やスワップ
    - ロールバック
- バージョニング
    - アプリレベルでのバージョニング
    - データベースのスキーマ変更
    - ステートデータ

公開も DevOps ツールを連動して、自動またはボタン一つの手動で実行。

# 5. 接続

LINE 開発者ポータルより各環境への接続。基本的には一度設定したら変えることは少ない。

- 本場、検証、UAT アカウントをそれぞれ用意
    - データの整合性
- 他システムの接続
    - データベース
    - コグニティブサービス
    - 予定、天気、路線など各種 API

# 6. 評価

様々な面からの評価を検討。

- ユーザーアクセス評価
    - 全体のユーザー数遷移
    - 機能に対する到達率や発見性
    - 機能に対する継続率
- アプリケーションの正常性
    - アップタイム/ダウンタイム
    - 平均応答時間
    - リソース使用状況
    - 401,404,500 などの状況
- ユーザーフィードバック
    - 不具合の連絡
    - 新機能の要求

また評価に使える仕組みを事前に設計

- AppInsights
- LINE 開発者ポータルの統計
- LINE@ や Twitter, Facebook 等他ソーシャル

# 99. DevOps

ボット開発は UI 要素が少ないので DevOps が向いています。是非 DevOps を始めるなら LINE ボットで始めてみてください。

# まとめ

とりあえずボットを開発して公開するだけなら簡単ですが、より高度なボットをちゃんと開発するためには色々考えることがあるので、慣れ親しんだ方法で環境などそろえて、ツールをしっかり使ってやりましょうというお話でした。

では 2019 年もボット開発楽しみましょう！