ChinoDuino(Chino × Arduino)

自発性のないプログラマーがArduinoと出会って悪戦苦闘する様を綴っていく⇒今はいろいろ(^^;

Github Actionsでワークフローを作成してAWS SAMでデプロイしてみる

Github Actionsでワークフローを作成して、AWS SAMへデプロイしてみます💻

今回のポイントとしては

  • テストが通ったらデプロイする
  • branchごとデプロイ先が違う

今回、「jobs.<job_id>.if」 で、デプロイ先をかえるようにしました。Github Actionsは今回使うのが初めてで、もし他によい方法あれば、ぜひ、教えてもらいたいです!🙏

やること

  • リモートリポジトリへのPUSH時に実行
  • テストは全branchで実行
  • テストが通ったらデプロイを行う
    • デプロイはbranchごと、デプロイ先をかえる

環境

構築

まずはテスト部分を作成

これは、Github Actionsのサンプロから作成しました。

「Actions」⇒「New workflow」⇒「Python application」を選択

f:id:chinoppy:20200211192956p:plain:w600

commitすれば、これで完成!簡単😁

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.6
      uses: actions/setup-python@v1
      with:
        python-version: 3.6
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -e .
        pip install -e .[testing]
    - name: Lint with flake8
      run: |
        pip install flake8
        # stop the build if there are Python syntax errors or undefined names
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
        flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
    - name: Test with pytest
      run: |
        python -m pytest -v
        python -m pytest --cov=oc

デプロイのステップを追加

次にデプロイステップを追加していきます

まずは、テスト(「build」ステップ)が通ったらデプロイを実行したいので、「needs」を追加

これで、テストが通ったら、このdeployステップが実行されるようになります

  deploy:

    needs: build

次にAWS SAMの実行に必要なライブラリ等をインストール

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.6
      uses: actions/setup-python@v1
      with:
        python-version: 3.6
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install awscli
        pip install aws-sam-cli

これで、AWS SAMを実行する環境ができので、次にbranchごとのデプロイを実行します

    - name: Configure AWS credentials for prod
      if: startsWith(github.ref, 'refs/heads/master')
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }}
        aws-region: ap-northeast-1
    - name: deploy to prod
      if: startsWith(github.ref, 'refs/heads/master')
      run: bash deploy.sh
      shell: bash

↑はmasterへpushしたときに実行されます

デプロイに必要なキーの設定を「Configure AWS credentials for prod」のjobで行い、デプロイをするシェルの実行を「deploy to prod」のjobで行っています

各jobにある、↓のifが満たされた場合、jobが実行されます

if: startsWith(github.ref, 'refs/heads/master')

これで、yamlの準備はOK❗

あとは、AWSのアクセスキー、シークレットキーをシークレット変数に設定します

f:id:chinoppy:20200211194150p:plain:w500

実行

各branchごとの実行結果はこちら

master

「master」へのPUSH時にprod(本番)環境へデプロイします

