年別アーカイブ: 2011年

チームへのRedmineの効果

Redmine Advent Calendar jp 2011の25日目になります。

#余談。本場のAdvent Calendarは「24日まで」を窓を開けていくことでクリスマスを祝うそうです。一方、【技術系】Advent Calendarは「25日」まで書くことが多いようです。

というわけでトリなわけですが、相応しい壮大な話ではなく「チームへのRedmineの効果」について書いてみます。

普段よく言っている「Redmineの効果」

先日、社内で「Redmineを活用したタスク管理改善セミナー」というのをしました。

Redmineの簡単な紹介から始まり、事例紹介を交えてそこから得た自分なりのメリットやTips、考え方をお話しました。
後半は参加者の方と「こんなことで困っていませんか?」などのディスカッションをしました。

その中で「Redmineを使った効果はどういうものがありますか?」と質問がありました。
私はたいがい「Redmineは【見える化】【トレーサビリティ】【開発リズム】を強化してくれるツールです」と「ツールを入れることが大事ではなく、そのプロセスやマインドを変えていくことが大事」の2つを合わせて答えています。

最近はそこに「教育に伴うチーム力向上の効果もあるかも?」と思い始めました。

教育効果があると思ったシーン

あるチームは、割とエンジニアとしての経験年数が少ない人が多かったのですが以下のような変化が出てきていました。

  • 1:チケットの書き方が(良いレベルで)揃ってきた
  • 2:(チケットに書く)設計やそれまでの経緯を共有することができて、設計の技術が上がってきた
  • 3:コードレビューの結果を共有することができて、実装のレベルが上がってきた

1:チケットの書き方が揃ってきた

親チケットに要求をプロダクトオーナーが中心となって書いています。
その要求に対し「どう作るか?」と言った子チケットは担当するメンバーがそれぞれ自分で考えるような開発プロセスで回っています。

最初の頃はそのチケットの粒度が大きすぎたり、内容が抽象的過ぎることもありました。
また、粒度が大きすぎることも原因の1つとなって見積もり(予定工数)の精度が低いこともありました。

そんな状況からイテレーションを繰り返していくうちに、他のチケットの良い粒度を参考にしたり、自分が書いた粒度が大きいチケットを苦労しながら片付け、それをふりかえることで、分かりやすいチケットの書き方がチームの中で浸透していったように思います。
ここで言う「分かりやすい」とは自分以外にも「チームが見ても分かりやすい」ということです。
「チームが見ても分かりやすい」ということはチケットの引き渡しをやりやすいということにもなります。

2:設計の技術が上がってきた

1はチケットの書き方の粒度のお話ですが、こちらはチケットに書く内容の話です。

チケットに「この設計はどういう考えで、この結論、仕様に至ったか」を書くことがあります。
特に複雑な要求や仕様の場合「A案、B案、C案と考えたけど○○な理由でB案で行く」という風に議論の過程も書くこともあります。

ちなみに「設計書」と呼ばれるドキュメントには「どういう設計になっているか?」は書かれていますが、「なぜこれになったか?」はあまり書かれていないと思います。
それ故に次にその機能を修正する際に余計なリソースがかかっているように思います。

そういうチケットを担当することで、設計の仕方や思考の経緯を学ぶことで設計の技術を上がってきたように思います。

3:実装のレベルが上がってきた

コードレビューはRedmine Code Review プラグインを使っています。

それまでのやり方(コードをプリントアウトして行ったり、レビュー指摘内容はExcelに書く)に比べると、効率が良くなっていますし、指摘内容の共有をしやすくなっています。
もちろんレビュー指摘もそのままチケットに登録されるので「どのように対応したか?」まで共有しやすくなっています。
そのため若手や新しく入った方が、過去にどのようなレビュー指摘があったかを見ることでそのようなコードは書かないようになってきました。

またそうなることで、コードレビューアの負担も軽くなり、より有効に時間を使うことができます。

チーム構成やその入れ替わりの頻度などによっては、Redmine(ITS全般でも同じことが言えますが)のこういう側面に着目してみても、使うことによるメリットは大きいと思います。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Redmineのチームでの使い方を紹介

Redmine Advent Calendar jp 2011の10日目になります。

私は(プラグインをガリガリ作ったりしてないので)「自分達のチームでの使い方」をいくつか紹介します。

コンテキスト

・チーム:東京と大阪で別れて10人ちょっと
・作っているモノ:社内向けのFWや色々なツール群
・Redmine以外に使っている主なツール:Jenkins、SVN、youRoom

親子チケットの使い方

※これは「RxTstudy第2回でお話した内容」が元になっています。
「親チケット」を「機能(feature)」、「子チケット」を(そのfeatureを実現する)「タスク」として使っています。
親チケットは以下のテンプレートで書いています。

【背景】
※その機能の背景やなぜ作るようになったかの経緯などで要件定義の一部。
【ユーザーメリット】
【機能スペック】
【影響範囲】
【テスト時確認内容】

これくらい書いていると、設計や実装の方針に迷った時などに「そもそもこれが誰にとってどんな風に嬉しいのか?」がぶれることなく開発に集中できます。

またチームの進捗を見る場合、バーンダウンチャートと併用して親チケットの状態で見ています。
具体的には「親チケットのみを表示する」カスタムクエリを作っています。

親チケットの進捗率は、子チケットのステータスと進捗率に連動しているので、メンバーが親チケットを更新する手間なく確認できます。

レビューアの話

2つ目も第2回のRxTstudyでお話した内容ですが「レビュー」の話です。

「ステータス」にデフォルトでは“レビュー中である”ことを知らせるステータスがなく、これの表現方法を考えていました。

今のところ、チームでは以下のように運用しています。

【準備】

1:カスタムフィールド「レビューア」を(リスト形式で)設定
リスト内容はチームメンバー
2:ステータスに”レビュー待ち”を追加
3:カスタムクエリで「レビュー待ち一覧」(ステータスが”レビュー待ち”)を用意

【運用】

チケットの担当者が(コードレビューが可能になれば)ステータスを”レビュー待ち”にします。
「レビューア」にレビューして欲しいメンバーを選択します。

