スクラムマスダーの日記

アジャイル、スクラムに関連した内容が多めです。

しがないラジオに出演しました! #しがないラジオ

タイトルの通りですが、しがないラジオに出演しました!

shiganai.org

僕の出演回は、

の2回になります。
お時間ある方は、ぜひ聞いてください!

出演のきっかけ

gamiさんにTwitterで声かけていただいたから!非常に簡潔です!
しがないラジオに出演したいリスナーさんは、とりあえず「出演したいです! #しがないラジオ」ってツイートすれば、OKだと思います!

ラジオの内容について

詳しくは、ラジオを聞いてくださいという感じにはなりますが、僕の職務経歴、スクラムアジャイルコミュニティなどの話をさせていただきました。
普段、周りの方々の話を聞くことが多いので、自分のことを話す機会が少ないです。しかし、gamiさんが、色々と話しを引き出してくださるので、たくさん話しをすることができました。

「○○がないと、スクラムではない」と、ラジオの中では言ってますが、僕個人としては、ビジネスのゴールが達成できるのであれば、スクラムである必要は、まったくないと思っています。ですので、スクラムを神聖化するつもりはありません。
しかし、スクラムガイドに定義されているスクラムと照らし合わせると、「○○がないと、スクラムではない」と言えます。
あくまで定義の話ですので、「スクラムじゃないからどうしよ…」と悩まれる必要はありません。まず達成するべきは、ビジネスゴールであり、その中で最適な選択をすれば、よいだけなのです。

遠隔収録について

Skypeなどを利用して、遠隔の方と少人数で長時間の間、お話をすることが、ほぼほぼ初めてでした。さらに、収録となると、かなり大変でした。ラジオの中でも話をしましたが、事前にヘッドセットを購入しました。

このヘッドセットは、おすすめです。USBタイプなので、PCの電源さえあれば、なんとかなります。あと、マイクを持たなくてOKなのも、ありがたいです。

慣れてくれば大丈夫なのですが、、遠隔で、パーソナリティのお二人の顔も見えないので、話すタイミングか、かなり取りづらかったです。間がわからないのですよね。対面だと分かる話すタイミングがわからない。
遠隔収録の怖さを感じました。

おわりに

gamiさん、zuckeyさん、しがないラジオに出演させていただき、ありがとうございました。
しがないラジオをきっかけに、アジャイルラジオを聞いていただいた方も、いらっしゃって、アジャイルラジオを配信している僕としては、かなり嬉しいです。

agileradio.github.io

ということで、みなさんアジャイルラジオ聞いてください!アジャイルラジオもゲストさん、お待ちしております!

「モブプログラミングを実践してみよう!! 〜アジャイルモンスターのモブプロ入門〜」が楽しすぎました!

DevLOVE関西さん主催のモブプログラミングを実践してみよう!! 〜アジャイルモンスターのモブプロ入門〜に参加してきました。

個人的にもモブプロは一押しの働き方だと考えており、勤務先でも色々な方面で実践しています。
またモブプロ自体も楽しいのですが、及部 敬雄さんに会えることもあり、「コレは参加するべし!」と参加しました。

当日の流れ

及部さんからのモブプロ講話

モブプロの第一人者でもある及部さんからモブプロについて説明がありました。
及部さんの説明は、元気で、僕達に勇気を与えてくれる感じがしています。そのために、「お、僕達も、ちょっと出来るかもしれない!」と思わせてくれるのです。
僕も色々な方に対して説明したり発表したりする機会があるので、及部さんの発表スタイルを参考に頑張りたいです。

当日の資料は、アップされていないようですが、モブプログラミングを実践してみよう!! 〜アジャイルモンスターのモブプロ入門〜の前日に開催されたhttps://koberb.doorkeeper.jp/events/70770の資料を発見したので、リンク貼り付けておきます。

speakerdeck.com

資料にもありますが、モブプロの一番詳しい説明は、及部さんが書かれたWEB+DB PRESS Vol.102がよいと思います。

WEB+DB PRESS Vol.102

WEB+DB PRESS Vol.102

ただし、当日、及部さんも説明されていたましたが、モブプロを真に理解するには実践するしかないです。形式知化できないなにかがあります。それは、どのような仕事においてもあると、個人的には思います。モブプロに興味を持っていただいた方は、実践あるのみです。

自販機を開発するぞ!①

開発テーマは、自販機でした。
今回は、3チームに分かれて、チームごとに言語を選択して、開発を実践しました。

言語は、Pythonが2チーム、PHPが2チームです。僕は、PHPチームで、モブプロを開始しました。

