109
リモートワークで加速する! Movable Type によるサイト構築 photo by Zengame https://www.flickr.com/photos/zengame/19947750606 bit part / BUN / h2ham

MTDDC Meetup TOKYO 2015 bit-part

  • Upload
    bitpart

  • View
    1.413

  • Download
    8

Embed Size (px)

Citation preview

Page 1: MTDDC Meetup TOKYO 2015 bit-part

リモートワークで加速する! Movable Type によるサイト構築

photo by Zengame https://www.flickr.com/photos/zengame/19947750606

bit part / BUN / h2ham

Page 2: MTDDC Meetup TOKYO 2015 bit-part

ABOUT US

Page 3: MTDDC Meetup TOKYO 2015 bit-part
Page 4: MTDDC Meetup TOKYO 2015 bit-part

mersy tinybeans

Page 5: MTDDC Meetup TOKYO 2015 bit-part

業務内容

photo by PRONana B Agyei https://www.flickr.com/photos/nanagyei/5641647904

! MovableType サイトの構築 ! プラグイン開発:MTAppjQuery など ! HTML・CSS・JavaScriptのコーディング業務 " ディレクション・プロジェクトマネジメント業務

などなど

Page 6: MTDDC Meetup TOKYO 2015 bit-part

capture http://www.bit-part.net/products/mtappjquery/

Page 7: MTDDC Meetup TOKYO 2015 bit-part

中でも得意分野

! MovableType 関連全般 ! プロジェクト進行管理

Page 8: MTDDC Meetup TOKYO 2015 bit-part

bit part の二人は苦手?

photo by ぱくたそ https://www.pakutaso.com/20150539128post-5482.html

MovableType構築 やディレクション周りは得意だが HTML・CSSのコーディングはやや不得意

Page 9: MTDDC Meetup TOKYO 2015 bit-part

photo by Nicola Barnett https://www.flickr.com/photos/n_corboy/4921290518

作業を分割し、 各分野の専門パートナーとともに仕事

Page 10: MTDDC Meetup TOKYO 2015 bit-part

bit partner

Page 11: MTDDC Meetup TOKYO 2015 bit-part

