potatotips #32 (iOS/Android開発Tips共有会) レポート

potatotips #32に行ってきました。

iOS関係だけの簡単なまとめです。

potatotips.connpass.com

CocoaPods / Carthage by JPMartha

Carthage ≒ CocoaPods

  • どちらもSwift2.3/3.0対応する見込みするらしい
  • ちなみにCarthageコンパイル時間が短くなるメリットもあるそうです。

感想:そもそも知らなかったし情報収集を各所でしているのにただただ感心。

WWDC2016で話されたDependency Injectionを活用してリファクタリング by yoichitgy

speakerdeck.com

Dependency Injectionを使って依存しないコードにしよう。
ちなみにSwinjectというSwift向けのフレームワークもあります。

  • Good - 最低限必要なものにだけ依存
  • Bad - AppDelegateに依存
    • Protocolで処理を抜き出してAppDelegateに依存しないようにする

感想:Swinjectも初耳でした。触ってみよう

サンフランシスコで就活してみた話 by kitasuke

  • SanFranciscoがEngineerにとって良い
  • ただビザの取得が難しい
  • 面接フロー
    • 電話面談
    • 技術面接
      • LEET CODE / HACKING THE GOOGLE INTERVIEW など参考
    • オファー
  • 注意
    • 日本で受けれないとこがある(面接などができない場合)
    • ビザサポートが必要だと伝える
    • Githubなど用意しておく

iOS枠でしたが海外就活の話。

iOSアプリのライブラリ依存管理ツールとしてSwift Package Managerを使うのはまだしばらく先かなと思った話 by mono

www.slideshare.net

  • Swift Package Manager == ライブラリ依存管理マネージャー
  • Swift3 * XCode8 で使えるか調査
  • まだ未完成なのでまだ早い
  • Carthagoの方がBuild早くなるしいいかな
  • 対応ライブラリ多くない/情報が少ない
    • しばらく様子見
    • iOSBuild周りも対応予定(fastlaneとか)

しばらく先に使ってみよう。

OnBoardingを簡単に作れるライブラリをいじってみた by akatsuki174

speakerdeck.com

概要 そもそもOnBoardingとは
IT用語辞書では「組織やサービスに新たに加入した人に手ほどきを行い、慣れさせること」。 要は、チュートリアル的なものです。

ライブラリ * paper-onboarding

なかなか綺麗なUIでよかった

プロジェクト内のURLをAssociated Valuesで管理してみる by marty-suzuki

APIで投げる際などのURLを管理 github.com

Git見ていただいたらわかるのですが、シンプルですごく勉強になる

Realm Centered Design by susieyy

speakerdeck.com

realm中心設計

  • realmNotification
    • Data変更時にindexが通知される(CoreDataではindexは返ってこない)
  • realm * RxSwift * MVVM
    • Observerとしてrealmを使用する

realmNotificationなかなか便利そうなので触ってみよう

チーム開発にSwiftLintを導入してみた by ikamooon

  • SwiftCodingStyleがない→Lint導入
    • そのまま使うと厳しすぎた
    • ymlで文字数とforce_castをいじって他は手で修正
  • good
    • コードレビュー前に気づける
    • 宗教戦争がなくなる

面白そう!まず個人で試してみます。

まとめ

最新情報のキャッチアップがしきれていなかったので初耳のものが多かったし 設計周りの話もありすごく勉強になった。 とりあえず今回学んだものを試していこう。

出版記念!著者が語る『「少し先の未来」を予測する クックパッドのデータ分析力』 レポート

出版記念!著者が語る『「少し先の未来」を予測する クックパッドのデータ分析力』 http://eventdots.jp/event/575614

データの価値化と、食トレンドの把握 @クックパッド株式会社 中村 耕史氏

自己紹介

たべみる事業の責任者

書籍に関して

書いてあること サービス立ち上げ データの考え方

書いてないこと データ分析手法

書いてないことが書いてあるおすすめ書籍

  • 考え方

ビッグデータビジネスの時代

  • 手法

