SiG Staff Blog

福井と金沢にある株式会社SIG 総合研究所で働きたい方、ご連絡ください。

ウォーターフォールからアジャイル的な開発にするために - 3

毎日の作業

ルールの中で、

  • 隠し事をしない。
  • 完了が遅れる事を言い易い(言える)場を作る。
  • 上下関係を出さない。
  • 全体を把握できるようにするために、チームの人数を多くて6~10人程度にする。

これらを実現するためにやります。
ただ、毎日することなので、
定例部分は時間をかけないことが重要です。

朝会

  1. 昨日した事
  2. 今日する事
  3. 進捗の報告
  4. 困ってる事

をメンバーが報告する。
注意するのは、「困っている事」を報告している時に、それを解決する為に議論が勃発することである。
2~3分などですぐ終わるのであればいいが、それ以上かかりそうだったら、議論をしていた人達で後でミーティングしてもらう。

メンバーの時間を無駄に指定はいけない。

また、作業遅延に対しては「なぜ遅れたのか?」など攻めてはいけない。デイリーな報告で聞く内容ではない。
長いスパンでの遅延を言いにくくなってしまう。

開発

チケット駆動

ツールは何でもいいが、

などのタスク管理を使う。

そこで割り振られたチケットの作業を行う。
チャットツールで会話して決まった事はチケットにその経緯と結果を記載する。

ただし、チケット上で対話をしない。情報のノイズが増える事と、手間が増えるため。

話し合い

チャットツールを使って、履歴が残るようにするといい。
文字でのやり取りだと、とらえ方が人によって違い誤解を生みやすいので、伝わってないと思ったらすぐにSkypeなどで会話をする。
この時、表情が見えないと話がしにくいので、カメラを使用する事。

無駄話

作業と関係ない話をする。
ゲームの話とか、趣味の話とかをして作業に没頭しすぎないようにする。

没頭しすぎると、俯瞰的な視点でプログラムをすることができなくなりがちだからである。

進捗報告(チャットツールで)

帰る前に、予定との差などを報告する。
いちいち報告に行くと大変なので、チャットツールで報告するだけでよいと思う。

何を報告するかテンプレートを作っても良いかと思う。

その他

個人的には、小休憩ができるようにイベントや席を離れる仕組みを入れると良いかと思う

  • お菓子コーナーを設けて、小休憩がしやすい状況を作る。お菓子は各々が持ち寄る。
  • 時々、みんなでお金を出し合いお取り寄せをして、みんなで食べるなどのイベントをする。

まとめ

日々は、時々休憩しながら作業できるようにするといい。
遅延に対して責めない(責められていないと思わす)事が大事である。(責任感は持ってもらわないといけませんが。)

次はスプリント毎にする作業を纏めようと思います。

こんな本を読みました

ウォーターフォールからアジャイル的な開発にするために - 2

どんな事をするのか

こんな前提で話をします。

  • スクラムっぽい事をします。
  • みんなスクラム未経験。
  • リモートワークの人が居る
  • "お客と打ち合わせをする人"と"開発する人"という役割分担がある

まず最初に、メンバーで共有する事

素早く作業を進めるために、問題が発生した時は即座に対応する必要があります。 なので、ネガティブな事をオープンに話せる状況を作る事を最上の目標にします。

なので、下のような事を共有し実践します。

  • 隠し事をしない。
  • 完了が遅れる事を言い易い(言える)場を作る。
  • 上下関係を出さない。
  • 仕事以外の話をする。
  • 全体を把握できるようにするために、チームの人数を多くて6~10人程度にする。
  • ツールは自由になんでも使えるようにする。新しいツールを拒否しない。
  • チャットツールを使い、リモートの人が疎外感を感じないように頻繁にチャットする。
  • MTGは顔が見えるように、カメラを付ける。
  • MTGは必ず議事録を取る。

これが一番大事かもしれません。ここさえクリアできれば、後はリーダーがスクラムで必要な行程をチェックしながら進めていけれます。

実施する行程

やる事は、

プロジェクトの最初に、ルールと見積を行う。 次に、各行程毎に、作業予定と作業結果を報告する。 最後に、その予実を元にプロジェクトの道筋を訂正する。

