42Tokyo向けに開催していただいた、Yahooのペアプロセミナーに参加しました
42Tokyo向けに開催していただいた、Yahooのペアプロセミナーに参加しました
TL;DR
- Yahooのクローズトイベントに参加した
- LeanでXPな開発をペアプロでTDDで実践した → すごい、やりたい
- 42 Tokyo にいると、単に課題をこなすだけでなく、不定期で楽しいイベントに参加できるよ!
以下覚書的にまとめてます。不足や雑な記載もありますが、イベントでは丁寧に説明いただいていましたので念のため!
知識の習得 (1)
- Lean開発
- 顧客に価値のあることをやる
- それ以外を捨てる
XP(エクストリームプログラミング)
ストーリー
- 受け入れテストができる最小単位
- AS(ペルソナ),GIVEN(何をしているか),WHEN,AND,THENの項目+メモで構成される
ストーリーの例:
◆ストーリー概要 Aは検索ボックスを見ることができる ◆ストーリー詳細 AS Aさん GIVEN 私は検索トップ画面にいる WHEN トップ画面を見た THEN ページ一番上に検索ボックスを見ることができるはずだ NOTE: ・プレースホルダーには「検索ワードを入力してください」と表示されること ・デザイン不問 ・APIはコールしない
実際にやってみた (1) じゃんけんアプリ
じゃんけんを行うプログラムをペアプログラミングで実践してみました。
開発はテスト駆動開発で行い、一方がテストを記述、その後他方がそのテストに合うコードを実装していくという流れで行いました。
また、上記のLean開発の考えのもと、テストに対して必要な機能のみを実装するようにしました。
初期プロジェクト作成
- npm init
- 初期パッケージ作成
- package.jsonが作成されるとOK
- npm i jest
- テストフレームワークであるjestを入れる
- メインとなるrps.jsファイルを作る
- 処理を記述するファイル
- ros.spec.jsファイルを作る
- テストを記述するファイル(同じ名前のrps.jsと対になっていると認識される)
- describeという単位でテストを区切って記述する
- サンプル:https://github.com/satoshikeda/rps
テスト駆動開発
以下のようなテストコードを書く
describe('Rps', () => { let result const rps = new Rps() describe('play()', () => { describe('When paper vs rock', () => { beforeEach(() => { result = rps.play('paper', 'rock') }); it('returns A wins', () => { expect(result).toBe('A wins') }); }); }); });
その後、もう一人の人がテストに合わせたコードを書く。
npx jestでテストを実行し、すべてPassedすればOK。
今度は交代して行う。
テスト駆動開発のポイント
- コードを書いている人は、何をしているか説明しながら書く(相手に理解してもらう)
- コードやテストは交互に書く(一方的な開発にしない)
テスト駆動開発でのメリット
- 技術的な、またはプログラムの仕様の理解が相互に進む
- いい知識はどんどん広まる
- 皆が仕様を頭の中に入れているので、仕様書が減る、会話がスムーズになる
- お互いを尊敬してみることができるようになる
知識の習得 (2)
- 4レベルによる見積もり
- 開発のサイクル
- PM→エンジニアにストーリーを渡す
- 見積もりを行う
- 実装
- 受入れテスト→PM
1日だけでも30通りとか消化することもある
実際にやってみた (2) 電子書籍開発
残念ながら時間がなくできませんでしたが、流れだけご参考までに記載しています。
セットアップコマンド
git clone https://github.com/vuejs/vue-test-utils-typescript-example
npm ci
npm run serve
編集するファイル
- HelloWorld.vue
- HelloWorld.spec.ts
テスト実行コマンド
jest
テストコード
実際にやってみた(1)と同じく、jestのコードを書いていきます。以下は抜粋。
it('displays search input', () => { expect((wrapper.find('input').exists()).toBeTruthy() })
実装例
https://github.com/satoshikeda/sample-search-books
知識の習得 (3)
レトロスペクティブ
- 振り返りの時間
- 週1回程度やっているらしい
- お酒飲みながらやったり
- Good、Discuss、Improve(だったかな?)の3つのカテゴリごとに、ざっくばらんに意見を交わす
結局のところ、LeanでXPの価値って何?
- コミュニケーション
- シンプル
- フィードバック
- 勇気
- 尊重