【勉強会メモ】モバイルメソッド大阪 第1回
- 日時:2018/05/10(木) 19:00 〜 21:00
- 場所:クラスメソッド株式会社大阪オフィス
クラメソさん主催のモバイルアプリ勉強会がスタートしました。モバイルアプリ全般ということですが今回は全てSwiftの勉強会です。
Serverless Swift
クラスメソッド株式会社 田中孝明さん
SwiftのOSS化
- Ubuntuでのビルド
- パッケージマネージャの公式対応
VAPOR
運用事例
- まだまだ運用事例が足りない
- もっと気軽に使えれば
Serverlessへのアプローチ
サーバーレスアーキテクチャの教科書
RestAPI⇒Swiftでもやりたい
AWS Lambda
Serverless server Side swift with Hexaville
- コードをデプロイして実行⇒動かない
サーバレスコンピューティング
サーバーについて検討する必要がなくなる
AWS Fargate
- サーバーやクラスタを管理することなくコンテナを実行
所感
- AWS LambdaでSwiftを動かすのは現実的ではなさそう
- サーバを意識しない構成としてFargeteの選択は良さそう
【ゲスト登壇】今さら聞けないRxSwift入門
株式会社tech vein 猪俣充央さん
RxSwiftとは
- 各言語で実装されているRxのSwiftライブラリ
ReactiveX
- Observableパターン
- Iteratorパターン
- 関数型プログラミング
⇒組み合わせて実現
ここが嬉しいRxSwift
RxSwiftの基本
- Observable
- Subject
- Disposable
肝になるのはこの3系統のクラス
ストリームのイベント
- ストリームはnextでデータを流し、completedで終了
- completedが来たらその先はnext/errorできない
- error(例外)が来たら、その先はnext/complated/errorは流せない
RxSwiftのSubject使い分け
- PublishSubject…ボタンのタップイベント
- BehaviorSubject…スイッチON/OFFユーザーステータスなど
- ReplaySubject…あまり使ったことはない。履歴系で使えるかも(直近N件を取るなど)
Disposable
- Subscribeすると戻り値として返ってくる
- disposeを呼ぶと非同期処理のキャンセルなど監視する側として処理を止める
DisposeBag
- 監視元インスタンスが死んだら自動でぜんぶdispose
- DisposeBagインスタンスに突っ込んでおくとdisposeBagが解放される時にまとめてdispose
- Rx標準ではないがめちゃくちゃ使える
オペレーター
Streamを操作する
- map:ストリームを変換する
- filter:ストリームをフィルタする
- flatMap:ストリームを変換する
- mapに近いが戻り値はObserver
try RX!
RxCocoa
参考
Codable用のDecoder/Encoderを作ってみる
クラスメソッド株式会社 中安佑一さん
Codableって使ってますか?
- Swift4からFoundationに標準搭載
- 特定の「フォーマットのデータと特定のクラスや構造体との相互変換を簡単に行える
Codable追加した構造体
- JSONEncoderにSearchConditionを渡してやる
- JSONDecoderにJSON文字列を渡してSearchConditionの型を指定してやる
Standard Prepared
- Swift4で用意されているEncoder/Decoder
標準は2つだけ⇒自作してみよう
- URLQueryItemEncoder
- URLのクエリを生成
- URLQueryItemDecoder
- URLQUeryItemの配列を渡すとCodableなオブジェクトを返す
登場人物
- EncodingContainer
- Keyed
- Unkeyed
- SingleValue
Decorderも同様
CodingKey
- エンコードとデコードでキーとして使う型
コンテナ
- EncoderとDecoderにそれぞれ3つのコンテナ
ネストコンテナ
- ネストされた情報をコンテナに実装
共通するインターフェース
- プリミティブな型に全部対応
Keyedコンテナ
- "キー:値" になっている形式はこれが呼ばれる
共通メソッド
- CodingKeyからキー名をstringValueで取得
エンコーダーの実装
- コンテナから呼び出すためのfileprivateなメソッド作成
- Keyedコンテナを返す
- encodeメソッドは自前で作る(外から呼ばれる)
※メモ
Encoding and Decoding Custom Types | Apple Developer Documentation
iOSアプリ開発における単体テスト入門
クラスメソッド株式会社 山田良さん
テストの壁
- テストしにくい部分が出て来る
- 諦めも肝心
テストしやすいコード
- DIする
- 依存するモジュールを内部で生成するのではなく注入する
SwiftでのDI
- protocolを上手に使う
- 自分で書いたクラスであればinitializeで依存関係を注入
- ViewControllerにDIできるライブラリも存在
- 今回は別途Injectメソッドで対応
Presenterに絞って解説
- ViewController
- viewDidLoadでpresenterを作る
presenter
- subscribeで成功したら画面表示
- errorはダイアログ表示
⇒Mock化
- クリンアーキテクチャ
テストしやすいコードを無視して失敗した例
- keychainを操作するシングルトンを使用したSDKをPresenterで直接操作してKeychainの値を書き換えてしまった
SDKがシングルトンオブジェクトを使っていた時の回避方法
- Wrapperクラスを作ってprotocolを継承
単体テストを導入した弊害
- 実装量は多くなる
- インターフェースが変わる仕様変更の際、修正量が多くなって精神的につらい
ほか
感想
- 破壊的変更を防げた場面はあった
- 書き慣れていないので作業がなかなか進まない
- ゆくゆくはTDDを導入したい
【勉強会メモ】スクラム道関西 第104回オープン・ジャム
- 日時:2018/05/09(水) 19:00 〜 21:00
- 場所:TAM COWORKING OSAKA
スクラムマスターの存在価値を理解してもらうには
- スクラムで開発してよかったと言える価値を追求する
- 稼働率や生産性などの従来型と同じ土俵で評価することはあまり意味がない
- チームのために奉仕しメンバーと一緒に問題に向き合う
- スクラムマスターがタスクを握ってしまうのは良くないがチームを前進させるためにはコードを書くことがダメなわけではない
- チームが把握できていない技術などは調べて試してみても良い
- メンバーに良いやり方を示す
- スクラムに対する思いが強い人がスクラムマスターをやるケースが多い(言い出しっぺとしてやらざるを得ない)
- スクラムについては誰よりも詳しくなってチームを引っ張っていける方がよい
- ビジネスサイドに対してはチームの成果を自分の手柄と言うぐらいのアピールをしても良いかも
少人数チームでのレビュー
フロントエンド担当、モバイルアプリ担当、バックエンド担当などの分業による少人数のチームで担当分野をレビューしてもらえない場合どうするか?
- スクラム的には機能横断型チームが望ましい
- メンバー自分の担当領域以外に関心が無くなる
- 他人の領域をレビューして責任を負いたくない
- 専門ではなくてもチームで互いにレビューできる環境のほうが良い
- レビュー(品質対策)を担当者の問題ではなくチームの問題ととらえる
- まさにスクラムをやるべき環境かもしれない
- 最初はペアプロやモブプロのような形で自分の担当範囲の説明を聞いてもらう
デザイン思考とは
最近話題になったこの記事より
そもそもデザイン思考とは?
調べてみた。
デザインしたサービスやプロダクトの先にある ユーザーを理解し、仮説を立て、初期の段階では明らかにならなかった第二の戦略や代替する解決策を特定するために問題を再定義する、一連の問題解決の考え方のこと
5つの段階(共感、定義、概念化、試作、テスト)はUI/UX系の勉強会で何度か見たことがあるなぁと思いだした。
スクラム開発の実践より前段階でのPOやビジネスサイドが使うフレームワークの1つと言えそう。
下記の本がわかりやすいとのことで紹介していただいた。
- 作者: 小田ビンチ,坂元勲,田村大
- 出版社/メーカー: 小学館
- 発売日: 2017/10/25
- メディア: 単行本
- この商品を含むブログを見る
自動化の取り組み
- テストをどこまで書くか
- 環境調達の問題
- 静的解析の自動化はレビュー効率化や細かいレビュー指摘による関係悪化を回避できるメリット
- 本番デプロイの自動化が誰でもできるのはやや不安はある
- 自動化しすぎてJenkinsおじさん頼みになるつらみ
- 体力がある会社にはビルド専門部隊がいる
社内LTの広めかた
- 発表者と発表内容を事前に調整する
- エンジニア以外の部署を巻き込む
- 影響力のあるゲストを呼ぶ
- ヴァル研究所さんの駅すぱあとの生みの親による勉強会の事例
- 参加しやすい時間の考慮(昼休みなど)
- みんなが興味のありそうなテーマを決める(各チームの障害事例共有など)
- 自由に発表したい人にはテーマを決めずに任せるほうが発表してもらいやすい
【読書メモ】モチベーション革命
モチベーション革命 稼ぐために働きたくない世代の解体書 (NewsPicks Book)
- 作者: 尾原和啓
- 出版社/メーカー: 幻冬舎
- 発売日: 2017/09/27
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
生まれた時から必要なモノが揃っている環境で育った世代が社会の中心となり、AI技術が普及して働き方が変化してくるこれからの時代におけるチームや組織のマネジメントについて考察を与えてくれる内容だった。最終的に心理的安全性の話に繋がるあたりはアジャイルな開発のマネジメントにも通じるものがあると個人的に感じたので、そのような観点でまとめておく。
なお、第4章では個人の働き方にも焦点が当てられており、個人としてのこれからの時代の働き方についても色々と考えさせられる内容だった。書籍で述べられている「乾かない世代」に該当する人であったり、そんな世代をメンバーに持つ上司であったり、読む人の立場に応じても様々な気付きがありそうで、これからの働き方について様々な視点で考察を与える一冊だと思う。
乾けない世代
自己成長と社会貢献がつながっていた「乾いている世代」
「乾けない世代」は自分の時間を犠牲にして社会のために働くことにはモチベーションが動かない。
生まれたときから十分なモノに囲まれて育った彼らは、「ないものを勝ち得るために我慢する」という上の世代の心理は理解できない
ザッカーバーグのような人物を以下のように説明しており上の世代とは価値観が異なるとしている。
「金銭的な快楽」よりも、「意味合い」を大事にする世代の代表
5つの幸福
アメリカ人心理学者のマーティン・セリグマンは「人の幸せは5種類に分けられる」と提唱している。
- 快楽
- 没頭
- 良好な人間関係
- 意味合い
- 達成
乾けない世代は「良好な人間関係」や「意味合い」を重視し、「没頭」する人が多い。
インサイト
必要最低限のモノが全て揃い、溢れている時代
相手の潜在的な欲求を見つけ出して、体験をプロデュースしてくのが、これからの仕事
インサイト(新しい視点)とは?
ユーザーの潜在的な欲求や、購買意欲のツボ
偏愛
任天堂の故・岩田社長の名言
”労力の割に周りが認めてくれること”が、きっとあなたに向いていること。それが”自分の強み”を見つける分かりやすい方法だ
「偏愛」ともいえる嗜好性
他人から見れば非効率かもしれないけど、私はどうしてもこれをやりたい
「偏愛」は人工知能の時代であっても代替不可能であり、これを突き詰めることは「乾けない世代」の得意分野でもある。
異なる「強み」を掛け算する最強チーム
変化が激しく曖昧な世の中で、異なる偏愛を持つ個人を組み合わせたチームで変化に対応していく。
ストレングスファインダー
米国ギャラップ社の開発したオンライン才能診断ツールで、人の強みを34種類にパターン化する。
さあ、才能(じぶん)に目覚めよう 新版 ストレングス・ファインダー2.0
- 作者: トム・ラス,古屋博子
- 出版社/メーカー: 日本経済新聞出版社
- 発売日: 2017/04/13
- メディア: 単行本
- この商品を含むブログ (2件) を見る
強みを分析する手法はストレングスファインダー以外にもいくつかある。
偏愛マップ
お互いの強みを共有し、それぞれの強みや好きなことを理解して認め合うことで変化に強いチームになる。そして変化への対応にはお互いに信頼しあう「信頼社会」が必要。
WHYを共有していくマネジメント
- 全員がやりたいこと
- 世の中のためにやるべきこと
- 個人がやりたいこと
3つをいかに把握し、揃えるかが、組織のマネジメントにおいて最も重要
あなたはなぜここにいるのか
チーム全員でこれを問う。
みんなの「WHY」が、一人ひとりの「WHY」につながるように、対話を重ねて、成長を続けていく
心理的安全性
お互いの心遣い、配慮や共感
最後にいきついたのが心理的安全性。
あなたのマネージャはあなたのことを”人”として見てくれているか?
人として認め合える心理的安全性の中でメンバーそれぞれの偏愛を出し合って変化に対応し、新しい未来を作っていく。
参考
【勉強会メモ】Mobile Act OSAKA #4
- 日時:2018/04/27(金) 18:45 〜 21:20
- 場所:Osaka Innovation Hub (大阪イノベーションハブ)
フェンリルさん主催のモバイルアプリ勉強会。毎回、様々なテーマの発表があって勉強になります。個人的には今回は特にFirebaseで開発したサーバレスアプリの話が興味深かったです。それ自体は以前からある手法ではありますが、SwiftやKotlinのモバイルアプリ開発手法と並べてみてもあまり違和感なく似たようなことができそうだなと改めて感じて、少し触ってみたくなりました。次回は6/29開催予定とのこと。既に 募集 が開始されています。
nory_kaname「サービス開発とアプリ開発」
データを見る人が欲しいもの
ログの拡張性
ログ見て何をするか
- ボタンの改善
- クリック率
- 画面遷移率
- CVR
など
画面のレイアウト
- ListView,TableView
- 縦スクロール、横スクロールの相性
Empty画面
- 画面で伝えるメッセージ
まとめ
- アプリリリース語どうしたいか自問しよう
1amageek「Firebaseとモバイル開発」
firebaseでサーバレスで作った
- firebase
- Stripe
- Algolia
短い時間で高品質なものをつくる
Cloud Firestoreの料金
Cloud Firestore の料金 | Firebase
⇒課金されたことはなく気にしていない。
課金が発生する頃にはマネタイズできていて賄えるようになるはず。
TakuyaOhashi 「Kotlinコンバートと戦った話」
JavaのプロジェクトのJavaファイル約500ファイルをKotlinにコンバート
kaptでビルドが通らないLombokの罠
対策
Icepickが対応していない
- android-state に置き換え
- android-state⇒Icepickをforkしたプロジェクト
あたりが更新されない?by lazy
遅延初期化で利用 バックスタックで戻った時TabLayoutなどで開き直したあとに値を差し替えたい lateinit
実装方法がバラバラだと困るSAM変換
- SAM(Single Abstract Method)
- 関数型に置き換える
コメントが入れ子にできる仕様で30秒ぐらい頭がフリーズ
null
- nullをあえて渡すコード
null!!
にコンバートされる
まとめ
Kotlinコンバートは思ったより手間がかかる
izuchy「Charlesで通信デバッグ」
アプリエンジニアの悩み
運用中の悩み
- 不具合の原因がアプリなのかAPIなのか
Charlesとは
- HTTP Proxy
- 第三者目線でHTTP通信を確認できるツール
手順
※メモ
通信を書き換えてみる
使ってみて
iOSアプリも出てる
Charles Proxy
itok「制約付きレイアウトと仲良くする」
- Auto Layout
- trailing marginを使う
- Constraint Layout 1.1.0
- layout_constraintWidth_minを指定
1.1の新機能
- MATCH_PARENT
- WRAP_?CONTENT
- MATCH_CONSTRAINT(0dp)
- WRAP_CONTENT+制約⇒New
表示内容に従いつつwrap_contentに従う
- コードを書かなくてもlayoutでできるようになった
- 最新のAndroid Studioで作れば可能
ConstraintLayoutで複雑なレイアウトを実現しよう
ConstraintLayout | Android Developers
※メモ
Hiron「ペダルのある生活」
iRig BlueTurn - IK Multimedia | Hookup, Inc.
- 踏んだら楽譜のページをめくる
- Bluetooth接続のハードウェアキーボードとして動作する
- 上下左右とPage Up/Down
- ハードウェアキーボードに対応したら良い
iOSで対応
- UIKeyCOmmandを返す
- PageUp,PageDownはAPI定義されていない
- 文字列で書く(スタックオーバーフローより)
Android対応
onKeyDown()
などを使う- KeyEvent.KEYCODE_**
hokuron 「@objcとは何だったのか」
XCode 9+Swift 4で出る警告の話
※メモ(たぶんこのへんの話)
Limiting @objc inference Side benefit:
- Swift3時代はNSObjectを継承するとextensionのメンバも@objcが暗黙的についた
- protocolはそうではない
- Swiftの実装上不可能
- Swift 4からはこのような混乱を防げる
protocolはそうではない⇒ブログに書いた
Satoshi Hachiya「QR Code Recognition on iOS 11」
QR Code Recognition on iOS11
Event QR Code
iCalendar format⇒カレンダー登録できる
Wi-Fi接続をやってみた
- QRコードを移すと接続しますか?ダイアログが出て来る
- ステルスは対応していない
まとめ
【勉強会メモ】Mix Leap Study#12-TensorFlow Dev Summit 2018 Recap
- 日時:2018/04/25(水) 19:00 〜 22:00
- 場所:ヤフー株式会社 富国生命オフィス
3月にアメリカで行われたTensorFlow Dev Summit 2018の振り返り会がヤフーさんとGDG神戸さん共同で開催されました。軽く触ったことがある程度であまり詳しくありませんが、アプリ側から間接的に利用するケースは増えてきそうで技術的に無視できないので参加してきました。
ニューラルネットの構造自動決定というのは、プログラミングで例えると自動でリファクタリングするアルゴリズムみたいなものなんでしょうか?わかるようでわからん感じです。
TensorFlow.jsによってこの分野にもJSが浸透していきそうな雰囲気を感じました。もはやJSが書ければなんでもできる時代になりつつあります。TensorFlow Hubのような形で学習モデルだけを切り出して共有する流れが広まれば、Deep Learningの知識がなくても学習モデルだけ持ってきてアプリに組み込むことができそうなので、JSで手軽に扱えるのはアプリ側にとってもDeep Learningの活用を身近にするきっかけにもなりそうだと感じました。
Recap of TensorFlow DevSummit 2018
藤原様 (Google Developers Experts、TFUGオーガナイザー)
Tensor Flow Dev Summitとは
- 日本からGoogle Developer Expertの3人が参加
- 年に一度のTech Conference
- 去年から開催
- 会場:Computer History Museum
- 1トラック19セッション
- 15分/セッション
面白そうだった話題
多言語対応:TensorFLow.js
- 20%ルールから発生
- deeplearn.jsがTensorFlow.jsと名前を変えて正式にTensorFlowのプロジェクトに取り込まれた
- JSで学習から推論まで可能
- GPUにも対応
- Python版とも互換性があってモデルを読み込める
Demo
- ブラウザ上で絵文字に対応した物体を探して写真を撮ると判定してくれる
emojiscavengerhunt.withgoogle.com
今年のエイプリルフールネタ
- 手書きタイプのキーボード
- TensorFlow.jsが使われている
- 約45,000の学習
TensorFlow Hub
- 学習済のモデルを簡単に共有するための仕組み
- 決められた形式でモデルをWeb上においておけば統一的な方法で読み込むことができる
- 論文のモデル公開
Distributed TensorFlow
- 分散学習の新しい機能
- 今回はsingle node + multi GPUで使える機能
All Reduce
- Parameter server的な役割なし
- ワーカー同士が通信し合う
- Chainerでも採用されている
- Distribution strategyをEstimatorに渡すだけで使用可能
Eager Execution
- 従来:グラフを構築⇒計算を実行
- デバッグが難しい
- Eagerモード:逐一必要なものから実行されていく
- 計算は即時実行される
Define and Run(Graph)とDefine by Run(今回対応したEagerモード)
- 試行錯誤段階はEagerモードが良さそう
- 速度もそこまで遅くない
TFX(TensorFlow Extended)
- MLシステムの中でMLコードはごく一部
- 汎用的な機械学習プラットフォーム
- TensorFlow Model Analysis
- Apache Beam + Jupyter Notebookで可視化
Tensor Board Plugin + Debugger
- Deep Learningはデバッグが難しい
- TensorBoard上でデバッグ
ニューラルネットの構造自動決定
Googleがかなり力を入れている研究分野
- 学習が上手くいく層の積み方を自動で探索
- 職人芸的な知識が無くてもできるように
- Cloud Auto ML Visionでも既に活用されている
[1707.07012] Learning Transferable Architectures for Scalable Image Recognition
まとめ
※補足
Swift for Tensor Flowは4月中に出るらしい
TensorFlow, AI and Mobile Models!
Laurence Moroney様(Google)
全編英語だったためあまりメモが取れていません。。
以下の従来のプログラミングとMLの違いを「パラダイムシフト」として強調されていました。
Classical Programming
- Rules & Data : input
- Answers : output
Machine Learning
- Answer & Data : input
- Rule : output
Machine Learning for Tic-Tac-Toe
3x3マスの○×ゲーム(英語ではTic-Tac-Toeと言うらしい)の例でルールベースの従来型プログラミングとMLの違いを説明。論文にもなっている有名な事例らしい。
Multi PlatformでのTensor Flowの活用についての説明。
- TensorFlow Lite Size
- Mobileアプリのデモ
LT:医療分野のAI化
NakaHiroさん
医療分野における
- AI化に向けた現場の状況
- AI化が進まない背景
- AI化に向けた動向
- Appleの試み
などについて