コミケの共同購入支援用アプリを作った話、そして数年運用してみての感想とか。
はじめに
この記事は「ブログ力爆Age Advent Calendar 2017」の13日目の記事です。
同期がやってるこのカレンダー、前年に引き続き今年も参加しました。 去年はVue.jsでSSR(サーバサイドレンダリング)する - Qiitaを書きました。
今年は何を書こうか悩みました。 結局、今年は技術的な物は研究室のアドベントカレンダーでやっているので、ネタ系を書くことに決めました。
コミケ
コミケの時期です。 夏から冬はほんと一瞬でやってきます。 私の場合、優先度が コミケ>>卒論 なので卒論はそっちのけでコミケの準備をしてたりします。
私は海鮮なのでサークル参加はしません。そのうち技術島で出せたらいいかなーなんて思ったりはしますがね。買うのに全力を出します。 年に2回だけ真面目になり、どうすれば可愛いけもみみ本とグッズを集められるのか考えてます。
今年も可愛いけもみみ本がいっぱい欲しい。
コミケと共同購入
広い会場、ちょっと前から東7,8とかいう魔境も追加された中で、10時から11:30分くらい(この辺過ぎると買い逃し率が一気に上がる)までの1時間30分でお目当ての大半を回収して回るのはなかなか難しいものです。
地図を記憶し只ひたすら回る訳なんですが、ホール間移動をすると一気に効率が落ちます。 なので私は身内とちっちゃなグループを組んで上手い感じに回したりしています。
こういった共同購入のグループ中で問題になってくるのが
- 事前の購入希望の付き合わせと担当決め
- サークル回っている最中の情報交換
- 購入後の金銭の受け渡し
などです。
共同購入の支援アプリを作った
高校3年の冬か大学1年の夏の時に色々と大変だったので、支援アプリを作りました。 それ以後ちまちまと作り直したりしながらグループで利用しています。
仕様は、サーバ-クライアント構成のアンドロイドネイティブアプリです。
なんでアンドロイドネイティブかというと、グループにはiなんちゃらとかいう物を使っているアホはいないからです。
どんなものかというと、全員が書き込める買い物リストがあって、そこにサークル単位で担当ユーザを設定でき、購入情報や並んでいる際の状況等を書き込みます。 そのリストが全員で同期されるって感じの代物です。
ちょっと昔の頃のスクショが合ったので貼ります。
サークルリスト↓ 性癖バレしないようにサークル名とか隠したらよく分からなくなった gyazo.com
地図とか
使い方は、
- 前日までに買い物リストに欲しいサークルと品を各自が書き込んで
- 前日の夜に担当を決定
- 当日は自分の担当だけのリストを表示させ、サークルを回り、購入したら購入済みのチェックを付ける
- 撤収時にリストから誰が誰にいくら払えば良いか算出して戦利品受け渡ししておしまい
こんな感じに使います。
誰の欲しいものを誰が買ったかがわかるので、撤収時にワンボタンで金銭計算ができます。
使っての感想
- 買い物中にLINEとか電話とかSkypeとかでひたすらどこ買った?買ってない? をしなくて良くなった
- 紙にひたすら買い物リストをメモらなくて良くなった
こんな点がアプリ化でよくなりました。 まぁ当然か。
これは導入してから気づいたんですが、
撤収時の料金計算が圧倒的に楽になって感動しました。
作る前は計算くらい終わった後だからのんびりやれば良いじゃんって考えだったのに、導入後はこれないと辛くなりました。 撤収時はみんな疲れてるから頭使いたくないんですね。 はやくおうち帰って本読みたいって。
最近の課題
使えば使うほど、無限に課題がでてくるもんです。 最近はこんなのに直面しています。
通信
これは重要な課題。 コミケ会場の通信が最悪。 基本的に通信はぶつぶつ切れることを想定していないといけません。 前々回の東7でほとんど回線が繋がらず、アプリが機能しなくなったことがあり、その際から通信の部分については特に力を入れているのですが、もっとやらないとだめだなーって。 今はキャッシュを使ったり、送信失敗時に極力ユーザの手を煩わせないようにしようと手を打っている程度です。
ちょっとぶっ飛びすぎですが、100人を超える規模のグループであれば、各自のスマホのBlueToothを用いてメッシュネットワークを構築しP2P通信することでコミケ会場中で安定した通信が出来そうです。 こんなのできたらすごいなーって思います。
地図
会場地図が問題、 どうレンダリングすればパフォーマンスが落ちなくて、なおかつ簡単に扱えて、コミケの度に作り直す手間が減るんでしょうかね。 今はエクセル方眼紙で地図を作り、ちょっと加工したCSVを生成、そのCSVからWebViewにロードしてJSでテーブルを構築して使っています。 描画にCPUが遅いスマホだと2秒くらいかかるのが欠点です。 使い勝手&開発しやすさはそこそこ良いのですが。。。
SNS同期
Circle.msやPixiv,Twitterとの同期を入れたいです。 Circle.msと連携すればサークル登録の手間が減少しますし、Twitterはサークルさんが完売報告を行うのでリアルタイム監視は重要です。
登録してあるサークルさんがつぶやいたり、2chのコミケスレに情報がでたらプッシュ通知とか流れるようにとかしたいです。
やれたらなーって言ってることをやる
一番重要な課題。 上に上げたような機能は、時間を掛ければ作れるので、やるかやらないかなんですが、ずっとやってない。
よくない。 なのでやる気を出す方法を考えて実行しないといけない。
さいご
長く使ってると色々と楽しいことがある
この機能を持つアプリを初めて作ったのは高校3だか、大学1年だかだと言いました。なので4年ほど(7,8回のコミケで)このアプリを使っていることになります。
これまで何度か作り直しをしていて、すごく良いことを得たなって思うことがよくあります。
一番始めに作った実装は、サーバ側がJAVAで出来ていて、TCPコネクションをアンドロイド側と貼りそのストリームでJavaオブジェクトをシリアライズし流す形でデータ同期をしていました。
DBなんてものは存在しませんでした。 自分でロックを取りクライアントが送ってくる時間情報と照らし合わせサーバ側のオブジェクトを更新し、クライアントに応答していました。 (頭おかしい)
そんな状態の初版から、ぷよぐらみんぐを学んでいき、DBを利用したり、サーバ側はAPIとして構築するなど進化していきました。
またAndroidも元々ぐちゃぐちゃな実装だったのが、大学3年の夏のリプレイス時にMVP+DDDという設計で固めることに成功し、良い感じに作ることが出来るようになりました。
こういう自分の成長が見られるアプリを持てているのはすごく良いことだなーと感じます。 就職においても長く1つのものを開発してきた経験は武器になりました。
今後は(去年から言っているんですが)Firebaseを使ったり、AndroidもアーキテクチャをGoogleが示したのでそれに乗っ取ったりなどしたいです。 最近はフロントの人であるのでReactNativeとかで組んでもみたいなーと。。。
C93対応さっさとやれ
急いでやります。
おしまい。
後付け
「ブログ力爆Age Advent Calendar 2017」 適当にもふもふかくとかいう枠を取ったせいで昨日の方には変な期待をされてしまいましたが、このアプリでもふもふにゃんにゃんする同人誌を手に入れることが出来るのでそれほど違いはないだろうと自己完結しています。
アドベントカレンダーは明日はかったーくんが書くそうです。 弊研の誇る偉大なるスーパーハカーなのですごい記事を書いてくれるでしょう。 期待しています。 じゃあおやすみ。