社内業務用スマホアプリのシステム運用事情を赤裸々にお伝えします

#はじめに
この記事は[Monaca Advent Calendar](https://adventar.org/calendars/3073)用に書いたものです。
社内で業務用のスマートフォンアプリを（[Monaca](https://ja.monaca.io/)で）開発・運用している私の会社のシステム運用事情を書いてみようと思います。
ちなみにここで言う「社内」というのは非IT業界で、私は社内システムの企画・開発・運用・保守を行っているいわゆる社内SEです。

#なぜスマホアプリなのか？
外勤社員の方が非常に多いので、そういった方により便利に社内システムを利用して頂くために、約３年前、スマホアプリの開発・運用を行うことになりました。
私の所属している企業は分類上は製造業に分類されるのですが、いわゆる営業＋製造といった形態での勤務形態ではありません。
以下に社内の働き方の概要を図示しますが、「設備系」業界に近いと思って頂くと良いかと思います。
![20181210_0007.JPG](https://qiita-image-store.s3.amazonaws.com/0/323262/4287aed1-e793-cd08-70ac-b101cb3a2f84.jpeg)
商品は最終的に、建物内に取り付けられます。
数として最も多いのは「保全」の担当者で、この勤務形態の方がたは毎日のように建物に行っており、落ち着いてPCに向かうことができる時間は少ないです。
こういった方々にも、便利なITの仕組みの恩恵を受けて頂きたい。
もっと言えば、**社内の働き方を変えていきたい。**
そういった想いでスマホアプリの企画・開発・運用・保守を行っています。

#社内のスマホアプリのインフラ環境
![20181210_0008.JPG](https://qiita-image-store.s3.amazonaws.com/0/323262/bf5f3508-a419-7159-9184-7408d8563a7d.jpeg)
インフラ環境、と書くこともない話かもしれませんが。上図の通りMDMツールを使っているということと、**個人スマホも利用できる**ということがポイントでしょうか。
MDMツールの機能により、例えば万が一社内用アプリがインストールされたスマホを紛失してしまったりしても、内部のデータは遠隔で削除したりすることができます。（個人スマホの場合は、紛失するとデータが消されることに同意する必要はあります）
このような形でセキュリティも担保しているということです。

実は、スマホアプリの運用をし始めた際には**個人スマホからスタート**しました。社用のスマートフォンを購入して従業員の方に配るというのは勿論経費もかかりますし、効果が出るかどうか分からない。
ですので最初は個人スマホを使って効果の検証をしました。
結果として効果が認められ、現在は外勤社員の方を中心に、従来の社用ガラケーを置き換える形で社用のスマートフォンを配布し業務に活用しています。

#サーバサイドのインフラ環境
まあこれも当然と言えば当然の構成ではありますが。下図のような感じで運用しています。
![20181210_0011.JPG](https://qiita-image-store.s3.amazonaws.com/0/323262/9a89b38d-9b93-72fb-b521-daa2560d784d.jpeg)
基本的には社内に膨大な数の**従来システム**があり、それらはプライベートなネットワークで運用されています。
スマホアプリでアクセスしたいのは、そういった**従来システム**のデータベースに対してです。

そこでまずスマホからのHTTPリクエストの内容に応じて処理を振り分けるWEBサーバをプライベートネットワーク内に用意しました（認証用/Gateway用WEBサーバ）。このサーバは、受け付けたHTTPリクエストの内容に応じて処理を更にリダイレクトします。
次に、上記サーバから振り分けられたHTTPリクエストに対してJSON形式のレスポンスを返すような**社用スマホアプリ向けのAPI**を別途用意しました。
データベースにアクセスしているのはこれらのAPIであり、その結果をJSON形式で、元来た道を通ってスマホまで返しています。これによって各スマホでの社内データの利活用が可能となります。

認証用のWEBサーバの一歩手前には、DMZ経由のアクセスを受け付けるためのWEBサーバ（受付用WEBサーバ）を用意しており、ここでDMZ経由のアクセスを一手に引き受け、プライベートネットワークへの入口としています。

これももう当然のようになりつつありますが、受付用WEBサーバ、認証用/Gateway用WEBサーバ共にAWSで構築し運用しています。

なお「社用スマホアプリ向けのAPI」に関してですが、これは「従来システムの開発者」に作成をお任せしているので、実際は結構古い言語で作られていたりします。JSON形式のレスポンスが返せれば良いですから。
そのへんは社内システムって感じですが、全部を新しくする必要もないという考え方です。

#認証
![20181210_0012.JPG](https://qiita-image-store.s3.amazonaws.com/0/323262/4683e85f-e44e-8529-1a09-3af45471b8fa.jpeg)
さっきとほぼ同じ図なんですが、認証には何種類か存在します。
基本的には上記図中の以下2種類。

####１．アプリ認証

これは単純な話で、社内向けのスマホアプリに認証用の情報を埋め込んでいます。
この認証情報が正しくなければ、認証用/Gateway用WEBサーバの段階で処理を中断します。社内向けスマホアプリからのリクエストでなければ、プライベートネットワークには入ってこれないようになっているわけです。

####２．Google認証

ちょっとこれは社内向けアプリの話から外れる気もしますが、社用/個人向けのスマホアプリを利用するためには、会社として利用しているGoogleアカウントをスマホに紐づけることになっています。（スマホのインフラ環境、のところで記載しても良かった気もしますが）
個人スマホの業務利用というのは何もスマホアプリだけが恩恵となるのではなく、社内のメールやカレンダーが個人スマホで見られるということも効果の一つです。

上記より、スマホアプリの利用者のスマートフォンは、必ず社内のGoogleアカウントと紐づいていることになります。
これを利用して、**Googleアカウントの情報と社内で用いている個人コードとの対応テーブルを社内に用意しており、その照合結果を返すAPIが存在しています。**
ここで認証できなかった場合はスマホアプリを利用することができません。

上記２種類の認証により、**社内のスマホアプリ経由で「受付用サーバ」にアクセスし、かつ社内にGoogleアカウントを持っている人**のみが社内のプライベートネットワークにアクセスできることになります。

このへんはセキュリティ的にあまり詳しく書きすぎると良くない気もするのでこのあたりでご勘弁願いたいですが、まあこんな感じで運用しています。

#ちなみにどんなアプリがあるんですかね？
まーけっこう色々あります。
基本的な社内業務に使うアプリから、特定の業務に特化したものまで。

####みんなつかうやつ
- 出退勤情報入力
- 社内内線番号検索
- 交通費入力
- ・・・

####特定の業務用
これは社内の人でないとなんのことか分からないと思いますので控えますが、大体10種類弱存在します。
建物がキーになる企業ですので、GoogleMapと連携して現場の位置を確認するアプリや、カメラと連携して現場の写真を社内システムにシームレスにアップロードするアプリなどがあります。

#どういう効果があったんですかね？
**紙が減りました。**
色んなデータが見れるスマホアプリ導入前は、事務所を離れる前に色んなデータを事務所で**印刷して**現場に出て行ってました。
私たちも、GoogleMapが手に入ってから地図を印刷して紙を持ち歩く機会って減ったんじゃないでしょうか？そんな感じです。
社内情報にスマホでアクセスできるのとできないのでは、やっぱり持ち歩く情報の数が減ります。**セキュリティ的にもそのほうが良いと思います。**

**メモも減りました。**
データを入力するアプリが整備されれば、後で事務所に帰ってから入力するためのメモも減ります。

少しずつですが、こういった形で社内の仕事を楽にしていくのが社内システム部の仕事かなと思います。

#これからの開発について
**けっこうスマホアプリ開発を今後どうするか迷ってます。**
というのも、わざわざスマホアプリにしなくても、デバイスによって見た目を調整してくれるWEBページが流行ってますよね。（レスポンシブデザインって言うんでしょうか？）
色々あって、そっちに注力したほうがいいんじゃないかという話も出てきています。
あとスマホアプリじゃなくてもPWAアプリという選択肢もあるだろうという話もあります。（私自身はそこまでPWAアプリについては理解できていませんが）

ただ、スマートフォンのデバイス機能を使うようなアプリ（カメラ連携等）はスマホアプリでないと作れないので、そういった場合は今後もスマホアプリ開発になるのかなと思います。
ちなみにCodovaプラグイン経由でデバイスの機能を使っているアプリも数多くあります。数種類はCodovaプラグインを自作して社内業務にマッチするようにしています。

今後の流れを見定めながら、次の開発プラットフォームを選定していくつもりです。

#おわりに
簡単ですが、以上です。
Monacaユーザーの方々、[MonacaUG](https://monacaug.connpass.com/)でお会いしましょう！
Osakaに出没します！