これだけである。 恐らく、普通のプロジェクトではほとんどやってる事じゃないでしょうか。 違いがあるといえば、「スプリント毎にプロジェクトの計画を修正をして、その修正に対して承認を得る。」というところだと思います。

プロジェクト開始時

  • 先ほど書いたルールの共有
  • 全員での見積もり
  • 見積を元に仮の計画を立てる
  • 開発ルールの共有(チケットの書き方や、Gitのブランチ運用など)
  • スプリント期間の決定(作業の区切りを自分たちで決める)

毎日

  • 朝会(10分程度で終わらせる)
  • 開発
  • 進捗報告(チャットツールで)

スプリント毎

  • スプリントの振り返り(長くて1時間で終わらせる)
  • 見積の見直し & 報告

1ヵ月毎

  • 1ヵ月の振り返り
  • 見積の見直し & 報告
  • 計画の見直し(「人の追加」とか「納期の延期」など)

プロジェクト後

  • KPTなどを使った振り返り
  • 予算と費用と利益の計算

次は

それぞれについて具体的にどんなことをするのかを纏めていく。

こんな本を読みました

躓きポイントが書いてあってめちゃ良かったです。

ウォーターフォールからアジャイル的な開発にするために - 1

アジャイルはメンドクサイ?

多くの現場でまだウォーターフォール(W/F)で開発している現場が多く、そこでスクラムしようぜって言っても、

  • 品質・納期・費用でどれを重視するの?納期無視するんでしょ?
  • 決まりみたいなのが多くてメンドクサイ。
  • 契約で期間が決まっているからできない。

などの言い訳されて実施に至りにくく、どれもそんなことないよって事を自分的にまとめたい。

※ 書籍を読んで、実際にやってみてこうやって進めたらいいんじゃないのか?と思った内容になるので、何とか宣言に沿ってないとか、色々あると思います。

ウォーターフォールは悪なのか?

こういう話が立ち上がると、ウォーターフォールしか経験したことない人が、「やり方が否定されている」=「俺たちが悪だといわれている」という勘違いをして話をしがちな事に注意したい。
そんな考え方してるから次に進めない人な感じもしますが。

なので、どっちも目標としていることは同じだけど、プロジェクトの性質によって使い分けないと辛くなるんだ。という事を全員で最初に共有したい。

なので、ウォーターフォールは悪くない。(当たり前ですが)

使う場面

ウォーターフォールは最初から最後まで、ほぼ計画通り進む事を前提に話を進める必要があります。なので、計画の確定性が高いプロジェクトには適してます。
例えば、自動車を作るラインとか、パンの加工とかでしょうか。各工程でやる事がかなり明確になっているプロジェクトですね。
ITでいえば、ベースのアプリがあって、決まったカスタマイズをかけて出荷するようなプロジェクト(アプリ)でしょうか。


アジャイルは、計画の確定性が低いプロジェクトに使います。
なにか作業をしている途中で、「やっぱり、それ無しで」、「これにこの機能も足してくれないと仕事につかえない」とか、最初の計画になかったことを言われるプロジェクトですね。
良くありますね・・・。

プロジェクトの途中だし、今更変えれないよ

やる事はほとんど変わりません。

書籍を読むとJeninsやらCircleCIやら、TeamCityやらCIを導入しなさいとか、テスト駆動(TDD)しなさいとかありますが、しなくてもいいです。

したほうがもちろんいいですが、しなくてもいいです。いきなり全部しようとすると、何のためにしているのかわからず、形骸化してやるだけになってしまい、どこが自分たちにマッチしているのかわからなくなってしまって結局使わなくなるからです。


それらの考えが導入された順を追って、導入していけばいいと思います。
アジャイルをやってくうちに、きっと欲しくなってきます。その時に新しい物好きな人を探して導入してもらえばいいと思います。

で、何が違うの?

ほとんどの事が、恐らく普段やっているであろう管理業務の間隔を短くするだけです。

次から一つずつ纏めていこうと思います。

こんな本を読みました

もはや、有名ですね。チームを作るうえで必要な事がほぼ書いてあります。あやふやだった部分を文章化されているので、知識の再認識にもいい。



