プログラマってこんなかんじ??

アプリ作ったり歌ったりしてます

ジャズフェスの非公式アプリを勝手に作ってみた (Android/iOS)

本エントリは Android #2 Advent Calendar 2019 の 2日目 になります。

今年はこんなアプリ作りました、実際作ってどうだったか、頑張ったので褒めて、というポエムになります。

誰?

福岡で Web/スマホアプリ/LINE Bot、、いろいろと節操なく開発している雑食系エンジニアです。

働き方的には、自社サービス開発などもやってますが、いわゆる 客先常駐 SES 多め。あと、趣味で ボーカル(ジャズメイン) としても活動しています。

なにを作った?

福岡の中洲で毎年行われているジャズフェス、 中洲ジャズ の非公式アプリを勝手に作りました。(今年で 3回目)

play.google.com

中洲ジャズ 2019【非公式】

中洲ジャズ 2019【非公式】

  • daisuke hirata
  • ミュージック
  • 無料
apps.apple.com

なんで作ったのか?

nakasujazz.net

フェス自体は大好きなのですが、公式サイトが例年このような感じで

  • 同じ時間に誰と誰が演奏、がわかりにくい
  • 当日ダウンすることが多い

これだと自分が効率的にまわれなくて非常に困る。なので、これを解決できるアプリが欲しくなって作りました。

どんなもの?

機能は最小限に絞りました。

  • 「この時間に」「どのアーティストが」を横断的に見れる
  • オフラインで見れる
f:id:dai4649:20191202221909p:plainf:id:dai4649:20191202221224p:plain

シンプルに地図+タイムテーブルのみ。ダークテーマ対応したかったのですが間に合わず断念。来年はまだ流行ってるのかな・・

少しだけ機能の紹介をさせてください。

タイムテーブル部分

「上下左右斜めへのスムーズなスクロール」。これは必須。去年は自前で作ろうとして断念したのですが、、今年はこの神ライブラリを本アプリ用にカスタム+チューニングして実現できました。

github.com github.com

これらのライブラリがなければ、自分のやりたいことは実現できてませんでした。この場を借りてお礼を言わせてください。本当に感謝してます。

オフライン対応

スケジュールの各セルをタップするとアーティストページに飛ぶのですが、そのアーティストページをキャッシュ化してます。(WebView) www.letitride.jp qiita.com

リリースまでの流れ

今年は去年までに比べると平和。超平和。去年は「はじめての iOS アプリリリース」だったり、特急申請出したり。だいぶ地雷を踏み抜いていたおかげで、そこまで詰まることもなくリリースできました。

参考までに去年の開発奮闘記はこんな感じです。 daichan4649.hatenablog.jp

で、去年までと違う点。

Android が即日公開されなくなってた

自分の場合は 丸2日 ほどかかりました。「どうせすぐ反映されるだろう」とのんびりしてたら、いつのまにか審査が厳しくなっていた模様。いつもだと Play Console 上で公開すると数時間後には公開されていたのに。イベント直前だったのでこれは本気で焦りました。 qiita.com

iOS の公開は早くなった

今年も このサイト を見ながら一喜一憂すると思ってたのに、、公開して 1日 で「In Review」状態に。逆にこれは嬉しかったです。

リリースしてどうだった?

累計ダウンロード数

こんなニッチなアプリなのにありがたい。ただ、、開発者的には Android により力入れて作ってたのに iOS のが多いんだ・・これが現実か・・ってなってました。

開発的な話

個人アプリを作ること

ここ数年でこんなことを考えるようになりました。

技術の実験場

例えば、Android はここ数年の進化がおそろしく早いですよね。自分は正直ついていけてない部分も多いです。このアプリは「毎年作る」を自分の中でほぼ強制しているので、「いまの技術を実験、運用できる場」「今年のトレンドを強制的に勉強しなおす場」としてよいなぁ、と思ってます。

勉強会などでぼっちにならない

自分は勉強会などで不特定の方と話すのがすごく苦手で。社交的な振る舞いはできるけど、薄い会話しがちな自分がイヤになることが多いというか。