「担当者」を(レビューする際に)レビューアに変更して、レビューが終わったらまた元に戻す運用も考えました。
それでは自分のチケットの行き先が分からなくなり、「自分のチケット」へのコミット感が失われてしまうと考え、このような運用にしました。

「担当者」を変えないことで、担当者が自分のチケットを楽に追うことができ、レビューアに対して「滞留してるので、早くレビューしてくださいよ」を声をかけやすくなります。
※そんなことしなくてもレビューが消化できるのが良いのですが。

レビューアにとっても「自分のチケット」と混ざることはなく、分かりやすくなります。

プライベートチケットの話

3つ目は「プライベートチケット」に関した感想です。

「前略、private issue 使ってみました。あるいはITSの黒魔術とは何か」(@ハードコイルド・ワンダーランド)を読んで、(黒魔術的な面では同意の上で)「こういう時、プライベートチケットは有効かも?」と思いました。

それは親チケットなどで機能仕様などを書いている途中、何らかの理由で作業を中断する時にプライベートチケットとすることです。

途中かどうかメンバーには一見して分からないので、そのまま公開されているとそれを見たメンバーから意見やツッコミが入ったりします。それをプライベートチケットとして見せないことで、このムダな時間を防ぐことができると思いました。

RxTstudy

最後に宣伝です。「RxTstudy」というRedmineやタスク管理を考える勉強会が大阪にあります。
スタッフの1人としてお手伝いしています。
※過去2回の内容などはこちらで。

その第3回が2012年2月4日(土)にあります(ATND)。

充実した内容になるかと思いますので、この時期に関西に来る方は参加してみてはいかがでしょうか?

次のエントリは

次は@suerさんです。よろしくお願いします。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Jenkinsさんと気軽に友達になってみませんか?

今のチームではこちらのエントリにも書いたように「Jenkinsさん」はチームの一員・・・と言うほど、色々なことをしてもらっています。

使い始めるのは簡単だけど…

一方、社内でJenkinsのセミナーなどの出た声を聞いてみると「現場で入れてその後、継続して使うのが難しい」という声がチラホラ聞こえてきます。
どうやら「導入すること」は(上司などが「そんな訳の分からないもの入れるな!」と言わない限り難しくないのですが)「mavenなどの設定、Jobのメンテナンスが大変そう」と思っているようです。

そういうチームではリソース(できる人がいないし、仮にいてもそういう余裕がない)も無く「継続して使うのは難しい」という判断が多いようです。

まずは軽く使い始める

そんな時に思うのが「フルスペックでなくても【段階的に】使い始めてもでも良いのでは?」ということです。
100点(フルスペック)であればBestですが、何もやっていない0点よりも少しでもやっている方が良いという精神です。

「構成管理からチェックアウトしてコンパイルエラーが出ないか?」だけでもチェックします。
これで(別の誰かが)チェックアウトしたら壊れている…ということを早めに見つけることができます。

次にcheckStyle、PMDなどの静的チェックをやってみます。ルールのファイルさえあればすぐに導入できます。デフォルトでも良い感じにチェックできます。

これらが安定して実行されるJobがあるだけで「よろしくない」コードが混入するのを防ぐことができます。
少なくともコードレビューで「インデントが・・・」なんて指摘はしなくて済みます。

静的チェックの次は…

JUnitやSeleniumのテストはテストコードをいるので、ちょっと置いておくとして、次はデプロイに取り組みます。
本当はこの時点でテストコードを書き始めてくれると嬉しいのですが…。

これで常にチーム全員(チーム外の人も)が、動くアプリケーションを常に見ることが自動化できます。
時々ある「オレの所では見えるんだけど・・・」という状況も少なくなります。

そして、並行して「見える化」を進めるため(checkStyleなどの)レポートを表示します。
コードの出来高などもレポートするようにすると「やる気」も出てきます。
またcheckStyleの結果などがブルーだったりすると「うまく行っている」感が出て、チームのモチベーションアップにもなります。

そして自動テストへ…

ここまで来ると「テストの結果も見えると良いよね?」となって、テストコードやSeleniumのシナリオを書きやすくなります。
この時も「カバレッジ100%じゃないと意味がない」わけでなく、まずは重要なクラスや変更が入りやすいクラスからコードを用意すれば良いと思います。
今のチームでも、Jenkinsさんに色々やってもらっていますが、最初からいくつものJobやレポートがあったわけではありません。

使いながら「こんなことが自動化できると嬉しいね」「この情報がレポートで見えると嬉しい」という話が出る度に運用を追加していきました。

簡単なJobでも最初は思いの外、なかなかブルーにならないと思います。
でもそれまで「成功/失敗が分からなかった」ことが「分かる」ようになったことが変化の一歩(改善)です。

ですので、「大変そうだから」と尻込みせずに、気軽にJenkinsさんと友だちになってみてはいかがでしょうか?

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

「インセプションデッキ」ワークショップをやってみました

先日、社内で「インセプチョンデッキ」のワークショップをやってみました。
社内SNSでの募集期間が1週間も無かったのですが、10人強の方が参加してくれました。参加者の皆様、ありがとうございました。

インセプションデッキとは?

詳しくは「アジャイルサムライ」や色々なブログで紹介されていますので、そちらを。

ワークショップの内容

定時後に約2時間で行いました。

インセプションデッキの説明を行った後、提示する架空のシステムについてグループワークを行いました。
グループは3つに別れ、「やならないことはなにか?」と「トレードオフスライダー」を話し合って、発表してもらいました。

休憩を挟んで個人ワークです。
それぞれの(今or過去の)プロジェクトのインセプションデッキを作ってもらうことにしました。
主に「パッケージデザイン」と「エレベータピッチ」を作って発表してもらいました。

これは社内ということもあり、包み隠さず良い感じの発表が続いたように思いました。
この辺は(部門は違えど)コンテキストが共有できている部分もある点かな?と感じました。

自分なりに考えたインセプションデッキの気づき

何度か作ってみたり、今回のワークショップにあたって思ったことです。
読み返してみるとこちらのエントリで書いたこととほぼ同じだったのですが…

ウォータフォール開発でも使える

