スキップしてメイン コンテンツに移動

継続的デリバリー David Farley アスキー・メディアワークス

顧客に価値を届けるということは、
本番環境にソフトウェアをリリースし、
サービスが稼動しているということ。

つまり手前の状態では価値は無い。

価値を測る基準はリリースまでの期間となる。
もちろんミスやバグは許されない。
品質の高いものをリリースする必要がある。

品質を作りこみ、リリースまでの期間を短くするために、
ビルド・テスト・デプロイメントを自動化する。
当然最初の自動化するために痛みを伴うことになる。

自分たちはどこまでできているのだろうか?
皆さんの構成管理およびリリース管理の成熟度モデル(P.487)は、
レベルいくつですか?

(以下抜粋。○:完全抜粋、●:簡略抜粋)
○ケントが率いる統率されたチームには興味深い特徴がいくつもあったが、
 そのひとつがソフトウェアを毎晩本番にデプロイしているという事実だった。(P.22)

●アンチパターン:ソフトウェアを手作業でデプロイする(P.41)
 ・広範囲にわたる詳細な手順書を作成し、リリースに必要なステップを記述する。
  また考えられる間違いについても記述する。
 ・アプリケーションが正しく動作していることを確認するために、
  手動テストに頼る。
 ・リリース当日にデプロイメントがうまくいかず、
  その理由を開発チームに対して頻繁に問い合わせる。
 
○大きな組織では、デリバリープロセスは別々のグループに分類されている。
 たとえば、データベース管理者、運用担当者、テスターなどだ。
 こうしたサイロをまたいで協力しあうコストは膨大で、
 申請書地獄のせいでリリースが遅くなってしまう。
 このような場合、開発者やテスターそれに運用担当者はデプロイメントを行うときに、
 常に申請書を提出しあうことになる(あるいはメールを送りあうことになる)。(P.45)

○ストレスを軽減するための鍵はこれまで説明してきた
 ある種の自動デプロイメントプロセスを準備することだ。
 そしてそのプロセスをこまめに実行し、
 万が一最悪の事態が起きても変更前の状態に戻せる筋書きをと唱えておくのだ。
 初めて自動化するときには、痛みを伴うことになる。
 しかし、そのうち間単になっていき、
 プロジェクトやあなた自身が受け取れる恩恵は計り知れないくらい大きくなるのだ。(P.58-59)

○テストが苦痛を伴うプロセスで、
 リリースの直前に行われているのであれば、
 最後になってやるのをやめよう。(P.64)

○非常に奇妙でありながら多くのソフトウェアプロジェクトに共通して見られる性質がひとつある。
 それは、開発プロセスの長い間アプリケーションが動く状態にな、というものだ。(P.95)

○高品質を実現するために、大人数での調査に頼るのをやめよ。
 まずはプロセスを改善し、本番の品質を作りこめ。(P.127)

