• トップ
  • ブログ一覧
  • 研修でAndroidアプリ(書籍管理アプリ)を作り公開しました!
  • 研修でAndroidアプリ(書籍管理アプリ)を作り公開しました!

    たかやん(エンジニア)たかやん(エンジニア)
    2019.12.16

    IT技術

    研修でAndroidアプリを作成しました!

    鈴木先生

    はじめまして、(株)ライトコードのエンジニアでは最年少の鈴木です!

    2019年、10月に入社ました。

    10月はITの全体的な研修をした後、11月から研修でAndroidアプリの作成を開始しました。

    最後にそのアプリを「Google Play ストア」に公開したので、その感想をまとめてみようと思います。

    それでは、いってみます!

    書籍の管理をするアプリを公開しました!

    私が、今回作ったのは、書籍の管理をするアプリです!

    【書籍管理アプリ】
    https://play.google.com/store/apps/details?id=io.github.takayan40.bookapp

    このアプリの機能はこんな感じです。

    1. Androidで書籍の裏表紙にあるバーコードを読み込む
    2. 公開APIを使って、書籍の表紙とタイトルを取得
    3. 購入日や感想を登録
    4. 登録した内容の一覧表示

    現在は、まだ「登録」と「削除」以外の機能はない簡単なものです。

    未経験から1ヶ月で作ったということで大目に見ていただければ嬉しいです!

    苦労したことなど

    ちなみに私は、Androidアプリ開発をしたことがなく、今回が初めてです。

    そのため、ネットで調べたり、先輩に聞いたりしながら、手探りで作成していきました。

    その中でも、特に苦労した箇所はこのような感じです。

    ボタン連打の対応

    「OnClickListenerを設定したボタン」や「Viewを連打」「同時押し」「別々のボタンを交互に連打」などをすると、複数回クリックイベントを呼んでしまいます。

    それによって、書籍の登録画面を複数開いてしまったり、同一の書籍を複数登録してしまったりとバグが起きていました。

    そこで、OnClickListener を継承した、SingleClickListener を作成しました。

    1abstract class SingleClickListener : View.OnClickListener {
    2    override fun onClick(view: View) {
    3        if (ClickUtils.isDisabled()) return
    4        onSingleClick(view)
    5    }
    6
    7    abstract fun onSingleClick(view: View)
    8}
    9
    10object ClickUtils {
    11
    12    private val BUTTON_STOP = 500
    13    private var clickTime: Long = 0
    14
    15    fun isDisabled(): Boolean {
    16        if (System.currentTimeMillis() - clickTime < BUTTON_STOP) {
    17            return true
    18        }
    19        clickTime = System.currentTimeMillis()
    20        return false
    21    }
    22}

    前回のボタン押下から次のボタン押下の時刻を比較することによって0.5秒以内の連打を防げるようになります。

    OnClickListener の代わりに、全て SingleClickListener を呼ぶことで、同一のボタン連打だけでなく、別々のボタンを交互の連打されても問題ないようになりました。

    そして、意外だったのが、Google Playに公開されている他のアプリにも、この対応がされていないモノがあることです。

    私が普段から使用しているアプリの中に、「ボタンを連打」したり「同時押し」すると、Activityを複数開くのを確認しました。

    ちなみに、Kotlinで書いているのであれば、 Extension で書いたほうが簡単ですので、私のように書く必要は無いと思います。

    書籍の保存

    書籍の保存は、Realm Database を使用して実装しています。

    【Realm Database】
    https://realm.io/

    ここで起こった問題について…。

    『書籍の一覧』を表示する際、『登録済みの書籍の一覧』を取る必要があるわけですが、「取得できたり、できなかったり」して、とにかく苦戦しました。

    たまに、取得できることがあたったので、非同期処理が間違っているのだと思っていました。

    非同期の処理をしている所ばかり見ていましたが、実際は違っていました。

    データベースの処理を終えるときに、インスタンスを閉じていないのが原因でした。

    動いているのに正しく動かず、どこが牽引になっているのか全然分からず、特定に大変苦労しました。

    リリース準備

    「apkファイルの作成」「Google Play Consoleのアカウント作成」「ストア掲載情報の入力」など、アプリが完成した後のリリース準備に意外と時間がかかりました

    特に、「アイコン画像」「フィーチャーグラフィック」「スクリーンショット」などの、ストア掲載情報に必要な画像作成に結構時間を取られました。

    「インストールしてもらえるか?」に関わる重要な所とも言うことができます。

    たくさんの人に見てもらえるようにしたかったのですが「自分のセンスの無さが悲しい…。」

    そう感じました。

    リリースしてみて思ったこと

    Androidアプリは、Java と Kotlin の両方で開発しています。

    ということで私は、Kotlin を8割Java を2割ぐらいで実装しました。

    しかし、Java と Kotlin で違いがあるものの、あまり気にしないで書けたのは驚きました。

    また、機能が乏しいので、「本当にGoogle Play ストアに公開してしまっていいのか?」と思っていました。

    が、いざ自分で作ったものが Google Play ストアに並んでいるのを見ると嬉しい!!

    せっかくお金を払ってGoogle Play Consoleにログインできるようになったので、別のアプリケーションも作成したいと思いました!

    アプリの今後について

    今回、1度リリースをしましたが、書籍の「登録」と「削除」しかできません。

    そのため、この後もアップデートしていく予定です。

    たとえば、

    1. 現状バーコードのスキャンでしか登録できないので、タイトルやISBNを手入力できるようにしたい
    2. Firebaseに書籍を登録してアカウントごとに管理したい
    3. 他の人の感想を見れるようにしたい

    などです。

    また、iOSの方も作成したいと密かに計画中です!

    今後も「機能改善」「バグ修正」などを進めていきたいと思っています!

    是非インストールしていただければ嬉しいです!!

    (株)ライトコードは、WEB・アプリ・ゲーム開発に強い、「好きを仕事にするエンジニア集団」です。
    Androidアプリ開発のご依頼・お見積もりはこちらまでお願いします。
    また、Androidアプリ系エンジニアを積極採用中です!詳しくはこちらをご覧ください。

    ※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

    こちらの記事もオススメ!

    featureImg2020.08.14スマホ技術 特集Android開発Android開発をJavaからKotlinへ変えていくためのお勉強DelegatedPropert...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    たかやん(エンジニア)

    たかやん(エンジニア)

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background