「インセプションデッキ」は「アジャイル開発」の文脈で語られる/使われることが多いと思います。
しかし、アジャイルな開発以外でも、十分適用できるものだと思っています。
例えば、弊社でも「プロジェクト計画書」「プロジェクト憲章」を作りますが、それとインセプションデッキは(表現の仕方は違いますが)同じようなことを伝えてようとしていると感じるためです。

意外と(自分もチームも)分かっていない

実際に(自分の取り組んでいるPJについて)作ろうと、いくつかの質問に取りかかると「あれ?これってどうなんだろう??」と思うことがあります。
特に途中参加したり、大きなPJだったりすると余計に顕著かもしれません。
チーム全員が同じような答えになるかと言うとそうでもなく、(エレベータピッチなどを書くと)少しずつ違った形になったりして、それぞれの想いが見えてきます。

10個もできないよ!!

インセプションデッキは10個の質問で構成されています。
「全て」をチーム「全員」でやろうとするとやはり時間がかかります。
そのような場合、2、3つを選んでやっても良いと思っています。
もちろん全てを関係者全員で出来るのが理想ですが。

今のところのオススメだと思うのは…
・エレベータピッチを作る
・何を諦めるのかはっきりさせる(トレードオフスライダー)
…辺りです。

またプロジェクトの途中では…
・やらないことリストを作る
・夜も眠れなくなる問題はなんだろう?
…あたりも良いと思います。

大事なのはインセプションデッキは1回作って終わりでは無いと思います。

継続的に、PJの状況が変化したら、インセプションデッキを確認して更新することで、より「PJの認識を合わせ、何を期待するか?」という点で効果があるように思います。
そのためにも(壁に張り出すなど、手段は色々ですが)「あぁ自分達はこのために、こんな方法で、このPJを進めているんだ」を意識するのが大事かと思います。

ロッカーの奥深くのキングファイルに入れてまま、とか、ファイルサーバの奥深いフォルダで、最終更新日がPJの開始日・・・なんてことのないようにしたいです。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo on Visualhunt

初めて勉強会で発表する人に伝えたいこと

同僚がチームが直面した課題、その課題へ工夫したことを事例紹介として、勉強会で発表することになりました。
この同僚は社外の勉強会では初めて発表するというこもあってか「ほとんどの聴き手が『そんなん知ってるわ!』と思ったらどうしよう…」と不安がっていました。

この話を聞いた自分なりの考えを書いています。
#この同僚には伝えたことでもあります。

伝えてみたこと

100人の参加者がいたとして、全員が満足するような話は難しいです。ただその100人のうちひとりが「新しい知識、考えを知ることができた。今日は来て良かった」と思ってもらえれば、それで話し手としては十分です

発表に慣れないうちは、聴き手のことをあまり深く考え過ぎず、まずは「発表してみよう」という姿勢、そして実際に発表するアクションが大切なことだと考えています。

貴重な時間やお金を使って勉強会にやって来ている「聴き手のことを考える必要がない」というわけではありません。ただ、それを考えすぎる余り「発表する」ことそのものを躊躇するのはもったいないことです。

発表したことが、理解を少し誤解していた、もっとベストな方法があった場合、聴き手にいる有識者からアドバイスをもらうこともできます。また同じような境遇の人と話しあうこともできます。こんな風にフィードバックをもらうこともできます

技術的な検証、自分の考えや話に矛盾がないかはある程度事前に確認は必要ですが「話す内容が完璧な正解でないといけない」「ベストな方法でないといけない」わけでもありません。
そして、発表することで得られたフィードバックを、その勉強会で参加者にも共有したり、後日にブログなどで発信できれば十分です。

この同僚の発表は、勉強会、その後の懇親会でも多くの聴き手の興味をとてもひいたようで、いろいろな良いフィードバックを受けていた様子でした。

※この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo credit: tobiastoft via VisualHunt / CC BY

Share

インセプションデッキを書いてみた

社内で「アジャイルサムライ~達人開発者への道~」の読書会をやっています

この読書会。色々な所(道場)があります。詳しくはGitHubにまとめられているWikiをご覧ください。

読書会で作ってみた

その読書会で、(この本の特徴の1つでもある)「インセプションデッキ」を作って発表しました。

最初に読んだ時は「あぁプロジェクト憲章とか計画書かな?」と思っていました。

いざ書き始めてみると、答えに窮する部分が見つかったり、分かっていたつもりでも文章にするとボンヤリとしていてフワッとしていることが明らかになってきました。

チームでもやってみた

(この読書会とは別の日に)チームの何人かと「エレベータピッチ」「トレードオフスライダー」を「みんなはどう思います?」と議論しました。

すると、(幸いにして根本的にはそれ程違いはなかったのですが)それぞれの想いや細かな優先順位の違いがありました。このチームで携わっているプロジェクトはすでに1年半ほど経つのに、それでもこれだけ違うというのは面白い発見でした。

インセプションデッキは、プロジェクトの初期段階に、できればメンバー全員で、最低でも核となるメンバーを含めてやった方が良いと感じました。

マネジメントが主な業務となるプロジェクトマネージャや最後までいない上流工程のコンサルタント的な方が「プロジェクト計画書」なるものを作ったりしますが、それがメンバーに浸透するかというと、まずほとんどしていません。
だから開発の山場で「そもそもこれは何のためなんだ?」となったり、設計方針がぶれたりすることもあります。

「プロジェクト計画書」でも浸透できるようなプロセスが組み込まれていると良いのですが、実際は前述のような人が書いて、メンバーには「読んでおいて」(そしてメンバーは多忙なので読む余裕はない)で終わっていると思います。

その点、インセプションデッキは気軽に始めることができ、チームのみんなで作っていくように組み込まれています。
#その質問の内容自体は本気で考えると手軽ではなく、むしろタフクエスチョンなのですが。

常に意識する、継続的に見直すことができれば、判断に迷った時に「インセプションデッキに照らし合わせるとこうだ!」と言え、それが正解か間違えているかは別としても、少なくとも迷走して疲れ果てることは少なくなると思いました。

セキュリティ的に問題なければ10枚程度のスライドなので壁に貼りだしても常に見えるようにしても良いくらいです。

こんなイベントもあります

