スマホアプリを個人開発するなら、LINE botアプリ(LIFF/LINEミニアプリ)がおススメ!!

# はじめに
この記事は[「個人アプリ/サービス開発の進め方と運用、得た学び 【PR】 Lenovo Advent Calendar 2020」](https://qiita.com/advent-calendar/2020/lenovo_app)の20日目の記事です。

本記事では以下のことについて書いてます。

- スマホアプリを個人開発するなら、LINE botアプリ(LIFF/LINEミニアプリ)がおススメ!!
- (私と同じく)スマホアプリの個人開発で一度挫折した人は再トライしてみよう
- (ついでに)私なりのモチベーションの上げ方/継続の仕方も

また、下記の様な方々を対象として想定しています。

- スマホアプリの個人開発をこれからしたい人
- スマホアプリの個人開発をするか迷っている人
- これまでにスマホアプリの個人開発をしたいと考えたことがあったが、色々な理由で挫折した人

よければ最後までお付き合いしていただけると嬉しいです。

# スマホアプリ開発手法とモチベーションの変遷
まず私自身の話になりますが、業務ではスマホアプリを作っていません。
なので、「LINE botアプリ(LIFF/LINEミニアプリ)での個人開発のススメ」の話をする前に、これまでの開発手法とモチベーション(挫折ポイント)についてまずは語りたいと思います。

## Androidケータイ発売初期～
自分の記憶では2010年頃だったと思います。
ちょうどガラケーが壊れたタイミングでCMがバンバン流れていたので、Android端末に機種変更しました。
何より嬉しかったのは**Javaでスマホアプリが開発できること**でしたが、現実はそんなに甘くはなかったです。。。

- 当時の挫折ポイント
  1. Android Studioのエミュレータが重い
     - とにかくエミュレータ重くて開発する気を削がれました
     - USBケーブルで実機を繋いで直接インストールすることで動作確認はし易くなりましたが、繋いだままテストするには長いケーブルが必要だし、色々手間だった記憶があります。。。
  2. 画面のコーディングがSwingライクで作りづらい
      - 元々、Swingでの開発をしたことがあるのでイメージしやすかったものの、画面デザインしづらい

## クロスプラットフォームアプリ登場～
iOS/Androidで別々のソースコードを管理しなければいけない課題への対策として、**クロスプラットフォームアプリ(Phonegap、Titanium Mobile、Monaca等)** の開発手法が登場し始め、早速試してみましたがやっぱり途中で挫折。。。

- 当時の挫折ポイント
  1. フロントエンド周りの言語に弱い or Webデザインセンスゼロ
     - 元々、BtoBのシステム開発屋で業務アプリの開発経験しかないので、モダンなWeb画面の開発がなかなか難しい
     - jQueryやCSSフレームワークもありましたが、慣れていないので中々うまくいかず。。。
     - Web画面と同じように見えて、同じじゃない？(スマホでの動作を考慮して作るのが難しい)

そして、スマホアプリの個人開発への情熱はすっかり冷めて数年が過ぎ、、、

## LIFF(LINE Front-end Framework)登場～
2018年、LINE APIの新機能として **「LIFF(LINE Front-end Framework)」** が登場しました。
Web画面の入力内容をメッセージとして送る機能を手に入れたことで、単なるメッセンジャーとしてのbotアプリではなく、**Web＋メッセンジャーによる「新しいスマホアプリの形」** を実現できました。

[LINE API Use Case(LIFF/LINEミニアプリ)](https://lineapiusecase.com/ja/api/miniliff.html)

### 個人的に思うLIFF(LINE Front-end Framework)の良い所

  - 必要に応じて、UIをWebとメッセンジャーとで使い分けることができる
    - 普通のスマホアプリでは画面ありきなのに対し、Webとメッセンジャーを使い分けることで開発工数を減らせる(Web画面の開発は難しいけど、必要最低限の開発ならやれる)
    - botのメッセンジャーだけでは入力が大変だけど、LIFFで入力(プルダウン選択、等)でUI/UXを向上
  - WebサーバーにデプロイするとLINE上で確認できるので、割と楽
    - 画面の作り方次第では、PC上のWeb画面でも確認可能
  - (あと、個人的な感想ですが)Web＋メッセンジャーのコンセプトが好き

というわけで、スマホアプリの個人開発のモチベーションが上がり、現在に至る。

# LINE botアプリ(LIFF/LINEミニアプリ)と従来の開発手法との比較
ここからは、従来の開発手法と比較したいと思います。
(様々な観点からの詳細な比較ではなく、個人開発のモチベーションに関わる観点を中心に比較してます)

| 比較項目                 | ネイティブアプリ                | クロスプラットフォームアプリ                      | LIFF/LINEミニアプリ        |
|----------------------|-------------------------|-------------------------------------|-----------------------|
| アプリ形式(*1)            | スーパーアプリ                 | スーパーアプリ                             | ミニアプリ                 |
| 稼働環境                 | 端末にインストール               | 端末にインストール                           | LINE上で稼働(インストール無し)    |
| UI                   | 画面入力                   | 画面入力                               | 画面入力＋メッセンジャー         |
| 端末機能へのアクセス(GPS、カメラ等) | API提供されているモノ全て          | プラグインで提供されているモノ                     | QRコード、HTMLでアクセス可能なモノ  |
| 主な開発言語の例             | Java/ObjectiveC         | Web言語                               | Web言語、Node.js         |
| 主な開発環境の例             | Android Studio          | VS Code、Web開発エディタ                   | VS Code               |
| テストまでの流れ             | apkファイルをコンパイル⇒端末にインストール | apkファイルをコンパイル⇒端末にインストール or Web画面で確認 | Webサーバーにデプロイ⇒LINE上で確認 |

(*1)スーパーアプリとはインストールが必要なアプリ、ミニアプリとはLINEのようなプラットフォーム上で動くインストールが必要ないアプリのこと。

## 比較のまとめ
- 使いたい端末機能(カメラ、GPS、各種センサー等)があるのなら、ネイティブアプリかクロスプラットフォームアプリを選ぶ
- 上記のようなLINE APIで実現できない機能を使わないのなら、LINE botアプリ(LIFF/LINEミニアプリ)を選んでみては如何でしょうか？
  - 要件次第になりますが、テキストベースのメッセージのやり取りで済むなら画面開発工数を減らせるので楽
  - 場合に応じて、メッセージ入力ではなく、Web画面(LIFF)で必要情報を送らせることでUI/UXを向上
  - Webサーバーにコミット/プルしたら即動かせるのでデバッグも楽

一応、比較だけでなく、β版としてアプリも作ってみました。
こちらで家計簿アプリ(β版)&ソースコードを公開していますので、試してみてください。
※あくまでβ版ですので、**なま温かい目**でソースコードを見てくだされば幸いです(開発現場を離れてから大分長いもので。。。)

[Github 家計簿アプリ(β)](https://github.com/macochin/i-kakeibot)

![2020_AdventCalendar用画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16977/873bc482-8252-d3bd-803b-2a32be7c7596.png)

![2020_AdventCalendar用画像 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16977/3effec2b-43a8-3243-e12c-f9b177850af8.png)

# その他のお話(モチベーションとか)
実をいうと、つい最近まで個人開発のことをすっかり忘れてました。。。
思い出したきっかけは、子どもとの約束でした。

年始に1年の目標を子どもと一緒に決めているのですが、今年の目標は「自身のスキルを磨き、その結果を何かしらの形にして発信する」としていました。
そのことをすっかり忘れていましたが、子どもは「家庭学習を頑張ること」を目標としており、目標達成に向けて頑張ってる姿を見て、自分も頑張らないといけないなと思いました。

仕事以外の場面で自己研鑽したり、個人開発したりするのは大変ですが、例えばこんなきっかけもいいんではないでしょうか。

# 最後に
ここまで長々と読んでくださりありがとうございます。

今回の記事ですが、私と同じく本当は作りたいアプリがあるけれど、業務とやりたいことがマッチしておらず自分で時間を捻出しなければいけなくて、結果としてアプリ開発への情熱が冷めてしまった方々に対して、もう一度再チャレンジしてほしいと思い、書いてみました。

この記事が少しでも誰かのためになれば嬉しいです。