スクラムマスターになったのでいろいろ本を読み漁った話

この記事はチームスピリットアドベントカレンダーの16日目の記事です。(日付についてはお察しください。)

adventar.org

はじめに

スクラムマスターをやってみてのふりかえりを書いた記事を書いていたのですが…。

思った以上に長くなりまして…。

書くのも辛い、読むのも辛い
文章になるぐらいなら分割しようかと思いまして、、、

オススメ書籍をまずは分割してみました(>人<)

既にアドベントカレンダーも大幅に遅れてしまってるし! …という話です。

では本編。

オススメ書籍

1.アジャイルサムライ
以前に借りて読んだものを改めて、自分で購入して読み直した。
スクラムチームで過ごす中で何を大切にすればいいのかとかこういう時にはどうすればいいんだっけみたいなマインドの部分で非常に参考になる本。
自分の考え方はこの本がベースになっていると思う。

2.SCRUM BOOT CAMP THE BOOK
会社の本棚にあったので、読んだ本。一部内容が漫画になっており、非常に読みやすい本です。
これから勉強する、概要を素早く知りたいという人にはオススメでした。
一冊でざっくり理解したい人はこれがオススメです。

3.エッセンシャルスクラム
スクラムマスターはアジャイルコーチの役割もあるため、ある程度体系的な知識が必要という考えから購入した本。
分厚いだけあってスクラム開発における様々なイベント・問題などに対して網羅的に書いてある。
困った事がある時や、本来あるべき姿はどうなんだっけを知りたい時に辞書みたいな使い方をしている本です。

4.実践アジャイルテスト
新しいチームに入ってみて、文化が違うのでどういった関わり方をすれば良いか悩んだので改めて読み直した。
アジャイルテスターとしてチームにジョインする時についてのテストの考え方、スクラムチームに貢献するにはどういうことをすればいいのかが書かれている。
こちらはアジャイルテスターとして困った事がある時にどうするっだっけみたいな時に辞書代わりに使っている本です。

5.アジャイルコーチング
アジャイルコーチする上でどうやって改善を進めれば良いのかという進め方、考え方・スタンスについて知りたくて購入した本。
正直さっと読んだ感じでは上手く実践できていないので、もう一回読んだら何か摑める気がする。

6.スクラム実践入門
アジャイルコーチングとどちらを買うか迷った挙句、買わなかったんだけど、会社の本棚にあった。
前半はスクラム開発の概要を説明しているので他の本と情報がかぶるが、6章〜8章について事例が書いてあるので他のチームがどんな事に困って解決しようとしてるのか知りたい時にはいいと思います。

タイプ別オススメ

これまで読んだものをタイプ別にオススメすると、こんな感じでしょうか!

スクラムって何ー?」って人

「SCRUM BOOT CAMP THE BOOK」をまず読む。

スクラムチームにこれから入るぜ!」って人

「SCRUM BOOT CAMP THE BOOK」&「アジャイルサムライ」を読む。
※QAなら「実践アジャイルテスト」も読む

「記憶を消して、もう一度スクラムマスターをやる世界線にタイムリープしたriririusei99」って人

「エッセンシャルスクラム」&「アジャイルサムライ」&「実践アジャイルテスト」を読む。
※基本が分かったタイミングでお師さんを探す&書籍に限らず情報収集。

まとめ

上記の本を一通り読んでみて、全部わかってるかと思うとそうじゃないのでなかなか難しいなぁとか思っています。
その他、オススメ書籍があればぜひ教えて欲しいです!

冬休み初日の現場からは以上です!

おわり

WebDriver始めました

Slenium WebDriver始めました。 完全に自分向け

要素を取得する(cssSelector)

WebDriver.findElement(By.cssSelector("body"));
WebDriver.findElements(By.cssSelector("li"));

特定番目を取得する

WebDriver.findElements(By.cssSelector("li")).get(0);

数を取得する

WebDriver.findElements(By.cssSelector("li")).getSize();

クリック

WebElement button = WebDriver.findElements(By.cssSelector("button")).get(0);
click(button);

セレクトボックス

Select selectBox = new Select(WebElement);
selectBox.selectByValue(String);
selectBox.selectByIndex(int);

チェックボックス

public void setCheckBox(WebElement checkBox, Boolean check) {
  if (checkBox.isSelected() != check) {
    click(checkBox);
  }
}
WebElement checkBox = WebDriver.findElement(By.cssSeletor("#agree"));
setCheckBox(checkBox, true);

文字を入力

WebElement input = WebDriver.findElement(By.cssSeletor("input#sample"));
input.sendKeys("hogehoge");

//BackSpace
input.sendKeys(Keys.BACK_SPACE);
//ENTER
input.sendKeys(Keys.ENTER);

// 削除する
input.clear();

待つ