2011/09/18(日)には東京で他流試合という名のイベントもあります。社内の読書会メンバーが参加してLTもするので、どんな内容だったか感想を楽しみにしています。

もう1つ、2011/10/08(土)にある「AgileTourOsaka2011」では、監訳者の1人西村直人(@nawoto)さんがインセプションデッキのワークショップをするのでそちらも参加したいです。
日々のタスクに追われていて、「そもそも自分はなぜそれを作っているのは?どうなるのが目的??」というのを意識できないかもしれませんが、まずはできるところだけでもやってみてはいかがでしょう?

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。
※アイキャッチ画像:http://www.flickr.com/photos/acain/5418547739/

人によって違う「ゆっくり」

お客様や同僚から言われる「この仕様をドキュメントにまとめてもらえますか?急いでいないので、”ゆっくり”で良いですよ」という言葉。
よくある会話ですが、この「ゆっくり」の捉え方によっては、ちょっと痛い目を見るかも知れません。

「ゆっくり」の違い

「ゆっくり」が具体的な時間、日にちでどれくらいなのかはその人、背景や依頼内容といった状況によって違ってきます。

その中で、依頼を受けた側は「ゆっくり」を”4日間”と思い込み、依頼を出した側は”今日中じゃなくても良いけど、明日くらい(2日間)”と考えていたとします。

この場合、2日後に依頼者は「ゆっくりとは言ったものの、ちょっと遅いなぁ」と気になり始めます。ゆっくりと依頼したため、「まだですか?」と催促しづらく、ひとりイライラすることもあるでしょう。

一方、依頼された側は、3日後に依頼を終えて返事をしたとします。その時、少しイライラして不満顔の依頼者を見て「あれ?ゆっくりで良かったんだよね?」とモヤモヤとした気分になります。
#また逆に、「あれ、そんなに早くなくて良かったのに…」と言われ、別の意味でモヤモヤすることもあるでしょう。

絶対的な物差しにする

人や状況によって違う「ゆっくり」という相対的な物差しを、「○日の△時」という絶対的な物差しにすれば良いだけです。

文字にすると単純なことですが、話の流れ、場の雰囲気によっては、何となく流してしまったり、聞くことができず、そのままになりがちです。それを放置していると、冒頭のようなすれ違いが起きてしまいます。

絶対的な物差しにする際、「いつまでですか!?」と反射的に尋ねるのではなく「○日までに返事しますが、問題無いですか?」と自分なりの見解を伝える工夫をします。
こうすると依頼した相手も「ちゃんと考えてくれている」と信頼し、安心することができます。

ちょっとした(心遣いまではいかない)工夫で、少しでも円滑に回れば嬉しいものです。

※この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo credit: malias via Visual hunt / CC BY

やりたいことをするために一歩進んでアクションしてみる

あるエンジニアと話した時に「雛鳥が親鳥からエサをもらうように口を開けて待っているだけでなく、一歩進んで、アクションを起こしてみてはどうか?」と思うことがあります。

やりたいことを周囲に伝えていますか?

「これからどんな仕事に携わったみたい?どういうことをやってみたい?」と質問を投げた時の反応は様々です。

「平穏にサラリーマンできればいいです」という声もあれば、「プロジェクトマネージャーになって大きなプロジェクトを回してみたい」「アーキテクトになって技術でリードしたい」「もっとお客様に提案したい」「今はJavaだけど、これからはRubyでプログラミングしたい」など、様々なやりたいこと、ありたい姿、キャリアプランなどその人の想いが出てきます。

このようなやりたいことは、何もせず待っているだけで実現することは稀なことであり、実現するためには「私はこれをしたい!」と周囲に知らせる、発信する必要があります。定期的にあるフォーマルな評価面談から、呑み会やちょっとした日常会話でのインフォーマルな場まで色々機会があります。
#自分の経験で、ポロッと社内SNSで呟いたことが、関係者の目に止まってやりたかったことができるようになった話もあります。

このような発信を受け取った上司は「自分からやろうとしていることをなんとか実現してあげたい」という心境になるのが大半かと思います。

やりたいことを実現するために何かしていますか?

そこで「それをやるために、今まで何をしてきた?」「Rubyがしたい?ならサンプルで書いてみてどうだった?」「プロジェクトマネージャーになりたい?今一緒にやっているプロジェクトマネージャーから何を学んだ?」と”やりたいことに近づくアクション”の話になると、本人は途端にトーンダウンしまうことがあります。
「そこまではやる時間がなくて(ゴニョゴニョ)」「実際に使うプロジェクトに入るのが決まってから勉強しようかと(ゴニョゴニョ)」といった様子です。

今の自分が「できること」と「実際にしたいこと」にはギャップがあります。そのギャップを埋めるのは自分です。誰かが埋めやすくなるように手伝ってくれることはありますが、最後は自分で行動して埋めるしかありません。

こういう発信を受け取った上司はこのようなアクションをしているか?そのアクションのアウトプットはチャレンジしてもらっても大丈夫そうか?という視点でも見ています。

雛鳥が親鳥からエサをもらう時のように口を開けて待っているだけでなく、一歩進んで、アクションを起こしてみてはいかがでしょうか?

Photo credit: coniferconifer via Visualhunt.com / CC BY

※この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

仕様凍結のつぶやきのその後

これについてグダグダと考えてみました。
このつぶやきの元になっていたWFの開発プロセスでは「工程毎にキチッと終了し、その工程は簡単に後戻りしない」という前提です。

実際のPJではプログラミングやテストでの仕様追加や変更時は、それなりに発生します。
「WFでは後戻りしないんです!」と主張してもPJが進まないわけで、どうにか取り込もうとするわけですが、たいがいそれまでWFの各工程でキッチリやっていたプロセス(管理系もそうだし、設計や影響調査なども)がおざなりになることがあります。

その後のよくあるシーンとして…
・再見積や追加見積の数字が「なんでこんな簡単な機能追加なのに、こんなにお金/時間がかかるの!?」とお客様と乖離がありすぎる
・追加/修正した機能や関連する機能にバグが混入する(設計や影響調査、テストが十分でない)
…というのがあります。
これの要因の1つは(お客様のシステム開発の知識や経験も関係しるとは思いますが)自分達開発チームが仕様追加/変更を適切に行える状態になっていないことだと考えています。

