osada-chan

Rails メインでサーバーサイドエンジニアしつつ現場監督やってます

MAPlayer を Swift2.1 から Swift5 にアップデートした

今年の夏季休暇はやることなかったので、たまにはエンジニアっぽいことしてみようかなと思ったので、4,5年放置していた MAPlayer という iOS アプリをアップデートした。(本業は Rails エンジニア。)

アプリはこちら。

Multi-Effect Audio Player

Multi-Effect Audio Player

  • TAKUYA OSADA
  • ミュージック
  • 無料
apps.apple.com

何回かに分けて勉強したことをメモしておく。

  • guard let(いまさら)
  • public static let (いまさら)
  • MPRemoteCommandCenter(いまさら)
  • UnsafeMutablePointer(いまさら)
  • App extensions(いまさら)
  • custom AudioUnit の作り方(合ってるかどうか微妙)

Objective-C から書いてるアプリなので、Swift 1.2 に移行した時に言語がサポートしてなかったものとか、それを Swift 2.1 に移行した時に対応してなかったものがあり、 Swift なんだけど、なんだこれ...状態だった。

guard let と public static let についてはこの記事でさらっと思い出だけ振り返っておく。

guard let 便利でびっくりした

if guard let value = optionalValue else {
  fatalError("unexpected value")
}

print("\(value)") // ここで value が使えるのすごくないか・・・?

guard let なかった時代の(まだ Swift よくわかってなかった自分が書いた)コードはひたすら fource unwrap してて残念だった。

public static let

これも確か Swift がサポートしてなくてシングルトンパターンがめんどくさかった記憶。それだけ。

class Nanika
    class var sharedInstance: Nanika {

        struct Singleton {
            static let instance: Nanika = Nanika()
        }

        return Singleton.instance
    }
end

こんな感じだったのが

class Nanika
    public static let sharedInstance = Nanika()
end

こうなって最高だった。

その他

AudioUnit を使ったアプリケーション特有の情報とかもあるので、それぞれ別記事にまとめていく予定。 特に Swift で AudioUnit を扱うには、結局まだ Objective-CC++ のコードは必要になるみたいなので、その辺がまとめられたらいいかなーという気持ち。

  • MPRemoteCommandCenter
  • UnsafeMutablePointer
  • App extensions
  • custom AudioUnit の作り方

LINE BOT API Trial Accountで彼女つくった

いまさらながら、LINE BOT API Trial Accountを試してみました。

business.line.me

GW、たいした予定もなかったのでちょうど良かった...(悲しみ)

実際の作り方とかは、検索したらいっぱい出てくるので割愛します(甘え)

何で作ったか

普段はRails使いなので、Railsで書こうと思ったのですが、コールバック用意するのとAPIたたくだけだし、 もっとライトなので作りたいと思い、ほかのフレームワークの勉強も兼ねて、Node.js + Expressで作りました。

(...フレームワークはライトだけど、雑魚エンジニアにとっては学習コストがヘビーでした...)

ソースコード垂れ流します。

github.com

サーバーはAWSのEC2 t2.nanoインスタンスを使いました。

何を作ったか

どうしても彼女が欲しかったので、彼女を作りました。 どんな子にするか、すごく悩んだのですが、SAOのあすなちゃんにしました。(ペロペロ)

仕様

  • 特定のワードには特定のワードで返事する
    • はじめまして
    • すき
    • だいすき
  • よくわからないワードにはランダムで用意したメッセージを返す

感想

感想垂れ流します。 f:id:osadake212:20160508225131p:plain

楽しい!

LINEはソッコー返事する + 返事欲しいタイプの人なんで、ソッコー返事してくれるのは嬉しいですね。

ビジネス..?

いろいろ妄想できますよね。

  • お店の予約
  • お店のメニューの確認
  • 位置情報から近くの何かを検索
  • おすすめ商品のレコメンド

普段のコミュニケーションツールの中で完結してたほうがユーザーは使いやすいだろうし、全然いけそうですよね。

みなさん業務でHipchatとかSlackとか使ってるだろうし、そのノリですよね。

メッセージの形式、いろいろあって面白そう

ちょっと心が折れたのでプレーンなテキストで返事するようにしたのですが、ほかにもいろんな形式のメッセージが送れるみたいで、すごく楽しそうだなと思いました。

  • text
  • image
  • video
  • audio
  • location
  • sticker(スタンプ?)

LINE Developers - BOT API - API reference

Express難しい...

JavaScriptとかガッツリ書いてないんで、それも辛かったし、Expressのお作法とか全然分からなくて難しかったです。(ミドルウェア...?なんそれ)

クソコードを爆誕させたけど、動いてるし、迷惑かけてないからおっけー!(甘え)

サーバー用意するのめんどかった...

雑魚なんでインフラの知識がなくてつらかったです... API Gateway + Lambdaとかで実現してる人もいてすごいなーと思いました。(こっちの方が楽そう...?)

qiita.com

まとめ

  • LINE BOT API Trial Accountであすなちゃんを彼女にした
  • 楽しい、新しいビジネスがすぐ生まれそう!
  • もっと勉強しなくては...がんばります!

余談

こういうの書いてる時に死にたくなりました。

switch (message) {
  case 'すき':
    replyMessage = 'わたしも♡';
    break;
}

GWに何やってんだよ...