Enviar pesquisa
Carregar
すばやく実装するための戦略とテクニック
•
1 gostou
•
1,618 visualizações
7
77web
Seguir
PHPカンファレンス関西2018 C05 2枠目の発表で使用したスライドです。
Leia menos
Leia mais
Engenharia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 57
Baixar agora
Baixar para ler offline
Recomendados
PHPコアから読み解く定石の嘘ホント #phpcon2013
PHPコアから読み解く定石の嘘ホント #phpcon2013
Yahoo!デベロッパーネットワーク
RFinanceJはじめました
RFinanceJはじめました
Nagi Teramo
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
Masayuki Ueda
レガシーPHPアプリ(10年もの)を運用している話
レガシーPHPアプリ(10年もの)を運用している話
Hironobu Saitoh
5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方
Jumpei iwamura
Reproのオンボーディングの話をします
Reproのオンボーディングの話をします
Kengo Iwata
チームを改善していったら開発と営業が一緒になった件
チームを改善していったら開発と営業が一緒になった件
Tatsuya Sakai
Phalcon PHPフレームワーク Sense of Use PHPカンファレンス 2015(大阪、福岡)
Phalcon PHPフレームワーク Sense of Use PHPカンファレンス 2015(大阪、福岡)
和宏 近藤
Recomendados
PHPコアから読み解く定石の嘘ホント #phpcon2013
PHPコアから読み解く定石の嘘ホント #phpcon2013
Yahoo!デベロッパーネットワーク
RFinanceJはじめました
RFinanceJはじめました
Nagi Teramo
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
Masayuki Ueda
レガシーPHPアプリ(10年もの)を運用している話
レガシーPHPアプリ(10年もの)を運用している話
Hironobu Saitoh
5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方
Jumpei iwamura
Reproのオンボーディングの話をします
Reproのオンボーディングの話をします
Kengo Iwata
チームを改善していったら開発と営業が一緒になった件
チームを改善していったら開発と営業が一緒になった件
Tatsuya Sakai
Phalcon PHPフレームワーク Sense of Use PHPカンファレンス 2015(大阪、福岡)
Phalcon PHPフレームワーク Sense of Use PHPカンファレンス 2015(大阪、福岡)
和宏 近藤
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
Shohei Tai
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
77web
お申し込みを1割増やしたフォーム改善の話
お申し込みを1割増やしたフォーム改善の話
lolipopjp
デンキヤギの採用の考え方
デンキヤギの採用の考え方
terurou
PHP conference kansai2018_ishihara
PHP conference kansai2018_ishihara
ishihara_yuki
365 に Video がやって来る ヤァ!ヤァ!ヤァ!
365 に Video がやって来る ヤァ!ヤァ!ヤァ!
Hirofumi Ota
Agile japan2011 アジャイル体験記~ふりかえりで開発を後押し~
Agile japan2011 アジャイル体験記~ふりかえりで開発を後押し~
Akiko Kosaka
ウェブエンジニアとしての1年目を振り返って
ウェブエンジニアとしての1年目を振り返って
Kohki Yamagiwa
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
Hisao Soyama
Hack+FuelPHPによるWebサービス開発
Hack+FuelPHPによるWebサービス開発
Yuji Otani
もっと早くに取り組んでおけばよかった開発プロセス
もっと早くに取り組んでおけばよかった開発プロセス
Kazuki Takahashi
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワーク
Maehana Tsuyoshi
シリコンバレー 面接体験
シリコンバレー 面接体験
paiza
LLoT ランゲージアップデート Python
LLoT ランゲージアップデート Python
hirokiky
Hour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウム
Yuta Tonegawa
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
Kentaro Suzuki
Python charity talk in japan fastAPI introduction
Python charity talk in japan fastAPI introduction
ssuserc75dc7
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事
Masataka Kono
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
ToshiakiArai
PHP7ではなくHack/HHVMを選ぶ理由
PHP7ではなくHack/HHVMを選ぶ理由
Yuji Otani
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
77web
テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
77web
Mais conteúdo relacionado
Semelhante a すばやく実装するための戦略とテクニック
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
Shohei Tai
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
77web
お申し込みを1割増やしたフォーム改善の話
お申し込みを1割増やしたフォーム改善の話
lolipopjp
デンキヤギの採用の考え方
デンキヤギの採用の考え方
terurou
PHP conference kansai2018_ishihara
PHP conference kansai2018_ishihara
ishihara_yuki
365 に Video がやって来る ヤァ!ヤァ!ヤァ!
365 に Video がやって来る ヤァ!ヤァ!ヤァ!
Hirofumi Ota
Agile japan2011 アジャイル体験記~ふりかえりで開発を後押し~
Agile japan2011 アジャイル体験記~ふりかえりで開発を後押し~
Akiko Kosaka
ウェブエンジニアとしての1年目を振り返って
ウェブエンジニアとしての1年目を振り返って
Kohki Yamagiwa
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
Hisao Soyama
Hack+FuelPHPによるWebサービス開発
Hack+FuelPHPによるWebサービス開発
Yuji Otani
もっと早くに取り組んでおけばよかった開発プロセス
もっと早くに取り組んでおけばよかった開発プロセス
Kazuki Takahashi
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワーク
Maehana Tsuyoshi
シリコンバレー 面接体験
シリコンバレー 面接体験
paiza
LLoT ランゲージアップデート Python
LLoT ランゲージアップデート Python
hirokiky
Hour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウム
Yuta Tonegawa
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
Kentaro Suzuki
Python charity talk in japan fastAPI introduction
Python charity talk in japan fastAPI introduction
ssuserc75dc7
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事
Masataka Kono
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
ToshiakiArai
PHP7ではなくHack/HHVMを選ぶ理由
PHP7ではなくHack/HHVMを選ぶ理由
Yuji Otani
Semelhante a すばやく実装するための戦略とテクニック
(20)
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
お申し込みを1割増やしたフォーム改善の話
お申し込みを1割増やしたフォーム改善の話
デンキヤギの採用の考え方
デンキヤギの採用の考え方
PHP conference kansai2018_ishihara
PHP conference kansai2018_ishihara
365 に Video がやって来る ヤァ!ヤァ!ヤァ!
365 に Video がやって来る ヤァ!ヤァ!ヤァ!
Agile japan2011 アジャイル体験記~ふりかえりで開発を後押し~
Agile japan2011 アジャイル体験記~ふりかえりで開発を後押し~
ウェブエンジニアとしての1年目を振り返って
ウェブエンジニアとしての1年目を振り返って
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
Hack+FuelPHPによるWebサービス開発
Hack+FuelPHPによるWebサービス開発
もっと早くに取り組んでおけばよかった開発プロセス
もっと早くに取り組んでおけばよかった開発プロセス
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワーク
シリコンバレー 面接体験
シリコンバレー 面接体験
LLoT ランゲージアップデート Python
LLoT ランゲージアップデート Python
Hour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウム
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
Python charity talk in japan fastAPI introduction
Python charity talk in japan fastAPI introduction
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
PHP7ではなくHack/HHVMを選ぶ理由
PHP7ではなくHack/HHVMを選ぶ理由
Mais de 77web
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
77web
テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
77web
ズンドコキヨシon Workflower
ズンドコキヨシon Workflower
77web
Formとは何か?〜例えば、Symfony\Component\Formを避ける〜
Formとは何か?〜例えば、Symfony\Component\Formを避ける〜
77web
CoderDojo Nagoyaの取り組みについて at Scratch day 2015 Aichi 3分間トーク
CoderDojo Nagoyaの取り組みについて at Scratch day 2015 Aichi 3分間トーク
77web
Scratch day 2015 Aichi プログラミングバトル by CoderDojo Nagoya
Scratch day 2015 Aichi プログラミングバトル by CoderDojo Nagoya
77web
こういうデータ、どこに保存してますか? #nagoyaphp
こういうデータ、どこに保存してますか? #nagoyaphp
77web
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
77web
Mais de 77web
(8)
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
最近のPHP事情とNagoya.phpへのお誘い #ngk2018b
テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
ズンドコキヨシon Workflower
ズンドコキヨシon Workflower
Formとは何か?〜例えば、Symfony\Component\Formを避ける〜
Formとは何か?〜例えば、Symfony\Component\Formを避ける〜
CoderDojo Nagoyaの取り組みについて at Scratch day 2015 Aichi 3分間トーク
CoderDojo Nagoyaの取り組みについて at Scratch day 2015 Aichi 3分間トーク
Scratch day 2015 Aichi プログラミングバトル by CoderDojo Nagoya
Scratch day 2015 Aichi プログラミングバトル by CoderDojo Nagoya
こういうデータ、どこに保存してますか? #nagoyaphp
こういうデータ、どこに保存してますか? #nagoyaphp
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
すばやく実装するための戦略とテクニック
1.
すばやく実装するための戦略と テクニック 2018.07.14 PHPカンファレンス関西 @77web
2.
・@77web ・フリーランス(9年ぐらい)→カルテットコミュニケーションズ(4年) ・名古屋 ・2児の母 ・日本Symfonyユーザー会 ・CoderDojo名古屋 初代チャンピオン(諸事情あって引退…) ・I♥PHP
3.
・運用型広告業界をホワイトにする仕組みを作ってます ・仲間募集中!(フルリモート、パートタイム、もちろんフ ルタイム正社員も歓迎)
4.
速さは力
5.
6.
速いと何が嬉しい?
7.
速いと何が嬉しい? • 間違っても修正する時間がある
8.
速いと何が嬉しい? • 間違っても修正する時間がある • 心と身体の余裕
9.
速いと何が嬉しい? • 間違っても修正する時間がある • 心と身体の余裕 •
次のことを勉強する時間ができる
10.
速いと何が嬉しい? • 間違っても修正する時間がある • 心と身体の余裕 •
次のことを勉強する時間ができる • (おまけ)新機能にアサインされやすい
11.
速さを妨げるものはなにか?
12.
速さを妨げるものはなにか?
13.
速さを妨げるもの=わからなさ • フレームワークやライブラリの使い方がわからない • どういう処理を書いたら仕様を実現できるかわからない •
実装にどれぐらい時間がかかるかわからない • 処理のボトルネックがどこになるかわからない • 求められる仕様がわからない・決まってない
14.
わからなさを減らせば倒しやすい=速くできる
15.
戦略:分割統治法
16.
分割統治法とは? • divide-and-conquer method •
そのままでは実装が難しい大きな問題を小さな問題に分割することで実装しやすくする方法(プ ログラム用語) • わからなさを削りながら実装していく
17.
分割統治法実践テクニック • 表をイメージして裏から作る • 争いのないものから作る
18.
表をイメージして裏から作る
19.
表をイメージして裏から作る • interfaceを活用 • 表から裏に対してやってほしいこと(何を受け取って何を返してほしいか)だけを定義する UI app domain infra(DB/External
API)
20.
争いのない部分から作る
21.
争いのない部分から作る • プロジェクト全体としてわからない部分を少しでも減らしていくために、わかっている部分か らコードにしていく • 実装開始時点で仕様が決まっていない部分は、後でガラッと変わるかもしれない •
外的要因 • 内的要因 • あとで変わるかもしれないものをベースにしない
22.
実際にやってみましょう
23.
要件 • 顧客電話帳アプリ • 項目は電話番号、会社名、担当者名、自社の担当者名、案件名、メモ •
電話番号とキーワードで検索 • 電話番号は前方一致 • キーワードは部分一致 • メモ以外のテキスト項目を検索 • データ保存形態は未定(どれでも対応できるように)
24.
要件 • 顧客電話帳アプリ • 項目は電話番号、会社名、担当者名、自社の担当者名、案件名、メモ •
電話番号とキーワードで検索 • 電話番号は前方一致 • キーワードは部分一致 • メモ以外のテキスト項目を検索 • データ保存形態は未定(どれでも対応できるように)
25.
step1. 表のイメージ 表をイメージして裏から作る
26.
step2.分け方を考える 検索条件ビルダ 顧客検索 表をイメージして裏から作る
27.
step3. 表イメージをあるべき姿へ修正 顧客検索アプリ 表をイメージして裏から作る
28.
step3. 外側のイメージをあるべき姿へ修正 1つのファイルの責務を1つにしたらだいたいOK 表をイメージして裏から作る
29.
step4. interfaceで表からの利用イメージをそのまま書いてみる 良さそうですね 表をイメージして裏から作る
30.
今回の場合は揺れ動きそうなのは検索の仕様。 なら、$_GETから$customerCriteriaを作るCriteriaBuilderから作る。 争いのないものから作る step5. 争いのない部品を作る
31.
step6.争いのある部品を作る CustomerSearch::search()のイメージを考える。 RDBだとSQL1個書いてPDOにつっこむだけだから楽ですね。 でも対象が配列やCSVだと…? 顧客データソース 表をイメージして裏から作る
32.
step7. 争いのある部品のイメージをinterfaceで書いてみる 検索の仕様が変わったらここだけ変えれば良い ※本当はこの辺もうちょっと分割したい 表をイメージして裏から作る
33.
step8. 争いのある部品で使うための部品を作る とりあえずArrayのDataSourceを書いた
34.
step9. 部品が ったので組み立てて動かしてみる
35.
search.php CustomerSearchApp CustomerSearch infra(DB/External API) CustomerDataSource CustomerCriteriaBuilder CustomerCriteria 表 裏
36.
demo
37.
step10. 応用編: データ保存先がRDBに変わったとき あれだけ一生懸命書いたCustomerSearchの絞り込み処理は捨てました
38.
その他速度を上げるテクニック 1. 良い道具を使う 1-1. こわれにくい 1-2.
間違えにくい 1-3. 手数が少ない 1-4. 動作が速い 2. 自分の速度を上げる 2-1. 決断を速く 2-2. 思考を速く 2-3. ベンチタイムの有 効活用
39.
1.良い道具を使う • 良い=開発速度が上がる
40.
1-1. こわれにくい道具
41.
1-1. こわれにくい道具 • 急いで、雑に扱っても大丈夫 •
キーボード • 芯の折れやすいシャーペンより鉛筆 • オプションを1つ間違っても壊れないコマンド • ボタンを1つ押し間違ってももとに戻せる
42.
1-2. 間違えにくい道具
43.
2-2. 間違えにくい道具 • 操作を間違いにくい •
ショートカットキーより直感的なボタン操作が優れていることがある • コーディング自体を間違いにくい • エディタのコード補完をちゃんと使う • typo指摘してくれて専門用語の辞書を設定できるエディタを使う
44.
1-3. 手数が少ない道具 ・たくさんあれこれ調整する ・途中で洗い→脱水→すすぎ→脱水と手で移動させる ・「スタート」ボタン1個押せば洗濯できる ・ボタン1つで乾燥までできる
45.
1-3. 手数が少ない道具 • 人間がやらないといけないことを減らして、自動化できるものを選ぶ •
手数が減るとミスも減る • CI • cs-fixer
46.
1-4. 動きが速い道具
47.
1-4. 動きが速い道具 • 良いCI(札束で殴る) •
良いスペックのPC • キーボード • 無線より有線 • マウス • ゲーミングマウスは反応が良いのでオススメ
48.
2. 自分の速度を上げる
49.
2-1. 決断を速く
50.
2-1. 決断を速く • 悩んだり調査したりする(コーディング以外の)時間の限度を決める •
Googleは10分間ルール(※要出典) • 私は1時間ルール • 死なないものならまずやってみる • 案ずるより産むが易し
51.
2-2. 思考を速く
52.
3-2. 思考を速く • トレーニングする。手っ取り早いのは速聴 •
高価な機器はいらない、カセットテープ再生機やyoutubeの倍速再生とかで十分効果がある • やりすぎると話し言葉も早口になっちゃうので人間関係に注意…
53.
2-3. ベンチタイムの有効活用 あと30分
54.
2-3. ベンチタイムの有効活用 • テスト実行中、CI実行中、レビュー待ち •
2タスク(以上)並列せよ • まったく別のプロジェクトを並列するのが理想 • プロジェクトが1つしかない場合はgitのブランチを使ってタスクごとに完全に分ける • 次に何をするかはコミットログに覚えさせる(脳内に覚えることはできるだけ少なく) • プルリクも分割統治しておく • 後工程があるものを先に作業 A実装 B実装 直 し テスト テスト CI レビュー テスト レビュー CI レビュー仕様確認 レビューXさん作業 仕様確認
55.
まとめ • 戦略:分割統治法=わからなさを削りながら実装する • 表をイメージして裏から作る •
争いのないものから作る • 良い道具を使う • 自分自身の速度を上げる
56.
Happy coding! ありがとうございました!
57.
サンプルコード:https://github.com/77web/phpkansai2018-hellopage
Baixar agora