1つは、開発インフラ環境の状態です。
開発インフラの三種の神器であるSCM/ITS/CIを使って、プロダクトコードが構成管理されていてベースラインが分かり、ITSで仕様やその経緯、リポジトリとの紐付けができて、CIで自動テストがグリーンになっている、そして失敗したらすぐに分かる…という状態なら、仕様追加/変更にも品質に影響を出さず、容易く対応できると思います。
特にCI(とテストコード)が無いと、大量の再テストを手動でしたり、バグの混入に気づくのが遅れ、大きな影響が出やすくなります。

もう1つはプロダクトそのものです。
プロダクトのコードは可読性/保守性が高く、DBなど含む設計もそれなりのレベルが必要です。
スパゲッティコードや拡張ポイントがぐちゃぐちゃな設計だと、仕様追加/変更のスピード、確実性が大きく落ちるので。

この2つが成り立たないと、工程途中の仕様追加/変更で(要求側が「なんでそんなになる?」と思う)コストや期日になったり、品質の劣化が発生します。
この話はお客様が使い始めた後の機能追加/修正でも同じです。

では、こういう条件を「使うアプリはパワポとExcelばかりで、プログラミングはパートナー企業やオフショアに丸投げしている」SE(や組織)がクリアできるか?というとNoなわけです。

「Noなら、どうしようか?」となって、冒頭の「仕様凍結」という言葉で、変更を抑止したり、お客様の費用感でなく、自分達の費用感でやれる材料にする動きになると思います。
当然、こんなことではお客様に価値を提供することは難しくなります。

ちなみにお客様の費用感を受け入れた場合、PJは赤字になり、品質は劣化し、デスマーチになって行くと思います。

(要求が変わることにより)仕様追加/変更が発生するんだ…と「変化を抱擁する」ことを前提に開発プロセスを考え直すのも1つの対応方法だと思います。
ただ、「変化を抱擁する」ことができる状態…開発インフラ環境の整備とプロダクトのコード・設計レベル…が実現できない組織では絵に描いた餅に過ぎません。

なので、そういうSEが多いSIerが、これから生き残るには…
1:自分達もモノ作りができるようになる
2:従来の開発プロセスで良いとするお客様だけをターゲットにしてやる
…かじゃないと思っています。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo on Visualhunt

「モチベーションの源泉:何のために働くのか、転職か起業か」を読んでみて

@kuranukiさんの「モチベーションの源泉:何のために働くのか、転職か起業か」(「Social Change!」より)を読んで…


と言いました。
で、もう少し考えてみました。

「アントレプレナー」タイプ

その昔…前の前の会社にいた頃…「アントレプレナー」タイプの側面は(10のうち)1くらいはありました。
「開発者がもっと楽しく、自分の腕を活かして仕事ができる組織・環境を作る」という想いでした。
若かったもので、想いだけはたくさんありました。
 
今でも「開発者にとって…」の想いは持っていますが、それを自分が実現するという気持ちではないかなぁと感じています。

「クラフトマン」タイプ

「アントレプレナー」タイプの夢を実現するために磨いていたスキルがスライドして「クラフトマン」タイプの源泉になっている感じです。それが、ファシリテーション、チームビルディング、Agile開発だったり…。これらのことに携われるからモチベーション高く維持できるのは確かです。
なので、やっぱり3~4くらいです。

@kuranukiさんのエントリの文脈では「技術的スキル」(RailsのプログラミングスキルやOSSへの貢献だったり)にフォーカスしているように思えます。それならば、私の「クラフトマン」タイプの割合は0~1になります。技術的なことは好きですが、『自らの腕を磨いて「俺ってすげー」感を味わうことが幸せです』まではいけないなぁと。

「サラリーマン」タイプ

よくよく考えると2つの意味で持ち得る(こともある)と思いました。
1つは「評価が金でしか分からない」場にいる場合です。この時は1~3程度になります。
「あなた達の仕事っぷりに感謝したい」という声が届きにくい環境にいると、評価される側は金でしか評価が分かりません。

もう1つはダークサイドに落ちそうになっている場合です。
凹むような出来事…たいがいは、(組織など)何かに対する失望がその原因…があった場合に、モチベーション、情熱が一時的に冷え込み、「もらっている金額分、働きます(だけどそれ以上は自分のためだけに使う)」な気持ちになる場合です。
こういう時も1~3程度になります。

「サポーター」タイプ

「誰と(誰に)仕事をするか」は大きな割合…4~6くらい…で、あります。
自分のパフォーマンスを振り返ると、(自分基準で)「良い」と思えるお客様/上司/ボス/リーダーの時ほど、そのパフォーマンスが良かったように思います。
「このお客様の問題を解決したい(で、笑顔になって欲しい)」「このボスの目標を実現して欲しい(のために、手伝いたい)」が源泉になっています。

ありがたいことに、今のチームでも「この方達のために…」という想いが強くあります。
その状況でなくなれば、「別の誰かのために…」という想いで動くこともあるかもしれません。

まとめ

・アントレプレナー:0
・クラフトマン:(Javaなどの技術だけでなく、広い意味で捉えるなら)3~4
・サラリーマン:(普段は)0
・サポーター:6~7

年齢や経験で変わってその割合は変わってくるでしょうし、他の方から見ると(自分のそれと)違うかもしれません。
チームのふりかえりで(少しお酒でも入って)リラックスしながら、ディスカッションするとお互い気づきがあって面白いと思います。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo on VisualHunt

社内研修で思うこと

社内研修における受講者、講師について思ったことです。

社内研修には(自分から手を挙げる以外に)「3年目だから」や「主任だから」というキャリアによって必須のもの、また部長などが推薦するものがります。
いわば「自分の意志とは無関係」な研修です。
そのような研修で時々気になる光景、雰囲気があります。

「なぜ研修を受けているのか?」「研修で何を学ぼうとしているのか?」を持っておらず、「指名されたから…」「仕方ないから…」その場にいる…というものです。
その状態では「研修」自体の費用対効果は低いままです。
必須の研修でないなら、自分なりに考えてみて「その研修を受けない(辞退する)」選択をしても良い(むしろ…した方が良い)と思います。
(ほぼ全ての)研修に対して、評価、コメントを付けることができ、それが全体に公開されています。ですので、事前に研修の評価や内容を知ることができます。