ちなみに、僕は、PHPを全くやったことが、ありませんでした。チーム内で、JavaRubyPHPPythonあたりから選ぼうとなりましたが、どれも未経験!
ただ、個人的に「LL言語を触ってみたいなぁ」と思っていました。良い機会だったので、「PHPやりましょう!やったことないですけどw」と提案させていただいて、PHPに決まりました!

僕たちのチームは、どんどん機能を実装するスタイルで、ガシガシコードを書いてみました。書いたコードは以下の感じです。
(本ブログへのコードの公開は、DevLOVE関西主催の方に確認させていただいた上で、実施しております。)

class VendingMachine {

  public $inputMoney;
  public $stock;

  public function __construct() {
    $this->inputMoney = 0;
    // 在庫リスト
    $this->stock = [
      'Oshiruko' => 2,
      'OrangeJuice' => 2,
      'Cola' => 5,
      'Coffee' => 5
    ];
    // priceリスト
    $this->price = [
      'Oshiruko' => 300,
      'OrangeJuice' => 100,
      'Cola' => 150,
      'Coffee' => 200
    ];
    // あったかいかリスト
    $this->nukumoriList = [
      'Oshiruko' => true,
      'OrangeJuice' => false,
      'Cola' => false,
      'Coffee' => true
    ];
  }
  
  // クジ
  public function Kuji($juiceName) {
    // 在庫が1個以下はfalse
    if ($this->stock[$juiceName] < 1) {
      return false;
    }
    
    // ランダムにあたりを判定する
    return rand(1, 999) == 1;
  }
  
  public function supply($juiceObj) {
    $this->stock[$juiceObj->name]++;
    echo $juiceObj->name . "在庫は" . $this->stock[$juiceObj->name] . "です\n";
  }
  
  //ボタンを押す
  public function BuyJuice($juiceName) {
    // 在庫の有無のチェック
    if ($this->stock[$juiceName] <= 0) {
      return "在庫切れ!!";
    }

    // 名前から飲み物を取る
    $juicePrice = $this->price[$juiceName];
    // 金額が足りているか判定
    if ($this->inputMoney < $juicePrice) {
      return "お金が足りません";
    }
    
    // お金を減らす
    $this->inputMoney -= $juicePrice;
    echo "残りの金額" . $this->inputMoney . "\n";
    
    // 在庫を減らす
    $this->stock[$juiceName]--;
    echo "在庫数: " . $this->stock[$juiceName] . "\n";
    
    // 当たりかどうか判定する
    if ($this->Kuji($juiceName)) {
      echo "あたったー!!" . "\n";
    }
    
    return $juiceName;
  }
  
  public function EnterMoney($money) {
    $pattern = [10, 50, 100, 500];
    if (in_array($money, $pattern) === false) {
      echo $money."円は使えません\n";
      return $money;
    }
    
    $this->inputMoney += $money;
    echo $money . "円投入されました\n";
    
    return 0;
  }

  public function returnMoney(){
    $returnMoney = $this->inputMoney;
    $this->inputMoney = 0;
    return $returnMoney;
  }
}

class Juice {
  public $name;
  public $isCold;
  public $isHot;
}

class Coffee extends Juice {
  public function __construct(){
    $this->name="Coffee";
    $this->isCold=true;
    $this->isHot=true;
  }
} 

class Cola extends Juice {
  public function __construct(){
    $this->name="Cola";
    $this->isCold=true;
    $this->isHot=false;
  }
}

class OrangeJuice extends Juice {
  public function __construct(){
    $this->name="OrangeJuice";
    $this->isCold=true;
    $this->isHot=false;
  }
} 
class Oshiruko extends Juice {
  public function __construct(){
    $this->name="Oshiruko";
    $this->isCold=false;
    $this->isHot=true;
  }
} 

$vendingMachine = new VendingMachine;

//おっちゃんのターン
$vendingMachine->supply(new OrangeJuice);

// 一般人のターン
// お金を入れる
$vendingMachine->EnterMoney(500);
$vendingMachine->EnterMoney(2);
// ボタンを押す
echo $vendingMachine->BuyJuice("OrangeJuice") ."\n";
echo $vendingMachine->BuyJuice("OrangeJuice") ."\n";

//$juice = new OrangeJuice();

// ジュースをもらう
// お釣りをもらう
echo "お釣りは" . $vendingMachine->returnMoney() ."円です\n";

※1:このコードは、あくまでモブプロを実践するという目的の勉強会で書いたコードですので、仕事で書くコードとは異なることにはご注意ください。 ※2:後述しますが、僕は、途中でチーム移動したこともあり、まったくコーディングに携わっていない部分もあります。

ふりかえりタイム

ふりかえった結果は、上記の通りでした。どんどん機能を追加して、神クラスが出来つつあったので、テストコードとか書いて、品質あげたいねーと話していたのですが…。