不確実な事に対してどうやって取り組んで、確実に近づけていくか。その手法について書いてあります。読むだけだと当たり前だよなぁってなりがちだけど、実践すると大変。
知識として入れておくといい。

Ubuntu18にOpenSTFを入れてみた

openSTFとは

Androidの実機をブラウザ経由で遠隔から操作できるアプリ

github.com

なぜこの記事を書くのか

公式に書いてある通りに実行したら、全然インストールができなかったので、誰かの役に立つかなって思って。

今回の前提

  • OSから新規でインストールする。
  • 2018年7月での話です。今後アップデートされるとサクッとインストールできるかもしれないです。

はまったポイント

  • rethinkdbがインストールできない。
  • ubuntu16にするとサポート切れでupgradeできない。
  • Ubunsu以外のディストリビューションに入れようとするも、同じようにどっかでエラーが起きる。

動くまでにやった手順

ともあれ、Ubuntu16をインストール

rethinkdbのmakeがUbuntu18ではコンパイルでエラーを出すので、Ubuntu16をインストール。

17ではなく16を選んだのは、ネットで調べていたら17でもエラーが出て困っている人がいたからです。

Ubuntu 16.04 LTS 日本語 Remix リリース | Ubuntu Japanese Team

rethinkdbをインストールする

公式Install RethinkDB on Ubuntu - RethinkDBにある通りインストールする。

source /etc/lsb-release && echo "deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list
wget -qO- https://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install rethinkdb

Ubuntu18にアップグレードする

Ubuntu17のサポートが切れているので

apt-get dist-upgrade

でアップグレードできなかったので、下のサイトサイトを参考にアップグレードを実行する。

server.etutsplus.com

いくつか方法が紹介されているが、サーバーを立てるのが面倒くさかったので

歯抜け状態でのアップグレード その2. sources.list を書き換えて、A → (飛んで) → C へ

を実行しました。

wikipediaUbuntu - Wikipediaからコードネームを引っ張ってきて、

sudo vi /etc/apt/sources.list

で開いてコードネームを下のように変更する。

Yakkety -> Bionic

で、アップグレードをする。

sudo apt-get dist-upgrade

注意

アップグレード中にサスペンドするとログインができなくなって、アップグレードの進捗がわからなくなって、いつ再起動すればいいのかわからなくなってしまうので、設定でサスペンドしないように変更して置いたほうが良いです。

STFに必要な他のアプリをインストールする

色々インストール

sudo apt-get update
sudo apt-get install git android-tools-adb python autoconf automake libtool build-essential ninja-build libzmq3-dev libprotobuf-dev graphicsmagick yasm stow

gitをインストール

git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
  echo "source ~/.nvm/nvm.sh” >> ~/.bashrc

LTSのバージョンを確認して、それを使用する。

nvm ls-remote
nvm install [バージョン]

ZeroMQをインストール

cd ~/Downloads
wget http://download.zeromq.org/zeromq-4.1.2.tar.gz
tar -zxvf zeromq-4.1.2.tar.gz
cd zeromq-4.1.2
./configure --without-libsodium --prefix=/usr/local/stow/zeromq-4.1.2
make
sudo make install
cd /usr/local/stow
sudo stow -vv zeromq-4.1.2

protocolbufferをインストール

cd ~/Downloads
git clone https://github.com/google/protobuf.git
cd protobuf
./autogen.sh
./configure --prefix=/usr/local/stow/protobuf-`git rev-parse --short HEAD`
make
sudo make install
cd /usr/local/stow
sudo stow -vv protobuf-*

sudo ldconfig

OpenSTFをインストール

cd
mkdir openstf
cd openstf/
git clone https://github.com/openstf/stf.git
cd stf
sudo npm install -g stf --unsafe-perm

OpenSTFを起動する

#DBを起動
rethinkdb

#起動
stf local

途中で、ADBサーバーでエラーが起きるとき

一旦stfを止めて、手動で起動すれば良いみたいです。

adb start-server

画面を表示してみる

起動した端末で http://127.0.0.1:2100 にアクセスして、ログイン画面が表示されれば成功。

FIDOの基礎情報

FIDOの基礎

TL;DR