一方、社内研修の講師側も「それはどうだろう?」と思うこともあります。
テキスト、スライドを読み上げるだけだったり、古い情報のままで更新されていない内容だったりすることもあります。
たまに「この資料は自分が作ったのでは無いので…」と言い訳する講師もいますが、論外です。

また「受講者に○○を身につけて現場に役立てて欲しい!」という想いが伝わってくる方はほとんどいません。
「受講者のやる気がないから…」等と言うのであれば、講師側が「やる気」を引き出す取り組みをする必要があると思います(研修本編か前準備かは色々ありますが)。

なので、講師は受講者に対し「(内容が)役に立たないと判断したら、途中退席もOK(もちろん社内的にペナルティなし)」と言える(少なくとも自分にとって)「良質」な研修を作り上げる必要があると思います。

社外勉強会やセミナーとの比較をすると、やっぱり受講者も講師も気持ちの入り方が違うためか、そんな光景はあまり見ません。
せっかく組織の力を上げることを目的としている「社内研修」なので、もっと「価値」を出せるようにしていきたいです。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo by Anosmia on Visual hunt / CC BY

「Q&Aビンゴ」アクティビティ

(時期を逃した感がありますが)、新しくできたグループなど、あまり知らない人同士が集まった宴会で使えるアクティビティです。

「Q&Aビンゴ」

ビンゴの数字を(「くじ」ではなく)「質問に該当する人」で決めていくものです。

お勧め参加人数

15人~50人位まで。

準備するもの

1:ビンゴ用紙
人数に合わせて3×3~5×5マスのビンゴ用紙。
市販されている「数字が印刷されている」ビンゴ用紙だとできないので、数字を自分で書き込めることができるタイプのやつがいいです。

2:ペン
3:(自己紹介を織り交ぜるなら)自己紹介テンプレ(使い方は後述)を書いておく大きめの画用紙

ビンゴのやり方

1:ビンゴに数字を書き込む
各自、0~参加人数の数字を(重複しないように)に埋めていきます。
例えば参加者が15人なら0~15までを書きます。
5×5なら真ん中はフリーの方が楽しめると思います。

2:ビンゴの数字を決めていく
任意に質問者を決めます。
質問者は「転職経験のある方!」「三度のメシよりプログラミングが好きって人!」「スマートフォンを3台以上持ってる人!」というような質問をします。
その質問に該当する人は手を挙げてもらい、手が上がった人数がビンゴの数字になります。

例えば、「社外勉強に行ったことがある人!」という質問に(15人の参加者のうち)9人が手を挙げたとします。すると「9」を書いたマスをチェックします。

これを繰り返していきます。
こうやってビンゴを作っていきます。

自己紹介のやり方

自己紹介をするなら、質問者は質問を言う前のタイミングが良いです。
ここではリズム良く行きたいので、用意しておいた自己紹介テンプレを使います。
以下は、新しい部門やグループのキックオフ宴会を例にしたものです。

—————
元気よく名前を!
これまでやってきたことは?
これからやりたいことは?
次の質問をどうぞ!
—————

この自己紹介テンプレを見えるようにしておけば割とリズムに乗って言いやすいと思います。

次の質問者の決め方

「質問したい人」と呼びかけて進行役が当ててもいいですし、質問者が次に指名しても良いです。

やってみて

(時間の関係もありますが)30人強の人数ならリズム良く、自己紹介+質問を繰り返した方が良いと思います。
人数が少ないなら、質問と質問の間に5分ほど間を設けて、質問に関すること…「へぇ~そうやったんやぁ」的なノリで…を話す時間を作れば、よりお互いを知るきっかけになると思います。

出た質問とその人数を画用紙に書いておけば、ビンゴが終わってからの会話のネタにもなると思います。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo by elizaIO on Visual Hunt / CC BY-SA

朝早く仕事に取りかかるメリット

以前エントリ「自分のテンションを維持する方法」で「朝早く出社する」ことを書きました。

これを少し詳しく自分なりに考えてみました。

まずはやはり朝早くの時間帯は静かで本当に集中できます。電話ももちろん話し声や人の気配もありません。
今いるフロアは次の人が結構遅いので、この時間を多く保つことができます。

この時間をより活用するように行動を変えてみました。

具体的には、『会社に着いて』やることを考えるのではなく、『通勤途中』できれば『前日の帰り』にやることをリストアップするようになりました。

前日に「やること」リストをアウトプットした上で、一晩過ごすと時々いくつかの考えが浮かんできます。
例えば「そのやることは(代替案がある/優先度が低いなどの理由で)今しなくていいのでは?」という考えで、それがYesであれば、不要な時間を使わずに済みます。
 
「やること」に関連して「これをやるということは、関係するこっちも…」と出てきます。これでタスクの漏れを防ぐことができます。

さらに退社時点で「明日のやること」ができあがっていると、行き帰りの時間で(ボンヤリとでも)タスク自体の段取りも考えることができます。そして、朝早くの時間をより効率的に使うことができます。

人それぞれのリズムがありますが、こういうアクションはお金をかけずに(自分の心持ち次第で)できる生産性の向上だと思います。

自分一人では朝起きるのはしんどい…というのであれば、チームなどで仲間を見つけてやってみると良いかもしれません。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo credit: Maarten Takens via Visualhunt.com / CC BY-SA

勝手に親近感

Twitterや社内SNSなどで、「実際に会った」ことも「直接話した」こともない…けれど、その考え方やアクション、マインドにすごく共感したりする方々がいます。
その中には「こんな方を目標にしたい!」とか「会って実際に議論/仕事したい」とまでなる方もいます。

そうなると自然と(会ったこともないけど)親近感を芽生えてきます。
こんな状態を「勝手に親近感」て呼んでいます(笑)。

で、色々な縁があって、実際に会った時にはその親近感を土台にして、会ったこともないけれど旧知の間柄のように話が弾むことができます。
ここ2ヶ月程、これまで「勝手に親近感」を持っていた方々と立て続けに会う機会があって「やっぱりお話できて良かった~」と思いました。