それが、、「自分のサービスなどがあると、これについて話せるのでなかなかよい」と思うことが増えました。実際にこの話をすると、まわりのメンバーが反応してくれて、勝手に設計や議論が始まったり。これはぼっちには本当によいです。そんな場面が何度かありました。やったね。

最後に

職場やまわりでこういう話があまりできないのが悩みなのですが、このエントリが何かしらのきっかけになって、個人サービス作る仲間がまわりにも増えるとよいなーーーと思ってます。

アプリを使ってる方に会えた

そうそう。今年もこのジャズフェス中に自分も路上で勝手に歌っていたのですね。そのときの MC で「中洲ジャズアプリ、ダウンロードした人??」と聞いたら、、手を挙げてくれる方が何名か!これはさすがに泣きそうになりました。やったぜ。

f:id:dai4649:20190915214901j:plain

全然関係ないけど、路上で歌うの最高ですよ!!!

明日は @FujiKinaga さんによる 詳細AdMob です。長文を読んでいただきありがとうございました。

iOS/Android で 中洲ジャズ2018 のアプリ(非公式)を作ってみました

福岡の中洲で毎年開催されているジャズフェス 「中洲ジャズ」。その非公式アプリを今年も勝手に作ってみました。

今年は初めての iOS アプリに挑戦したので、今回はそのあたりを中心にまとめてみます。これから作る方にとって何かの目安になれば幸いです。

こんなアプリ作りました

公式サイトは当日になるとアクセス爆発でダウンすることが多いです(今年も落ちました)。

当日スケジュールが見れないと非常に困るので、「オフラインで見れるスケジュール」 をコンセプトとして作成しました。

中洲ジャズ 2019【非公式】

中洲ジャズ 2019【非公式】

  • daisuke hirata
  • ミュージック
  • 無料
apps.apple.com play.google.com

スケジュールを横断的に見れます

「同じ時間帯に」「誰のステージがかぶってる」 が公式サイトの情報では非常にわかりづらいです。表形式で一覧表示することで、ステージ全体を横断的に見れるようにしました。

近隣のコンビニ載せてます

野外フェスなのでお酒などを飲みながら歩いてまわることが多いです。トイレにも行きたくなりますよね。そんなときに便利な神施設、「コンビニ」 の情報載せてます。

近隣のジャズバー載せてます

ジャズというジャンルに興味をもつ方も多いかと思います。そんな方のために、中洲近隣のジャズバー情報を載せてます。

リリースまでの流れ

イベントまでの直前2週間を、自分の所感をこめて時系列にまとめてみます。

イベントスケジュール正式公開 (8/31)

  • 公式サイトでスケジュールが公開される
  • 自作ツールで表示用 JSON 作成 (SpreadSheet+GAS)
  • 土日で最後の作りこみ+最終動作確認

Developer 登録 (9/2 22:00)

  • このタイミングで Developer 登録してないことに気づく(!)
  • 登録してたつもりだったけど、途中でやめてた
  • 登録しなくてもローカルでは問題なく開発できてた
  • 課金して登録手続き完了
  • 登録完了通知が来るまではリリース作業進められない
  • 登録完了通知メールが届く (9/3 16:00)
  • 意外と時間がかかるのでこれは早めにやるべき

初アップロード (9/4 1:30)

  • 手順がわからず、かなり時間かかった
  • Archive+Validate+Upload のループ
  • 主に 画像、バージョン番号問題
  • アプリアイコンにはアルファ値含んではいけない

不安になる

  • 夜になっても何の連絡も動きもない
  • 裁きがなかなか行われないことが不安になる
  • 平均レビュー待ち時間 が「9 days」になっていることに気づく
  • 9日後はイベント前日。これはやばい。

特急申請 提出 (9/4 23:30)

  • @konifar さんのブログ で「特急申請 (expedited review)」というものがあると知る
  • 英語でお願いするのでなかなかハードル高いが、、懇願することを決意

konifar.hatenablog.com

ちなみに自分が送った文章はこんな感じ。英語がひどい。よく伝わったなと思う。

9/14に開催される中洲ジャズイベント用アプリ作った。9/12までにレビューを終わらせてほしい。このイベントはボランティアベースで運営されている。自分も協力したいから何とかしてリリースしたい。iPhoneイベント忙しいだろうけどなんとかしてー