10年戦えるデータ分析入門(エンジニア/マーケより!?) イシューからはじめよ(コンサルより!?何を調べればいいかを教えてくれる本)

クックパッド利用状況

海外でも使われている。 US/インドネシア/スペイン/アラビア 5600万人利用/月

7割はSP(SP75% App25%) 利用時間 SP 16:00 PC 16:00 11:00

法人向け

データ分析したものを小売に連動 by たべみる

持っているデータ レシピ→傾向の変化 検索→ニーズ 保存→関心度

データ分析の仕組み

slideShare参照

www.slideshare.net

www.slideshare.net

意思決定調査の起点

検索文言からフラグ+人力で材料orメニューor調味料を検索しているのかを判定

データの価値と適切な表現

データ自体がしょうもないと出来るものはしょうもない →適切な場作りが大事!!

良いデータ→表現→分析 が大事

データで作る新しいビジネスモデル 〜企業の未来を作るのはデータサイエンティスト〜 株式会社PKSHA Technology 神谷 勇樹氏

データサイエンティスト →データからユーザーにすする情報を選定する

about PKSHA

IT ビジネス データサイエンス を行う →社内全員全ての領域を担当する。

シンキングパス

トレンド解釈→課題のマトリクス化→課題の因数分解 どんな課題に対してどんな分析アプローチを取りか

スムーズにデータ活用する組織にする為に オイシックス株式会社 EC事業本部 戦略推進室 米島 和広氏

データが弱かった時代

単価6000円を達成したい →一個の単価あげる/複数商品を買ってもらう →うまくいかず・・・

システム部の課題 マーケからの依頼が大量に来る →雑な計画なので結果にならない →売り上げしか見ずに何がうまくいったかわからない

Tresure Dataでログを取得し改善を図った

結果と先行指標をリアルタイムに見るようにした CVR等の数字を見るようにした ダッシュボード(データが可視化された画面)が確認しやすい為よくデータを見るようになった →PDCAのCAが強化された

見るべき対象を事前に把握する 実験対象のみの早い事実確認ができるようにする

事例

高頻度のページ更新(下手しい毎日変更している) →ヒートマップを全ページに埋め込んでいる/特にLP フォームは重視

ヒートマップで重要なこと CVRあげることを目指さない →お客様を満足させたい/理解したい

新しいサービス時には、とことん知る アンケート 電話 ヒートマップ トラフィック変化 ご自宅訪問 追いかける

データドリブンサポート

施策対応前にレビューポイントを明確にする

パネルディスカッション

by モデレーター

トレジャーデータ 堀内氏 パネラー

クックパッド 中村氏 PKSHA Tachnology 神谷氏 オイシックス 米島氏

データ分析を取り入れる際の社内事例

クックパッド データにwelcomeな環境だがあまり売り上げにつながらないので難しかった

オイシックス 特になし→結果が出ていなかったので導入しかなかった GAで細かいトラフィック(主婦層のトラフィックを見たい)を見ていたが工数が大きい→Tresure導入

スカイラーク 小さな事例から、データ分析の結果がある事を証明してから説得 →+導入コストが低い+いつでも止められる+good/badの時のコスト比較を提示

Data 共有

Tresure data 内他社間で共有できる

トレジャーデータ 天気/トレンドデータと掛け合わせれるとgood

iOS 9 Bootcamp!エンジニアとデザインのあいだ レポート

iOS 9 週連続 Bootcamp!iOS 9で変わる体験とエンジニアとデザインのあいだのレポートです。

↓公式レポートとライブ配信していた実際の様子です

www.youtube.com

dev.classmethod.jp

@dots

1.エンジニアとデザイナーのあいだ @クラスメソッドよこやまゆうだい

エンジニアのためのデザインの考え方や、実際にエンジニア、デザイナーを兼任してモバイルアプリケーションの開発に関わってきたなかで感じた課題などをお話しします。

エンジニア*デザイナーって少ない

@クラスメソッド mobile部の比率 70 エンジニア 10 デザイナー 10 PM.PL 10 どっちも

こんな感じでやってる

