Skip to content

Instantly share code, notes, and snippets.

@bokuo-okubo
Last active December 20, 2015 17:41
Show Gist options
  • Save bokuo-okubo/5413795362e2fa93467f to your computer and use it in GitHub Desktop.
Save bokuo-okubo/5413795362e2fa93467f to your computer and use it in GitHub Desktop.

2015 Dec Milestone

「継続的デリバリーが行える環境/仕組み作り」 「マルチスレッドでの疑似サーバの実装完了」

「継続的デリバリーが行える環境/仕組み作り」

  • ReactNative

    • メリット

      • Viewのコードを、iOSエンジニア以外にも触れるよう敷居を下げられる
      • ネイティヴコードによるビューオブジェクトの依存関係を考えるよりも、Reactのコンポーネントの作り方/Javascriptによる記述は簡単
      • Android展開のスタートラインが早くなるかもしれない
    • デメリット

      • ネイティブ開発のレールからは逸れる(かもしれない)
      • 既存ネイティブ資産との連携
      • ReactNative開発コミュニティが以前活発で、全然枯れてないことによって、保守コストが増える可能性
  • WebView内に展開するindex.htmlのビルド

    • 最新版のAnswerReactを取得するような仕組み作り
  • CreativeServey.comのSurvey周りのデータスキーマをクライアントアプリと連携させる

    • サーバのデータスキーマ変更によってクライアントアプリの提供価値が著しく下がらないようにする

「マルチスレッドでの疑似サーバの実装完了」

  • APIサーバの挙動をオフラインでも提供する
    • ルーティング
    • アクションハンドラ

ビューやその他のロジックと結合しない、独立した実装

  • Realmを用いてのクライアントサイドでのデータストアの実現

  • タイプセーフなコードの実現

    • SwiftのGenerics, Optional, Promiseを用いて実装する
    • ProductionのためのSwiftTipsを貯める
  • マルチスレッドでの実装

    • パフォーマンス
    • 設計上の理解をもっと深める

2015 Dec W1 MileStone

  • 疑似サーバの検証コードの実装

    • ReactNative内でのWebViewから任意のURLパスを指定すると、Swiftでのバックエンド実装の任意の関数オブジェクトが別スレッドで実行され、WebView内にJsonのレスポンスが返ってくる。
    • Requestにパラメータが付随する場合も正しくハンドリングできる
    • Routeを定義したYamlまたは、route.rbをパースしてroutingを疑似サーバ内でregister
  • デリバリーのためのプロジェクト設定

    • ReactNativeをViewとして採用するかどうかの意思決定を行う
      • そのために検証プロジェクトのデリバリー環境をきちんと整備
        • ReactNativeにロックインされる問題、メリットデメリットの精査

2015 Dec W2 MileStone

  • 疑似サーバの検証コードの実装

    • Requestにパラメータが付随する場合も正しくハンドリングできる
    • Routeを定義したYamlまたは、route.rbをパースしてroutingを疑似サーバ内でregister
  • Realm導入

    • APIを理解し、正しくCRUDできる

12/21(Mon)

TODO(優先度順)

  • Request/Responseのをインターナルな実装のまま返してしまっているので、NSURL**系をラップする
  • Realm導入してのCRUD処理
  • Native実装での仕様確認
    • 頂いたソースビルドしてみます。
  • マルチスレッド化のためにSwiftでのスレッドAPIを使えるようにする
  • TestFrameWork考えて(Quick/Nimble? XCTest?)、書く

12/14(Thu)

DONE

  • Swiftでのトーキナイザー、パーサジェネレータの実装
    • トーキナイズしたものをどうハンドリングするのか、トークンの集合をどう表現するのか、みたいなところに目がいってしまってました。

WIP

  • URLパーサの実装

    • jsでのパーサコンビネータの理解 - jsでの遊び実装で少し勝手が分かったので、ひとまずパーサコンビネータのライブラリをSwift移植するのをすぐにやってしまいます。 -> DONE
      • TokenizeしたものとHandler(特に引数を取るもの)との間の橋渡しをどうやるのか、まだイメージつきません
  • アプリ全体のクラスのライフサイクル考える

