読者です 読者をやめる 読者になる 読者になる

Think Big Act Local

iPhone開発を軸にブレブレの記事を書いていきます。

iOSDC 2016に参加してきたよ #iosdc

iOS Xcode アプリ 勉強会

iOSDC 2016という、日本最大級のiOSのカンファレンスに参加してきました。

iosdc.jp

iOSDCはiOS・その周辺技術に関するカンファレンスで、公式サイトにはiOSエンジニアが聞いて面白ければ何でもOK」と説明されています。
トークは数多くの応募の中から運営スタッフにより採択されます。当日は技術的なテーマはもちろん、「海外のカンファレンスで登壇する」や「ハッピーな開発チームを築く」など、幅広い内容のトークが行われました。

以下、参加した記録として気になったセッションや会場の様子などを振り返ってみたいと思います。

振り返り

会場

f:id:himaratsu:20160823010812j:plain

会場は練馬のCoconeriホールという場所でした。

www.nerima-idc.or.jp

個人的にちゃんと練馬に上陸するのは始めてで、最初は「渋谷近辺じゃないのか」と思ってたんですが、行ってみると案外練馬近いし、家から交通の便も良いし、子連れのお母さん方とかが歩いてたりといつもと異なる環境で、良いコンディションでイベントを楽しめました。

f:id:himaratsu:20160823013359j:plain

トークが行われる部屋はこんな感じで、かなり広い空間でした。(A/Bトラックの2部屋に分かれていて、写真は大きい部屋の方のAトラック)
朝から座席がギッチリ埋まっていて、iOSエンジニアたちの早起きスキルに驚かされました。

トーク

聞いた、もしくは動画でみたトークのうち、印象深いものを並べてみます。

海外のiOSカンファレンスに登壇する - 完全版

id:shu223 さんによる、英語が苦手だったスタート地点からいかに海外カンファレンスで登壇するに至ったか、そのモチベーションと攻略法などのお話。
海外で登壇するという面白さはもちろんのこと、目標を先に設定して、そこから逆算で今自分がやるべきことを決めてやっていく堤さんの生き方がすごいなと思いました。

d.hatena.ne.jp

RxSwiftは開発をどう変えたか?

blog.ishkawa.org

@_ishkawaさんによる、RxSwiftを使った実装の紹介と、導入により開発がどのように変わるのか、というお話。
Rx は以前から興味がありつつも機会を作れずまだ試せてないのですが、その心にまた火がつけられました。記法を覚えるまでには少し時間がかかりそうですが、処理の流れが追いやすくなるので見通しの良いコードが書けるし、コードレビューも行いやすくなりそうだなと感じました。

SwiftでのGeoFence実装 - Tipsを添えて

@shmdevelopさんによる、iOSのGeoFence(正確にはGeographical Region Monitoring)のまとめとTipsの紹介。
iOSの位置情報プログラミングは色々なパターンがあり、その複雑さは年々難しくなっていってます。自分も最近実装したのですが、ドキュメント通りに実装しても挙動が怪しかったり、テストをしても不安な部分があったのですが、このトークを聞いてどこが実装による不具合でどこがOS挙動の怪しさなのかが分かってとても助かりました。

Xcode で快適なデバッグライフを追い求める

@dealforestさんによるXcodeデバッグの話。
プログラミングの大半はデバッグで、そのデバッグの効率をあげるためにどんなことをしてるか?のハウツーが複数紹介されました。出てくるケースがどれも「あ、これ困って諦めてたわ。。」というようなもので、各ケースでどうデバッグ情報を集めるかという話は毎回うならされました。今回のiOSDCで最も明日から役に立つトークだったと思います。ベストトーク賞の第3位を受賞されてました。

dealforest.hatenablog.com

ランチ

f:id:himaratsu:20160823013330j:plain

せっかく初練馬だったので、ランチは地元住まいの先輩おすすめのラーメン屋にいきました。