自分で
要件定義→デザイン→実装
複数人時はデザインを投げて最後にUI調整
エンジニアはCustomView職人
icon等素材はリポジトリにpush

WHY デザイン*エンジニア?

よりよいAPPを届ける為

あるある

@エンジニア

WHAT:
 レイアウトのバランスが良くない→要素の間隔etc
Problem:
 細かい修正が発生する、修正箇所が多すぎてそのままrelease
DO:
 レイアウトの基礎を学ぶ
 →要素のアウトラインを揃える(重複するものは揃える)
 →上下左右の余白を揃える
 →大きな要素をセルの真ん中に配置する
 →オススメ本:なるほどデザイン

WHAT:
 オートレイアウトが大変
Problem:
 端末によって解像度の違いでUI崩れる
 時間がかかる
 簡単なレイアウトしか作れない
DO:
 オートレイアウトから逃げない!
 →ただaddmisingconstraintsは使わないで!!→理解せず使うと大変
 →参考 http://www.slideshare.net/kakegawa-atsushi/devio-auto-layout

WHAT:
 簡単な編集が出来ない
Problem:
 特別のソフトが必要と思う
 デザイナーとのやりとりの方が時間がかかる
DO:
 画像編集のスキルを身につける
 →macのプレビューを使用→画像見る+サイズ、カラー編集etcが出来るよ
 

@デザイナ

WHAT:
 デザイン提案時に理由を聞かれる
Priblem:
 説得力がない→根拠がない
 意見をかわせない
 デザインスキルが鍛えられない
DO:
 UIと会話しよう
 →なぜそこにあんの?とUIに聞くイメージ

WHAT:
 WEBデザインっぽい。。。
Priblem:
 UIコンポーネントの特性が考慮されていない
 画面遷移が複雑で迷子になる
 1つの画面に情報が多すぎる
DO:
 アプリにはアプリのデザイン
 デザイン決まったら人の意見を聞いて見る、動くようになったら使ってもらう
 →feedbackもらう

WHAT:
 自分で修正してPRちょうだい
Problem:
 少しの修正でもコミュコストが大きい
 作業の合間に修正依頼でたりして気がひける
DO:
 InterfaceBuilderをマスターする(Xcodeでストリーボードをいじる)

まとめ

エンジニア
 レイアウトの基礎を学ぶ
 AutoLayoutから逃げない
 簡単な画像編集スキルを身につける
デザイナー
 デザインに明確な根拠を持つ
 APPWEBデザインは違う
 InterfaceBuilderをマスターする
どっちも
 色々なAPPを見よう
 デザインガイドラインを見る
 https://developer.apple.com/jp/documentation/UserExperience/Conceptual/MobileHIG/DesigningForiOS7/DesigningForiOS7.html
 参考書籍:モバイルデザインパターン

2.奥行きを意識したプロダクト-iOS9で変わる体験- @goodpatchUIdesigner

iOS 9のアップデートに伴いiPhone6sや最近ではiPad Proもリリースされました。
ハード、ソフト両面でのアップデートにより、どのように体験が変わるのかUI デザイナーの視点からNews App等標準アプリケーションを参考 に考察します。

@goodpatch

リサーチ→UI→プロトタイプ→実装
実装以外をデザイナーが行う

iOSのハードのupdate

Apple Pencil良い!→反応速度が他社に比べ早い!
3Dtouch/pop etc
appleTV

感じたこと

keynote見た
APPswitcher
QuickAction
APPLEtvのUXが良い!→奥行きを感じるUI

レイヤーの概念が強調されている!→奥行きを感じるUIを強調している
→QuickAction→他Appがボケる
設定アイコンも歯車ごとにレイヤー分けされている

ユーザーは迷わない!?
→結局ユーザーはその複雑性に慣れる
てスラーの〜論(インタラクションデザインの教科書)

iOS6以前 notFlat奥行きなし
Flat
→奥行きあり
複雑性はユーザーが持っていた

@human interface guidelines

QuickAction
アプリの先にユーザーがしたい行動を呼び出す
spotright
App検索が出来る
ProactiveAssistant
イヤホンさすとmusicのショートカットが出るetc
→ユーザーに寄り添い行動をサポート