(́ ºムº `)

h2ham

Page 12: MTDDC Meetup TOKYO 2015 bit-part

photo by Aaron Landry https://www.flickr.com/photos/s4xton/2425718415

bit part の HTML・CSS・JavaScript の制作や 技術面の確認を含めたフロント側業務を主に担当

Page 13: MTDDC Meetup TOKYO 2015 bit-part

BUN

BUN

Page 14: MTDDC Meetup TOKYO 2015 bit-part

photo by Nicola Barnett https://www.flickr.com/photos/n_corboy/4921290518

Movable Type でのサイト構築担当

Page 15: MTDDC Meetup TOKYO 2015 bit-part

bit part チームの制作の流れ

Page 16: MTDDC Meetup TOKYO 2015 bit-part

hei_a

mersy

tinybeans

BUNh2ham

#

コーディング指示 MT構築指示

コーディングデータ

役割と流れ

#

Page 17: MTDDC Meetup TOKYO 2015 bit-part

hei_a

mersy

tinybeans

BUNh2ham

#

コーディング指示 MT構築指示

コーディングデータ

役割と流れ

#" Direction : bit part $ HTML / CSS : (́ ºムº `) & CodeDesign $ JavaScript : (́ ºムº `) & bit part Movable Type : BUN & bit part &

Page 18: MTDDC Meetup TOKYO 2015 bit-part

だがしかし!

photo by Kiks Balayon https://www.flickr.com/photos/kiksbalayon/2113369517

Page 19: MTDDC Meetup TOKYO 2015 bit-part

photo by @bloodysheep https://twitter.com/ponoyuku/status/362415739514273792

一人は 北海道

このへん

Page 20: MTDDC Meetup TOKYO 2015 bit-part

一人は 秋田

Page 21: MTDDC Meetup TOKYO 2015 bit-part

遠いな…

photo by Pulseman https://www.flickr.com/photos/pulseman/577082958

ええ、遠いです

Page 22: MTDDC Meetup TOKYO 2015 bit-part

リモートワーク!!

photo by デザイン日本地図のフリー画像 http://www.abysse.co.jp/japan/d-japanmap/map07-1.html

Page 23: MTDDC Meetup TOKYO 2015 bit-part

なぜリモートで作業ができるか

photo by ぱくたそ https://www.pakutaso.com/20151016292web-9.html

Page 24: MTDDC Meetup TOKYO 2015 bit-part

⇒ 分業による進行

Page 25: MTDDC Meetup TOKYO 2015 bit-part

分業? 実は今回の最大のポイント

Page 26: MTDDC Meetup TOKYO 2015 bit-part

% 分業が最善というわけではないが

分業できるようにしてあることが超重要

% 負荷分散、複数同時作業、リモートでも 問題なく進行可能

Page 27: MTDDC Meetup TOKYO 2015 bit-part

作業を依頼するだけ

photo by ぱくたそ https://www.pakutaso.com/20140927268post-4614.html

Page 28: MTDDC Meetup TOKYO 2015 bit-part

分業ができる体制 ↓

作業を効率的に回せる体制

Page 29: MTDDC Meetup TOKYO 2015 bit-part

大事なことなのでもう一度

分業できるようにしてあることが 超重要

Page 30: MTDDC Meetup TOKYO 2015 bit-part

分業のポイント

Page 31: MTDDC Meetup TOKYO 2015 bit-part

分業のポイント

! ドキュメント用意と整理 " 説明時間の省略と忘れた時やチェック時の確認に

! 仕様の明確化 " 作業者を迷わせない

! 曖昧仕様を先に解決しておいての実装 " 手戻り工数の削減

Page 32: MTDDC Meetup TOKYO 2015 bit-part

やりがちな問題

Page 33: MTDDC Meetup TOKYO 2015 bit-part

やりがちな問題

# 説明のないワイヤーやデザインで作業指示 # 感覚値「もっと大きく・いい感じに など」

Page 34: MTDDC Meetup TOKYO 2015 bit-part

もっと大きく?

$ tinybeans

画像を大きくしてください

Page 35: MTDDC Meetup TOKYO 2015 bit-part

もっと大きく?

$ tinybeans

なんか変わった?

Page 36: MTDDC Meetup TOKYO 2015 bit-part

もっと大きく?

$tinybeans

大きすぎない?

Page 37: MTDDC Meetup TOKYO 2015 bit-part

工数増

% 手戻り工数増:作業後の「やっぱりこうしてください」 % 確認工数増:動きは?リンク先は?レスポンシブ仕様は?

Page 38: MTDDC Meetup TOKYO 2015 bit-part

問題ない?

? 作業者が仕様を決めながらすすめるスタイル? ? 決めたり提案しながらすすめることが仕事?

Page 39: MTDDC Meetup TOKYO 2015 bit-part

確認による手戻り = コスト提案しながらすすめるのはコストが増える原因

Page 40: MTDDC Meetup TOKYO 2015 bit-part

コスト増

# 「実装時の適当にいいようにやってください」 " 感覚や求めていることは人により違う " 感覚値は実は地味に工数増 = 金額増

Page 41: MTDDC Meetup TOKYO 2015 bit-part

分業している作業者間での やり取りはできるだけ少なく

Page 42: MTDDC Meetup TOKYO 2015 bit-part

NGではない

! 感覚値がダメなわけではない ! しかしデザインでの確認・決めるほうが   実装中の確認・実装後のチェック参考にできる ' HTMLに直接変更を反映?   " 確認時の参考資料(デザインなど)と差分が発生

Page 43: MTDDC Meetup TOKYO 2015 bit-part

リモートでのプロジェクトは失敗が多い?

Page 44: MTDDC Meetup TOKYO 2015 bit-part

capture http://www.slideshare.net/takayukiito739/ss-55141697

Page 45: MTDDC Meetup TOKYO 2015 bit-part

そんなことになったことがない bit part チーム!

? ? ?

? ? ?

Page 46: MTDDC Meetup TOKYO 2015 bit-part

bit partner が失敗しないのは

! 仕事遂行の意識が共有できている " リモート = 自由な時間で仕事 ではあるが ゆっくりやってよいというわけではない " ディレクターが、いつまでにできるかの確認 と スケジュールまでに完了させる作業者の意識 " 無理のあるスケジュールになっていないか? 想像との乖離がないか要確認

Page 47: MTDDC Meetup TOKYO 2015 bit-part

リモートワークのための利用ツール

Page 48: MTDDC Meetup TOKYO 2015 bit-part

capture http://www.slideshare.net/takayukiito739/ss-55141697

Slack:連絡や質問、情報共有などは全てここ

案件ごとのチャンネル チーム内は Slack のみ

Page 49: MTDDC Meetup TOKYO 2015 bit-part

capture http://www.slideshare.net/takayukiito739/ss-55141697

Redmine:作業・確認チケット

ドキュメントをWikiに 作業はチケットに

Page 50: MTDDC Meetup TOKYO 2015 bit-part

capture http://www.slideshare.net/takayukiito739/ss-55141697

Redmine:作業・確認チケット

ドキュメントをWikiに 作業はチケットにその他様々なツールに対応可能

Skype / Backlog / Facebook / Basecamp など

Page 51: MTDDC Meetup TOKYO 2015 bit-part

各作業における連携のポイント

Page 52: MTDDC Meetup TOKYO 2015 bit-part

ディレクション

Page 53: MTDDC Meetup TOKYO 2015 bit-part

いかにスムーズにその後の作業が スムーズに行くかの最大のポイント

Page 54: MTDDC Meetup TOKYO 2015 bit-part

段取りと指示

! 段取りが良くないと作業もスムーズにいかない ! 指示のタイミングや量、仕方なども重要

Page 55: MTDDC Meetup TOKYO 2015 bit-part

! 不明な点は全て確認するようにする " 技術的に確認が必要な物は早めに共有したうえで、 そのまま対応するか調整提案するなどを検討する " 危険の芽は早めに摘む ! 期日をなるべく指定する " 確認も同様、いつまで回答もらえるのかなど

その他のポイント

Page 56: MTDDC Meetup TOKYO 2015 bit-part

! スコープ内容のタスクは全て洗い出してTodo化 " なるべくタスクの粒度は細かくする

! 専門的に決める部分は各担当に任せる " 例:マークアップの要素、MTの変数化など

! 情報は全て共有する ! ボール(確認事項やTodo)は持たないですぐ投げる ! わかりやすく伝える " 意図が伝わらないのはディレクターのバグ

その他のポイント

Page 57: MTDDC Meetup TOKYO 2015 bit-part

! なるべく自動化・スニペットの活用など ! 毎回使うようなドキュメントは共通の場所に " 各種ガイドラインなど

その他のポイント

Page 58: MTDDC Meetup TOKYO 2015 bit-part

作業者への説明はドキュメントや文章前提

Page 59: MTDDC Meetup TOKYO 2015 bit-part

ドキュメントや文章前提

! MTGなどは出来る限り減らす (必要な時以外はしない) ! ドキュメントやプロジェクト管理ツールの活用

Page 60: MTDDC Meetup TOKYO 2015 bit-part

説明時間の省略と忘れた時やチェック時の確認に

Page 61: MTDDC Meetup TOKYO 2015 bit-part

スケジュールの確認重要

Page 62: MTDDC Meetup TOKYO 2015 bit-part

スケジュールの確認

! いつからいつまでの作業か ! 作業者はスケジュールに問題がないか ! 優先度指定

Page 63: MTDDC Meetup TOKYO 2015 bit-part

進行管理

Page 64: MTDDC Meetup TOKYO 2015 bit-part

進行管理

! 気配り ! 段取り ! 確認は細々(しつこくということではなく)

Page 65: MTDDC Meetup TOKYO 2015 bit-part

テクニカルディレクション

Page 66: MTDDC Meetup TOKYO 2015 bit-part

テクニカルディレクション

! 希望されているスケジュールや技術と、 想定されるスケジュール・技術に 乖離がないかどうか ! ディレクターと共有して可否判断 ギリギリ・無理なスケジュールで組まない

Page 67: MTDDC Meetup TOKYO 2015 bit-part

静的HTML実装フロー

Page 68: MTDDC Meetup TOKYO 2015 bit-part

なぜ 静的HTMLを別途分けて制作を進めるか

Page 69: MTDDC Meetup TOKYO 2015 bit-part

HTML の制作を分離

! MTのテーマの実装しながらコーディングは すぐにプレビューできないため時間のロス ! どんな案件でも対応可 MT以外の案件でも分業でファイルを渡せる ! システム・CMSのセットアップや設定と 同時進行可能

Page 70: MTDDC Meetup TOKYO 2015 bit-part

HTML の工夫

! モジュール前提(システム化前提) 大きなHTML構造に依存しない = 疎結合 ! CSSで対応できるものはCSSで対応 :first-child や :nth-child の利用など ! システムやプラグインで、 決まったHTMLが出力される箇所は、 それに合わせてマークアップ & スタイル " 例:ページャー、wysiwyg

Page 71: MTDDC Meetup TOKYO 2015 bit-part

コーディング時に実践していること

Page 72: MTDDC Meetup TOKYO 2015 bit-part

capture https://git-scm.com/

Gitの利用(リビジョン管理ツールの利用)

Page 73: MTDDC Meetup TOKYO 2015 bit-part

capture http://gulpjs.com/

タスクランナーの活用

Page 74: MTDDC Meetup TOKYO 2015 bit-part

capture http://www.metalsmith.io/

静的 HTML ジェネレータの利用

Page 75: MTDDC Meetup TOKYO 2015 bit-part

capture http://www.browsersync.io/

サーバー設定を代替、準備時間の短縮

Page 76: MTDDC Meetup TOKYO 2015 bit-part

capture http://www.browsersync.io/

FTPアップ & 確認を前提にしない

静的 HTML はローカル確認前提 先祖返り・バッティング 工数増

Git のリモートリポジトリに pushすると、確認環境に自動で反映

Page 77: MTDDC Meetup TOKYO 2015 bit-part

Movable Type の実装フロー

Page 78: MTDDC Meetup TOKYO 2015 bit-part

大きく3つの流れ

Page 79: MTDDC Meetup TOKYO 2015 bit-part

大きく3つの流れ

! ウェブサイト / ブログの設定 ! 管理画面のカスタマイズ ! テンプレートのカスタマイズ

Page 80: MTDDC Meetup TOKYO 2015 bit-part

photo by PRONana B Agyei https://www.flickr.com/photos/nanagyei/5641647904

#</>#{css} #{JS}

$

管理画面のカスタマイズまでは、静的HTML実装フローと並行作業

! できることから先に進めて おけるのも、分業化の メリット ! カスタムフィールドなどの 構成を事前に把握でき、 テンプレート実装時点で 過不足に気づきやすい

Page 81: MTDDC Meetup TOKYO 2015 bit-part

1.ウェブサイト / ブログの設定

Page 82: MTDDC Meetup TOKYO 2015 bit-part

ウェブサイト / ブログの設定

$ ウェブサイト / ブログの作成 $ カスタムフィールドの追加 / 設定 $ 不要テンプレート / ウィジェットの削除 $ 空テンプレートの追加 $ テーマのエクスポート

" これ以降、入力作業と同時並行可能

Page 83: MTDDC Meetup TOKYO 2015 bit-part

設計書(カスタムフィールド)

* 写真 * basename * type * object * 写真のキャプション * basename * type * object * 写真の説明文 * basename * type * object

: image_file : 画像 : 記事

: image_caption : 1行テキスト : 記事

: image_description : 複数行テキスト : 記事

" テンプレート実装時 MT タグ名の参照が容易に

Page 84: MTDDC Meetup TOKYO 2015 bit-part

設計書(テンプレート)### インデックステンプレート * トップページ * path * identifier * 公開 ### アーカイブテンプレート * カテゴリ * type * mapping * identifier * 公開 * 記事詳細 * type * mapping * identifier * 公開

: index.html : index-top : スタティック

: カテゴリアーカイブ : /%c/index.html : archive-category : スタティック

: ブログ記事 : /%c/%b/index.html : archive-entry : スタティック

" あらかじめ識別子を 決めておくため、編集対象の ローカルファイルを探しやすい

Page 85: MTDDC Meetup TOKYO 2015 bit-part

2.管理画面のカスタマイズ

Page 86: MTDDC Meetup TOKYO 2015 bit-part

管理画面のカスタマイズ

$ ラベルの変更 $ 入力項目のソート $ 増減可能な表組みによる入力欄 ($.MTAppJSONTable) $ DataAPI を利用したファイルアップロード ($.MTAppMultiFileUpload) $ 異なるブログでの記事の関連付け ($.MTAppListing) " MTAppjQuery で必要に応じたカスタマイズ

Page 87: MTDDC Meetup TOKYO 2015 bit-part

MTAppjQuery 利用時のポイント

$ メインウェブサイトのインデックステンプレート化 " プラグインの user.js を上書きし、一元管理 $ 分岐用のブログ ID は config モジュールにセット " 本番 / 開発環境で ID が異なる場合も影響を受けない $ 複数人で作業する場合は、担当ごとにモジュール化 " 管理画面で直接更新する際、ロールバックを回避

Page 88: MTDDC Meetup TOKYO 2015 bit-part

3.テンプレートのカスタマイズ

Page 89: MTDDC Meetup TOKYO 2015 bit-part

テンプレートのカスタマイズ

<mt:Ignore>================================================== Template Name : トップページ Template Type : index / website Current Site : ウェブサイト名 Required Vars : Template Note : ==================================================</mt:Ignore> <mt:Include module="config" blog_id="1" />

<mt:Ignore>------------------------------- テンプレート固有の変数 -------------------------------</mt:Ignore>

<mt:Ignore>------------------------------- HTML ソースの出力 -------------------------------</mt:Ignore>

Page 90: MTDDC Meetup TOKYO 2015 bit-part

config モジュール

$ 変数の定義 " ウェブサイト / ブログ ID " サイトの共通変数(description / keywords など) " 置換のパターン $ SetVarTemplate の定義 " SNS ボタン / Pager などサイト共通のもの

メインウェブサイトに作成

Page 91: MTDDC Meetup TOKYO 2015 bit-part

config モジュール のサンプル

<mt:Ignore>== blogID ==</mt:Ignore> <mt:SetVars> blogid_website =1 blogid_topics =2 </mt:SetVars>

<mt:Ignore>== 共通変数 ==</mt:Ignore> <mt:SetVars> base_keywords = サイト共通のキーワード base_description = サイト共通の説明文 base_sitedomain = ドメイン base_sitename = サイト名 <mt:SetVars>

<mt:Ignore>== 置換のパターン ==</mt:Ignore> <mt:SetVarBlock name="compress_pattern">/http:\/\/<mt:WebsiteHost />/g</mt:SetVarBlock> <mt:SetVarBlock name="replace_blank"></mt:SetVarBlock> <mt:SetVarBlock name="replace_sitedomain">http://<mt:Var name="base_sitedomain" /></mt:SetVarBlock>

Page 92: MTDDC Meetup TOKYO 2015 bit-part

config モジュール(ブログ専用)

$ SetVarTemplate の定義 (一覧用モジュールなど、ブログ内で複数回利用するもの)

Page 93: MTDDC Meetup TOKYO 2015 bit-part

テンプレート固有の変数

<!-- meta 関連 --> <mt:SetVars> meta_title =<mt:Var name="base_sitename" /> meta_description =<mt:Var name="base_description" /> meta_keywords =<mt:Var name="base_keywords" /> </mt:SetVars>

<!-- head 要素に追加する CSS --> <mt:SetVarBlock name="html_head_css"></mt:SetVarBlock>

<!-- head 要素に追加する JS --> <mt:SetVarBlock name="html_head_script"></mt:SetVarBlock>

<!-- /body 直前に追加する JS --> <mt:SetVarBlock name="html_foot_script"></mt:SetVarBlock>

<!-- トピックパス --> <mt:SetVarBlock name="topic_path"></mt:SetVarBlock>

共通ヘッダなどのモジュールで上書きしたいものだけ定義

Page 94: MTDDC Meetup TOKYO 2015 bit-part

HTML ソースの出力

<mt:Unless name="compress" regex_replace="/^\s*\n/gm","" trim="1"> <mt:Unless name="compress" regex_replace="$compress_pattern","$replace_blank"> <!-- body 開始タグまで --> <mt:Include module="html_head" blog_id="$blogid_website" /> <!-- 共通ヘッダ --> <mt:Include module="header" blog_id="$blogid_website" />

(中略:テンプレートごとの処理)

<!-- 共通フッタ --> <mt:Include module="footer" blog_id="$blogid_website" /> <!-- body 終了タグ以降 --> <mt:Include module="html_foot" blog_id="$blogid_website" /> </mt:Unless> </mt:Unless>

サイト共通のヘッダ / フッタなどはモジュール化

Page 95: MTDDC Meetup TOKYO 2015 bit-part

共通モジュールの例(html_head)

<head> <meta charset=“UTF-8">

<!—- meta 関連 —-> <title><mt:Var name="meta_title" /></title> <meta name="description" content="<mt:Var name="meta_description" />"> <meta name="keywords" content="<mt:Var name="meta_keywords" />">

<link rel="stylesheet" href=“/common/css/style.css">

<!—- ページ単位で追加する CSS / Script —-> <mt:Var name="html_head_css" /> <mt:Var name="html_head_script" />

<body>

Page 96: MTDDC Meetup TOKYO 2015 bit-part

とあるウェブサイトのテーマ

├── templates/ │ ├── comment_listing.mtml │ ├── comment_preview.mtml │ ├── comment_response.mtml │ ├── dynamic_error.mtml │ ├── index-top.mtml // トップページ │ ├── index-user_css.mtml // MTAppjQuery の user.css │ ├── index-user_js.mtml // MTAppjQuery の user.js │ ├── module-config.mtml // サイト共通の config モジュール │ ├── module-footer.mtml // 共通フッタ │ ├── module-header.mtml // 共通ヘッダ │ ├── module-html_foot.mtml // 共通 HTML フッタ │ ├── module-html_head.mtml // 共通 HTML ヘッダ │ ├── popup_image.mtml │ └── search_results.mtml └── theme.yaml

増減はあっても最低構成はこの形 " Git で共有

Page 97: MTDDC Meetup TOKYO 2015 bit-part

あとは、テンプレートごとに出力用のタグを記述

Page 98: MTDDC Meetup TOKYO 2015 bit-part

静的HTML実装フローとの連携

Page 99: MTDDC Meetup TOKYO 2015 bit-part

実装フローの連携

Page 100: MTDDC Meetup TOKYO 2015 bit-part

! HTML のコーディング段階で テンプレート的にファイルを用意 $ 静的HTMLジェネレータの導入が MT テンプレート実装の効率化に繋がる " 共通部分のインクルード " 条件分岐 " ループ処理

静的 HTML ジェネレータの利用

Page 101: MTDDC Meetup TOKYO 2015 bit-part

capture http://www.metalsmith.io/

静的 HTML ジェネレータの利用

Page 102: MTDDC Meetup TOKYO 2015 bit-part

capture http://paularmstrong.github.io/swig/

静的 HTML ジェネレータの利用

Page 103: MTDDC Meetup TOKYO 2015 bit-part

とあるコンテンツのHTMLテンプレート

<body{% if page == 'top' %} class="page--top"{% endif %}> {% include 'header.html' %} <div class="layout-container"> {{ contents | safe }} </div> {% include 'footer.html' %} </body>

これを MTML に置き換えると

Page 104: MTDDC Meetup TOKYO 2015 bit-part

とあるコンテンツのMTMLテンプレート

<body<mt:Unless name="page_class"> class="<mt:Var name="page_class" />"</mt:Unless>> <mt:Include module="header.html" /> <div class="layout-container"> <mt:EntryBody /> <mt:EntryMore /> </div> <mt:Include module="footer.html" /> </body>

Page 105: MTDDC Meetup TOKYO 2015 bit-part

ページ単位の変化は diff ツールで確認

Page 106: MTDDC Meetup TOKYO 2015 bit-part

SublimeText のプラグインを利用し Kaleidoscope で開く FileDiffs Plugin Package Control でインストール後、2つの設定ファイルを修正

エディタと diff ツールの連携例

[ // SublimeFileDiffs { "keys": ["ctrl+shift+d"], "command": "file_diff_menu" } ]

{ // ksdiff (Kaleidoscope) "cmd": ["/usr/local/bin/ksdiff", "$file1", "$file2"] }

% Preferences > Key Bindings - User

% Preferences > Package Settings > FileDiffs > Settings - User

Page 107: MTDDC Meetup TOKYO 2015 bit-part

リモートワークをするためのまとめ

Page 108: MTDDC Meetup TOKYO 2015 bit-part

リモートワークをするためのまとめ

! 不明点は早めに確認 ! 分業できる体制用意・情報整理 ! 文字ベースのやりとりで、 いかに認識の違いをなくせるか ! 同時並行で作業できるよう、 タスクの粒度と優先順位が大事 ! 担当者に関わらず、品質を担保できる仕組み作り ! タスク単位で変更点を共有(Git)

Page 109: MTDDC Meetup TOKYO 2015 bit-part

- https://www.flickr.com/photos/zengame/19947750606 - https://www.pakutaso.com/20150539128post-5482.html - https://www.flickr.com/photos/n_corboy/4921290518 - https://www.flickr.com/photos/s4xton/2425718415 - https://www.flickr.com/photos/kiksbalayon/2113369517 - https://twitter.com/ponoyuku/status/362415739514273792 - https://www.flickr.com/photos/pulseman/577082958 - http://www.abysse.co.jp/japan/d-japanmap/map07-1.html - https://www.pakutaso.com/20151016292web-9.html - https://www.pakutaso.com/20140927268post-4614.html

Photo credit