もちろん家族や普段仕事を一緒にするチーム内の人間関係も大事ですが、色々な人と知り合うことができる環境にあるのですから、それを利用して見識を広めるのも良いと思います。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo on Visualhunt

打合せ前に少しだけ調べておく

とある社内での打合せの席で思ったことです。
「相手の方を少しだけ知っておくと、それだけど打合せがスムーズに進む(進みやすい)」と。

その打合せは部門も違い、お互い初対面でした。

ただ、事前に「○○さんと△△さんが出席する」ことは分かっていました。
なので、社内SNSなどの情報を少し検索して「これまでどういうキャリアを積んでいるのか?」「技術系なのかマネジメント系なのか?」など、いくつかのことが分かりました。

そういう事前情報があると実際に話をする時の基準(レベル)をどこにすれば良いのか分かりやすいです。
例えば「どういうアーキテクトで行くか?」と説明する際、バリバリ技術を10年やって来た方、経験1年目の方、また営業畑の方…それぞれ話し方やポイントが変わってきます。

また話の入り方で「あの(社内SNSの)エントリ読みましたよ~」「○○さんは×が趣味なんですね」とアイスブレーク的に使うだけでずいぶんその後の展開は違うと思います。
やりすぎるとストーカーちっくなので限度はありますが(苦笑)。とは言え、自分に興味を持ってもらうことをそう嫌がる人もいないと思います。

情報をインプットし過ぎて、先入観を持ちすぎるのも良くありませんが、想像(事前情報)と違っていたら、そこでその情報を修正すれば良いと思います。
ちょっとした労力でスムーズに打合せができるなら、そういう工夫も良いかと思います。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo on Visualhunt

ニコニコカレンダー

先日、チームのフリカエリをして、その時の(自分の)ネタに半年前から付けている「ニコニコカレンダー」を見てました。
「ニコニコカレンダー」の説明はこちらで。

私の今の使い方はデスクの卓上カレンダーにちょっとした一言と一緒に書いています。
ただ、ここ1ヶ月程は(チームで使っている)Redmineにニコニコカレンダーのプラグインを入れて、そちらも使っています。

で、その卓上カレンダーのニコニコカレンダーをそのまま公開しようとしましたが、仕事のメモ書きもあったので、集計結果だけ。

nikonikoC.PNG

こうして並べてみると、毎月の様子がなんとなく分かります。
3ヶ月目、6ヶ月目が他の月に比べ、「良い」が少ない(特に3ヶ月目)のは、リリース前でバタバタしていたせいです。
6ヶ月目はその反省も踏まえ、多少改善されていますが。

半年付けていて思ったことの1つは、あまりロジカルな基準を設けない方が良いということです。

人間なので昨日と今日では同じ出来事があっても感じ方が違うこともあります。
ある日は「良い」でも、また1週間後に同じようなことがあってとしても「普通」を付けても良いと思います。
「なぜ今日、これを『良い』と感じたのか?」とその自分の感覚を深掘りできれば、何か見つかるかも?と思いました。

また「今日は開発が進んだ!良かった!」と思って「良い」と付けたとして、それが(例えば)1週間続いたとすると、その進捗のパフォーマンスや「良かった」という感覚が慣れて「当たり前」になって「普通」を付けていたこともありました。
これはある種、自分のレベル(基準)が上がっているを示しており、「では自分が『良い』と思えるのはどんな価値を出した時か?」という切り口で考えみると面白いかもしれません。
やり過ぎると疲弊したりするので、あくまで持続可能なペースでレベルを上げていくと良いと思います。

日々のタスクが忙しいとなかなか付ける余裕が無いと思いますが、帰り際の数分、もしくは朝の数分をニコニコカレンダー(を使ったフリカエリ)を続けると、数ヶ月には何か見えてくると思います。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

コンサルタントの道具箱[読書感想]

コンサルタントの道具箱

(本棚を整理していて)久しぶりに読み返してみた本です。
数年前にこの本を買った時は、そこまでしっくりこなかったように思います。
ですが、今の自分が読み返して「あぁそういうことかぁ」と思うことが多くありました。

目次

イチゴジャムの法則
知恵の箱
金の鍵
勇気の棒
願いの杖
探偵帽と虫めがね
イエス・ノーのメダル
ハート

望遠鏡
魚眼レンズ
ジャイロスコープ
卵、カラビナ、羽根
砂時計
酸素マスク

題名が「コンサルタントの~」となっていますが、「コンサルタントのための」ではなく、もっと広く捉えて「人生を豊かに生きるための道具箱」と感じました。
目次のそれぞれが道具箱にある道具を示しています。

私が印象に残った部分です。
「やるべきでないことは、いっさいやるべきでない。以上。」
最近、似たようなアドバイスをもらったことがあって、余計に響きました。

「不変の言葉」
「願いの杖にできること」
「1969年の雪嵐」
当たり前だと信じている(誰しもが疑わない)前提、状況は視点を変えると覆すことができるかも?というエピソードです。
私も今の状況がいくつかの「当たり前」に対して、「こんな風にしてみたらもう少し良くなるのでは?」と言っていく必要があるので、響きました。

「自分とデータの間に三角形があるときは、斜面を選ぼう」
これは普段から心がけている行動指針の1つでもあるので、良い言葉だなぁと思いました。

「(提示された内容には感謝を示すことができなくても)提示してくれた『コト』自体に感謝すれば良い」
「フィードバックは、非難ではなく助言だと考えよう。」
「パーソンの特異性原則」
ここにあった「相手が奇妙な行動をとっていたら、たぶん奇妙なものに反応しているのだ。それはたぶん自分である。」という文章は、知らず知らずのうちに相手にそういう印象を与えていないか気をつけないと…と響きました。

「今のところはね…」
「ジェリーのプロジェクト期間の鉄則」にある「完璧主義はスケジュールの敵である。妥当性はスケジュールを救う」
 

***********************

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

小さなチーム、大きな仕事―37シグナルズ成功の法則

<

div class=”yellowbox”>小さなチーム、大きな仕事―37シグナルズ成功の法則 (ハヤカワ新書juice)

