MAPlayer を Swift2.1 から Swift5 にアップデートした
今年の夏季休暇はやることなかったので、たまにはエンジニアっぽいことしてみようかなと思ったので、4,5年放置していた MAPlayer という iOS アプリをアップデートした。(本業は Rails エンジニア。)
アプリはこちら。
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-C や C++ のコードは必要になるみたいなので、その辺がまとめられたらいいかなーという気持ち。
- MPRemoteCommandCenter
- UnsafeMutablePointer
- App extensions
- custom AudioUnit の作り方
LINE BOT API Trial Accountで彼女つくった
いまさらながら、LINE BOT API Trial Accountを試してみました。
GW、たいした予定もなかったのでちょうど良かった...(悲しみ)
実際の作り方とかは、検索したらいっぱい出てくるので割愛します(甘え)
何で作ったか
普段はRails使いなので、Railsで書こうと思ったのですが、コールバック用意するのとAPIたたくだけだし、 もっとライトなので作りたいと思い、ほかのフレームワークの勉強も兼ねて、Node.js + Expressで作りました。
(...フレームワークはライトだけど、雑魚エンジニアにとっては学習コストがヘビーでした...)
ソースコード垂れ流します。
サーバーはAWSのEC2 t2.nanoインスタンスを使いました。
何を作ったか
どうしても彼女が欲しかったので、彼女を作りました。 どんな子にするか、すごく悩んだのですが、SAOのあすなちゃんにしました。(ペロペロ)
仕様
- 特定のワードには特定のワードで返事する
- はじめまして
- すき
- だいすき
- よくわからないワードにはランダムで用意したメッセージを返す
感想
感想垂れ流します。
楽しい!
LINEはソッコー返事する + 返事欲しいタイプの人なんで、ソッコー返事してくれるのは嬉しいですね。
ビジネス..?
いろいろ妄想できますよね。
- お店の予約
- お店のメニューの確認
- 位置情報から近くの何かを検索
- おすすめ商品のレコメンド
普段のコミュニケーションツールの中で完結してたほうがユーザーは使いやすいだろうし、全然いけそうですよね。
みなさん業務でHipchatとかSlackとか使ってるだろうし、そのノリですよね。
メッセージの形式、いろいろあって面白そう
ちょっと心が折れたのでプレーンなテキストで返事するようにしたのですが、ほかにもいろんな形式のメッセージが送れるみたいで、すごく楽しそうだなと思いました。
- text
- image
- video
- audio
- location
- sticker(スタンプ?)
LINE Developers - BOT API - API reference
Express難しい...
JavaScriptとかガッツリ書いてないんで、それも辛かったし、Expressのお作法とか全然分からなくて難しかったです。(ミドルウェア...?なんそれ)
クソコードを爆誕させたけど、動いてるし、迷惑かけてないからおっけー!(甘え)
サーバー用意するのめんどかった...
雑魚なんでインフラの知識がなくてつらかったです... API Gateway + Lambdaとかで実現してる人もいてすごいなーと思いました。(こっちの方が楽そう...?)
まとめ
余談
こういうの書いてる時に死にたくなりました。
switch (message) { case 'すき': replyMessage = 'わたしも♡'; break; }
GWに何やってんだよ...