デプロイテスト(develop→master) (#2) · peacemaker07/sam_app_sample@6e7bed2 · GitHub

以下の本番へのデプロイのjobのみ実行されています!👏

  • Configure AWS credentials for prod
  • deploy to prod

f:id:chinoppy:20200211195041p:plain:w500

develop

「develop」へのPUSH時にstg(ステージング)環境へデプロイします

デプロイテスト(feature→develop) (#1) · peacemaker07/sam_app_sample@8d7cca1 · GitHub

ステージングへのデプロイステップはこちら

  • Configure AWS credentials for stg
  • deploy to stg

開発ブランチ

「feature/*」へのPUSH時にdev環境へデプロイします

mod flows · peacemaker07/sam_app_sample@6199004 · GitHub

dev環境へのデプロイステップはこちら

  • Configure AWS credentials for dev
  • deploy to dev

アクションも自作できるようなので、またやってみたいと思いますー😃

モブプロやってから心理的安全性ゲームをやってみよう! in Agile Shinano

だいぶ遅くなりましたが、、、今年もよろしくお願いします!🙏

去年末に「良いチームになるキッカケを探す」のNorth Starのもと、今後もゆる〜く活動していきます!

この記事は1/18(土)に開催した今年、最初のイベントの投稿です!今回は、

の合わせ技!モブプロは2回目だけど、前回は、課題が難しく完成までいかず、、、前回の課題をもう少しスマートにしたものにして、チームで開発することの経験と、心理的安全性ゲームでどんなことがチームを守ったり、壊したりするところを学びました。

今回のゴール

  • モブプロを楽しむ
  • 心理的安全性についての理解を深める

今回のイベントページ、スライド

モブプロやってから心理的安全性ゲームをやってみよう! - connpass

これをもとに、モブプロとは?心理的安全性とは?を説明

docs.google.com

スケジュール

モブプロ1部、2部の間に心理的安全性ゲームを挟むかたちで行いました。

  1. モブプロ第1部
  2. 心理的安全性ゲーム
  3. モブプロ第2部
  4. 振り返り

本編!

早速モブプロ 第1部!

6人を2チーム(3人ずつ)にわけて行いました。そしてなんとなく似ているスキルのひとが2人ずついて別々のチームになり、偶然にも「モブプロ経験チーム」と「未経験チーム」にわかれました😃

お題

TSURUYAのチラシを何らかの方法で配信する

  • 今回はMailでもbotでもchatでも何でも良い
  • TSURUYAのチラシを配信するツールを作成
  • 最小限動くものから少しずつ大きくする

最初の10分で、モブプログラミングのタイマーツール「mobstar」インストールと、どのように作るかなどをチーム内で話しました。

うちのチームはこんなかた(ホワイトボードの右側)

f:id:chinoppy:20200126123834p:plain:w400

定期的(cron)にPythonスクリプトを実行

スクレイピングを使用して、TSURUYAのホームページからチラシのPDFのURLを取得

そのURLをslackへ通知するという感じ

意識したこと
  • 前回、モブプロやったときは、英字配列のノートPCだったため、今回はみんな使いやすいように日本語配列にしました!
  • お題にもあったように、小さく、順々につくっていく

順調に作業は進み、終了時点で、URLの取得しslackへの通知まではほぼ完成(定期実行はまだ)

心理的安全性ゲーム

チームでモブプロで開発して、次は心理的安全性ゲームです!これも、モブプロしたチームごと行いました。

なかなか素面で迫真の演技は難しいですねw。。。

3人でひとりずつ状況カードをひいて、ひとまわりするターンを2回行いました。1ターン終わった時点で、「守られた」「壊された」を付箋に書いて貼ったり、チームごとでどうだったかを共有しあったりました。

各チームの心理的安全性ゲーム結果

【チーム「た」】

f:id:chinoppy:20200126125534p:plain

【チーム「ち」】

f:id:chinoppy:20200126125626p:plain

守られたこと、壊されたこと

f:id:chinoppy:20200126124750p:plain:w500

両チームとも、普段体験できないような壊れたチームになったように思いましたw

印象に残ったのは

  • 皆が他人事でなくコミットしているというのが大事
  • 無言
    • 何を考えているかわからないので、チームとしてどうしたらよいかわからなくなってしまう・・・
  • パニックを増幅させるような行為は危ない・・・
    • 障害が発生した⇒さらに大変だぁ⇒みんなが不安に思う

モブプロ 第2部!

ここで事件が!第1部で作成する内容を、客先にもっていったら、追加の仕様が発生してしまいました・・・!

追加仕様:↓のおすすめレシピの内容も投稿してほしい!

おすすめレシピ | スーパーマーケット TSURUYA ツルヤ(長野)

とはいえ、チラシ同様スクレイピングをして、投稿するということなので、それほど、難しいという訳ではありませんでした。

最後に振り返り

ここも各チームごと振り返り

左側がチーム「ち」、右側がチーム「た」

f:id:chinoppy:20200126131153p:plain:w600

印象に残った点

  • 追い風になったこと(Keep)
    • うまく言ったら、みんなで喜ぶ
    • みんなでコードに向き合うので、チームがまとまりやすい
    • メンバーの人柄
    • 複数の視点から考えられる
    • モブプロによるサポート体制が確立される
      • 小さなミスに気づき、無駄が減る
  • 碇(進行を止めてしまっているもの)(Problem)
    • チームメンバーがほぼ初対面ということもあり遠慮してしまう
    • つくることが目的だが、学びになってしまうことがある(仕組みなどの説明をするなど)
    • いろいろな手法があるので、決めるのに苦労することがある
    • 全員の得意分野が違う
  • もっと進むには(Try)
    • ハードの共通化
    • ほめる文化を育てる
    • コードが敵(個人に焦点を当てない)
    • 発言のしやすい雰囲気
      • 相手を知る
      • 認識の共通化

今回、モブプロのお題も完成し、定期的にslackへ投稿するようにもできたので、達成感もすごくありました🙌

チラシの投稿w

f:id:chinoppy:20200126132443p:plain:w400

今週の特売を使ったレシピw

f:id:chinoppy:20200126132544p:plain:w400

今後もよろしくお願いしますー🙏

ついカッとなって、slackで2019年の振り返りをした [会社slack編]

この記事は JSL (日本システム技研) Advent Calendar 2019 - Qiita の12月9日の記事です(でした)。

昨年のカレンダーはこちらから

去年、こちらの記事をみて可視化して振り返りしたいなぁっと思いながら1年経ってしまいました😅

developer.kaizenplatform.com

この機会に、↑の記事も参考にさせてもらい、社内のslackを可視化して、振り返りします。

今回の対象範囲

  • 2019/1/1〜2019/12/11 18時ころまで

総発言数

  • 71,285

月毎の発言数:

  • 01月:3,395
  • 02月:4,719
  • 03月:5,146
  • 04月:6,117
  • 05月:6,723
  • 06月:6,095
  • 07月:5,412
  • 08月:5,565
  • 09月:6,868
  • 10月:8,013
  • 11月:8,995
  • 12月:4,237

f:id:chinoppy:20191223232826p:plain

だんだんと発言数が増えたのは、チャネルごと用途を明確化したり、趣味ごとのチャネルを作ったりしたことによる成果だと思います。そして、10月あたりにまた増えたのは、分報が始まった影響からですかね。

総リアクション数:

  • 38,656(※対象チャネルはpublicチャネルのみ)

今年発言があったチャネル数:

  • publicチャネル:106
  • privateチャネル:3

ランキング

発言数の多かったチャネル Top10

  1. 出退勤:5,974
  2. 雑談:3,657
  3. 社内環境:3,624
  4. 雑談−技術 : 2,030
  5. contact:1,324
  6. 委員会活動共通 : 1,117
  7. announce : 1,085
  8. 社内システム : 1,056
  9. event-pyconjp : 1,024
  10. tele-work : 1,016

f:id:chinoppy:20191222224836p:plain

※プロジェクト関連と分報のチャネル以外

1位の出退勤は、日々、勤怠を入力するので、それほど特別ではなさそうです。雑談はslackのデフォルトにある、randomと同じような用途で使用されています。業務以外にも、交流があるということはいいですね!😁

4位の雑談-技術は、技術的なことを共有するチャネルです。技術的なところでも交流があることがわかりました!

発言数が多いひと

  1. s_kamijo : 7,791
  2. chinoppy : 5,876
  3. takino : 5,586
  4. y_nakazawa : 5,278
  5. nakajima : 3,410
  6. kakita : 2,648
  7. sin_tanaka : 2,581
  8. junya_fukuda : 2,392
  9. t_kobayashi : 2,303
  10. gii-neko : 2,036

f:id:chinoppy:20191223235258p:plain

ここは、結構、予想通りの結果でした。ただ、8位のjunya_fukudaが10月からslackへ参加したことを考えると、怒涛の発言数かもしれませんw

分報の発言数ランキング Top5

  1. 分報_s_kamijo : 2,256
  2. 分報_takino : 1,213
  3. 分報_junya_fukuda : 1,133
  4. 分報_okajima : 869
  5. 分報_kyutatsu : 767

f:id:chinoppy:20191222232248p:plain

こちらも結構、予想通りの結果でした。分報を導入したことにより、発言数が増えたひともいたり、相手がどんな思いで仕事しているとか、趣味などざっくばらんにそのひとの一面をみれて確実に交流が増えたと思います。

使用されたリアクション Top10

順位 リアクション リアクション数
1 f:id:chinoppy:20191222112938p:plain 3,643
2 f:id:chinoppy:20191222113345p:plain 2,331
3 f:id:chinoppy:20191222113318p:plain 2,285
4 f:id:chinoppy:20191222113408p:plain 2,210
5 f:id:chinoppy:20191222113427p:plain 1,609
6 f:id:chinoppy:20191222113446p:plain 1,250
7 f:id:chinoppy:20191222113535p:plain 1,247
8 f:id:chinoppy:20191222113559p:plain 999
9 f:id:chinoppy:20191222113623p:plain 912
10 f:id:chinoppy:20191222113638p:plain 878

※対象チャネルはpublicチャネルのみ

こちらに関しては、みなさん承諾のようなかたちで使っていることが多いようです。あと、あざますや拍手が多いのは、お礼したり相手をお祝いしたり、称賛しているということなので、うれしい結果ですね!

リアクションが多かった発言 Top10

順位 発言 リアクション数
1 はじめまして! 11月1日に入社する、XXXXです。\n\n昨年まで学生で、生物を学んでいたのですが、Web開発に挑戦したくてJSLさんにやってきました。 Web開発のほか、機械学習などにも興味があります。\n\n趣味と言えるほどちゃんと出来てないのですが、将棋やジャグリング、お絵かきが好きです。\n\nWeb開発も社会人としても初心者ですが、1日でも早く貢献できるようになるため頑張りますので、皆様どうかこれからよろしくお願いします! 57
2 レビューしてもらった自転車盗難推測BOTが書類選考通過しました!!:sob:\n\n12/7に発表もあるので引き続き頑張ります!!レビューありがとうございました。:sob::man-bowing: 40
2 もともとは長野のSIerでCADアプリケーションや基幹システムなどの開発をしていました。\n\n\n趣味はゆるーくバンド、ゆるーくキャンプ、ゆるーく自転車です。最近はポッドキャストにハマっています。\n\n新しいiPhoneを予約するか迷っています。。。\n\n長文すみません。よろしくお願いします:palms_up_together: 40
4 【 中途採用者について 11/1(金) 】\n11/1(金)より、新しい社員(中途採用)が当社へ入社します。\n\nお名前:XXXXさん\n年 齢:27歳\n\n準備が出来ましたら、Slackでご本人からご挨拶をしてもらう予定です。\n昼礼等はまた後日お知らせします。 31
5 2019/09/26 22:52\nYY家に第二子が産まれました‼️\n元気な女の子です‼️\n本当に色々とご迷惑をおかけしましたが、あたたかく柔軟に対応・フォローして頂き、本当にありがとうございました:pray::pray::raised_hands::raised_hands::raised_hands: 30
6 <!channel>\nトライブで一度ミーティングを行います。\nみなさんの都合のいい日にちをお願いします。\n:one: 5/8 (水)15時30分〜\n:two: 5/9 (木)15時30分〜\n:three: 5/10(金)15時30分〜 26
6 <!channel>\n\n【 トイレ工事完了 】\n\n6Fトイレのウォシュレット化、窓の鍵交換完了しております。\nご利用可能です。 26
6 初めまして。今年度からお世話になる、ZZZです。\n長野県工科短期大学校 情報技術科から来ました。\nご指導ご鞭撻のほど宜しくお願いいたします! 26
9 <!channel> Slackをスタンダートプランにアプデしました!\n以上、ご連絡まで 25
9 <!channel>\n【 資格試験合格者 のお知らせ 】\n■ Python\n Python3 エンジニア認定基礎試験\n・AAAA\n 2019年11月 合格 25

こちらは、新しい仲間が増えたときが比較的、リアクション数が多くなるようです!ちなみに、トイレのウォシュレット化は私もうれしかったですw

見える化してみて

すべてのプロジェクトでという訳ではないですが、当社は基本、slackで取引先とコミュニケーションをとっています。ただ、slackへの発言者が、ほぼ固定化されているという課題もありました。しかし、改善の取り組みをして、今回、見える化をした結果、成果がみえたのはやはりうれしいですね😆

今回、ランキングで一部の数字しか見えなかったので、最後に個人ごとの発言数もだしてみました。

f:id:chinoppy:20191231120338p:plain

※ x軸がユーザ名ですが、名前は変更しています

だいたい、平均でひとり1年で2,000発言くらいになりました。そうするとひとりの1日の発言は「平均 8(※1)」となり、数字だけみるとちょっと少ないかなぁとも思うのですが、全員、slackが必要かというとそうではないですし、「多いからよい」「少ないから悪い」という訳でもないと思います。

※1 2,000 ÷ 12か月 ÷ 20営業日 = 8

とはいえ、基本リモートでお仕事をしているため、こちらの状況を伝えるということは、大切かなと思います。それと、報告でslackを使うというよりは、コミュニケーション(会話する)でslackを使えるようになっていくと、リモートですが、お互い近い存在になっていくのかなと思いました!

ふと、コミュニケーションしているか?という観点で、分析してみるのも面白いかなと思ったのですが、、、乞うご期待🙏

リアクションに関しては、新しい仲間が増えたときや、お祝い事、うれしいことに関して多く、みんなで喜べる雰囲気もあることもうれしいです😂

今回使用したAPI

APIに必要なtokenは Legacy tokens | Slack で取得しました(非推奨)

search.all

search.all method | Slack

  • 主に発言数の情報を取得するため使用
  • privateチャネルも含めてメッセージを取得できる
  • リアクションの情報は取得できない

paramsはこんな感じで、今回は、queryで取得年月を指定。「count」を「150」とか「200」にするとresponseで「"warnings":["max_page_limit"]」と返却され、すべてのメッセージが取得できないので「100」としました。

search_all_url = 'https://slack.com/api/search.all'

・・・
        # パラメータ例
        params = {
            'token': 'xxxxxxxxxx',
            'query': 'during:2019年12月',
            'count': 100,
            'page': page,
            'sort': 'timestamp',
        }
        time.sleep(2)
        response = requests.get(search_all_url, params)
・・・

pageをインクリメントしながら、レスポンス内の ['messages']['pagination']['page_count'] まで、繰り返しリクエストしてデータを取得しました。

# レスポンス例
{
    "ok": true,
    "query": "during:2019年1月",
    "messages": {
        "total": 3520,
        "pagination": {
            "total_count": 3520,
            "page": 1,
            "per_page": 100,
            "page_count": 36,
            "first": 1,
            "last": 100
        },
        "paging": {
            "count": 100,
            "total": 3520,
            "page": 1,
            "pages": 36
        },
        "matches": [
            {
                "iid": "xxxxx",
                "team": "XXXXX",
                "channel": {
                    "id": "xxxxx",
                    "is_channel": true,
                    "is_group": false,
                    "is_im": false,
                    "name": "xxxxxx",
                    "is_shared": false,
                    "is_org_shared": false,
                    "is_ext_shared": false,
                    "is_private": false,
                    "is_mpim": false,
                    "pending_shared": [],
                    "is_pending_ext_shared": false
                },
                "type": "message",
                "user": "xxxxx",
                "username": "takino",
                "ts": "1548942831.090900",
                "text": "↑ややわかりにくいが多かったです・・・・",
・・・

channels.history

channels.history method | Slack

  • 主にリアクションの情報を取得するために使用
  • 発言も取得できるけど、privateチャネルは取得できない

paramsはこんな感じで、今回は、oldest〜latestで一ヶ月ごと指定。

history_url = 'https://slack.com/api/channels.history'

・・・
        # パラメータ例
        params = {
            'token': token,
            'channel': channels[1],
            'oldest': 1546268400,  # 2019/01/01 00:00:00
            'latest': 1548946799,  # 2019/01/31 23:59:59
            'count': 1000,
        }
        time.sleep(2)
        response = requests.get(history_url, params)
・・・
# レスポンス例
{
    "ok": true,
    "latest": "1548946799.000000",
    "oldest": "1546268400.000000",
    "messages": [
        {
            "client_msg_id": "xxxxx",
            "type": "message",
            "text": "<@U3AAL6Q6L>\n次回ギークランチお願いしてもいいですか?",
            "user": "xxxxx",
            "ts": "1548387019.001600",
            "team": "xxxxx",
            "reactions": [
                {
                    "name": "ok",
                    "users": [
                        "xxxxx"
                    ],
                    "count": 1
                }
            ]
        },
        {
            "client_msg_id": "xxxxx",
            "type": "message",
            "text": "<!channel> リマインド\n↑今日やります",
            "user": "xxxxx",
            "ts": "1548382093.000600",
            "team": "xxxxx",
            "reactions": [
                {
                    "name": "+1",
                    "users": [
                        "xxxxx",
                        "yyyyy",
                        "zzzzz"
                    ],
                    "count": 3
                }
            ]
        },
        {
            "client_msg_id": "xxxxx",
            "type": "message",
            "text": "メッセージサンプル",
            "user": "xxxxx",
            "ts": "1547683902.001700",
            "team": "xxxxx",
            "reactions": [
                {
                    "name": "+1",
                    "users": [
                        "xxxxx",
                        "xxxxx"
                    ],
                    "count": 2
                },
                {
                    "name": "fire_engine",
                    "users": [
                        "xxxxx"
                    ],
                    "count": 1
                }
            ]
        },
        {
            "type": "message",
            "subtype": "slackbot_response",
            "text": "<https://docs.google.com/spreadsheets/d/xxxxx/edit?usp=sharing>",
            "user": "xxxxx",
            "ts": "1547005647.000400"
        },
        {
・・・

ソースについては、整備中です・・・乞うご期待😅

Sens'it V2とちょっとV3のこと

こんにちは❗これはSORACOM Advent Calendar 2019の17日目の記事です。担当はchinoppyこと知野です!

今回は、SORACOM 農業活用コミュニティ関連で、Sens'itを使ってみたので、使ってみてどうだったかを紹介していきます!

対象

  • これからSens'itを使おうとしているひと
  • Sens'it気になっているけど、どんなもんだろうか
  • 温度とか試しに測ってクラウドへアップしたりしたいけど、電源ないんだよねー
  • Sens'it知らないけど、IoT好きな方

などなどSens'itやIoT好きな方向けです

前提

  • V2と最後に少しV3の紹介もします
  • 実績の紹介は、動作モード「温湿度センサのデータ」のみになります🙏 ご了承ください。。。

Sens’it V2

f:id:chinoppy:20191215130818p:plain

Sigfox+温湿度、照度センサー、振動検知などのセンサーが内蔵されているデバイスです。通信量、通信頻度などに制限はありますが、通信料金は安く、省電力で定点観測や頻度の少ない通知などの用途などに適しています。

バッテリーも内蔵されていますので、セットアップして充電すればすぐ、センシングができます!

Sigfoxとは

  • Sigfox とは LPWA(Low Power Wide Area Network) と呼ばれる無線通信規格の1つ
  • 省電力で広域をカバーすることができ、IoT 用途での利用に適しています
  • Sigfoxのサービス提供エリアは、こちら⇒ Sigfox Coverageページ
  • SORACOMでは、SORACOM Air for Sigfox で使用することができます
  • もちろん受信したデータはBeamやFunnelで各クラウド、他へ転送、送信できます!

内蔵されているセンサーについて

  • 温度センサ
  • 湿度センサ
  • 加速度センサ
  • 磁気センサ
  • 照度センサ
  • リードスイッチ

上記センサのデータを一度に送信することはできません。動作モードごと送信するデータは以下になります。

  • 動作モード
    • 温湿度モード
      • 温湿度センサ
    • 照度モード
      • 照度センサー
    • ドア開閉検知モード
      • ドアに固定することでドア開閉を検知してアラート通知
    • 振動検知モード
      • 製品自体の振動を検知してアラート通知を送信
    • マグネットモード
      • 製品右側面の磁気センサにマグネットが接近すると検してアラート通知
    • ボタンモード
      • 製品のボタンを2度押しすると検知してアラート通知

送信頻度

利用料金

SORACOM Air for Sigfox の利用料金

  • 1440円/1年
  • ソラコムから購入のSigfoxデバイスの場合は、1年分の通信料金が含まれています(詳細は上記リンクを参照🙏)

今回、温湿度モードを使用してみて

用途

ハウス内の温度湿度を計測し、Webで見える化。今回は、10分毎送信で使用しました。

【今回の構成】

f:id:chinoppy:20191215134650p:plain:w600

【グラフ化】

f:id:chinoppy:20191215141234p:plain:w500

センサの精度について

温度、湿度とも温湿度計と比較して検証し、ほぼ同じで問題なくそのまま使えました😆

ちなみに仕様には「温度:精度±0.5℃」「湿度センサ:精度±3.5%rH」とあります Sens’it

【計測した温度と湿度(201/6/2〜2019/9/30)】

1日単位で15時くらいのデータです

f:id:chinoppy:20191215152109p:plain:w600

バッテリーの持ちについて

使用環境(ハウス内の温度等)にも関わってきますが、だいたいSens'itから送信されるバッテリー値(battery)が「3.7」を下回ると充電が必要でした(そのままにしておくと、その後1日くらいで電源が落ちてしまう)。

以下は「201/6/2〜2019/9/30」までの2ヶ月分のバッテリーの推移です(1日単位で15時くらいのデータです)

f:id:chinoppy:20191215151645p:plain:w800

だいたい、20日間くらいもちました🔋

ちなみに、3.7を下回った場合、気がつけるようにslack、LINE Notiryへ通知するようにもしてみました。

f:id:chinoppy:20191215151337p:plain:w300

ずっと通知するとうざいので、、、3時間ごと判定し通知としました!

その他

  • 注意点等
    • 防水ではないので、気温差が激しく湿気があるところや、湿気が高いところでは故障してしまう可能性がありそうです
    • 一度、電源が落ち、充電後、送信開始されるまで時間がかかりました(半日以上待ったときもありました)。

Sens’it V3(おまけ)

SORACOM Air for Sigfoxには対応していませんが、V3は防水ということもあり、試しに今、使ってみてます。

購入先

SWITCH SCIENCEで購入しました。

www.switch-science.com

SORACOMで購入時と同じように1年目の通信費は込です。

V2との違い

大きな違いは、「防水」になったことでしょうか(あまり詳しくはみていません(^^; )。センサ類は増減なしです。

【V2(こちらから抜粋)】

f:id:chinoppy:20191215153452p:plain:w400

【V3(こちらから抜粋)】

f:id:chinoppy:20191215153613p:plain:w400

購入して使い始めるまで

購入後、<www.sensit.io>へ登録すると、Webページからデータがみれたり、送信頻度の設定がかえられます。

送信されたデータは、<www.sensit.io>ですぐみることができます!

<www.sensit.io>への登録はこちらの「◆WEB & モバイル APP◆」に記載があります。

https://docid81hrs3j1.cloudfront.net/medialibrary/2018/09/manual-sensitv3.pdf

モードの切替方法なども記載があるので、参考にしてください!

www.sensit.io

こんな感じで、グラフで確認できます!みやすい❗期間の変更も可能です

f:id:chinoppy:20191215154529p:plain:w800

「Timeline」はこんな感じ

f:id:chinoppy:20191215154708p:plain:w400

「Notifications」で通知の設定もできます!

f:id:chinoppy:20191215154919p:plain:w600

通知方法は、Email、SMS、HTTPと3種類あり、HTTPを使うと、Slackへ通知したり通知先の幅が広がりそうですね。有効活用したいです!

f:id:chinoppy:20191215155118p:plain:w400

ちなみに、Emailはこのように通知されました

f:id:chinoppy:20191215155348p:plain:w400

その他

  • 送信間隔を<www.sensit.io>から変更できるのですが、、、最初、うまくいかず(※)、1日or2日経ってから再びやってみたところ10分毎に変更できました(詳細かけずにすみません・・・)
    • ※ Webページで設定しようとするとエラー画面?が表示された
  • 詳しくは調べていないのですが、、、たまーに送信しないときがある(送信上限を超えた?と思うのですが、送信タイミングで赤色に点滅するときがある)

送信制限や送信間隔などに制限はありますが、料金も安く、お手軽にIoTで見える化したり、通知したりとできます。

Sigfoxデバイスは他にもありますので、Sens'itで通信できるかなどを調べて、他のデバイスで本格的に使用を開始するなどもできると思います。

soracom.jp

ご検討あれ〜

#ソラコムサンタ

V3もSORACOM Air for Sigfox対応お願いします🙏

Agile Jam in ながの 〜今までいったいなにをやってきたのか?〜

8月24日(土)ぎーらぼで「Agile Jam in ながの」開催しました!そのレポートですー📝

今回の一番の学びは、

  • スクラムマスターはラガーTシャツを着るのではなく🙅
  • 白Tシャツ(胸ポケット付)+短パン!🙆

です(嘘w)

f:id:chinoppy:20190824195839j:plain:w400

今回は、いつもお世話になっている@shigeshibu44さんと、@itoyama_yuuki さん、@massa142さんの3人のスクラムマスターを迎えて、休日、拡大版で開催しました!

agile-shinano.connpass.com

今回は、初のセッションを追加して、後半、ディスカッション(OST形式)で開催

ただし、セッション中も聴き手は、「学んだこと(Learn)」と「疑問点、質問(Question)」をそれぞれ、付箋紙に書いてもらうようにして、常に全員参加で、楽しむイベントを目指しました!

番外編:開催前

@shigeshibu44さんの提案で、モブ詰将棋を開催前にやっていましたw

はいってきた参加者の方が「あれ?別のイベントにきてしまったのか😳」と思ったみたいですw

f:id:chinoppy:20190824130339j:plain:w300

f:id:chinoppy:20190824130728j:plain:w300

将棋は、経験値とか理解度により、個人で差がでてくる=そのあたり、開発現場でも似たところがあるので、将棋を使って、チームビルディング的なゲームを作れないだろうかというところも、狙いのようです!(確かw)

セッション

セッションの詳細は、参加者の@thinkAmiさんがブログに書いてくれたので、こちらもどうぞー

thinkami.hatenablog.com

オープニング

@shigeshibu44、私(@chinoppy0727)で、発足の経緯、今まで開催したイベントの振り返り(良かったこと、課題)、アイスブレイクを行いました

docs.google.com

f:id:chinoppy:20190824135315j:plain:w300

アイスブレイクでは、前回もやった「Moving Motivators(3.0)」を行いました。

ちなみに私は、前回と同じ

  • 受容
    • 自分が意識している、心がけているところを「chinoppyさんらしいね」って言われるうれしいです!
  • ゴール
    • 今の仕事(Web開発など)は、場所を選ばずずっと続けられる
  • 関係性
    • 良好な関係でこれからも周りの方たちと関わっていきたい
    • (思いやりをもちつつ、何でも言い合える関係)

セッション1

@itoyama_yuuki さんからです!

f:id:chinoppy:20190824135535j:plain:w300

  • 学んだこと
    • 議論する打合せはリモートより対面がよい
      • 温度感がかわってしまう
      • リモート側の発言のタイミングがとりづらい
      • リモート側がおいてけぼりになってしまう
    • 開発スプリントとQAスプリントがある
      • そして、QAスプリントを開発スプリントより少しずらしている
    • やっぱりスクラムガイドが一番わかりやすい(他のいろいろな書籍より)
  • 疑問
    • ウォーターフォールからスクラムへ移行するよいタイミングは?
    • QAスプリントについてもっと聞きたい
      • 発表の中でもあったが、前スプリントの不具合などをどこで直すかなど
      • その判断基準など

セッション2

発起人のひとり@moon_in_nagano@massa142さんからです!

f:id:chinoppy:20190824142418j:plain:w300

f:id:chinoppy:20190824143645j:plain:w300

slideship.com

  • 学んだこと
    • オープンに振る舞う
      • 決まったことはちゃんと残す(議事録などに)
    • PO、開発チームで意識統一すること大事
      • チーム内でコミットメントは最大限の努力(約束ではない)ということを意識させるなど
    • 見積もりは、何か基準をつくって積んでいくとわかりやすい
      • 見積もりの精度ではなく、ベロシティを安定することが重要
    • 問題 vs チーム
      • Problem、早い失敗を歓迎する
      • 問題 vs 個人ではない
  • 疑問
    • スクラムマスターがいないということだけど、兼任などは考えなかったのか?
    • スプリントレビュー、レトロスペクティブ、プランニングを1日ですると時間がかからないか
      • スプリントレビュー、レトロスペクティブとプランニングを別の日にするなどなぜ、しなかったのか

セッションまとめ

Learn、Questionがこんなにでました!

f:id:chinoppy:20190824145649j:plain:w500

f:id:chinoppy:20190824145641j:plain:w500

ディスカッション(OST

後半はOSTを実施

最初に、ひとりひとり話したいことをA4の紙に書いて発表

そして、みんなでドット投票。3種類のドットを使いました。

  • 赤色:1個/人⇒緊急度高!今すぐ解決したい!
  • 黄色:2個/人⇒赤、緑の間
  • 緑色:何個でもOK⇒話したいこと

結果

f:id:chinoppy:20190824171111j:plain:w400

2セクション(A、B)、3回行いました!

なお、セッションの質問が多かったので、1部は各発表者が質問へ回答することとしました!

他はこちら

f:id:chinoppy:20190824171138j:plain:w500

f:id:chinoppy:20190824171127j:plain:w500

1回目

A:いとやまさんQ&A

f:id:chinoppy:20190824170840j:plain:w500

B:あらいさんQ&A

f:id:chinoppy:20190824170848j:plain:w500

2回目

A:チーム内のコミュニケーションどうしています?

f:id:chinoppy:20190824170901j:plain:w500

B:見積もり、見積もりの精度を上げるには

f:id:chinoppy:20190824170854j:plain:w500

3回目

A:ふりかえり活性化

f:id:chinoppy:20190824170919j:plain:w500

B:レビューどうやってる?

f:id:chinoppy:20190824170906j:plain:w500

今回も、思い思いの意見がでて、そして各テーブルにスクラムマスターの方がはいったことにより、理解度もいつもよりアップしたのではないでしょうか!😍

その証拠に、みなさん3回目終了後、疲れがある反面、充実した様子でした

でも、1日に3回は疲れました・・・😅

f:id:chinoppy:20190824154713j:plain:w300

f:id:chinoppy:20190824160253j:plain:w300

f:id:chinoppy:20190824154235j:plain:w300

特に印象に残った、意識したいことは

  • チームが成熟していればスクラムマスターをおかないという判断もできる
  • スクラムマスターは、PO、開発チーム、組織の支援役ということもあり第3者的なひとがよさそう
    • 特に立場が違う(会社が違う)ひとが集まったチームなどであれば、なおさら
  • スクラムチームに上下関係はない
  • 心理的安全性を高めて、何でも言い合える(プライベート含め)雰囲気をつくるのは大事
    • みんなで言い合える環境じゃないと改善が止まっていまう
    • 心理的なことなどで、アウトプットが少なくなってしまうこともある
    • そういうときにフォローしあえる関係
  • コミュニケーションについて
    • 話すのが必ずしもコミュニケーションではない
    • リモートでの会議は、主導していない(またはひとが少ない)側の意見するタイミングがとりづらい・・・
    • ⇒逆に、ひとが少ない側が司会をすればどうか。
    • ⇒あと、普段リモートで参加している打合せに、オフラインで参加する⇒実際にあるのは大事
  • スクラム+OKRを導入している(実験中)
    • OKRにはウィンセッションという褒めあうイベントがある⇒モチベーションアップの意味合いで実施
    • 自分としても、がんばったところや工夫したところなどは褒めてほしいのでよいように思う
    • でも、そういう場というよりは、関係ないところで褒めてもらった方がうれしい

振り返り(Fun-Done-Learn)

いつものFun-Done-Learn!

f:id:chinoppy:20190825134042j:plain:w500

まだ細かくみていないので、今後のイベント内容の検討等に活用させてもらいます!🙏

懇親会

@moon_in_naganoのいとこが経営する「Panyard」を貸し切りにしてもらい開催しました!

貸し切りは初めてだったので、うれしくてパシャリw📷

f:id:chinoppy:20190824180153j:plain:w300

しかも、ホワイトボード付

f:id:chinoppy:20190824180747j:plain:w500

OST 第2ラウンド!

本編で話せなかった優先度の高いテーマについて、引き続き懇親会でディスカッション!

f:id:chinoppy:20190825135139j:plain:w300

f:id:chinoppy:20190824201309j:plain:w500

心理的安全性ゲーム

前々回の懇親会でも行った心理的安全性ゲームをやりました!

今回は、私も参加。

やってみて、

  • やっぱり普段の開発では、こんなこと(「私には関係ないよ😪」「誰の責任だよ!😤」)言わない
  • でもそれをゲームでやる(リハーサル的に実際にやる)ことは、思うこととか考えることが実感できる
  • チームメンバの理解も深まる

思いました。

f:id:chinoppy:20190824201602j:plain:w300

f:id:chinoppy:20190824203252j:plain:w300

あと、演技も必要なので、懇親会でやるのが最適。

それと、状況カードを引く前に、実際の場を想定して、ゲームしていくことがリアルに近くて、実感が深まると思いました!

本当にみなさんがいろいろな意見、思いなど積極的に発言してくれたり、行動してくれたことにより、有意義な時間をすごさせてもらいました😭

今後も、楽しもうをモットーにゆるーく続けていきたいと思いますので、よろしくお願いしますー

P.S.

イベント風景のパラパラ漫画ですー(もう少し左側をむければよかった・・・orz)

youtu.be

スクラムガイドのモブリーディング #2 in Agile Shinano

7/24に開催した「スクラムガイドのモブリーディング #2」の参加レポートです!

今回はスクラムイベントとスクラムマスターにフォーカスして、スクラムガイドのモブリーディングとディスカッションを行い、理解を深めました!

  • テーマの背景(イベントページから抜粋)

モブリーディングは2回目でしたが、初めてのこともありました😍

  • イベントを中継(Zoom)
  • 自己紹介のやり方がかわった
  • 公開イベントにしてから初の一桁の参加者
  • 〇〇さんがビール飲んでいなかったw

中継については、Keepしていきたい❗

  • 音質は問題なかった🙌
  • 上田からの参加者の方も多くいるので有効に使っていきたい
  • 中継元の議論を聞いて、中継先でも議論がおきていた👍
  • 今後は双方向(ちょっと競争的なこととか)でやるのもよいかも

それでは内容ですー

今回のスライドはこちら( 作: @shigeshibu44

docs.google.com

アイスブレイク

Moving Motivators(3.0)で自己紹介

nuworks.jp

結構、参加者も同じになってきて、自分のことというよりは、今回は、相手のことを知ろうを主目的に行いました!自分も相手のことを知るということは普段から、大事にしています。

  • そのひとが何に詳しいかを知っていれば、不明点が発生したときに聞けるw
  • 相手の知識、技術レベルがわかれば、それにあった説明ができる
  • 相手が興味をもっていることを知れば、そのひとがどんな考え方をするかなどわかりそう

などなど。

Moving motivatorsの10個のなかから、個人ごと、大事にしていること3つを選んで理由とともに自己紹介

ちなみに私は「受容」「ゴール」「関係性」

これ、逆の大事にしていないこと、などにするとか、選択する意味合いをかえると違った面もみえてきて、いろいろ発見がありそうですね!またやりたい📝

ラガーTシャツのスクラムマスター再びw🏈

これをみて、スクラムマスターを復習w

youtu.be

スクラムガイドのモブリーティング

今回は順番に読んでいきながら、

  • 知ったこと(黄色い付箋)
  • 疑問・質問したいこと(緑の付箋)

を付箋に書いて、ホワイトボードに貼りました

スクラムガイドで読んだところ📖

  • スクラムイベント
    • スプリント
    • スプリントの中止
  • スプリントプランニング
    • トピック1:スプリントで何ができるのか?
    • トピック 2:選択した作業をどのように成し遂げるか?
    • スプリントゴール
  • デイリースクラム
  • スプリントレビュー
  • スプリントレトロスペクティブ

ディスカッション💬

ホワイトボード

f:id:chinoppy:20190724211919j:plain:w600

このホワイトボードをみながらディスカッション。印象に残ったことはこちら

  • スプリント
    • 語源は自転車レースにおいて、長い距離を走ってきてのラストスパート部分
    • なので、開発チームはスプリント期間中は全力疾走している
    • だから開発チームへの障害は取り除かないといけない
    • 余計なことを考えさせてはいけない
    • だからラガーTシャツのスクラムマスターは開発チームを守っていたのか!
    • これを聞いて、気軽にスクラムやろうぜ!なんて言えないと思った・・・
  • デイリースクラム
    • 開発チームがおこなうもの
    • 毎日、同じ時間・場所で開催し、複雑にならないようにする
    • (全力疾走中なので今日は何時からなのかなとか、余計なことを考えさせない)
    • 15分間で終わらせる
      • 全員が15分で終わらせることを意識しないと終わらなそう
      • 長くなりそうなものは、後で行うよう了解をとる程度がよさそう
    • 障害物など懸念点等はすぐみつからなければいけない
    • 開発チームは自己組織化しなければいけない
      • なので、スクラムマスターは出席必須ではない
      • なにか調整、懸念点等あれば、開発チーム⇒スクラムマスターへ提言
  • PO大変
    • お客とあったり、内部の調整をしたり、成果物を確認したり、プロダクトバックログをつくったり
    • 開発チームは全力疾走してきているので、追いつかれないようにしないといけないw
    • ステークホルダーを連れてこないといけない
    • 価値、フィードバックをもらえるように計画していかないといけない
    • 曖昧なプロダクトバックログだと、開発チームから突き返されてしまう・・・
  • 不確実性を小さくしていく
    • 新規案件はどの程度、売れるか、登録者数が増えるかなど不確実性が満載
    • 価値を細かくリリースしていき、市場、ユーザからフィードバックをもらう
    • リリースしないと自己満で終わってしまいそうだし・・・
    • ここはアジャイルに興味をもった「エンジニアリング組織論への招待」の振り返りになった
    • いろいろとやることがあるので、担当はあまり割り振られていない
      • 基本的にはプラインイング、スプリントレビュー
      • ちなみにそのせいか、ホワイトボードをみると、POの列はあまり付箋がなかった😳
  • 兼任
    • スクラムチーム内でPOは1人、スクラムマスターも基本1人などスクラムガイドでは記載があるが現実としては・・・
    • PO + スクラムマスター
      • 相反する立場なところもあり、あまりよろしくなさそう・・・
    • スクラムマスター + 開発チームメンバ
      • 成功している事例もあるが・・・
      • 開発チームメンバとしては全力疾走しないといけないけど・・・
      • チームのフォローもしないといけない・・・😫
    • PO + 開発チームメンバ
      • これも事例がある
      • 開発チームメンバとしての役割が、技術支援、テクニカルアドバイザー的な立ち位置ならよさそう(なんとなく私もそう思いました)
    • 正解はないので、試しながら改善がよさそう

f:id:chinoppy:20190724203642j:plain:w400

Fun-Done-Learn

f:id:chinoppy:20190724211856j:plain:w500

(左側ですー)

今回は、自分でも実施します!という声がありました😆

そして、中継先からもひとこといただき、向こう側でも熱い議論がかわされていたことに驚き、振り返りもできたということで、中継してよかった!😁

自分も少しずつでも、今の現場で取り入れていこう!

次回は8/24(土)に時間拡大して実施します!イベントページつくったら告知します!

スクラムマスターを知ろう in Agile Shinano

前回に引き続き、だいぶ時間が経ってしまいましたが、、、 6/14 に開催したAgile Shinanoのイベントレポートです(やったことベースですが、、、)。

今回は、前回の最優秀チームのメンバから要望があった「スクラムマスター」についてです!

スクラムマスターを動画で理解w

まずは、スクラムマスターを理解するためにこちらの動画をみんなで視聴w

youtu.be

  • スクラムマスターがラガーTシャツを着ていた
  • 決まりを守らせる
  • 開発チームを外部から守る
  • 開発チームにやさしい

OST

今回は初めてOSTを実施

オープン・スペース・テクノロジー(英語: Open Space Technology)とは、会議での討論のやり方(ファシリテーション)の形式の1種。頭字語でOSTと略すこともある(引用:オープン・スペース・テクノロジー - Wikipedia

  • 今回は2トラックで2回実施
  • 実施中、別のチームへ移動しても、ふらふらしても基本的には何してもOK

まずはお題を決める

ひとりひとり、スクラムマスターについて知りたいことを、白紙に記載し、発表しホワイトボードへ貼り付けていく

f:id:chinoppy:20190614192358j:plain:w400

話したい内容を投票で決める

  • 決まったお題
    • スクラムのルールを破壊するメンバーはどうするか
    • スクラムマスターと開発チームのコミュニケーションのとり方
    • スクラムマスターの素質
    • スクラムマスターにはどこまで権限があるのか

OST開始

2つのテーブルにわかれて、模造紙や付箋紙に書いたり、疑問が発生したらスクラムガイドをみたり、振り返ったり、そしてときどき、守屋さんのフォローもしてもらいながら実施

f:id:chinoppy:20190614200616j:plain:w400

f:id:chinoppy:20190614200612j:plain:w400

結果はこちら

ちなみに、「スクラムマスターにはどこまで権限があるのか」については、「スクラムのルールを破壊するメンバーはどうするか」を2回続けて行ったため、今回は議論しませんでした。

f:id:chinoppy:20190614203533j:plain:w500

f:id:chinoppy:20190614203528j:plain:w500

f:id:chinoppy:20190614203557j:plain:w500

Fun-Done-Learn

f:id:chinoppy:20190614203614j:plain:w500

そしてNext(次回やりたいこと)も募集

f:id:chinoppy:20190614203558j:plain:w400

懇親会

そして、今回は、懇親会も行いました!

みんないい気分になってきたところで、守屋さんがもってきてくれた「心理的安全性ゲーム」をやりました。

f:id:chinoppy:20190614222351j:plain:w400

f:id:chinoppy:20190614224626j:plain:w400

f:id:chinoppy:20190614222226j:plain:w400

f:id:chinoppy:20190614223220j:plain:w400

f:id:chinoppy:20190614223307j:plain:w400

このゲーム、結構、演技力も必要で、皆さんほろ酔いの中やったのが、ちょうどよかったかもしれませんw

状況により、同じカードでも、意味合いがかわってきたり、相手の受け方も違ってきたり、深い〜ゲームだと感じました。

個人的には、デリゲーションポーカーもやってみたい