8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

(ネタがなかったので)2日ほどかけて社内向け端末管理アプリを作ってみた

Last updated at Posted at 2019-12-09

この記事はフラー Advent Calendar 2019の 10 日目の記事です。

この会社に入って一年半、Androidエンジニアとして走り続けました。
しかしながら、土日に入って「何を書こうかな」と考えた所、なんだかどれも記事にしづらかったり、記事にしていいのかわからない内容だったりしました。
ので、新しく記事にできそうなものを作ろうと思い立ちました。

##何故、端末管理アプリを作ったか

起稿の1週間ほど前にちょうど弊本部長から、「端末管理をフラーに合った形で、ちゃんと運用できるようにしてほしい」との依頼が入り、どうするかちょうど考え中でした。

現在弊事業部では、端末の貸し出し管理を紙で運用しています。
貸し出しを行う時には、紙に「貸出端末」「貸出者」「借りた日」を記載し、返却時に「返却済み」にチェックを入れます。
名称未設定.png

……辛いですね。
何が面倒かというと
1.フラー社内の端末管理対象が増え続けていて、どんどん書き込まれていくため見辛い
2.定期的な棚卸しがしづらい(されてない)
3.紙運用で、誰が持っているかとかを確認しづらい(そもそも面倒なので書かない)
この辺でしょうか。

スタートアップの初期段階では紙運用でも問題なく回っていたのだと思いますが、フラーも従業員&端末が爆増中。紙運用が辛くなってきた次第です。

GoogleCalendarや、Slack、Jiraでの運用も考えましたが、やっぱりそれ用に作られたものじゃないのでつらいなぁという感じ。
あと、みんなの前職で端末管理どうやってたか聞くと、やっぱりそれ用のソフトウェアを使っていたりしたので、どうせそこに行き着くんだろうなという結論に至り作り始めました。

##構成
フラーは柏の葉と新潟の2拠点あり、それぞれで端末を借りることができます。
この特性上、sharedpreferencesなどを使ってローカル管理するわけにもいかないので、サーバーらしきものを立てないといけません。
しかしながら私はしがないAndroidエンジニア、サーバーを立てたりし始めると時間がかかってしまいます。
そこで長岡花火アプリでもお世話になった、FireStoreを使うことにしました。
構成は単純で、FireStore上に更新されそうなデータ達「端末データ」「貸出者データ」「事業部データ」「支社データ」を格納して、それをReadWriteするだけです。

##実際に作ったもの
登録したデータは簡単にこんな感じ
スクリーンショット 2019-12-09 17.08.20.png

アプリ側はこんな感じでリストが見れ、条件で検索もできます。
スクリーンショット 2019-12-09 17.42.07.png

RecyclerViewのアイテムをタップすると詳細が見れて、貸出する場合はユーザーと返却予定日を入力させます。
スクリーンショット 2019-12-09 17.41.15.png

##FireStoreQueryの動的生成
動的生成にちょっとだけ詰まったので。

FireStoreへの問い合わせQueryは、普通にするなら以下の感じでいけます。

collection
    .whereEqualTo("company_id", companyId)  
    .get()
    .addOnSuccessListener {

しかし今回、検索機能をつけているので、EditTextなどの条件を元に、FireStoreに問い合わせるQueryを変更しなければなりません。

最初は以下の感じで実装すれば、collectionに条件をどんどん追加してくれるんだと思っていたのですが、これをやると検索条件が追加されていなかった。

var collection = db.collection(getString(R.string.firestore_devices_collection_name))
    val companyId = binding.editCompanyId.text.toString()
    collection.whereEqualTo("company_id", companyId)
collection
    .get()
    .addOnSuccessListener {
      // ...
    }

一旦collectionのQueryをとって、 collection = collection.whereEqualToをやってやらないといけないんですね。

var collection =
    db.collection(getString(R.string.firestore_devices_collection_name)) as Query

    val companyId = binding.editCompanyId.text.toString()
    collection = collection.whereEqualTo("company_id", companyId)
collection
    .get()
    .addOnSuccessListener {
...

ちょっと分かりづらかった。

##終わりに
デザイナーがいないので見た目がちょっと雑になってしまいましたが、一旦これを端末保管場所の隣に置いて運用してみようかと思います。
だいたい2日でProject作成から一旦完成まで持っていくことができました。
今後は返却日超過者などをSlackに通知できるようにしたりして、棚卸しへの対応などもできるようにしたいなと思っております。
FireStore、便利だなぁ… :relaxed:

8
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?