余談
Apple+IBMのAPPが作られており公共の施設の情報を公開?
高齢者向けAPPも作っている

デザイナーとエンジニアの関わり方

updateによる製作者側の負担が大きい
QuickAction等、紙ベースでプロトタイプ作りにくい

問題:
 お互いのコミュニケーションロスは多い 今後の課題:
 実際作ったらなんか違う
 デバイスによって違う 解決策:
 JSONデータをデザインに取り入れる
 →SketchDataPopulatorというプラグインを使用し実データで確認を行う
 FluidforSketch AutoLayoutのようなもの

実機を想定したプラグイン、ソフトが増えた
silver
スケッチ上で遷移やインタラクションをつけれる
Qwikly(まだreleaseされていない)
グラフィックを作ってXcodeに吐き出せるツール

デザイナーLarry teslarさん好きだそうです。

まとめ

奥行きを意識している
→ただ現在は複雑性をユーザーが学んでいる段階
制作環境の変化
→エンジニアとデザイナーの壁を少なくするような

OSから提供された機能を理解しユーザーに複雑さを感じさせない

3.質問タイム

現在はデザイナーにAutoLayout任せたりは出来ていない
- 工数としては微妙(出戻り、結局エンジニアがAutoLayoutいじる等あり)、よりもお互いの理解を深める為!?

AutoLayoutの勉強法
- やる!ドキュメント見る!
- http://dev.classmethod.jp/references/ios-7-xcode-5-auto-layout-1/

コミュロスを減らす工夫
- 共通言語を作る(セルetc)

エンジニア*デザイナーを行う理由
- コミュロスを防ぐ、お互い指摘できるようになり品質をあげる←技術の話がわかる為怠けられないw
- ただ学習コストは高い

4.memo

tips
SBのコンフリクトを防ぐ為にSB分割を作業毎に分割し作業する

PHPBLTレポート

php歴6ヶ月程ですが正直ほぼ理解できず、、、 下記ブログを参考にした方がいいと思いますw

fortkle.hatenablog.com

1.phpのarrayを自作

SplFixedArrayの使用 →1/3の容量に出来た +アクセサ,count,iteratar(forEachをする為)をcustomArrayで実装 →1/100の容量に →ただ処理時間は約1.5倍にw PHP BLT だけど HTML5 の コンテンツモデルのお話 // Speaker Deck

github.com

2.openpearの素敵な終わらせ方

by keisuke sato @RIAF pear.php.netをオープンに

openpearは今日でサービス終了ですw

3.html5のコンテンツモデルについて

https://speakerdeck.com/fivestar/php-blt-dakedo-html5-false-kontentumoderufalseohua ブロック要素、インライン要素を分けていた → コンテンツモデルとして定義された →いろんなカテゴリーに分けられた  →Flow→主にbody内にあるもの

html5以前では作れない

HTML5 PHP HTML Paragraphizerをオープンソース化した!!かったけど退職したのでしてませんw

4.BigMasterData

www.slideshare.net @mercari MasterDataとは DB内で他データの参照元となるデータ

5-10msec/2.0MB←遅い TSVにした 2MB→600kb 70msec→7msec

5.Symfony

Symfony 面倒だけど便利 DI使うとyamlで定義できる

LoggableTraitを使うとテストが書きやすくなるよ

6.phpgolangのextension作ったよ

github.com/do_aki/gophp_sampleにあります phpはsegmentation falut がたまにおこる

github.com

7.swift2をphpで学ぶ

PHP7/swift2の比較

speakerdeck.com

  • コメント swift:シャープが使えない

  • type swift:''が使えない

  • if swich swift:if分内のカッコいらん swift:switch breakeがいらない

webApplicationをswiftで書いてみた

8.couchbase

竹澤さん couchbase -NoSQL でかいデータはstreamで流せる! couchbase4 N1QL(ニッケル) -SQL使えるようになったよ

トランザクションはなくてもCheck-and-set!?(CAS)でどうにかなる!?

9.phpbuildがいかに便利か力説します