Dear person in charge.

There is a Jazz Festival called "Nakasu Jazz" in Japan. This application is for viewing the time schedule of this event.

This event starts at September 14. So, I would you like to finish the review phase by September 12.

This event is operated by volunteers. I created this application because I thought "I also want to cooperate". 

For this reason, I absolutely want to publish this application. I think you are too busy at the iPhone event in September, 

I hope this request will be under reviewing soon.

Sincerely.

特急申請 受領 (9/5 2:30)

  • ステータスが「In Review」に
  • 裁きを待つ

v1.0 公開 (9/5 2:45)

  • リジェクトなし (!)
  • ステータス「Ready for Sale」

特急申請についてはこんなメールが来てました。

Thank you for contacting App Store Review to request an expedited review.

At this time, your app is "Ready for Sale", and will be available on the App Store shortly, unless you have specified a release date or your app is pending your release.

Please visit App Store Connect for additional information. 

Best regards, 
App Store Review

公開されたと思いきや、App Store で検索してもしばらくは出てこなかったです。最終的に、この日の夕方くらいに検索結果に表示されるようになりました。

v1.1 アップデート申請

  • 提出 (9/7 1:00)
  • ステータス「In Review」(9/7 23:30)
  • 公開 (9/8 9:00)
  • 特にメールで連絡なかった

v1.2 アップデート申請

  • 提出 (9/8 21:00)
  • ステータス「In Review」(9/10 4:00)

v1.2 リジェクト

「位置情報取得する理由を書かないとダメー」とのことです。

修正前

修正後

レビュー担当の方がわざわざスクショまで送ってくれました。ここまでしてくれるのかーとびっくり。

ただ、この点については、最初の申請時点から何も変わっていないのになぜこの時点でチェックされたのかがいまだに謎です。

v1.2 アップデート再申請

  • 提出 (9/11 1:00)
  • ステータス「In Review」(9/12 9:00)
  • 公開 (9/13 9:00)
  • こちらも特にメールで連絡なかった

というわけで、特急申請を提出したらなんだかあっさりと公開されてしまいました。この一連の流れで、久々にいろんな汗をかきました。

さて、ここからはポエムです。

よかったこと

リリースできた

いちばんは 「初の iOS アプリをなんとかリリースできたこと」 です。これでネイティブアプリ 両 OS リリースの実績ができて個人的に満たされました (メンタル)。

iOS アプリ開発の勘所がわかった(気がする)

  • どこが地雷なのか
  • どこが苦労しそうのか
  • どうすれば開発が楽になるか

あえてフルスクラッチで作ったので、特にこのあたりは試行錯誤できました。

苦労したこと

ツール

初めての Swift コーディング自体はそんなに苦労はないのですが、、とにかく Storyboard。

  • UI での手順をおぼえていないと同じ設定ができない
  • あとから git diff 見ても何の設定をしたかわからない
  • そもそも何をどう変えていいのかわからない

UI メインで開発することに慣れていない、コードしか信じていない自分にとってこれは本当につらかったです。「Storyboard の使い方、運用方法」 については有識者にレクチャーしてもらいつつ・・な開発ができたら工数だいぶ削減できたなーと思います。定石がわからない状態での手探り、辛かったです。

情報に踊らされた

すべて自分のせいなのですが、、こんな感じでした。(ここでも Storyboard を使いこなせかったグチ)

  • 書籍とネットの情報を試しまくったが本当にさまざま
  • 選択肢が複数あるときにどれが最適なのか、開発経験がないので判断できない
  • たとえば「どこまでを Storyboard、どこからが コード、はたまた全部コード」 など

よく言われることですけど、実際に自分の手を動かして、苦労して、試行錯誤して、経験してみないとわからんことが多かったです。「脳内ではもう完成してる」と「実際に作って完成した」はぜんぜん違うなーと感じました。

リリース手順

リジェクトされてもいいからとりあえず早めに一度リリース作業しておけば安心だったかなと思います。自分にとっては普段やらない作業のオンパレードだったので、わけがわからず、非常に厄介で時間がかかりました。