●デプロイメントパイプラインを実装する(P.180
 ・コードがコンパイルできる
 ・コードは開発者の期待通りに動く。
  なぜなら、ユニットテストを通っているから。
 ・システムはユーザの期待通りに動く。
  なぜなら、受け入れテストを通っているから。
 ・コードには適切なコンポーネントがそろっている。
  なぜなら、デプロイできるから。
   ↓ 実装する。
 1.バリューストリームをモデル化して、動くスケルトンを作成する。
 2.ビルドとデプロイプロセスを自動化する。
 3.ユニットテストとコード解析を自動化する。
 4.受け入れてストを自動化する。
 5.リリースを自動化する。

○ソフトウェアデリバリープロセルにとって、
 最も重要なグローバルメトリクスは、
 リサイクルタイムである。(P.186)

○受け入れてストの自動化をあきらめたチームでは、
 はるかに重い負荷がテスターにかかることになる。(P.244)

○自動テストを新しくはじめた人は、
 コードをテストしやすくするためには設計アプローチを変える必要があることが気づく(P.262)

○細かい効率化については忘れることだ。
 97%ぐらいの状況がそうだろう。
 早まった最適化は諸悪の根源である。
 しかし、重要な残り3%について見逃してはいけない。
 良いプログラムはそんな論法では納得せず、
 問題のコードを注意深く吟味するだろう。
 しかし、それができるのは問題のコードが特定できてからである。(P.285)

○更新するかしないかを決めるために必要な情報が何も与えられないまま、
 判断を迫られているようなものだ。(P.327)

○悲観的ロックシステムのゆーざはこんな心配をしているらしいという話を聞いた。
 「楽観的ロックシステムのユーザは、
 いつもマージ時の衝突の解消に時間を取られているのではないか」
 あるいは「自動マージのせいで実行できないコード
 やコンパイルの通らないコードができあるのではないか」
 といった心配である。
 実際のところ、そんな心配は杞憂ににすぎない。
 マージ時の衝突は確かに発生する。
 大規模なチームならかなりの頻度で発生するだろう。
 しかし、通常はそのほとんどすべてが数秒からせいぜい数分で解決できるものだ。
 もしそれ以上時間がかかることがあるとすれば、
 それは先ほどの説明した指針に従わずに
 コミットの頻度を十分上げなかったときぐらいだろう。(P.453)

コメント

このブログの人気の投稿

Excelのマクロの差分もGitHubみたいに見たいよね

なんやかんやでまだ残っているExcelマクロ。修正したはいいが、差分が・・・。 Google先生に聞いてみるとWinMergeでできるらしいが、なぜかうまくいかない。 そう、WinMergeもExcelもバージョンが新しくなっていたのでうまくいかなかったみたい。 前提は Excel 2013 WinMerge 2.14.0-jp63 over です。 以下差分を確認するための手順です。 WinMerge をインストール ここから WinMerge の2.14.0-jp-63 より新しいバージョンをダウンロード 画面に従ってぽちぽち押していけばいい。 ただし・・・このときに必ずカスタムインストールで プラグイン にチェックを入れること!!(このプラグインを利用します) WinMerge のプラグインの設定変更(やらなくてもOK) WinMerge を起動 プラグイン → プラグインの設定 → CompareMSExcelFiles.sct をダブルクリック ”ワークブックの情報を複数ファイルに展開する” にチェックを入れる Excel の設定変更 ファイル → オプション → セキュリティセンター → セキュリティ センターの設定 ボタンを押下 マクロの設定 を選択 ”VBA プロジェクト オブジェクト モデルへのアクセスを信頼する” にチェックを入れる WinMerge で差分を表示する WinMerge を起動して、比較したいファイルを二つ選択する プラグイン → 展開プラグインの選択 → ファイル展開プラグイ に CompareMSExcelFiles.sct を選択して OK ボタンを押下する 各シートの差分と合わせて、*.bas の形式でマクロの差分が表示される(はず)

間違ったフォーマットのプログラムじゃないんだけど

以下エラーに対し、 ファイルまたはアセンブリ 'SSPI'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。 以下環境で対応した話です。 VisualStudio2012(C# ASP.NET MVC4.0) IIS7.5 とあるところのdllを使用中 ASP.NETをIISに発行しようとしたら、上記エラーが発生。 他のプロジェクトでは問題なく発行できているのに、 何かと思ってみたら、google先生に尋ねてみると、 DLLファイルの対象プラットフォーム(32bit/64bit)が異なる とのことでした。 このサイトでは対処方法として、 運用環境のプラットフォームに合わせ、適切なランタイムファイルを配布してください。 と記載されていますが、今回の私のようにとあるところのdllを使用している場合などは、 そうもいかない場合もあるでしょう。 そこでdllを変更できない場合には、 IISのアプリケーションプールの設定で、 32bitアプリケーションを有効化してあげることで対応できます。 以下手順です。 コントロールパネル → 管理ツール → インターネット インフォメーション サービス (IIS) マネージャー を起動します。 変更したいアプリケーションを右クリックして、詳細設定を選択します。 32ビットアプリケーションの有効化をTrueに変更します。 もう一度発行します。 ここまでです。 簡単だけど知らないとなかなかはまるかなって気がしますね。 独特のくせなのかもしれません。 そして、次なるエラー発生中です・・・。

SQLServer2008でのトランザクションログの切り捨て方

SQL Server 2008でとあるDBのトランザクションログが一杯に。 BACKUP LOG DatabaseName WITH TRUNCATE_ONLY を使ってトランケートしようとしたら、 'TRUNCATE_ONLY' はBACKUP オプションとして認識されません。 との冷たい返事。2008で廃止されていたのを忘れていた。 SQL Server 2008 で廃止されたデータベース エンジンの機能@MSDN そこでヌルデバイスを使用してバックアップを取得する方法で、切り捨てを試みる。 BACKUP LOG DatabaseName TO DISK = ‘nul’ GO するとまた冷たい返事。 現在、データベースのバックアップが存在しないので、BACKUP LOG を実行できません。 2008では過去にフルバックアップを取得しておかないと、ランザクションのバックアップが取得できないことを忘れてた。てなわけで、まずはデータベースのフルバックアップを取得して、 BACKUP DATABASE DatabaseName TO DISK = ‘nul’ GO もう一度トランザクションのバックアップをして、やっと切り捨てれた。最初から単純にしておけばよかった・・・。