本日作業分 bokuo-okubo/agent-ios#3

TODO(優先度順)

  • Request/Responseのをインターナルな実装のまま返してしまっているので、NSURL**系をラップする
  • Realm導入してのCRUD処理
  • Native実装での仕様確認
    • 頂いたソースビルドしてみます。
  • マルチスレッド化のためにSwiftでのスレッドAPIを使えるようにする
  • TestFrameWork考えて(Quick/Nimble? XCTest?)、書く

12/10(Thu)

DONE

  • MiddleWare周りの実装完了

https://github.com/bokuo-okubo/agent-ios/blob/master/agent-ios/src/lib/PseudoServer/PseudoServer.swift

雑な実装ですが、mossonさんから頂いた仕様のSwiftでの挙動を確認しました

  • 正規表現でのurlパース辛いの理解

http://codepen.io/bokuo-okubo/pen/JGdMLL?editors=001

↑きちんと実装しきっていませんが、

let route = ["path/to/hoge/:id", /*some handler*/];

let splited_ary = str.split("/");
for(var i=0; i < ary.length; i++) {
	if ( splited_ary[i]/*正規表現で ":hoge" が含まれるなら*/ ) {
		...
	} else {
		...
	}
}

みたいなことやってくとすごい辛いのはわかりました。

[全体] を分割していってリンクリストにするのではなく、

リンクリスト構造を頭からインクリメンタルに作った方がいい、というのはわかってきた。

WIP

  • URLパーサの実装

    • jsでのパーサコンビネータの理解
      • jsでの遊び実装で少し勝手が分かったので、ひとまずパーサコンビネータのライブラリをSwift移植するのをすぐにやってしまいます。
      • TokenizeしたものとHandler(特に引数を取るもの)との間の橋渡しをどうやるのか、まだイメージつきません
  • アプリ全体のクラスのライフサイクル考える

- WebViewから参照するローカルindex.htmlのパスをなおす

- ReactNativeのバージョンをlatestに上げ、マイナーバージョンの変更に依存しないビルド環境を作る

- 今一度ReactNativeのページを見る 30分

TODO(優先度順)

  • Request/Responseのをインターナルな実装のまま返してしまっているので、NSURL**系をラップする
  • Realm導入してのCRUD処理
  • Native実装での仕様確認
    • 頂いたソースビルドしてみます。
  • マルチスレッド化のためにSwiftでのスレッドAPIを使えるようにする
  • TestFrameWork考えて(Quick/Nimble? XCTest?)、書く

12/01(Tue)

DONE

  • The file "ReactNativeWithPods.app" couldn't be opened because you don't have permission to view it.  のエラーに関しては、diff-patchを当てて泥臭く一旦解決。 ==>> iOSのプロジェクトファイル内のソースファイルへの参照でトラブルがあった模様。

WIP

- レスポンスハンドリングをするクラス/型の設計 - Routingの定義をどうするか考え中

==>> mossonさん実装をそのまま使う

https://github.com/bokuo-okubo/ReactNativeWithPods/pull/9/files

TODO(優先度順)

  • MiddleWare周りのところが未だ実装仕切っていない
  • WebViewから参照するローカルindex.htmlのパスをなおす
  • ReactNativeのバージョンを1.15に上げ、マイナーバージョンの変更に依存しないビルド環境を作る
  • Request/Responseのをインターナルな実装のまま返してしまっているので、NSURL**系をラップする
  • マルチスレッド化のためにSwiftでのスレッドAPIを使えるようにする

11/30(Mon)

DONE

  • Routerの挙動理解
    • ReactNativeのWebViewから指定したパスをkeyに、特定のハンドラを実行する、というのをハードコーディングで確認。

WIP

  • レスポンスハンドリングをするクラス/型の設計
  • Routingの定義をどうするか考え中

TODO

  • WebViewから参照するローカルindex.htmlのパスをなおす
  • ReactNativeのバージョンを1.15に上げ、マイナーバージョンの変更に依存しないビルド環境を作る
  • マルチスレッド化のためにSwiftでのスレッドAPIを使えるようにする
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment