うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

Re: モッククラス、下から見るか?横から見るか?

f:id:kyon_mm:20190822153935j:plain

先日Twitterでリプライがきたのでみてみたら素晴らしいブログ( モッククラス、下から見るか?横から見るか? )がありました。

プログラムにおける自動単体テストでモックをつかうべきかどうか悩んでいるというもの。

私なりにこれに回答しようとおもいます。みんなもなにかおもうところがあれば、SNSではなくブログにしてほしい。(Webからそのままアクセスできるという点において)

1. 基本方針

  1. 可能なかぎりモックライブラリはつかわず、コンストラクタDI(Dependency Injection)で解決できるならそうする
  2. 往々にして厳密な単体テスト(1ファイルにとじたテスト)はしておらずコンポーネントテスト(複数ファイルにまたがったテスト)がおおい

2. 仕様化テスト、レガシーコード改善、リファクタリングでつかう

自動化されたテストがなく、これからリファクタリングをしたいというときには、既存のプロダクトコードを変更せずに自動テストを実装すべきです。そのときには時刻やDBやAPIなどに依存したコードをテストしなければいけないでしょう。

テスタビリティの低い設計ではこれらを「テストから設定」することがむずかしかったり、高速な単体テストとすることがむずかしかったりします。そのときには、モックライブラリをつかって時刻やDBやAPIなどをテストダブル(スタブやモック)におきかえます。

モックライブラリは実質的にリフレクションなどをつかっているものがおおく、プロダクトコードを変更せずにプログラマーが自由なコードで一部の処理を代替させることができます。これによって自動テストを実行できるようにしてから、徐々にリファクタリングをすすめていく。という場面ではモックライブラリが適切でしょう。

3. トランザクションのcloseなどの後処理を確実に検知する。Rxや一部の書き方によってtry-with-resourcesがつかえなくても。

たとえばトランザクションやコネクションのコミットやクローズ処理が確実にされているかを検知したい場合につかえます。 単体テストのメリットとして、IO処理が失敗した場合を簡単に模倣できるという点があります。それ自体はコンストラクタDIな設計における簡易なテスト用のスタブクラスでもできます。

ですが、たとえばDB操作が失敗したときに必ずコネクションがcloseされていることのテストはなかなか検知できません。モックライブラリであればできます。 もちろん静的コード解析でも対応できる部分はありますので、一概にモックライブラリでやるべきとはいいませんが、なかなかに便利なときがあります。

Javaだとtry-with-resourcesとかでかいておけばいいじゃんというのもありますが、rx系というかpromise系というかのライブラリをつかっていたり、いくつかの設計においてはtry-with-resourcesをうまくつかえないことがあります。そのときには、モックライブラリで検知させるというのは妥当だとかんがえています。

実践テスト駆動開発 (Object Oriented SELECTION)

実践テスト駆動開発 (Object Oriented SELECTION)

テスト駆動開発

テスト駆動開発

Effective Java 第3版

Effective Java 第3版

スクラムフェス大阪で基調公演。もしくはJASRACへの支払い #scrumosaka #agileradio

2/22 - 2/23 に開催されたスクラムフェス大阪にてKeynoteを担当させていただきました。 @TAKAKING22 くんと一緒に壇上に上がる日がこうやってくるとはおもってもみませんでした。 テックカンファレンスで世界初「オープニングムービー + 入場曲 + ジャズピアノ生演奏 + メイキング映像 + アンコール + キーノートタイトル参加者で議論」という構成でおとどけしました。(要出典)

本エントリでは、なぜこうできたのかの一部、また、日本で楽曲を使用するときに課題になる JASRACへの対応方法をのこしておきます。

f:id:kyon_mm:20190421082423j:plain
キーノートのタイトルを参加者が付箋にかきだして自分のキーノートタイトルを決めてもらった

www.scrumosaka.org

なぜこの構成にできたのか

この辺の大枠は先日出演させていただいた #agileradio にて軽くはなさせてもらいました。

Scrum Fest Osaka 2019 トーク その1 | アジャイルラジオ

簡単にまとめると次の流れでした

  1. 大切にしたいことは 2018/12に @TAKAKING22 と きょんで決定
  2. アイディアを RSGT2019 の OSTの1セッションで議論
  3. OSTにて「アンパンマン」「生演奏」「脇役としてのキーノート」というアイディアがかたまる
  4. 2日後の1/14 に企画提案、プランニング
  5. 以後怒涛のプレゼンテーション、編曲、練習、動画編集、構成をねりなおすの制作1ヶ月をすごす

いやー、本当にたのしかったです。 アーティスト活動のさわりをやったのかなっておもうんですが、たしかにこれはたのしい。 バンド活動していたり、絵をかいたりする人達の気持ちがすこしだけわかりました。すごいな。

これは結果であって、なぜこうできたのかという話ですね。僕の中ではだいたい次の要素が強かったなと。

  1. @TAKAKING22 と きょんが大枠で信頼しあえる仲であった
  2. @TAKAKING22 がプロレスやアイドルという「エンターテイメント」を好きでありよく見ている
  3. ジャズピアニストがきょんが所属する基盤チームにいた
  4. きょんの夢がエンジニアで東京ドーム公演であった
  5. きょんが昔、ニコニコ動画アンパンマンのジャズアレンジを聞いたことがあり感動していた
  6. @TAKAKING22 や きょんを信頼してくれる仲間がいた

どの要素も重要だったのかなーとおもいました。どれかが欠けてもこの構成にはならなかったのではないだろうか。 そしてこの企画をうけいれてくれた 運営および参加者に感謝しています。

楽曲の使用。JASRAC

生演奏するということで、JASRACとのつきあいが必要になりました。 先日料金をおさめたので、そこまでの流れは次のとおりです。

  1. 会場がJASRACと契約しているかを調べる
  2. 会場の定員数、チケット代、利用する楽曲のJASRAC登録されているか検索、利用するときの長さを確定する
  3. オンラインで見積もりをしてみる
  4. 開催5日前までに申請書を書いて会場最寄りのJASRAC支社に郵送する
  5. 後日電話で詳細の確認がくる
  6. 請求書が送付される
  7. 振り込みをして完了

大学とかで開催する場合でも、きっと音楽教室みたいなところはJASRAC包括契約している場合があるかとおもいます。一般的にはライブハウスとかです。 今回の会場はどうも契約していないのではないかということだったので、2にすすみました。 基本は会場の定員数で料金がきまります。利用するときの長さはメロディをどれくらい演奏するかです。今回のわたしたちの構成はメロディ部分はすくなかったので料金をおさえられました。 楽曲はこちらから検索できます。

作品データベース検索サービス

見積もりはこちらでできます。

使用料計算シミュレーション JASRAC

これでだいたいの料金がわかるとおもいます。 ちなみに私は「ファッションショー」みたいなもので見積もりをしました。

ここからは郵送してうんぬんです。公式に手続きの流れがあるのでリンクを。

各種イベント、施設での演奏など JASRAC

スクラムフェス大阪は会場が大阪だったので大阪支社に郵送しました。 そうすると後日、イベントの概要とかいろんなことを電話で5minくらい確認してくれます。そりゃIT系のカンファレンスで生演奏してとかわけわからんですよね。。。

で、後日請求書がとどくので振込みをします。 こんな封筒です。

JASRAC封筒
JASRAC封筒

まとめ

最&高なプレゼンテーションのありかたを模索していきたい。大切な1歩をふみださせてくれたみなさまありがとうございました。 どのような形になるかはわからないけれど、ご依頼うけつけております。一緒につくりだせたらとおもいます。

Special Thanks

  • ツインスピーカー @TAKAKING22
  • ジャズピアニスト ねの
  • PA おの
  • 会場音頭 さとりゅー
  • キュー出し ぎーの
  • メイキング映像作成サポート みやざき
  • RSGT2019 OST参加者
  • スクラムフェス大阪運営委員会
  • スクラムフェス大阪参加者
  • 関西大学
  • JASRAC
  • 株式会社オンザロード
  • 楽天株式会社

それ1ピクセルずれてない? ってわかるのか試してみた

Regional Scrum Gathering Tokyo 2019 というカンファレンスで @ryuzee さんとはなしているときに、

Webサイトみていると、これなんか1ピクセルくらいズレているってすぐわかるよねー。きになる。