// 押せるようになるまで待つ
WebElement button = WebDriver.findElement(By.cssSelector("button"));
wait.until(ExpectedConditions.elementToBeClickable(button));

// 見えるまで待つ
WebElement header = WebDriver.findElement(By.cssSelector("header"));
wait.until(ExpectedConditions.visibilityOf(header));

// 見えなくなるまで待つ
WebEkenebt indicator = WebDriver.findElement(By.cssSelector(".indicator"));
wait.until(ExpectedConditions.invisibilityOf(indicator));

// 消えるまで待つ
WebEkenebt indicator = WebDriver.findElement(By.cssSelector(".indicator"));
wait.until(ExpectedConditions.stalenessOf(indicator));

// テキストの文字列になるまで待つ
WebElement h1 = WebDriver.findElement(By.cssSelector("h1"));
wait.until(ExpectedConditions.textToBePresentInElement(h1, "riririusei99"));

Cookieの操作

// 追加
WebDriver.manage().add_cookie({'name': 'foo', 'value': 'bar'});
// 名前で削除
WebDriver.manage().deleteCookieNamed("foo");
// 全削除
WebDriver.manage().deleteAllCookies();

【Bot】Wikipediaを調べてくれるようにする

ほろよいてっく向け。
ネタバレが過ぎたので拡張しておく。

今回使う技術

github.com

では開始

いつもの通りインストール

pip3 install wikipedia

responce.pyの修正

下記を追加

import wikipedia

…略…

@respond_to('(.*)について知りたい件')
def searchWiki(message, something):
    response_string = ''
    wikipedia.set_lang('ja')
    try:
        wiki_page = wikipedia.page(something)
        message.reply('なるほど、{0}についてですね。'.format(something))
        message.reply(wiki_page.url)
    except wikipedia.exceptions.DisambiguationError  as e:
        message.reply('エラー、wikiの結果が上手く返ってきませんでした。')

完成!

github.com

話しかけてみる

f:id:riririusei99:20171219033404p:plain

まとめ

テストしていた「ガンダムについて教えて」という問い合わせは曖昧さ回避のページに飛んでしまっていたため、いきなり例外処理を実施する必要があったのだが通常のレスポンスが来てるのかと勘違いしてしばらくハマってしまった。
A3RTの時もそうだったがガンダムは意外とテストしやすいワードなのかもしれないw

おわり

検証端末を管理した時の小ネタ

この投稿はソフトウェアテストの小ネタ Advent Calendar 2017 - Qiitaの13日目の記事です。

qiita.com

はじめに

スマホなどの検証端末ってたくさんありすぎていざ操作する時に操作性が違ったり、思った操作ができなくて困る事ありますよね。
今回はそんな端末管理の時に少しでも便利になるように取り組んだ小ネタみたいなのをQ&Aで紹介したいと思います。

記号が打てない問題

Q.端末のキーボードが揃ってなくて記号などを入力するときの操作が困ってます…

A.端末導入時のインストールマニュアルを用意しましょう!

端末導入時に開発チームで共通の入力アプリを用意しておくことが有効です。
Android系とiOS系の2種類ぐらいだったらなんとか覚えられます。

その他下記も決まってると便利です

  • インストールしておくアプリ(QRコードリーダとか)
  • 共有で使用するgoogleアカウント、iCloudアカウント(ブックマークの共有のため)
  • 接続先Wifi設定

似たような端末多すぎ問題 & 起動するまでOSバージョンわからない問題

Q.OSのバージョン依存のテストをするとき、目当ての端末を探すのに困っています…

A.ひと目で分かるような工夫をしましょう!

管理番号のシールが貼られたりすることはよくあると思いますが、思い切ってテプラで色々貼っちゃうのがおすすめです。

www.kingjim.co.jp

  • 端末名(わかりやすい名前とか)
  • バージョン情報
  • 特別なアプリを入れてる端末
  • 特殊な設定をしている端末

端末コンシェルジュ問題

Q.要望に合う端末を教えてほしいとお願いされるよ!

A.みんなが見れる場所に端末一覧を用意しましょう!

「横幅が小さい時に体裁が崩れないことを確認したい! 」
「このバージョン以前でバグが起きてるらしいのだけど…」

なるべく本人が欲しい端末をみつけられるように端末一覧を用意しましょう。
同時に選定する際のチェックポイントになりそうな項目(バージョン、サイズなど)も同時に見れると便利かと思います。

これと同時に新しい端末を何を買うか聞かれる場合もあるかと思いますので、ブラウザシェアと一覧を比較したりして今足りない端末をすぐに伝えられると便利かと思います。

端末が行方不明になる問題

Q.あれっ!あの端末どこに言ったっけ…。

A.事前に共通アカウントの設定をしておけば探しやすくなります!

端末の導入時に共通のアカウントを設定しておけば、端末がなくなったときに探すことができます。(電源が入っているのが前提ですが…)