作り終わっていろいろ

今年も公式サイト落ちた

  • 午前中にはもう落ちてた
  • 落ちたとたん、アプリインストール数が跳ねあがった

アドバイスや意見をたくさんいただいた

プレスリリース出してみた

  • 採用されなかった
  • Webニュース系サイトのみ(10社ほど)
  • 出すのが遅すぎた感
  • 紙媒体へのプレスリリースも挑戦したかった

そのほか

  • 見ず知らずの方が会場で使っているのを目撃できた
  • あんみつ姫のURLが okama.com だったことに衝撃
  • 路上で全方位を人に囲まれて歌うのは最高だった!(アプリ関係なし)

最後に

自分のアプリが AppStore、GooglePlay で表示されるとやっぱり感動します。。

ダウンロードしてくださった皆さま、協力してくださった皆さま、本当にありがとうございました。それではまた来年!!

GooglePlayAppStore

参考

daichan4649.hatenablog.jp

ストレングスファインダーやってみた(2回目)

先日、友人 から「新版が出てる」と聞いて。今後のキャリアプランに悩んでいるところだし、何かのきっかけになるかなーと思って再受験してみました。

ざっくり所感

  • 前回(9年前) と試験内容はほぼ同じ?(180問くらい、制限時間 20秒/問)
  • 前回より結果レポートが大量で読むの大変。うれしい悲鳴。(pdf 7ファイルくらい)
  • 結果は概ね合っている、痛いところつかれた
  • ただ、自分自身が大事にしているポイントが前回と少し変わっていた
  • 自分でも何となく気づいてるけどモヤっていた部分をまとめてもらった感

診断結果

現在の自分の強みはこの 5つ らしいです。(以下、本文から引用)

学習欲

学習欲という資質を持つ人は、学習意欲が旺盛で、常に向上を望んでいます。特に結果よりも学習すること自体に意義を見出します。

収集心

収集心という資質を持つ人は、より多くの知識を求める知りたがり屋です。ものを集めたり、あらゆる種類の情報を蓄積したりするのが好きな人が、このタイプに多くみられます。

個別化

個別化という資質を持つ人は、一人一人が持つユニークな個性に興味をひかれます。異なるタイプの人たちの集団をまとめ、生産性の高いチームを作ることに長けています。

調和性

調和性という資質を持つ人は、意見の一致を求めます。意見の衝突を嫌い、異なる意見でも一致する点を探ります。

ポジティブ

ポジティブという資質を持つ人は、情熱的であり、しかも自然にその熱意を人に分け与えることができます。生き生きとしており、他人に活気を吹き込み、やる気を起こさせることができます。

診断結果から見るアドバイス

そして、最後に大量に出力されたレポート、アドバイスもたくさん書かれていて。ざっくりまとめると、

  • 人に教えるのが向いてそう
  • 技術的な専門職がよさげ
  • 技術や規則が常に変化する分野に身をおくとよさげ

ここ数年、IT系新人研修講師業や教育系のお仕事もさせていただいてるのですけど、自分にとって「楽しい」と声を大にして言えるお仕事で。しんどいよりも圧倒的に楽しいのはなぜだーと疑問だったのですけど、結果を見てなんだか納得。そしていろいろと後押しされた感。

なんだかんだ言って、こうやって自己分析するきっかけになるのが一番面白かったです。また数年後に受験すると結果変わるのかなー

参考(引用元)

www.gallupstrengthscenter.com

短縮URL を goo.gl から bit.ly へ乗り換えてみた (Google Apps Script)

Google短縮URLサービス(Google URL Shortener) が 2019/3 にサービス終了するというニュースが飛びこんできました。自分のサービスでも使用しているので、早速対応してみました。

developers.googleblog.com

Google 公式には Firebase Dyanmic Links (FDL) が移行先としてオススメされていますが、今回は URL が短いほうがよかったので、Bitly をチョイスしてみました。

API制限は?(Bitly)

  • URL新規発行 10,000回/月
  • API呼出 1,000回/時
  • API呼出 100回/分

自分のサービスではこの 無料枠 で特に問題なさそうでした。(2018/4/18 時点)

ソース(Google Apps Script)