と言っていました。わたしもたまにWebサイトつくることにかかわるけれども、(要求されている品質の都合上)なんとなくでやっていることもままあって、厳密に綺麗にしようみたくするのはあんまり経験がないなーと。

で、自分でつくるかどうかはおいといて、まず「それ1ピクセルずれてない?」って自分で判断できるのかためしてみようとおもいました。

Do you think you’ve got a designer’s eye?

次のWebサイトで簡単なテストをできました。

https://www.supremo.co.uk/designers-eye/

クリックすると次のような画面がでてきて、「このドットは中心ですか?」にYesなら左、Noなら右をクリックしていくかんじです。 10問連続で正解すればクリア。

f:id:kyon_mm:20190307050419p:plain
テスト例

結果、私は2回目くらいでクリアしました。 1回目では三角形の中心がうまくわからず失敗しました。

これだけでWebサイト全般ってわけじゃないけど、Webサイトつくる初心者の人に中心ってわかるー? みたいなノリで研修のアイスブレイクとかにやるのはいいかもなーっておもいました。

ある改善、プラクティスやTryをいつやめるのか。もしくは5000枚のKPTの理由。 #scrumosaka #rsgt2019

先日、 Scrum Fest Osaka 2019というカンファレンスでとある方からこんな質問をうけました。

きょんさんのチームでは、何度かやればうまくいきそうなTryとかプラクティスがあるときに、いつまで挑戦するとか、いつになったらやめるとかそういった基準とかはありますか?

これ聞かれたときに昔の自分だったら「やれなくなるまでは挑戦しつづける」って答えていたとおもうんですよね。でも、今は違うなーと。 僕が答えたのは「やりたい意思がある限り続ける。やりたくないものをやるのは楽しくない。」で、もっと端的にいうと

チームにできるプラクティスは残るし、できないプラクティスは残らない。

というものです。ある種の適者生存というか。プラクティスが正しいから残るのではないというかんじですかね。 ただ、それだと怠惰でルールのないチームは一向に成長しないので、成長するための仕掛けは必要だとはおもいます。 でもそのときに、ただ問題を解決するためにプラクティスをいれることでは定着しないんだろうなーというのが自分の感覚です。 毎日のように徹底された食生活管理と運動を納得してもできないこともあるし。

まだうまくまとめられないんですが、感覚的には「問題を解決する方向と、自分が楽しめる方向が同じ方向をむいている」ってことかなーっておもいます。 で、過去の自分もそうでしたが、「人を問題に寄せる」のはビジネスなんだから当然のようにできるっておもってしまって、いろんなところでヘイトがたまる。。。 いまの基盤チームはそれは時間がかかるのが普通なので、15min毎にとても小さな量のいい事にもわるい事にも触れ続けることで、人を問題に寄せる、問題と一体となるくらいに考えられるような場にしていくことをやるようになりました。それが大量の付箋となっている KPT as ARTなやつです。 Scrum Fest Osaka にておおまかには bleisさんとdico_lequeさんが話してくれました。

f:id:kyon_mm:20190205164220j:plain
KPT as ART

Scrum Fest Osaka 2019 - 感謝のKPT 5000枚 -基盤チームのレトロスペクティブ- | ConfEngine - Conference Platform

KPT as ART になった理由。ふりかえりへのむきあいかた。

わたしからはこれの経緯とか語られなかった部分を。

これも最初からうまくいったかというと、チーム内でいろんな意見もありましたが、わたしはこれがうまくいくと信じていたし、いろんな議論をへて今の形になりました。チーム内であったのは「情報がたくさんあって整理できない」というものでした。これはいわゆるKPTとは情報を整理し、問題や改善案を具象化する行為だと考えていれば当然だとおもいます。でも、私がおもうにそれは長期間存在するチームには無理だということです。おおくの人はかしこいというか、かしこくないので、具象化できる課題はすぐに尽きます。いいかえると、適切な具象化をあまりできません。

人間はあまり賢くないので整理するため具象化するためのKPTというのはすぐに限界をむかえます。これがKPTがうまくいかない根本だと私は考えています。

1週間に1度できないKPTにむかいあうよりも、具象化するための材料となる量を増やしていき、文字通りその情報にかこまれることで、なんとなく自分達の状況が心にうかびあがってくる。そういったスタイルが長期間存続させるチームには最適だと。

