寄付窓口はこちら

開発者ツールと経験への時間投資 | try! Swift Tokyo 2018 Day2-17

開発者のツールと経験を向上させるためのアイディアを探すにはどうすればよいでしょうか?新しい開発ツールを作成するか、開発プロセスを調整することで、日々の開発における共通の苦しみとその改善方法を見ていきます。 10倍の開発者がいるなら、その人は他の10人の開発者の生活をより良くするものに取り組むことを決めた人です。

開発者ツールと経験への時間投資

f:id:niwatako:20180302173848j:plain

UXはわかると思いますがDXとは何でしょう

f:id:niwatako:20180302174032j:plain

変更の検証に時間がかかるとかメンテナンスが複雑だとかどれ位バグレポートに時間を要するか。

これは私たちの仕事に大きなインパクトを与えます。

やはり適切なツール、アーキテクチャが必要です。

f:id:niwatako:20180302174124j:plain

コンサルタントとして効率化などをしています。

OSSは3万以上のアーキテクチャで利用されています。

これらはDXを良くするためののものです。

f:id:niwatako:20180302174158j:plain

f:id:niwatako:20180302174201j:plain

どんな問題の例があるでしょう。例えばコンパイル時間

プロジェクトコンパイルではシミュレーターの再起動、スクリーンナビゲートとか、手作業のマニュアルステップが必要とか。

そこで例ですが

f:id:niwatako:20180302174238j:plain

細かい調整をして正しくできるか確認したいとしましょう

25秒かかったとしましょう。長くないと思うかもしれません。しかし、300ぐらいのコードを変更しないといけない、25秒かかると一日で大きなムダになる

f:id:niwatako:20180302174347j:plain

アプリをフレームワークに分解していく。

Playgourndで作るなどしてイテレーションしたりできる

f:id:niwatako:20180302174424j:plain

Static Libraryにcocoapods-amimonoを使うことができます

f:id:niwatako:20180302174456j:plain

コードインジェクションで再起動せずに調整する

f:id:niwatako:20180302174511j:plain

描いたコードがリアルタイムに反映される

f:id:niwatako:20180302174542j:plain

CodeInjectionの経験を活かしたPlayground

f:id:niwatako:20180302174558j:plain

f:id:niwatako:20180302174630j:plain

変更の再コンパイルは1秒以内ですみます

二つ目の問題にデータへの依存です

f:id:niwatako:20180302174708j:plain

APIの変更を待たなければならないと言ったことがあります。 殆どの場合ネイティブフィーチャーはバックエンドが終わる前に終わるようにできます。

どう改善できるのでしょうか

まずプロトコルを使うということです。

テストでなくてもメリットがあります。一番重要なこととして パイプラインとしてデザインし、それぞれのところでProtocolにするということです。

f:id:niwatako:20180302174841j:plain

バグレポートのデータを再現したいとかが可能になります。

f:id:niwatako:20180302174944j:plain

レイアウトが正しいことを担保したかった。サーバーがないままできちんと全体がまとまっていることを確認するのは困難でした。繰り返し違うデータをサーバーにおいて検証するのは大変。

f:id:niwatako:20180302175010j:plain

f:id:niwatako:20180302175114j:plain

ファイルを保存するたびにアプリに反映されたい。

問題を解決するために描いてオープンソースにしたのがGenericな

f:id:niwatako:20180302175145j:plain

アプリにリアルタイムにアップデートが反映されます

DataProvidorをfilewatcherにすればいいのです

f:id:niwatako:20180302175235j:plain

バックエンドが完成する前に実装・検証することが可能になります。

非常にシンプルで強力です。

もう一つのよくある問題、殆どのアプリは何らかのマニュアルデータ入力が必要です。ログインなど。

しかしいちいち開発時に入力する必要はありません。

f:id:niwatako:20180302175331j:plain

自分で自動化できるべきだと考えています。

認証情報を入力する時にユーザーブレークポイントを利用するのがおすすめです。

みんなが自分のブレークポイントを設定できるし簡単に向こうにすることができる

f:id:niwatako:20180302175430j:plain

f:id:niwatako:20180302175433j:plain

f:id:niwatako:20180302175442j:plain

特定のデベロッパーのためだけに実行するスクリプトを設定することもできます。

自動直接でいく、もしくは適切なモードがあった時にこれは使える

バグが再現できない問題があったとします。

解決方法としてデータをシリアライズして送れるようにするということです。

f:id:niwatako:20180302175548j:plain

もしくはデータが一方向になるようにするということです。

f:id:niwatako:20180302175632j:plain

f:id:niwatako:20180302175638j:plain

バグレポートを(非同期の方式のようにでも)ロードして状態を再現できるようにしています。

最後はボイラープレートを書く、使えないツールを書くという問題。

f:id:niwatako:20180302175713j:plain

ツールはあっても制約があってうまくいかないこともあります。バグが多いリソースにアクセスする

f:id:niwatako:20180302175758j:plain

何かカスタムで作らなくてはいけない時に実装すべてを自分で書かないといけない

同じパターンが売り返される場合、使えるツールがあって Sourceryと言うものです。

多くのコードを毎回書かなければならないと思いました

同じボイラープレートをなども書かなくてはいけない。

f:id:niwatako:20180302175855j:plain

実際のコードが依存するわけではないので動かなくなっても取り除けばいいだけです。そしてマニュアルで元のコードに戻れば良い。つまり実際の使うリスクはないということです。

f:id:niwatako:20180302175934j:plain

f:id:niwatako:20180302175946j:plain

Swiftのプロジェクトでも必ずメリットが有ると思っています。

ボイープレートだけでなく、Fakeオブジェクト(プロトコルが変わるたびに書き換えないといけない)もありますが、それもSourceryでやってくれます

f:id:niwatako:20180302180044j:plain

失敗したらこうなります

f:id:niwatako:20180302180056j:plain

実際全体を見て違いを見つけなくてはいけない

Sourceryを使うとこうなります

f:id:niwatako:20180302180129j:plain

複雑なオブジェクト、Rxであっても、面倒なワークフローが改善します。

f:id:niwatako:20180302180204j:plain

f:id:niwatako:20180302180211j:plain

AssetにはSwiftGenが使えます型安全になります。

f:id:niwatako:20180302180229j:plain

f:id:niwatako:20180302180303j:plain

コミュニティですばらしいツールがあるので使ってみて下さい。

f:id:niwatako:20180302180329j:plain

[広告]面白かったら、ためになったら

  • はてなブックマークSwift タグをつけてブックマーク!
  • 「インターネットで生活を楽しく豊かにしたい」仲間を募集しています
  • Bitcoin: 3KGqXtR1ZaGVdkvcw8CCNrkDxDhdbZBYHL