tabelog.com

お店も綺麗だしとても美味しかったです。スープは濃厚な豚骨魚介でした。

Tシャツ

f:id:himaratsu:20160823013725j:plain

当日、参加者にはTシャツが配られたのですが、役割や参加チケットの種類によって色が分けられていました。スタッフはピンク、登壇者は緑、スポンサーはオレンジなど。 パッと見でどういう方か分かるので、とてもコミュニケーションをとりやすかったです!

宣伝

f:id:himaratsu:20160823014258j:plain

自分はスポンサーチケットで参加させていただきました。無限コーヒーエリアの近くのジョブボードにポスターを貼っていたのですが気づいた方はおられたでしょうか?

ヤフーでは一緒に世の中の課題を解決していける仲間を募集しています。少しでも興味がある方は↓のページを見てみてね!

hr.yahoo.co.jp

まとめ

iOSDC 2016、最高に楽しかったです!iOSに興味のあるエンジニアやデザイナーがこの規模で集うのはすごいですね。
今回は普通にトークを聞くだけの人として参加したのですが、こういうカンファレンスは登壇者 or スタッフになった方が数倍楽しそうだなと感じたので、来年も開催されるようであればそんな形で参加したいと思います。

運営スタッフのみなさま、登壇者のみなさま、参加者のみなさま、ありがとうございました。おつかれさまでした!!

potatotipsでUICollectionViewの並び替えのAPIについて発表してきたよ

iOS Swift 勉強会

FiNCさんで開催された、potatotips #31 で発表してきました。

potatotips.connpass.com

発表した内容

タイトルの通り、UICollectionViewのCellをインタラクティブに並び替えるAPIの紹介です。

デモ

こんな感じで、

  • CollectionViewの(インタラクティブな)並び替え
  • サイズの異なるCell間の並び替え
  • pagingEnabled=trueの場合の並び替え

などができます。iPhoneのホーム画面のような挙動ですね。

経緯

WWDC2016で参加したセッションの1つに「What's New in UICollectionView in iOS 10」というのがありました。iOS 10でUICollectionViewがどう変わったか、どのような新しいAPIが追加されたかを紹介するセッションなのですが、そこでUICollectionViewにも並び替えのためのAPIがあることを知りました。

おー、これは!っと思って盛り上がったのですが、オチとして、このAPIsはiOS 9からすでに提供されていたことに調べていくうちに気づきましたw
iOS 10からスクロールがスムーズになったことで、並び替えの体験もより良くなったぜ!という紹介だったようです。

そんなわけで新しいAPIではなかったのですが、自分は知らなかったし、そんなにネット上に情報が出てないような気もしたので、potatotipsのLTで紹介してきました。

簡単な説明

並び替えにはUICollectionView, UICollectionViewDataSourceの以下のAPIを使います。

// UICollectionView
@available(iOS 9.0, *)
func beginInteractiveMovementForItem(at indexPath: IndexPath) -> Bool
@available(iOS 9.0, *)
func updateInteractiveMovementTargetPosition(_ targetPosition: CGPoint)
@available(iOS 9.0, *)
func endInteractiveMovement()
@available(iOS 9.0, *)
func cancelInteractiveMovement()

// UICollectionViewDataSource
@objc(collectionView:canMoveItemAtIndexPath:) func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool
func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)

UILongPressGestureなどを使って、並び替えの開始のタイミング、移動のタイミング、終了のタイミングで上記のAPIを呼ぶことで実装できます。
UITableViewと同じく、並び替えが終わったときにデータを入れ替えする処理を実装する必要があるのですが、ここでデータの不整合が起こるとクラッシュしてしまうので注意が必要です。

サンプルコード

github.com

まとめ

久しぶりにpotatotipsで発表するなー、と思って数えてみたらなんと2年ぶりの発表でした。 しばらくぶりのみなさまとお話しできてとても楽しかったです。

参加者のみなさま、素敵なオフィスにお邪魔させていただいたFiNCのみなさま、ありがとうございました!

関連してそうな記事

himaratsu.hatenablog.com

himaratsu.hatenablog.com

himaratsu.hatenablog.com

f:id:himaratsu:20160817234145p:plain

【書評】基本が身につくAndroidアプリ開発入門書

Android iOS 書評

著者の森さんより、『基本からしっかり身につく Androidアプリ開発入門』を献本いただきました。

タイトルの通りAndroidアプリ開発をこれからはじめたい人向けの本で、Amazonでもベストセラーになっているようです。

この本は「ヤフー黒帯シリーズ」として出版されています。黒帯とはヤフーの中で特に優秀な人材に付与される称号で、著者の森さんはAndroid技術黒帯に認定されています。

iOSアプリ入門の黒帯本が少し前に出ていて、自分も読んだのですが、今回のAndroid黒帯本も構成などはそれに似ていると思います。

目次

本の目次は以下のようになっています。

  • 第1章 アプリ開発の準備
  • 第2章 Androidアプリを構成する要素
  • 第3章 はじめてのアプリ
  • 第4章 データの保存と共有
  • 第5章 通信とバックグラウンド処理
  • 第6章 カメラの撮影
  • 第7章 ユーザーの位置と地図
  • 第8章 アプリの公開

第1章ではアプリ開発に着手する前に考えるべきことが簡潔にまとめられています。 第2章ではAndroidで登場する「アクティビティ」「サービス」などのコンポーネントの説明。 第3~7章ではサンプルアプリを実際に作りながらxmlによるレイアウトやAndroidのクラスを使った様々な実装を学んでいくことができます。 最後の第8章で、自分の開発したアプリをGoogle Playに公開するまでの手順が紹介されています。

実はこれまでにも独学で、Webのドキュメントを読みながらAndroid開発に挑戦したことがあったのですが、「フラグメント」「サービス」「ブロードキャストレシーバ」などのiOSにはない考え方がいまいち理解できず、挫折してしまいました。 この本では丁寧な説明だけでなく、実際にそのコンポーネントを使ったサンプルアプリを作る過程があるので、しっかりと理解することができます。

また、iOSとの大きな違いにxmlによるレイアウトがあると思いますが、こちらも実際に手を動かしながら学べます。ある程度分かってくると、iOS 9からのStackViewと同じような考え方だなとか、自分の知っている知識に置き換えて理解できるので腹落ちしますね。

新しい言語を学ぶ場合、ある地点からはWeb上のドキュメントやOSSのコードなどを読んで勉強できるんですが、そこにいくまでが大変です。 この本は最初の一歩目に最適な本だと感じました。

環境構築からサポート

本書はAndroid Studio 2.xに対応しています。少しでもバージョンが違うとGUIが違ったりして本質的でない部分でハマったりするので、最新の環境に対応してくれてるのは嬉しいですね。

また、Android開発入門は、Xcodeを落としてハイスタートのiOSとは違って、JDKを落として、エミュレータを設定して、必要であればgradleファイルをほげほげして…みたいな、前準備が大変なイメージでした。 Android Studioが賢くなったのもあると思いますが、本にしたがえばスンナリ環境構築出来てしまうので、最初の障壁が超えられるのも助かります。

章の間にコラムがあるのですが、gradle ファイルがどういう役割かとか、Android Studio が登場して以前と比べてどう環境が変わったかなどにも触れられていて、歴史を知れたのも面白かったです。

画像が多く親切な説明

本書では説明の随所に画像が差し込まれていて、迷うことなく進めることができます。

f:id:himaratsu:20160803130156j:plain

例えば上の画像はAndroid Studioの機能で、xmlで組んだレイアウトをプレビューしてくれるものですが、こういう感じでどんな機能がIDEにあるのか教えてくれます。