Androidoの場合
Android 搭載端末を紛失したときに見つけられるように準備しておく - Google アカウント ヘルプ
iOSの場合
すべてのデバイスで「iPhone を探す」を設定する - Apple サポート

遠隔で画面ロックができてメッセージを出せる他、遠隔で音を出すことも可能です。(オフィスでやると目立ちますが…。)
ブックマークも共有できるのでアカウントを統一しておくと便利です。

まとめ

いかがでしたでしょうか。
その他、会議室管理システムを端末管理システムに作り変えたりとかしたのですがこれは意外と流行らず…だったり、 場所場所によって最適な方法はそれぞれあるとおもいますのでなにかの参考になればと思います。

おわり

riririusei99

急・SlackBotを作ってみたまとめ

この記事は3部構成になっています。

序・SlackBotを作ります - riririusei99’s blog
破・SlackBotを会話APIと連携させる - riririusei99’s blog
急・SlackBotを作ってみたまとめ - riririusei99’s blog←今ココ

はじめに

この投稿はチームスピリット Advent Calendar 2017 - Adventarの10日目の記事になります。
adventar.org

ほろよいてっく向けのネタのために書く(3日目)
ついにこのシリーズも大団円を迎えます!!

使った技術(再掲)

SlackBot
github.com

A3RT (TalkAPI)
a3rt.recruit-tech.co.jp

pya3rt
github.com

jaconv
github.com

やってみたこと

  • SlackBotを作る
  • NulalNetWorkを使ったAPIと連携した
  • 自前でBot機能を実装した(超簡単だけど)

github.com

ざっくりとしたアーキテクチャ & コンセプト

  • シンプルな実装で特定のワードの時はBot機能が実行され、それ以外の時は会話機能に切り替わること
  • 本来複雑である会話部分のロジックをリプレイス可能な仕組みにできそうだったので有効活用したかった
  • 会話APIを使ったが「Botと話してる感を前面に出すこと」で親しみやすさを意識した

まとめ

Slackbotを特に複雑な操作をせずにA3RT(Neural Network)に連携することができた。
A3RT自身の会話機能の向上や、その他優秀な会話APIが生まれてくれば会話機能は切り替えが疎結合なのでさらに高機能になると思う。

これは重要なことで、AIや機械学習を一から学習して自前でAIを用意することなく、自前のBot開発の部分に注力できるからだ。
今後はAIや機械学習を使ったテクノロジーの技術者が増えることも重要だけど、そういった技術者が用意してくれた技術を使って日々のライフハックや面白いサービスを用意していくことも大事なことだと思う。
…なのでこれから出てくる技術が体型的に理解して、どんな部分に役にたてるのか考えられる人も今後需要がありそう。

AIや機械学習が有効活用される時代がもうきてるんだなぁと思った。
しばらくは全てを仕事を任せるのではなくて、協業するような働き方をしていくのかなぁとか予想している。

※イメージ画像  
f:id:riririusei99:20171210012417p:plain

…と言う「俺たちの旅はここからだ!!」的なエモい話でまとめたいと思います。
3日連続で記事を書くのは大変だったけど、個人的に面白い3日間でした。
まさかこんなにたくさんの人に見てもらうシリーズになるとは思いませんでした。

おわり

riririusei99

破・SlackBotを会話APIと連携させる

この記事は3部構成になっています。

序・SlackBotを作ります - riririusei99’s blog
破・SlackBotを会話APIと連携させる - riririusei99’s blog←今ココ
急・SlackBotを作ってみたまとめ - riririusei99’s blog

はじめに

この投稿はチームスピリット Advent Calendar 2017 - Adventarの9日目の記事になります。
adventar.org

ほろよいてっく向けのネタのためにやる(2日目)。

前回作成したSlackBotにオリジナル感を出していきます。

今回取り扱うもの

A3RT (TalkAPI) a3rt.recruit-tech.co.jp Talk APIはChatbotを作成するためのAPIです。Recurrent Neural Network(LSTM)を用いた入力文からの応答文生成による日常会話応答機能を提供します。
ふむふむ。とりあえず流行りには乗っかってみる。

pya3rt
github.com pythonでA3RTに接続するため用

jaconv
github.com ロボ感を出すために探してきました

今回やりたいこと

  • 雑談ができる(A3RTで実現)
  • Bot本来の機能も使える(SlackBotの機能)
  • Botなのでロボ感がある

それでは開始

A3rt API Tokenの取得

下記 URLからTokenの取得 https://a3rt.recruit-tech.co.jp/product/talkAPI/

  • API Tokenをメモるトークンは公開しちゃダメ!)

インストール

# 必要なものインストール
sudo pip3 install pya3rt jaconv

DEFAULT_REPLYの削除