ので、ふりかえりででるような情報は整理しながら増やしていくのではなく、好きなときに整理する、どちらかというと、整理できる状況になったら自然とされる、というのがいいのだろうと。エンジニアというのもあって、とかく情報を整理したがる性質からの脱却に時間がかかったメンバーもいましたが、それもふくめてゆっくりと慣れていきました。

これに似たこととして、チームの外から「この付箋を見返すことなんてできないから意味ないでしょ」とかいわれます。これも結局は上と一緒で、KPTとは整理してチームの道標となるべきものであるという考えからだとおもいます。私達はそういうことをこのKPTでやりたいわけじゃないので、別にそういった必要はないという回答になります。

では、基盤チームは自分達が向かうべき場所についてはどのように話しあい、どのようにそれがのこり、どのようにいまかかえている問題がのこるのか。 基本的には会話でなされていて、それがテキストとしてはKPTにのこります。でもその付箋を見返すことはないですね。 チーム内で濃密に会話したときの体験のほうが付箋に貼られるよりずっと記憶にのこり、そして信頼関係を築くためにはずっと大切だと、そう実感しているからです。 そしてまた、私が基盤チームの考えをプレゼンテーションにしていき、みんなの意思がまた1つかたまる。そういったサイクルをこの4年間続けてきた。といったかたちです。