http://www.slideshare.net/hnw/phpbuild phpbuild→ phpenvのプラグインとして使うと使いやすい phpenc updete コマンド

good 自分専用のPHPが作りやすい

参考:

liginc.co.jp

10.phalcon

@arimo phalcon -闇多い -はやい!!

speakerdeck.com

Phalcon2でDMM.eってアプリ作ったよ

11.whpってapp作ったよ

fuizbuzzをwhpで作った

14.current status

yui_tang PSRとは!? PHPのコーディング規約のこと

PSR-9,10 Securityに関してのPSRが出来たよ!

15.開発効率をあげる

Vargrant chefすみのものを作る boxがたまに壊れる マイグレートするchefの作成

projectのsetup sh(シェル)

ソースコード

16.application サーバーを作ろう

www.slideshare.net

phpいじれる人がサーバーいじれる problem ヘッダが読まれない!!

17.PHP7でnativeExtentionを作る

www.slideshare.net

@misumi_rize extensionが75%変わっててつらかったよ

18.たのしい独自フレームワーク

www.slideshare.net

pixiv フレームワーク使っていないよ →フレームワーク作る フレームワークのコアは小さく good 自分で作っているので対応が即できる

intern の提出課題でだしてるよ

19.phalconとメールとテンプレートと

www.slideshare.net

phalconにはmail送信機能がない Qdmail*Voltで作成 改行が出来ない →で出来る{{constant(PHP_EOL)}} Voltが変と思ったらPHPを確認しようj

他.PHPという概念が存在しない退屈な世界

補欠枠で発表出来なかったのですが 参考に資料だけ。

www.slideshare.net

iOS 9 週連続 Bootcamp!6週目 UIKitとXCode7 イベントレポート

iOS9 Xcode7のイベントレポートです。

導入

iOS 9 週連続 Bootcamp!6週目 UIKitとXCode7 @dots http://eventdots.jp/event/573156

1.UIKit 平屋さん クラスメソッド株式会社

UIStackView、NSLayoutAnchor、UILayoutGuide のサンプルコード https://github.com/hirayaCM/iOS9UIKitDemos/

UIStackView

概要

viewを縦横にレイアウトするクラス

good

  • AutoLayoutの制約を設定する作業が減る
  • メンテナンスしやすくなる →それぞれの要素に制約を

今まで:それぞれのviewにautoLayoutを使用していた

caution

  • iOS9以降で使用可能
  • UIStackViewを仕組み自体を知る事が必要

仕組み(内部)

  • arrengeSubviews  →管理するviewの配列
  • axis  →整列する方向(水平/垂直)
  • distribution  →軸方向にviewをどう並べるか
  • alliment  →軸に対し垂直方向にviewをどう並べるか
  • spcing  →view間の感覚の設定

    仕組み(外部)

    UIStackViewの位置を指定する

NSLayoutAnchor

概要

NSLayoutConstraintを生成する為のクラス iOS9以降から 生成用メソッド6個のみ →他のviewのanchorと使用

good

制約を設定するコードが短くなる 読みやすい

参考

Reference

https://developer.apple.com/library/prerelease/mac/documentation/AppKit/Reference/NSLayoutAnchor_ClassReference/index.html#//apple_ref/occ/instm/NSLayoutAnchor/constraintEqualToAnchor:constant:

UILayoutGuide

概要

ホワイトスペースを定義する為のクラス (ホワイトスペース→コンテンツのない領域)

good

ホワイトスペースを軽く実装出来る 今まで:blankのviewを使用

プロパティ

Anchorを持っている →NSLayoutAnchorを使用できる UIViewではない →UIViewより軽量

caution

iOS9以降にて使用可能 SBでの追加は出来ない→見つかんない→コードで作成

memo

UILayoutGuideないときは等間隔にボタンを配置するとき結構面倒だったような。 ローカライズ対応で動的にボタンのサイズが変わる場合とか

2.XCode7

熊谷さん EZ-NET

Swift2

エラーハンドリング/foreach etc追加

呼出改装検索

機能がどこで使われているか検索出来る

インターフェイス定義の確認