今回はDEFAULT_REPLYに特定の動作を追加するため、slackbot_settings.pyを修正する。

slackbot_settings.py

# SlackBot API Token
API_TOKEN = "<your-api-token>"

# Defalut Replyはココ  <<コレもついでに削除
DEFAULT_REPLY = "Sorry but I didn't understand you" <<コレを削除

# Plugin Directory
PLUGINS = ['plugins']

Default Reply に会話APIと連携する

response.py

from slackbot.bot import respond_to
from slackbot.bot import default_reply

import pya3rt
import jaconv

# ココにBotとしての機能を載せる
@respond_to('ジーク')
def zeon(message):
    message.reply('ジオン!!')

# それ以外は会話機能になる
@default_reply()
def talkA3rt(message):
    apikey = '<your-A3RT-api-token>'
    client = pya3rt.TalkClient(apikey)
    api_response = client.talk(message.body['text'])
    # レスポンスがokの時返事を返す
    if api_response['message'] == 'ok':
        reply_message = api_response['results'][0]['reply']
        message.reply(jaconv.hira2kata(reply_message) + '…ロボ')
        # 普通の返事
        # message.reply(reply_message)
    # APIエラーの時はエラーとAPIのメッセージを返す
    else:
        message.reply('エラー、ウマク返事ガデキマセン [ERROR:' + api_response['message'] + ']')

会話してみる

f:id:riririusei99:20171209013311p:plain

  1. 組み込んだBotの返事
  2. TalkAPIからの会話機能の返事
  3. TalkAPIから通常以外のレスポンスが来た時の返事

あからさまなレトロ感のあるBotになりましたね!

まとめ

今回は最近流行っているスマホゲームから着想を得て、語尾に特定の文字をつける&出力をカタカナにしてロボ感を出してみました。
疲れた時、誰かとお喋りしたくなった時に使いたいです。
Typoした時はAPIにアクセスしに行ってしまうのでBot機能を使う時は注意しましょう。

序・SlackBotを作ります

この記事は3部構成になっています。

序・SlackBotを作ります - riririusei99’s blog←今ココ
破・SlackBotを会話APIと連携させる - riririusei99’s blog
急・SlackBotを作ってみたまとめ - riririusei99’s blog

はじめに

この投稿はチームスピリット Advent Calendar 2017 - Adventarの8日目の記事になります。 adventar.org

ほろ酔いてっく向けのネタのためにやる。
Slackってフロントエンドだよね。ブラウザから使うし間違いない!
CTFでもちょこちょこ使うPythonの勉強がてらPython3で挑戦します。

今回使うもの

SlackBot
github.com

それでは開始

Python3のインストール

# brewでinstall
brew install python3

# 確認
python3 -V

SlackBotのインストール

# pipのアップデート
pip3 install --upgrade pip 

# SlackBotを入れる
sudo pip3 install slackbot

Slack側のBotアカウントの作成

ここでBotアカウントの作成する
https://my.slack.com/services/new/bot

  • API Tokenをメモる(トークンは公開しちゃダメ!
  • 作ったBotアカウントを呼びたいチャンネルに招待しておく

Bot側でSlackBotの作成

基本的にはREADMEを読み進めていく感じ
はじめにslackbot_settings.pyrun.pyを作る

# ディレクトリ作って
mkdir slackbot
cd slackbot

# ファイルを作る
touch slcakbot_settings.py run.py
mkdir plugins
cd plugins
touch __init__.py response.py

slackbot_settings.py にてメモったAPI Tokenを貼る

# SlackBot API Token
API_TOKEN = "<your-api-token>"

# Defalut Replyはココ
DEFAULT_REPLY = "Sorry but I didn't understand you"

# Plugin Directory
PLUGINS = ['plugins']

response.py に返事をしてほしいことをいろいろ書く

from slackbot.bot import respond_to
from slackbot.bot import listen_to
import re

@respond_to('hi', re.IGNORECASE)
def hi(message):
    message.reply('I can understand hi or HI!')
    # 絵文字のリアクション
    message.react('+1')

@respond_to('I love you')
def love(message):
    message.reply('I love you too!')

@listen_to('Can someone help me?')
def help(message):
    # メンションをつけてくれます
    message.reply('Yes, I can!')

    # チャンネルに向けて発言してくれます
    message.send('I can help everybody!')

    # スレッドで返信
    message.reply("Here's a threaded reply", in_thread=True)

Botの起動

python3 run.py

話しかけてみる

f:id:riririusei99:20171208014053p:plain

まとめ

意外とさっくりできた。
ブログにまとめるのが時間かかってるので、もう少し気楽に書こう。
もう少しいろいろカスタマイズして楽しいBot遊びをしたい。

次回はAPI連携とオリジナル感を出したい。

次回: 破・SlackBotを会話APIと連携させる - riririusei99’s blog

おわり