実装方法ではなく、FIDOがどんなものか?なぜ使われるようになってきそうか?の説明。

FIDOの背景

現在の認証はパスワードで行うことが一般的だが、パスワードが漏れただけで第三者にログインされてしまう。 その対策として現在は下の2つが主に使われる様になっってきた。

OTPの問題

  • ジェネレータを使ったサービスを複数使うと、キーを沢山管理しないといけなくなり、大変。
  • 有効期限などがあり、タイミング悪く使用できない時がある。
  • 手入力というアナログ手法なのでミスが多い。

これらの問題に対して、どうにかしようって事で、FIDOを使いましょう。

FIDO Allianceとは

FIDOの特徴と必要性

  • ハードウエアトークンなどが作成する公開・秘密キーをサーバーに送り、端末を登録する。
  • 一度登録したら、パスワードなどの情報を送らなくても認証が完了するので、よりセキュアに使える。
  • サーバーの情報が漏洩しても、ハードウエアトークンが無ければログインできないので、漏洩対策にもなる。
  • 一つのキーがあればどのサービスにもログインできる。
  • パスワードを覚える必要がない。
  • トークンさえ作れれば、ハードが無くても使えるはず。(未確認)
  • yahoo!楽天Amazongoogle等の多くの企業がworking groupに入っている。ログインのデファクトになると思われるので、ほか案件をする上で知っておかないと辛い目に合うかも。

1.0

  • U2F(Universal 2nd Factor)
    • 多要素認証を導入する仕様
  • UAF(Universal Authentication Framework)
    • 信頼した端末でパスワード無しで認証する仕様
      • 自分の端末の指紋認証を他のサービスのログインに使用する

の仕様を決めている。

2018/05では1.2が最新で、NFCやBLEに対応している。

2.0

w3cと決めてるよう。web authentication api の事かな。

やってる事

クライアントとサーバー間で公開キーと秘密キーの交換をする。 webサービスだけじゃなく、androidiOSでも使える。 クライアントは何でもいいが、jsが多くなるかな。

今後のプラットフォームの対応

  • 2018/5でブラウザがまだchromeしか対応していない。(web authentication api)
  • iOSがまだ未対応
  • android8から、OSレベルでサポートする。

これからの動き

仕様が頻繁にアップデートされると思われる。 色んな機器が対応してくると思われる。

Linux(EC2)にUpsourceをインストールしてみた

EC2にUpsourceをインストール

しました。

# アプリのダウンロード
wget https://download.jetbrains.com/upsource/upsource-2017.3.2888.zip
unzip upsource-2017.3.2888.zip
rm upsource-2017.3.2888.zip
cd upsource-2017.3.2888/bin

# 8080ポートを使いたくないので、変更
sh upsource.sh configure --listen-port 11111

# 起動
sh upsource.sh start

特に何も問題なく簡単にインストール&起動ができました。 流石、JetBrains。

唯一の注意点

t2.micro(無料枠のEC2インスタンス)だと、メモリが足りなくてインストールはできるけど起動しませんでした。
t2.mediumぐらいは必要だと思います。

backlogのwikiを自動で作成するツールを作った

プロジェクトが立ち上がるたびに、同じ事をしていた

それはきっと無駄な時間だ。

と思って、そういえば、backlogはAPIがあるから定型文作ったら、
ボタンぽちればwikiを自動で作れるんじゃない?とふと思ったので、作ってみた。

作ってみて

いま、勝手に進めているプロジェクトで使用してるVue.jsを使って作ってみたんだけど、
こういうの作るのにはすごい向いてるね。
楽に作れましたよ。
サーバーとの通信にはAxiosを使ったんだけど、これもあんまり細かいこと考えなくても使えてとても便利。

sourceはGitHubに上げたのでcloneなどして使ってください。
webpackを使ってローカルサーバーを立ち上げれるので、ローカルからでも使えるし、
サーバーに挙げてもらっても使えます。
使い方はREAD MEを見てください

github.com

画面イメージ

最初の状態

f:id:Bee_Flim:20180507153228p:plain

ツールの画面

f:id:Bee_Flim:20180507153234p:plain

追加した時の状態

f:id:Bee_Flim:20180507153239p:plain