自分が4年くらい使っているXcodeでもまだ知らない便利機能があったりしますし、こういう便利機能は先に体系的に学ぶのが良いと思います。

まだ、IDEを使っての開発は、純粋なAndroidアプリ開発に加えて、Android Studio自体の学習も必要です。

様々な機能があるなかで、どの機能をよく使うのか?どの機能は気にしなくてよいのか?がこの本を読み進めると分かりました。

仕事で使える知識が身につく

Web上のチュートリアルなども最近は充実してきてますが、最初は体系的に学べる書籍がいいのではないかと思っています。

f:id:himaratsu:20160803130814j:plain

この本ではタイトルにもある通り「しっかりと基本が身につく」内容になっています。

例えばサンプルアプリを作るときに、いきなりUI部分から始めるのではなく、先にロジックを整理して実装していくとカプセル化された良いコードが書きやすいなど、OJTで先輩エンジニアから言われそうなことが書かれています。

また、上に貼った画像はActivityのライフサイクルですが、例えばここではそれぞれのメソッドでは何をすべきか、何を意識すべきかが厚く書かれるなど、仕事でやる上では理解しておくべきポイントはしっかり書かれています。

そのため難しい部分は何度か読まないと理解できなかったりはしますが、しっかり理解できれば実戦でも良いコードが書けると思います。

ありがたいサンプルコードつき

本書で登場するサンプルアプリのソースコードこちらのページからDLして動かせます。

基本的に本の中でソースコードはすべて紹介されているのですが、Android Studioでサンプルコードを開いておくと、メソッド間をジャンプしながら処理を追えたりなどして便利です。

自分は本に出ているコードを写経しながら勉強する派なのですが、自分の書いたコードでコンパイルエラーが出て原因が分からないときにとても助かりました。

まとめ

自分はしっかり読んで理解しながら進めていきましたが、とりあえず動かしたいばの方はサンプルコードを動かしながら勉強していくこともできます。

『基本から身につくAndroid開発入門』は、これからAndroidに入門する方にピッタリな本だと思いました。

夏休みの間に勉強しようと思っていた方はぜひ読んでみてください。

「売れるもマーケ 当たるもマーケ マーケティング22の法則」を読んだ

読書メモ マーケティング

売れるもマーケ 当たるもマーケ―マーケティング22の法則

売れるもマーケ 当たるもマーケ―マーケティング22の法則

この本は過去に実際にあったマーケティングの話をベースに、「こうしなければいけない」「こうしちゃうと死ぬ」みたいな法則をまとめている本です。一部ではマーケティングの教科書とも呼ばれているみたいです 。

自分は以前から「似たような機能をもったプロダクトは沢山あるのに、なぜこのプロダクトだけが流行るのか?」を不思議に思っていて、マーケティング系の本はたまに読んでたんですが、この本は自分の持っていた疑問の多くを解決してくれた気がします。

とても良い本だったので、自分の頭の中を整理する意味も込めてまとめてみます。

続きを読む

ユーザーの声に耳を傾けてアプリを改善するサービス「Meyasubaco」をつくりました

iOS Android Meyasubaco

f:id:himaratsu:20160602223737p:plain meyasuba.co

自分がアプリ開発を行っているときに考えてるのが「この機能とかUIはアプリのユーザーに伝わっているのかな?」ということです。

どれだけ良い機能でもユーザーに使われなければ意味がない。だからユーザーの気持ちになって考えることは常に意識してるのですが、これがとても難しいです。自分はIT業界にいて色んなアプリを触ってるし、機能について考えまくってるのでユーザーと同じ目線をなかなか持ちにくいんですね。

なので、これまではアプリに仕込んだイベントログからユーザーの行動を推測していました。自分はGoogle Analyticsを使ってるのですが、それを見て

  • 「あーこのボタンは気付かれてないな」
  • 「この画面に来たら意味がわからなくて離脱してるな」
  • 「この機能を使ったユーザーはアプリを気に入ってくれる確率が高いな」

