アジャイル開発と開発に役立つコマンド

##アジャイル開発
一度にまとめてでは無く、少しずつ確認をはさみながら開発を進めていくことが特徴です。
**スプリントの考え方は設計=>計画=>実装=>テスト=>設計、、、の繰り返しです。**
##ウォーターフォール開発
初めに決めた要件を、ある期限までに完了するという手法です。
双方のメリット、デメリット

|| アジャイル | ウォーターフォール |
|:--|:--|:--|
| メリット | 手直しが容易で仕様変更に柔軟に対応可能 | 開発計画がシンプルで、進捗管理がしやすい |
| デメリット | 進捗が把握しづらい | 仕様変更に対応しにくい |
##スクラム
チーム開発を進めるための手法の１つです。リーダー・マネージャー主体ではなく、チームメンバー全員が主体性をもって、プロダクト完成に向けた責任を持つことが特徴です。
スクラムの流れです。
（1）アプリケーションの要件を決定
依頼者からヒアリングをして、どのようなアプリケーションを作成するのか決める
アジャイル開発においても大枠の要件定義は必須
（2）開発の意図を、開発する人々が完全に把握する
何を達成するためにそのプロダクトを作るのかを把握する
目的と矛盾する機能や優先順位付けは排除することが求められるため、開発メンバー全員がこれを理解していることが重要
（3）実装すべき作業を洗い出す
完成までに行うべき作業を洗いだすリスト化しておく
（4）作業の量を見積もる
上記作業のそれぞれにおける作業量を見積もる
（5）スプリントごとに実装する
スプリントの期間を設定し、スプリント開始時にスプリント計画ミーティングを行う
（6）スプリントの成果を発表する
スプリント計画で定めた実装が計画通りに終えられたかどうかチェックをする
（7）振り返りを行う
次の期間でより早く進めるための対策を立てる
##rebaseについて
**git rebase -iコマンド**
rebaseコマンドは、git merge(マージ)コマンドと同じように、2つのブランチを1つに統合するコマンドです。mergeよりもrebaseの方がきれいなコミットを残すことができます。
git rebaseコマンドの参考のサイト
[git rebaseと仲良くなろう~part1](https://qiita.com/kkam0907/items/f92dd5288622387409be)
[Git のさまざまなツール - 歴史の書き換え](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E6%AD%B4%E5%8F%B2%E3%81%AE%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88)
git rebase -iとして、-iオプションがついた場合です。
-iオプションをつけると、現在のブランチにおけるこれまでのコミットを操作することができます。
具体的には、以下のような操作が可能です。
・コミットメッセージの変更
・複数のコミットを1つにまとめる
・コミットの内容を改変する
git rebase -iの参考サイト
[git rebase -i はやっぱりイケてる件【git】【rebase 】【iオプション】](https://otiai10.hatenablog.com/entry/2012/11/10/013925)
##git commit --fixup
ターミナル

```
git commit --fixup コミット番号
```
レビューを受けたあと修正を行う際に役に立つコマンドです。--fixupを指定したコミットは、git rebase -iコマンドと組み合わせることで最終的に別のコミットに統合されます。統合先のコミットは、git commit --fixup コミット番号のように予め指定します。
【例】
ターミナル

```
#ログを表示
git log --graph --all 

| *     Tue Oct 3 17:45:28 2017 +0900   4c1efff eichann 投稿機能を作成  (5 months ago)   
| *     Tue Oct 3 17:41:29 2017 +0900   fc8d52e eichann bootstrapを導入する為の記述  (5 months ago)
| *     Tue Oct 3 17:40:35 2017 +0900   2021dd0 eichann jsでbootstrapが適用されるように追記  (5 months ago)
| *     Tue Oct 3 17:39:04 2017 +0900   57cf022 eichann 必要なルーティングを追記  (5 months ago)
| *     Tue Oct 3 17:38:37 2017 +0900   7a02ce0 eichann 必要なviewファイルを追加  (5 months ago)
| *     Tue Oct 3 17:34:03 2017 +0900   ecdbbca eichann 必要な画像を追加  (5 months ago)
| *     Tue Oct 3 17:33:23 2017 +0900   1426e47 eichann bootstrap用のgemの導入  (5 months ago)
```
「不要なファイルを削除」「エラーを解消」の作業が完了したとして、この時、コミットの際に--fixupオプションを利用します。
ターミナル

```
#変更をadd
git add .
#fixupオプションを利用してコミット
git commit --fixup 4c1efff
```
統合したいコミットは「投稿機能を作成」のコミットとします。そのコミット番号を指定しています。
ターミナル

```
#ログを表示
git log --graph --all 
| *     Tue Oct 3 18:40:00 2017 +0900   geojsei eichann fixup! 投稿機能を作成 
| *     Tue Oct 3 17:45:28 2017 +0900   4c1efff eichann 投稿機能を作成
| *     Tue Oct 3 17:41:29 2017 +0900   fc8d52e eichann bootstrapを導入する為の記述
| *     Tue Oct 3 17:40:35 2017 +0900   2021dd0 eichann jsでbootstrapが適用されるように追記
| *     Tue Oct 3 17:39:04 2017 +0900   57cf022 eichann 必要なルーティングを追記
| *     Tue Oct 3 17:38:37 2017 +0900   7a02ce0 eichann 必要なviewファイルを追加
| *     Tue Oct 3 17:34:03 2017 +0900   ecdbbca eichann 必要な画像を追加
| *     Tue Oct 3 17:33:23 2017 +0900   1426e47 eichann bootstrap用のgemの導入
```
新たなコミットのメッセージは、統合したいコミットのメッセージに「fixup!」をつけたものになっています。この状態で、git rebase -iコマンドを利用します。その際、--autosquashというオプションを指定します。
ターミナル

```
#最新から4個前までのコミットについてをrebaseの対象とする
git rebase -i --autosquash HEAD~2
```
そのままrebase -iで必要な作業をせずにエディタを閉じ終了すれば、変更は全て「投稿機能を作成」のコミットに統合されます。