@swift OBJ-c .hで使うとswiftで表示される 左上の四角→generete~で実行される interfaceのみ綺麗に表示される

無料のオンデバイス開発

developerにならなくても実機確認できるよ

ストリーボード参照

複数ののストリーボードを一枚で使用出来る http://dev.classmethod.jp/smartphone/iphone/storyboardreference/

オンデマンドリソース

AppStoreに画像等のデータを保持出来る

→ダウンロード時にソースのみ→随時画像等をAppStoreからDL が出来る

Resouce Tagsで設定

BuildSettingでデバッグ時のリソースサーバーを設定可能

UIテスト

画面操作を自動でテスト コードでアプリを操作 操作からコードを生成出来る

例:テキストフィールドに文字が入った時にボタンを押せるようになる

テストの登録

テストターゲットを登録 →UITestingbundle testで始まるメソッドを記載

テストコード書く

app/window/menubar/buttonのインスタンスをつくる button.click() AsserFalse(button.enabled)

操作からコードを生成出来る

左下のrecボタンで実際に動かした動作がコードに記載される

tips

ピンポイントに操作をコード化したい rec→一時停止→操作を進める→再実行→操作

結果

~で結果確認 lognavigatarで詳細確認→画面のスクショも見れる

caution

テスト中は実際に動作します! なので他動作は出来ない 時間がかかる →5.6個で10分くらい!?

コードカバレッジ

どのコードをどれだけ実行されたかを収集 使われた割合 メソッド/プロパティ毎に

good

テストの甘さが見れる

方法

Edit schem→test→gather coverge data でtestすればok

確認

lognaviで確認できる

エディタで直前にテストした時の呼出回数確認出来る editar→showcodecovergeで見れる

caution

テストの度に行われる

ドキュメントコメント

概要

コードの型/機能にコメント追加出来る

  • MarkDownっぽい!!

  • 装飾/画像/リンクが追加可能

  • Swift専用

  • プレイグランド強化 →readme的な事が作りやすくなる

書き方

コメント行内にmarkup

リッチコメント

ファイルインスペクタで変更可能

kobitoっぽくしてくれる //: /: /

参考

http://ericasadun.com/2015/10/15/announcing-swift-documentation-markup/

reference https://developer.apple.com/library/watchos/documentation/Xcode/Reference/xcode_markup_formatting_ref/index.html

公式レポート

dev.classmethod.jp

swift ターミナルを使用した cocoapod インストール方法

すぐターミナルの使い方を忘れるのでめも

1、ファイルの場所まで移動
  ls : 現在の場所を表示
  cd : 移動

2、pod file作成
  touch : ファイルの作成

3、pod を記載
  vim : ファイルの編集
  :wq : 終了

4、install
  pod install : podをインストール

cd {プロジェクトのファイル}

touch Podfile

vim Podfile
pod '{使用するpod名}' , '{podのバージョン}'
:wq

pod install

swift NSUserDefault で NSMutableArray が使えなくなった!

NSUserDefaultでのつまずきです。

NSUserDefaultにMutable(変更可)なインスタンスを保存し
取り出すとImmutable(変更不可)になり
下のようなエラーがでる

[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

対策としては、
取り出したインスタンスをmutableCopy()を行い
ImmutableからMutableなものに変換する

//保存される配列
var Array:NSMutableArray = [0]

var ArrayImmutable:NSMutableArray = [0]
var ArrayMutable:NSMutableArray = [0]

//Arrayを保存
let defalts = NSUserDefaults.standardUserDefaults()
defalts.setObject(Array, forKey: "testArray")


//通常通りArrayを読み込む
ArrayImmutable = defalts.objectForKey("testArray") as NSMutableArray!
//変更不可の為 error
ArrayImmutable.addObject(1)


//mutableCopy()を使用し読み込む
ArrayMutable = defalts.objectForKey("testArray")?.mutableCopy() as NSMutableArray
//変更可
ArrayMutable.addObject(1) 

参考
きみが思い出になる前に - NSUserDefaultsに保存したmutableなオブジェクトはmutableCopyを使って作り直す