みたいに予想を立てて、それを解決/強化する機能改善を行ってまた反応を見る、みたいな感じです。

これは結構良いのですが、ちょっと自分的には不満があって、もっとユーザーの定性的なコメントも知りたいな、と思いました。「めっちゃ便利です!!やばい!!!!」みたいなのも知りたいなぁと。

そんなわけでアプリのユーザーと直接会話ができて、感想や要望を手軽に聞いたりできる「Meyasubaco」というサービスを作りました!

Meyasubaco

meyasuba.co

Meyasubacoは「ユーザーの声を聞いてアプリ改善していこう」というサービスで、iOS/Androidに対応しています。

機能としてはユーザーと直接会話できる「チャット機能」と、よくある質問を表示する「ヘルプ機能」の2つがあります。
2~3行の短いコードを書くだけですぐに使い始められるのが特徴です。

セットアップ

iOSを例にします (Androidの手順ははこちら

// Podfile
pod 'Meyasubaco'

$ pod install

CocoaPods経由でiOS SDKをダウンロードして、以下のコードを書けばセットアップ完了です。

// AppDelegate.swift
Meyasubaco.setApiKey("{YOUR_API_KEY}")

チャット機能

チャット機能は、ユーザーとLINEのようなチャットインターフェースで会話できる機能です。
実装は簡単で、チャット画面を表示したい任意のタイミングで以下のコードを呼びます。

Meyasubaco.showCommentViewController(self)

するとアプリ側ではこんなフォームが表示されます。

f:id:himaratsu:20160602094504j:plain:w300

ユーザーが要望や意見を入力して送信すると、デベロッパー向けのダッシュボードにはこんな感じで表示されます。

f:id:himaratsu:20160602195634p:plain:w580

ここからユーザーに返信すると、アプリ側がチャットインタフェースになって、会話ができるようになります。

f:id:himaratsu:20160602094828j:plain:w300

重要なのは デベロッパーがダッシュボードから返信しない限りチャットインタフェースにならない という部分で、「来たコメントに全部返事書くの大変すぎる…。でも返信しないと感じ悪いし…」とならなくてすみます。
普段は要望コメントを受け付けだけしておいて、より深く聞きたい場合のみ、ユーザーに詳しく聞くことができるのです。

ヘルプ機能

ヘルプ機能は、ユーザーにFAQを表示できる機能です。
ダッシュボード上から入稿したヘルプをアプリ上に表示することができます。

Meyasubaco.showHelpListViewController(self)

するとアプリ側では以下のように表示されます。

f:id:himaratsu:20160602095137j:plain:w300

ここに表示されるヘルプはダッシュボードから更新できるので、アプリ自体をアップデートする必要がありません。

アプリを更新するのは色々と大変(パッケージを作る手間や、iOSだと審査があったりレビューがリセットされる等)なので、ポチポチやるだけで更新できるこの機能は自分的に重宝しています。

また、ダッシュボードでは各ヘルプごとの閲覧数がわかるので、「あ、ユーザーはこの使い方が分かりにくいんだな。次回のアップデートでここを強化しよう」などの方針を決めるのにも役立ちます。

f:id:himaratsu:20160602200407p:plain:w560

というわけで

数行のコードでアプリのユーザーと対話できる「Meyasubaco」というサービスをつくった話でした。
お値段は登録後3ヵ月無料で、さらに3ヵ月経っても一部の機能(返信機能など)に制限がかかるだけでアプリが使えなくなるなどはありません。自分のアプリのユーザーと、手軽に話してみたいな、という方はぜひ試してみてください:)

meyasuba.co

最後になりましたが、 Meyasubaco は会社の同僚と3人で、プライベートな時間で開発してます。まだまだな部分も多くあると思いますが、機能が足りないとか使い勝手が悪いなどあれば、寛容な精神で微笑みながら厳しくフィードバックしてくれると喜びます!