ふりかえりの後は、近くの自動販売機を観察しに、出かけました。
「あったかい」と「つめたい」があったり、同じ商品が並んでいたりと、「そういえば・・・」ということを思い出しました。

自販機を開発するぞ!②

及部さんからチーム替えの司令があったので、ぼくはPHPチームからPythonチームに移動しました。

最初に思ったのが、進め方が全然違う…。

オンライン実行環境もサイバーDojoとテストコードがバッチリ書ける環境でした。

cyber-dojo.org

Pythonチームは、ガッツリTDDでコーディングしていました。
TDDだと、どんなことをやりたいのかをテストケースを眺めれば分かるのがよいですね。あと、コードが圧倒的にきれい!

TDDすごいな!って思いました。

テスト駆動開発は買ったはいいものの、まだ全部読み切れていないので、早く読まないと!という感じです。

テスト駆動開発

テスト駆動開発

おわりに

モブプログラミングって、やっぱり最高だな!って感じでした。
勉強会中に、及部さんらもおっしゃっていましたが、モブプログラミングという働き方は、プログラミングだけに限ったものではないですよね。
個人的には「モブワーク」って言うようにはしています。 仕様作成、テスト実施、資料作成なども、モブワークで進めれば、よいこともたくさんあるからです。
もちろん常にモブワークが、よいとは言いません。やり方には、マッチしている場面があるからです。モブワークがマッチしている場面では積極的に使いたいなと、再認識した1日でした!

「関西の地で現場を前進させんとする者達の話」で発表してきました!

DevLOVE関西さんのイベント「関西の地で現場を前進させんとする者達の話」で発表させていただきました。

devlove-kansai.doorkeeper.jp

最近、個人的にも仕事的にも、忙しく、発表報告ブログを書くのも、遅くなりました…。
個人Trelloも、上手く活用できていないので、ダメなサイクル回り始めている気がしてます…。

愚痴っぽいのは、ココまでにして、イベントの内容です。

大規模で技術的に多様な開発に真正面から取り組む

speakerdeck.com

Nexusやモブワークについて、発表しました。
Nexusは、周りでも取り組まれている事例が、全然なくて、今でも、手探り感満載です。
※資料に書いている通り、Nexusをやっているわけではないです。Nexusの一部のプラクティスに取り組んでいるだけです。

そもそも、大規模アジャイル開発と呼ばれる類の事例が、少ないというのもありますね。
※あくまで、ぼくの観測範囲内の話です

そして、人数が多いプロジェクトって、やっぱり難しいです。ただ、出来ることも、数多くあると思います。
そのため、「ぼくと同じようなことで困っている方の助けになれば、いいなぁ。」という思いで、発表させていただきました。

発表後のダイアログや、イベント後の時間にも、色々と参加者の方とお話させていただき、少しでも、参加者の方々の課題解決につながれば、個人的には嬉しく思います。

イベント感想

「限界をつくるな」を精神論で終えないために僕らは何ができるのか

speakerdeck.com

やんしんさんの発表は、TOCfEについて、発表されていました。
選択と集中」、「計れないものは改善できない」など、「やるべきだけど、なかなか出来てないなぁ」と個人的に痛感するモノが多かったです。やはり、本質的に困る部分って、似ているなぁという感じです。

やんしんさんの発表は、いつも、いい意味で生々しいです。現場での泥臭さが分かります。
だからこそ、少しづつでも改善していくことが、伝わっているのだと思います。

心理的安全性を高める活動を組織の当たり前にする方法

森田さんは、社内でLTを実践されている話などをされていました。
発表資料はありませんが、先日のRSGT2018でも、一部の内容を発表されています。

www.slideshare.net

森田さんの発表って、感情的で、聞き入りますよね。
ぼくも、発表のための表現は、改善しないと!と、反省です。

Fearless Change

中村さんが、ぼくの発表に関連して「機会を活かす」で、『Fearless Change アジャイルに効く アイデアを組織に広めるための48のパターン』を紹介されていました。

Fearless Change アジャイルに効く アイデアを組織に広めるための48のパターン

Fearless Change アジャイルに効く アイデアを組織に広めるための48のパターン

ぼくも、前々から読みたいなぁと思っていたのですが、そもそも買ってもいないという…。
とりあえず、Amazon欲しいものリストに入れました。
GWまでには読みたい…。

監訳者の川口さんが、チートシートをブログでも公開されています。

kawaguti.hateblo.jp

組織で困っていることって、やはり似てくると思います。困っている時に、解決するきっかけとして、パターンを知っていることは大事かと思ったりします。

おわりに

今回も、DevLOVE関西さんに発表する機会をいただけました、本当に、ありがとうございます。
次も機会があれば、どこかで、発表したいですね〜。