SlideShare une entreprise Scribd logo
1  sur  45
塹壕よりLivetとMVVM
    @Posaune




    わんくま同盟 大阪勉強会 #50   1
お前だれよ?
• まえかわ ひろし です
• a.k.a @Posaune / posaunehm
  – ちなみにPosauneは独語でとろんぼーん。

• いるところ
  – Twitter
  – Blog:http://posaune.hatenablog.com/
  – Github:https://github.com/posaunehm/


                わんくま同盟 大阪勉強会 #50           2
なにもの?
• 一介のC#好き(メーカー所属)です。
 – XAML >>>越えられない壁>>>Winform
 – F#も素敵ですよね。

• アジャイル界隈のほうがよく見かけます
 – 京都アジャイル勉強会(#京アジャ)
 – TABOK勉強会 関西 (#tabokjp)
 – あとはTDD界隈とか、CI界隈とか

           わんくま同盟 大阪勉強会 #50    3
さて本題。



 わんくま同盟 大阪勉強会 #50   4
タイトルの元ネタ
• 塹壕よりScrumとXP
 – Agileの日本語書籍として
  最初に読むべきPDF
 – フリーだよ!!
 – (宣伝)興味があれば
  #京アジャ へ

 –How we do Scrum
            わんくま同盟 大阪勉強会 #50   5
How We Do MVVM



    わんくま同盟 大阪勉強会 #50   6
今日はなす事
• 何もわからないままWPFを業務導入して
• とりあえずの設計パターンてことでMVVMを検討して
• 実装して、痛い目にあって
• 二度目のプロジェクトで色々試行錯誤した末に
• Livetに出会っていろいろ思うことがあって
• でもまだ模索中で


• そんな話をします。


             わんくま同盟 大阪勉強会 #50   7
おことわり
• 本日の話は、あくまで個人が思ったことで
す。
• 間違い・勘違い・思い違い、色いろあると
思います。ツッコミ大歓迎。
• 頭からの否定・肯定はやめてね!!
• こわくないよ!


        わんくま同盟 大阪勉強会 #50   8
Agenda
• イントロ
• はじめての挑戦
• 二度目のリベンジ
• 別の世界から眺めてみて




         わんくま同盟 大阪勉強会 #50   9
はじめての挑戦



  わんくま同盟 大阪勉強会 #50   10
WPF導入まで
• UI改善の大号令 → デザイナが本気を出す
 → なんかPhotoshopみたいなデザインに
 → 偉い人が気に入ったっぽい→ ナニコレ…
 → WPFだと作れるらしいよ(`・ω・´)
• 2009年∼2010年くらいの技術を基盤に
 – WPF 3.5
 – 当然Livet以前。というか色々以前。


         わんくま同盟 大阪勉強会 #50   11
さて、WPF
• とりあえずデザインはデザイナさんからAI
データでもらうとして・・・
• 設計はどうする??
 – 元ソフト(C++/MFC : Doc-Viewアーキテク
  チャ)のロジックを受け継ぐ必要あり
 – なんかWPFではMVVMってのが流行りらしい
  よ?


           わんくま同盟 大阪勉強会 #50       12
MVVM???
• 当時のリソース
 • 2009年2月のMSDNマガジン:http://
  msdn.microsoft.com/ja-jp/magazine/dd419663.aspx
 – ライブラリはまだ少なかった
   • Prism, MVVM Lightはあったけど・・・

 – 情報不足、知識不足。
 – なのでとりあえずMSDNマガジンを必死で解読
  した

                 わんくま同盟 大阪勉強会 #50                   13
こんな感じの理解
• とりあえずViewとViewModelをバインディ
 ングとコマンドでつなぐらしい
 – 単体テストも便利になるらしい
 – IDataErrorInfoとかを使うともっと幸せになれ
  るらしい

• ViewとViewModelは一対一で対応かな?
• Modelはなんかデータの置物っぽいね。

           わんくま同盟 大阪勉強会 #50       14
こんな感じの理解




・とりあえず3つに分けて・・・
・Viewはまとまりで切り出して・・・
・対応するVMとMを作ればいいのか!




              わんくま同盟 大阪勉強会 #50   15
こんな感じの理解




・ViewからはなんかCommandとかいうものでViewModelに操作を伝えて…
・ViewModelでそれを処理するんだよね。んでModelのデータを触ると。
・んで変更したプロパティを通知するとふしぎぱわーで更新できるのか。


               わんくま同盟 大阪勉強会 #50              16
まだつっこまないでね!!




    わんくま同盟 大阪勉強会 #50   17
ハマった・・・
• V:VM:M = 1:1:1は有り得ない!!
 – でもV:VMがn:mになるのは特に問題はない(バ
  インディングがよろしくやってくれるので)
 – VM : Mがn:mになって詰んだ

• VM肥大化症候群に感染
 – 症例①:M → VM
 – 症例②:V → VM


           わんくま同盟 大阪勉強会 #50   18
① VM:Mがn:mになって死ぬ
• 表示のバックエンドに過ぎないVMとModel
 が同じ構造してくれるわけない
 – 普通はVMは複数のModelを持つ
 – Modelは複数のVMによって共有もされる

• ほとんどのサンプルはV:VM:M = 1:1:1の構
 造なので誤解を生みやすい



          わんくま同盟 大阪勉強会 #50     19
① VM:Mがn:mになって死ぬ




誰かが「何がどう変わったか」を通知しなければいけない


         わんくま同盟 大阪勉強会 #50   20
解決策:VMが頑張る
• 自分の操作によってどのプロパティが変化
 するかを完全に管理する約束に
• 他ViewModelに影響を与える場合は統合
• どうしようもない場合はObserverパターン
 を導入




         わんくま同盟 大阪勉強会 #50   21
VMが頑張る図




VMは自分の操作によってModelがどう変化するかを完全に
把握する必要がある。。。

          わんくま同盟 大阪勉強会 #50   22
② VM肥大化症候群
• 一つの原因は先に説明した更新通知。
 – そもそもVMが更新通知をするということは、
  Modelの処理内容がほとんどVMにでてる

• もう一つは、Viewで解決すべき問題が
ViewModelへ渡ってしまったこと




         わんくま同盟 大阪勉強会 #50   23
View → ViewModelへの肥大化
• えーっと、コードビハインドはMVVMだと絶対に書いちゃ
 いけないんだよね・・・
• んじゃ、図形をドラッグして、移動させて回転させ
 て・・・とかも、VMにXPosとかYPosとかWidthとか
 Heightとかつけて
• イベントハンドラからVMに処理を投げて・・・


• ・・・マジでややこしすぎて死ぬので注意。やったらダ
 メ、ゼッタイ。


               わんくま同盟 大阪勉強会 #50   24
最初の導入で起こったこと
• ViewModelの肥大化・巨大化
 – Model、View双方から処理がしみだしてきた
 – 何が困る??
   • Viewがしみだすと、単体テスト性が落ちる落ちる
   • Modelがしみだすと、変更管理がえらく大変に
   • 結局、処理境界が明示できないのはよくない

• ちなみに、当初の目標デザインは普通に達成
 – デザイナさんとペアプロっぽいこともしたり
 – WPFのUI自由度はもっともっと評価されるべき
            わんくま同盟 大阪勉強会 #50    25
二度目の導入



 わんくま同盟 大阪勉強会 #50   26
二度目導入まで
• 結構なインターバルあります(一年くらい)
• その間はSilverlightをさわったり、Javascript/
 HTML5を触ったりと、わりと雑多な感じでお仕事
• 画像のフィルタリングが必要な案件で、WPFでさ
 くっとEffect作ってサンプル出したら、採用に →
 WPF二件目ktkr!
• 時代はWPF4/VS2010!
  – MVVMライブラリも充実期に。

             わんくま同盟 大阪勉強会 #50         27
一度目の反省・・・が解決しない
• ViewModelが更新をして回るのはなんかおかしい
 ぞ・・・?機能が多すぎる。
 – Model→ViewModelの更新通知はあるべき。
 – そもそもModelってなんだろう??


• 「コードビハインドを書いちゃダメ」は悪魔の言葉
 – 必要なコードビハインドだって有るだろ・・・
 – でも切り分けしとかないとカオスになりそうだしなぁ


            わんくま同盟 大阪勉強会 #50    28
そんな時にLivet発見



    わんくま同盟 大阪勉強会 #50   29
Model再考
• 影響を受けたもの
 – Livet(ver 0.9x)
   • Modelに提供された更新通知

 – ドメイン駆動設計
   • レイヤーアーキテクチャ
      – UI
      – アプリケーション
      – ドメイン
      – インフラストラクチャ


               わんくま同盟 大阪勉強会 #50   30
私のModel理解
• Livetで推奨されているように、Model層は更新通知を
 持つべき
 – Observer形式はカオスになりがち
• DDDでのドメイン層がMVVMのModelに該当する
 – データクラス(エンティティ)はModelの最下層
 – 最外側にあるクラスにはLivet準拠のModelにする
• ならばViewModel = アプリケーション層?
 – 個人的には、否。ViewModelはあくまでUI層。
 – アプリケーション層はModelの最上層に属する

            わんくま同盟 大阪勉強会 #50     31
Modelは大きいものでしょ




    わんくま同盟 大阪勉強会 #50   32
ViewModelは?
• ViewModelは描画に必要なデータのアクセサ/ストア
 – 描画時のみに用いるデータ以外は実体をModelに移す

• 処理も右から左へ流すだけ。各モデルの協調処理は
 アプリケーション層の仕事
• じゃあ何のためにいるの??
 – ユニットテストをするため!
   • UIに極力近いレベルで書けるので、シナリオテストができる

 – Automation的なことをする場合にも役に立ちますよ


           わんくま同盟 大阪勉強会 #50         33
コードビハインドの扱い




   わんくま同盟 大阪勉強会 #50   34
カスタムコントロール!
• どうしてもUI上ややこしい処理が必要な場
合は、プロパティやイベントを適切に公開
してやればいい!
 – カスタムコントロール内部はコードビハインド
  でガリガリ描画
 – 外側から見るとほぼバインディングだけで成り
  立っているようにする


        わんくま同盟 大阪勉強会 #50   35
というわけで方針
• Model層もアップデート通知有り。
 – Livet使う!
 – ViewModel間の協調動作は極力なしで。

• ややこしい動きをするUIはカスタムコント
 ロールとして切り出す
 – 適切なプロパティを公開し、Bindableに
 – 汚いことは極力内部だけで解決する。

              わんくま同盟 大阪勉強会 #50   36
Livetを使ってみて(ver.0.99)
• Livetは使えば使うほど、使い手のことを考えて作って
 いるのかが分かる。
 – 更新通知付きModel
 – Blend親和性の高いUI拡張
 – Messenger機構
• 機能をフルに活かそうとすると、MVVMが自然に身につ
 くように作ってあるんではないだろうか(想像)
• 個人的に超嬉しいのが、
 CreateReadOnlyDispatcherCollection

                 わんくま同盟 大阪勉強会 #50     37
CreateReadOnlyDispatcherCollection
• 一言で言うと、「Modelのコレクションか
らViewModelのコレクションを作る」
• XAMLではコレクション系UIをいかにうま
く使うかが勝負(だと思ってます)
 – 極論、ListViewでなんだってできる

• ただし、MVVMを真面目にやっていると
困ったことが・・・

           わんくま同盟 大阪勉強会 #50          38
Collectionの変換




・ModelのCollectionをViewModelのCollectionに変換
・Collectionを同期する必要があるので結構ややこしい

   CreateReadOnlyDispatcherCollectionで一発変換!


                わんくま同盟 大阪勉強会 #50              39
二度目の導入まとめ
• 設計方針は現時点では割と満足
• これから他のメンバーにどう徹底していく
かが課題
 – 実は今はプロジェクトからは一線を引いていた
  り・・・
 – 世の中からWindowsFormが消え去りますよう
  に:-P


          わんくま同盟 大阪勉強会 #50     40
別の世界から眺めてみて



   わんくま同盟 大阪勉強会 #50   41
WindowsFormから見ると
• 現在、業務はWindowsFormに先祖返り
• Bindingで自然にViewとControllerの分離がで
 きるWPFの有難味が身にしみます、はい。
• MVVMパターンを体験した後だと、「これ
 はPresenterに吐き出すべきだな」がなんと
 なく分かる
 – ※個人の感想です。一般的な効果を保(ry

           わんくま同盟 大阪勉強会 #50     42
TDD(ユニットテスト)の観点から
• 最上位のUIシナリオを記述できるのはやはり強力
 – 継続的インテグレーションのお供に
• 逆に、VMを書くときは、「それが外部からちゃんとテストでき
 るか」を意識すると◎
 – ViewModel内でモーダルダイアログやメッセージボックス出してない
  よね??
 – それらを抽象化するMessenger機構は、テストでこそ真価を発揮す
  る!
• VM層を使ったらBDD綺麗に書けそうじゃない??
 – (宣伝)*Spec勉強会やります
 – NaturalSpecやろうよ!


                 わんくま同盟 大阪勉強会 #50        43
まとめ
• 分かって欲しかったこと
 – MVVMのハマりどころ
  • ViewModelの肥大化を防ごう

 – Livetの美味しさ
  • MVVMへの適合度が高くて楽しい

 – MVVMの持つ力
  • 画面とロジックの分離しやすさ
  • 単体テスト実行上のメリット

           わんくま同盟 大阪勉強会 #50   44
最後にもう一度おことわり
• 本日の話は、あくまで個人が思ったことです。
ツッコミ大歓迎。
• そもそも設計に絶対の正解はないです。
• あえて言うなら、現場で頭を抱えてひねり出し
たものでしょう、きっと。
• でもひねり出すためには、色々なパラダイムを
知っていることが必要です。
• 今回の話がそんな時の一助となれば幸いです。
        わんくま同盟 大阪勉強会 #50   45

Contenu connexe

Tendances

Tendances (20)

世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
 
WPF MVVM Review
WPF MVVM ReviewWPF MVVM Review
WPF MVVM Review
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
 
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
 
JIRA / Confluence の 必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだJIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の 必須プラグインはこれだ
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 

Similaire à 塹壕よりLivetとMVVM

UXDD MVVM Store Apps 蜜葉式開発フロー
UXDD MVVM Store Apps 蜜葉式開発フローUXDD MVVM Store Apps 蜜葉式開発フロー
UXDD MVVM Store Apps 蜜葉式開発フロー
c-mitsuba
 
MetroStyleAppsさわってみた わんくま
MetroStyleAppsさわってみた わんくまMetroStyleAppsさわってみた わんくま
MetroStyleAppsさわってみた わんくま
c-mitsuba
 

Similaire à 塹壕よりLivetとMVVM (20)

MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
 
20150926 uwpストア攻略
20150926 uwpストア攻略20150926 uwpストア攻略
20150926 uwpストア攻略
 
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークCLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトーク
 
LightSwitchで遊んでみた
LightSwitchで遊んでみたLightSwitchで遊んでみた
LightSwitchで遊んでみた
 
究極にして至高のWAF
究極にして至高のWAF究極にして至高のWAF
究極にして至高のWAF
 
WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
 
教育現場のニーズが生んだユーザーエクスペリエンス
教育現場のニーズが生んだユーザーエクスペリエンス教育現場のニーズが生んだユーザーエクスペリエンス
教育現場のニーズが生んだユーザーエクスペリエンス
 
UXDD MVVM Store Apps 蜜葉式開発フロー
UXDD MVVM Store Apps 蜜葉式開発フローUXDD MVVM Store Apps 蜜葉式開発フロー
UXDD MVVM Store Apps 蜜葉式開発フロー
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
 
MetroStyleAppsさわってみた わんくま
MetroStyleAppsさわってみた わんくまMetroStyleAppsさわってみた わんくま
MetroStyleAppsさわってみた わんくま
 
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
 
Word bench7月号
Word bench7月号Word bench7月号
Word bench7月号
 
超高速アプリ開発法
超高速アプリ開発法超高速アプリ開発法
超高速アプリ開発法
 

Plus de Hiroshi Maekawa

Plus de Hiroshi Maekawa (20)

新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
 
老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間
 
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
 
第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI
 
Visual Studio Online as a CI Service
Visual Studio Online as a CI ServiceVisual Studio Online as a CI Service
Visual Studio Online as a CI Service
 
Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0
 
Getting Start with React Native
Getting Start with React NativeGetting Start with React Native
Getting Start with React Native
 
「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆
 
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
 
なれる!IL
なれる!ILなれる!IL
なれる!IL
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情
 
テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -
 
テスト自動化のパターンと実践
テスト自動化のパターンと実践テスト自動化のパターンと実践
テスト自動化のパターンと実践
 
ホントは楽しいエイブンポー
ホントは楽しいエイブンポーホントは楽しいエイブンポー
ホントは楽しいエイブンポー
 
テスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osakaテスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osaka
 
雑食系エンジニアの作りかた
雑食系エンジニアの作りかた雑食系エンジニアの作りかた
雑食系エンジニアの作りかた
 
T4 Template 入門
T4 Template 入門T4 Template 入門
T4 Template 入門
 
窓辺に立つ執事
窓辺に立つ執事窓辺に立つ執事
窓辺に立つ執事
 
自動化パタンランゲージ
自動化パタンランゲージ自動化パタンランゲージ
自動化パタンランゲージ
 

塹壕よりLivetとMVVM

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n