ちょっと長くなってきたので、基盤チームの話はこのへんで。 続きとか、他の話気になるー!って人は、飲みにさそったり、お仕事のご依頼おまちしております。(あ kyon-mm.com

複業でチーム開発のコーチやアーキテクトをはじめました。 kyon-mm.com

2019/1から複業でチーム開発のコーチやアーキテクトをはじめました。(TwitterFacebookで開業しましたとだけかいていましたのであらためて。) 週2以下の稼動であればおきがるにおといあわせください。

kyon-mm.com

たまに今回の私の状況についてご質問をいただくので、ここでまとめておきます。

  • Q1. 株式会社オンザロードにはいるの?
  • Q2. アジャイルの発表でみかける基盤チームには所属しているの?
  • Q3. 会社でアジャイルコーチやらないの?
  • Q4. 遠方でもきてもらえるの?
  • Q5. 開発もまかせられるの?
続きを読む

#RSGT2019 の歩き方

はじめてRSGT2019に参加する人、もっとたのしみたい人などたくさんいるとおもいます。ということで、RSGT2016 - 2018まで参加してきた身としての歩き方を紹介します。

本エントリは 「Regional Scrum Gathering Tokyo Advent Calendar 2018」(非公式)26日目の記事です。(は?) adventar.org

confengine.com

まず会場近くに宿泊しよう

会場は大崎ブライトコアホールです。平日開催で朝から & 毎日(任意で)飲み会がある ことから会場近くに宿泊することをオススメします。徒歩20min圏内くらいを考えると、大崎や五反田でしょうか。五反田はそこそこホテルがあります。

朝の通勤ラッシュにもまれて体力をうばわれると、RSGTでは体力が保ちません。万全でのぞんでいきましょう。

基調講演はきいて損がない

どんな基調講演でもいいところ、わるいところそれぞれあります。それでも基調講演は価値が高いのです。とにかく聞きましょう。あきたら退室して、スポンサーブースの人に声をかけましょう。

  1. なにかしらインパクトがある話をする(なんらかの新規性がある、規模が大きい、トレンドをまとめている、レジェンド的存在)
  2. RSGT参加者のうち、おおくの人が聞いているので参加者同士での会話のキッカケにつかえる

ランチでは隣の人に声をかける or さっさと食べてホワイエ(ホール外)でドリンクをのみながら声をかける

おそらく今回もランチはお弁当がでて、(任意で)ホールで食べることになります。この場で声をかけてみましょう。話しかけるの苦手な人は次をまず言えば大丈夫です。

  1. 何度か参加したことあるんですか? 私はn回目なんですけど。
  2. さっきの基調講演ききました? 私はxxxのトピックいいなっておもいました。どんなところ気になりました?
  3. 今日はこのあとどの講演聞くか決めているんですか?
  4. Scrumやっていますか?

これでだいたい5minはもちます。話好きな人だったら30minくらいもつんじゃないですかね。

ランチ後の講演はどれか2,3つ聞いて、それ以外はホワイエ(ホール外)でスピーカーをつかまえる or 休憩する

1日ずっとすわって聞いているとそれだけで疲れます。できるだけダラっとする時間をとりましょう。 ホワイエにでたら、(まだ講演していないスピーカーも含めて)なんにんかのスピーカーがだいたいいます。気になるスピーカーがいたら、積極的に声をかけましょう。

  1. 次にどのセッション聞くか決めているんですか?
  2. (決まっていないといわれたら) 今回の講演をしようとおもったキッカケってなになんですか?
  3. (決まっているといわれたら) その講演のどのへんが気になるんですか?

スピーカーは話したがりの人がおおいので、声さえかければ、勝手に話してくれます。楽ですね。

初日のネットワーキングパーティではここまで話した人をつかまえよう or 気になる人に声をかけよう

例年どおりであれば、ホワイエで立食パーティになります。とりあえずドリンクとか軽食とかに並ぶことになるとおもいます。 並んでいるときは隣の人に声をかけてみましょう。また、ここまでで声をかけた人をみつけてみるといいとおもいます。 だいたい聞くことは次で大丈夫です。

  1. 今日はどの講演がたのしかったですか?
  2. 私はxxxの講演がたのしかったです。yyyなところとか。
  3. 明日はどの講演を聞く予定なんですか?
  4. RSGTにはなぜ参加したんですか?

2日目もほぼ同様でOK

基本的な流れは一緒なので↑のとおりで大丈夫です。ちがうのは、ネットワーキングパーティがないことくらいでしょうか。 ちょっと食事してから帰りたいなーっていうときには、「今日おわったら一緒にどこかいきませんか?」といってみましょう。そんなんハードルたかい!とおもわれるときには、スピーカーにいってみましょう。そう、かれらは話したがりです。(万が一、断われてもそんなに落ち込まないでね!)

3日目のOSTは聞きたいトピックにまず参加

3日目はOpen Space Technologyといって、最初の30min程度で、参加者が議論したいことを自由にタイムテーブルにいれていき、時間になったら自分達で議論がはじまるスタイルです。もし話したいトピックがあればその場で出しましょう!なければとりあえず雰囲気をみながら参加で大丈夫です。

OSTでの議論は正解や不正解などはなく、その場にいる全員が参加すべきメンバーがあつまっているというリスペクトをまもってすすめるものです。初心者だったとして、自分がいてもいいのかとか、発言が貧困なのではないかとか、悩む必要はありません。

まとめ

RSGT2019の歩き方を紹介しました。ここまで書いといてあれですけど、どのカンファレンスでもこれでいい気がしている。

この記事を書くキッカケをくれた id:ayumi_h ありがとう

とても良記事ばかりで、25日までではなく年末まであったらいいのにな、という気分です。

ayumi-hsz.hatenablog.com

SCRUM BOOT CAMP THE BOOK

SCRUM BOOT CAMP THE BOOK

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術

スクラム現場ガイド -スクラムを始めてみたけどうまくいかない時に読む本-

スクラム現場ガイド -スクラムを始めてみたけどうまくいかない時に読む本-

アジャイルコーチング

アジャイルコーチング

なんちゃってアジャイルから、4年間アジャイル開発していたら15minスプリントになった件 #RSGT2019

概要

  • とりあえず次の動画をみてほしい。
  • ちまたのアジャイル開発チームはスプリントが1週間だが、私のチームは15minで回している。
  • 学生や新卒に1日スプリントを教えている。彼らは5日程度で1日スプリントをマスターする。
  • 15minスプリントを含んだプラクティスについてスライドにしてほしい、聞きたいという人は RSGT2019の公募にlikeしてほしい。かりにlikeはなくても、RSGT2019に参加しよう。

セッション confengine.com

チケットはこちらから!11/16から販売だそうで。 Regional Scrum Gathering® Tokyo 2019

www.youtube.com

背景

このチームが今までどんなふうに開発を経てきたのかはだいたい次のスライドにまとまっています。 簡単に言うと、なんちゃってアジャイルをやっていて残業と改善が低いチームだった。そんなチームがちゃんと開発しよう、アジャイルに向き合おうって変わって4年もたった今の話。 開発対象はWebAPI、フレームワーク、ライブラリ、プラットフォームなどいわゆる基盤的なもの。なので、このチームを基盤チームと呼んでいる。そして受託開発です。

スプリント期間の変遷

2015年当時の多くの他のチームと同樣にこのチームも例外なく、1週間スプリントが最も短いと考え、2週間スプリントや1週間スプリントを実践していました。 だが、それはPOすくなくとも、チーム内でのフィードバックが遅いと気づきました。 そして、2016年には1日スプリントになりました。

この根底にあるのは、スプリント期間とビジネス的なリリースは必ずしも一致している必要はないということです。もちろん、リリースをあと伸ばしにしていいとかそういう意味ではなく。 自分のチームの仕事は受託開発だったので、もともとスプリント期間とリリース期間は一緒じゃなかったし、国内外の知見を聞いても一致している必要はないと聞いて自信をもってそう踏み切れました。 スプリント計画の内容が達成できているかどうかをPOに確認してもらう期間というだけ。

そうして、2017年にはさらに1時間スプリントになりました。これはこれでなかなか大変で、1日スプリントと同じような質のマネジメントしかできなくて苦しんだりいろいろありました。が、2017年10月にはだいぶ使いこなしていた記憶があります。

そうこうしているうちにいろんな課題を乗り越え、基盤チーム全員で「レッツゴーデベロッパー 平成ジェネレーションズ FINAL」という素晴らしい勉強会への登壇機会をもらいました。これは単純にチーム開発を参加者としてみようというものです。

connpass.com

ここで、基盤チームは30minスプリントを実践してみたのですが、軽々と出来てしまい、チーム内で「30minスプリント余裕すぎるwww」という話になり、現場に戻ってしばらくしてから、「よし15minスプリントやってみようぜ」となったのでした。

そして、現在15minスプリントをやっているのですが、大きな問題はなくて非常に開発しやすい状態を保てています。

1日スプリントの頃からそうですが、基盤チームは能動的に時間管理できないので、基本的には学校のチャイムというか、タイマーを使っていて、それによってスプリント期間の開始と終了、スクラムイベントの実施をしています。 これを聞くと、トイレ休憩とかちょっとした休憩はないの?とか思われるかもしれませんが、明示的に休憩の時間もあるので、そこに合わせつつ、まぁ自由にとるという感じです。

RSGT2019

ということで、こういった話、つまり15minスプリントの詳細や、スクラムチームとしての全体像、そしてプラクティスとしてどのように抽出されているのか?などをRegional Scrum Gathering Tokyo 2019 というイベントで話そうと公募を出しています。

講演として聞きたい人、スライドにしてほしい人はlikeをしてください!講演とかいいんだけど、聞いてみたいっていう人はRSGT2019に参加して直接僕を捕まえて聞いてください。Scrumというトピックでギャざりましょう。

セッション confengine.com

チケットはこちらから!11/16から販売だそうで。 Regional Scrum Gathering® Tokyo 2019

念の為言っておくと、私はRSGTの運営でもなんでもないんだけど、みんなとScrumとかチーム開発とかについていろいろ意見交換したいんだけなんだ>< そのための最高の場所がRSGTだと思っている。的な。

参考書籍

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術

SCRUM BOOT CAMP THE BOOK

SCRUM BOOT CAMP THE BOOK

アジャイル開発とスクラム~顧客・技術・経営をつなぐ協調的ソフトウェア開発マネジメント

アジャイル開発とスクラム~顧客・技術・経営をつなぐ協調的ソフトウェア開発マネジメント

生命の現象

生命の現象

生物系の参考書籍追記

生物模倣――自然界に学ぶイノベーションの現場から

生物模倣――自然界に学ぶイノベーションの現場から

自然をまねる、世界が変わる: バイオミミクリーが起こすイノベーション

自然をまねる、世界が変わる: バイオミミクリーが起こすイノベーション

アルゼンチンアリ: 史上最強の侵略的外来種

アルゼンチンアリ: 史上最強の侵略的外来種