GAS create short url (google, bitly)

参考

qiita.com goo.gl bitly.com firebase.google.com

LINE Developer Meetup #29(LINE Bot開発) へ参加しました

実はこのイベントを見つけたとき、「自分は行く気まんまんなのだけど、福岡で LINE Bot に反応する人どのくらいいるのだろうか」と考えていた。去年の LINE BOT AWARDS が終わってからネット上でもあまり話題にあがってない気がしてたし。(すんません)

line.connpass.com

実際参加してみると・・なんと 90名弱。いままでこのジャンルに興味ある人にあまり出会わなかったので正直嬉しかった。完全に開発モチベ復活。参加してよかった。

というわけで、登壇者や参加者の方々との会話の中で自分に刺さったこと、気になったことを箇条書きしてみる。

大事なこと

ユーザが Bot について何もわからなくても使えること

  • 「何をしていいかわからない」はNG
  • 直感的に使えることが理想

Webの劣化版を作ってはいけない

  • 人が対面で行っている部分
  • Webがやれていない部分
  • ただの検索クライアントならWebで十分

自分の運営している jazzspot-fukuoka はまさに Web劣化版に該当。痛い。

daichan4649.hatenablog.jp

ただ、LINE を「便利なインターフェースとして使う」考え方も個人的にはアリかなーとも思う。Android/iPhone 用のネイティブアプリを個別にインストールする必要がないのは本当に、本当に、大きい。モバイルサイトよりも操作しやすいのも嬉しかった。jazzspot-fukuoka はまさにその恩恵。インターフェースとしては本当にありがたい。

開発面

Botソースコードはスパゲティになりやすい

  • 分岐が多く、処理のネストが深くなりがち
  • 何かしらの framework を利用したほうがよいかも

qiita.com

github.com

ユーザの識別

  • userId はユーザごとに必ず一意になる(トークルーム単位ではない)
  • これをサーバで保存して使用すればよい
  • ユーザに特化した内容を表示するとより会話的になるよね

自然言語処理は大事

  • みんな Dialogflow 使ってる感
  • 自分も使ってるけど実際楽

表示する情報量

  • LINE の特性上、たくさん情報表示すると見にくくなる(スクロールが大変)
  • たくさん表示したい場合は、例えば、数件だけカルーセル表示
  • 「続きの情報(more..)」はWebへのリンクを貼ってWebサイトへ誘導
  • 結果として LINE から別アプリへ遷移することになるが、シームレスにブラウザに遷移するのでユーザ体験的には問題ないかも

実際にビジネスとして使用されている LINEBot の例

応援navi

  • 今回登壇された 竹原さん からの紹介
  • ランナーに LINE 上で直接メッセージを送ることができる
  • LINE 上でゼッケン番号を入力することでランナーを紐づけ
  • 走ってる最中に応援メッセージ届いたら絶対うれしい

runnet.jp

WazzUp!

  • CRM としての利用
  • 商品購入への導線
  • Android/iPhone 専用アプリではなく、LINE上で完結させることができるのは大きい

wazzup.me

LINEで順番待ち

  • LINE上で整理券、待ち時間を通知で教えてくれる

junbanmachi.jp

LINE BOT AWARDS エントリ作品

  • 「&HAND」のアイデア素敵すぎる
  • 自分もエントリしましたが、惜しくも1000万円逃しました←

linecorp.com

そのほかいろいろ

Bot を使いたいシチュエーション

  • 「通知からの導線」シチュエーションはいいかも
  • たとえば予約していた美容室から「明日 10時」というリマインダが届いた場合
    • 行けないからキャンセルしなきゃ → 電話をかける(めんどくさい)
    • 通知からそのまま予約キャンセル(便利)

ビーコン設定が 初期設定 OFF つらい

  • これが 初期ON になると革命的に便利になる
  • 設定画面の階層深いのでユーザに ON にしてもらうハードル高いよね

Bot のショーケース

  • 作成した Bot は申請したら載せてもらえるかも

LINE developers community | Bot Directory

皆さんと話しこみすぎて、お寿司あまり食べれなかった。悲しい。

登壇者の皆様、お疲れさまでした!