「37シグナルズ」の理念を書き記しています。
ページ数は多くなく、また簡潔に書かれているので非常に読みやすいです。
読みやすい故にサラッと流れてしまいそうですが、1つ1つを自分に当てはめて考えみると、色々と思うところがありました。
#私も2、3回読んでいます。

◆目次
まず最初に
見直す
先に進む
進展
生産性
競合相手
進化
プロモーション
人を雇う
ダメージ・コントロール
文化
最後に

仕事依存症はバカげている
無闇な仕事依存症は確かに効率が良くないと思います。
けれど、仕事の種類の区切りを明確に分けていて、かつ、情熱、モチベーションを持っているのであれば、(ある程度の期間であれば)良いのでは?と思いました。

おそらくここで言いたいのは「やるべきこと、やらないでいいこと」を判断せずに、ただ「仕事があるから」という理由だけでするのは…と思っています。

この辺はこっちのエントリにも書いた「やるべきでないことは、いっさいやるべきでない。以上。」と通じるものがあると思いました。

あなたに必要なものを作る
今手掛けているサービスでは(ありがたいことに)「自分だったらこういうのがあったら嬉しいよなぁ」というアイデアを取り入れる余地があります。
で、特定のお客様向けへのシステム開発でも「自分だったら…」の意識を持ってみると、その質が良くなるのでは?と思います。

「時間がない」は言い訳にはならない。
「失敗から学ぶこと」は過大評価されている
 フリカエリなどでも「ダメだったこと」「うまくいかなかったこと」を挙げて「じゃ、次どうしようか?」という話をすることがあります。
 (それも必要かもしれませんが)それよりも「今回うまく行ったこと」を明確にして、ノウハウとして共有した方がチーム、組織としては有効です。

中途半端な製品ではなく、半分の製品
会議は有害
会議はそれなりの規模の組織であれば、かなり数多くあり、かなりのリソースを使っています。
当然、それなりの意思決定をしようということも多いのですが、その割にはアウトプットがいまいちな会議が多いのも事実です。
これらをファシリテートできれば、それこそコスト削減や競争要因になります。

小さな勝利を手に入れる
1、2週間毎に成果を出せるようにしたり、プチフリカエリを行って成長を認識する…という感じかと思います。

あなたの見積りは最悪だ
観客をつくる
料理人を見習う
会社を「知人のいないパーティー」にしない
 プロジェクト毎にお互いのことをほとんど知らない…それこそ同じ組織に属する程度…ような状況で良いパフォーマンスができるわけはありません。
こういう組織の管理職ほど「頭数を揃えばできる」と思っていて、「とりあえず人を追加しようか?」などという発言が多いように思います。

全員が働く
ダメージコントロール
大げさに反応しない
ひらめきには賞味期限がある

この本に書かれているようなことが出来ていけば、良い組織になると思いますが、組織、部門の規模が大きければ「すぐに変える」というのは難しいかもしれません。

ですが、グループ、チーム…極端に言えば自分自身…であれば、良い提案、アクションはすぐに実施し、自分でその効果を出せることが多いと思います。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

アジャイル開発の本質とスケールアップ 変化に強い大規模開発を成功させる14のベストプラクティス[読書感想]

アジャイル開発の本質とスケールアップ 変化に強い大規模開発を成功させる14のベストプラクティス (IT Architects’ Archive)

2011年最初に読んだ本です。
300ページほどの大型本で、この手のは一気に読まない/読めないのですが、これはとても興味深い内容で(また翻訳に違和感もなく)グイグイと読むことができ、一気に最後まで読んでいました。

◆目次
第1部 ソフトウェアアジリティの概要
第1章 アジャイルメソッドの概要
第2章 なぜウォーターフォールモデルは正常に機能しないのか?
第3章 XPの本質
第4章 スクラムの本質
第5章 RUPの本質
第6章 リーンソフトウェア、DSDM、FDD
第7章 アジャイルの本質
第8章 アジャイルスケールアップへの挑戦

第2部 スケールアップ可能な7つのプラクティス
第9章 定義/ビルド/テストコンポーネントチーム
第10章 2レベル計画作りと追跡
第11章 反復型開発の習得
第12章 頻繁な小規模リリース
第13章 コンカレントテスティング
第14章 継続的インテグレーション
第15章 継続的な考察と適応

第3部 アジャイルな企業を作る
第16章 意図的なアーキテクチャ
第17章 リーン要求開発のスケールアップ:ビジョン、ロードマップ、およびジャストインタイムの詳細化
第18章 システムオブシステムとアジャイルリリーストレイン
第19章 高度に分散した開発の管理
第20章 顧客とオペレーションへのインパクトの調整
第21章 組織を変化させる
第22章 ビジネスパフォーマンスを計測する

結論:アジリティはスケールアップ可能である
索引

「小規模開発環境で適用されている(日本では「されつつある」)アジャイル開発を(それなりの規模の)企業に適用するには、どのような課題があり、それらをどう解決していけば良いか?」という内容が3部構成で書かれています。

第1部はアジャイルの歴史やXP、スクラムなどの主要なアジャイルメソッド、RUPなどそれぞれの特徴、開発メソッドの解説を簡単に説明しています。
第2部ではアジャイルのプラクティスの中からスケールアップできる…大規模に拡張可能な…7つのプラクティスについて言及しています。
第3部ではスケールアップした際に企業が直面する課題に対するプラクティスとして新たに7つ言及しています。

特に印象に残ったのは、第3部で「アジャイル開発(やそのマインド)を現場・チーム以外にも企業全体に広めていくには?」を考察している点でした。

アジャイル開発がメインになった時に、マーケティングやセールスにとってどういう影響があり、それに対してどうすれば良いか?
またエグゼクティブは組織全体にアジャイル開発を根付かせる為にはどうすれば良いか?
企業体にはどのような阻害要因が発生しうるか…等々、アジャイル開発を開発現場の視点で書かれた内容とは違っており興味深かったです。

自分が所属しているSIerの組織全体ではアジャイル開発には程遠い…ということを認識しているか余計に思ったのかもしれません。
ちょうど今年のアクションにも関係する内容で(その為に大晦日に買った)、良書だと思いました。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。