見出し画像

お題を投げたら五七五を返してくれるアプリ「Siki」をリリースしました

本稿の目的

リリースしたiOSアプリの宣伝と、開発者としての振り返り
・というタテマエで、開発の思い出と利用サービスの感想を無心で書き殴りたい

どんなアプリか

とにかくインストールして遊んでみてね😘
(iOSのみ)

【ざっくり言うと】
キーワードを投げたら五七五を返してくれるアプリ。いろんな五七五を見つけてキャッキャできる。

【もうちょい詳細に言うと】
Sikiの頭を撫でる

キーワードを入力する

お題でGoogle検索

検索結果のWebページを解析

文章から五七五を見つける

YEAH🎉🎉

っていうアプリ。

なぜ作ったか

【経緯】
もともとは2017年(昔!)の春にあったハッカソンSPAJAMで考えたアイデア。SPAJAMはスマートフォンアプリのハッカソンで、会場で発表されるテーマに沿ったアプリを土日でガッと作るイベントだ。

当時のテーマは「季節」だったと思う。
会社の同僚で構成されたメンバーで参加して、僕はあんまりアイデアを出した記憶がないので曖昧だけど、「季節 → 四季 → 子規 & 俳句!」みたいなノリで決まったんじゃないかな。たぶん。

ハッカソンは2日しかないので、見た目を取り繕ったりデモ用に動かすのが精一杯だった。

チームはそこで解散したけど、自分個人の趣味としてiOSアプリが作りたかったので、コンセプトをまるっとここから拝借して、初めから作り直すことにした。

拝借したアイデアから結果的にデザインも要件も変わったものの、元は当時のメンバーの発想であり、デザインはチームの解散後にも関わらずメンバーだったデザイナーに作ってもらったものだ。

※実は初回リリースは2018年8月。ずいぶん時間が空いたけど、つい先日(2019年1月4日)にバージョンアップしたのとnoteを始めたのをきっかけにこの話をまとめた。

【動機】
個人でiOSアプリを作る楽しさはいろいろ↓

・iOSアプリ開発がそもそも楽しい
・仕事だと遠い"世の中へのリリース"が気軽
・試したいことを好き放題試せて楽しい

今回、Sikiの開発を通して実際上に挙げた諸々の楽しさは存分に得られたのでハッピーだった😋

どうやって作ったのか(技術的な話)

今回はアプリのコードとかよりも「デプロイやインフラを良い感じ且つノーコストで実現する」を個人的なテーマに据えていた。

色々参考にしたけど特に強かったのは以下の記事。できなかったことも多いけど今回の1回にしては色々試したから許す、自分を。
https://medium.com/swift-column/ios-2017-4f04d00a5804

【iOS】

Firebase

ず〜〜ッと触りたかったFirebase。
今回はAnalytics、Remote Config、Admobを主に使った。話せば長くなるから割愛するけど、すご〜〜く良かった!!!Analyticsは謎にユーザーの属性情報とか収集してくれているし眺めているだけで楽しい!!!Remote Configはメンテナンスモードの有効化に使ってみたらとっても楽!!!Admobは、うん。
めっちゃ感動したけど世の中的には今更なのでこの感動をアウトプットする場がない。

Fabric

開発中のベータ版を周りの何人かに配布するのに使った。実際はFabric使ったってよりBitrise経由で配布したのでFabricに対する感想はあまりない。

Bitrise

モバイルアプリ用のCI/CDサービス。ワークフロー図で直感的に楽勝にタスクが組めた。今回はdevelopブランチにマージ→ビルド→Fabricで配布、というタスクを組んだ。
無料プランだと1回のタスクが10分までで、途中からは「Carthageのビルドが長くて10分に収まらずビルド失敗」が頻発したけど、何回か繰り返せば成功するしチューニング方法わからないしで、まあいっか、で済ませた。

・その他ライブラリ情報はアプリのライセンスに記載

【サーバー、インフラ】

Flask

今回は自然言語処理っぽい雰囲気だからPythonを選択。(実際、今回の開発範囲では全く関係なかった)
PythonのWebフレームワークを調べたらDjango、Flask、Tornadoがあるらしいぞって感じで、Djangoは画面もある本格的なWebサービス用、Tornadoはこれから来るぜって評判でイキってて、今回あまりAPIを頑張るつもりはなかったのでGithubスター数も多いFlaskを無難に選択した。

Mecab

日本語を形態素解析(文章から単語を区切って読みや品詞を解析)してくれるミドルウェア。(最初ライブラリと勘違いしてたけどミドルウェアだった。)
"形態素解析"っていう漢字の多さにひるんだけどシンプルで使いやすかった。
そのまま使うだけだと解析できない言葉も多いのでNEologd(追加辞書?)を入れるのがポイント。
※ちなみに形態素解析の後の五七五検出はライブラリとか使わずプログラムでちまちまっとやった

Google Custom Search API

Google検索をするAPI。
無料だと1日100件までとか?クレジットカード登録でもう少し上限緩和された気がする。今回はそんなにリクエストなさそうなので一旦未登録のまま見守ることにした。
Bing Web Searchも検討して調べたけど使い方がわからなさすぎて断念。

Google Sheets API

スプレッドシートのAPI。検出された五七五をひたすらログ出力している。
面倒なのでログローテーション的なことはしていない。

Heroku

Container Registry & Runtime (Docker Deploys)を利用。
つまり、HerokuでDockerコンテナが動く!!(で、合ってるのかな?どれくらい有名なのかわからん)
今回はHerokuのPython環境としてMecabを入れる方法がわからなくて利用したけど、それ抜きにしてもBuildpackの環境やお作法を気にしなくて良いのが良い。
※そもそもMecab抜きならFirebase Cloud Functionsを使ったと思う
※あとDockerfile置いておけばHeroku Gitのmasterプッシュでもコンテナで動くっぽいけどこの方法でデプロイした場合謎にメモリ不足でよく落ちる

無料プランでも常時稼働できるようにHeroku Schedulerで10分置きにpingするようにした...けどそれでもまあまあ眠っている。しかしこれも、まあいっか、で済ませた。

まとめ

作るの楽しかったし動くものができて良かった🤗

特にシェア機能は改善したいなーと思うものの一旦一段落させて他のものを作りたい😔

とは言えどんなものを作るかアイデアはないので楽しいアイデアをお持ちの方はお声がけください、組んで何か作りましょう💪

✌️✌️✌️