![]() | |||
Joel on Software このページは"ジョエル・オン・ソフトウェア
| |||
|
※新しい翻訳はJoel on Software Translation Projectにあります。 その他の "Joel on Software" の記事(日本語) |
Joel Spolsky ジョエル・スポルスキ 翻訳: Yasushi Aoki 青木靖 2001/1/27 私の家族がイスラエルで最初のIBM-PCを受け取ったのは、1982年のことだった。私たちは実際倉庫にまで行って、私たちのPCが港から運ばれてくるのを待ったのだ。 2つのフロッピーディスクドライブ、128Kバイトのメモリ、それに2台のプリンタ、高速でドラフトを出すためのドットマトリックスプリンタと、印刷中にマシンガンより大きな音を出すブラザー製の高品質印字用ディジーホイールプリンタを備えた完全装備バージョンを買ってくれるように、私はどうにか父を説得したのだった。 さて、BASICは子供向け言語で、スパゲッティコードを書いて脳みそをカマンベールチーズに変えてしまうということは「誰でも」知っていた。それで私たちは$600払ってIBM Pascalを買った。それは3枚組のディスクになっていた。コンパイラのパス1が最初のディスクで、パス2が2枚目のディスク、そしてリンカが3枚目のディスクに入っていた。私は簡単な"hello, world"プログラムを書いてコンパイルしたが、所要時間は8分だった。 うーん、ちょっとかかりすぎる。私は作業を自動化するバッチファイルを書き、このプロセスを7分半にまで短縮した。幾分かは改善されたが、いつも私を負かしたあの素晴らしいオセロプログラムのような長いものを書くときには、コンパイル待ちでほとんどの時間を過ごすことになった。「そうさね、」とプロのプログラマが私に言った。「僕らは腹筋台をオフィスに置いて、コンパイルしている間に腹筋するんだよ。プログラミングを2、3ヵ月もしていると、超人的な腹筋(killer abs.)が手に入るよ。」 ある時、Compas Pascalというおしゃれなプログラムがデンマークから登場し、フィリップ・カーンがそれを買い取ってBorland Turbo Pascalと改名した。Turbo Pascalは衝撃的だった。それはIBM Pascalにできることは基本的に何でもできたが、テキストエディタを含めて、 33Kほどのメモリで走らせることができた。これだけでも十分驚くに値するが、さらに驚いたのは、それが小さなプログラムを1秒未満でコンパイルできたという事実だった。それはまるで、聞いたこともない会社がビュイック・ルセイバーのクローンを作り、それが時速百万マイルで走り、アリが病気にならずに飲み干せるほどのガソリンで世界一周できるというようなものだった。 突如私の生産性は跳ね上がった。 私がREPループの概念について知ったのはそのころだった。REPとは"Read、Eval、Print"の意味で、これはLisp インタプリタがしていることだ: それはあなたの入力を読み(Read)、それを評価し(Eval)、そして結果を出力する(Print)。REPループの例を下に示した: 私が何かタイプすると、Lispインタプリタはそれを読み込み、評価し、結果を表示する。
もう少しスケールを大きくしてみると、コードを書いているときのあなたは、REPループのマクロバージョンであるEdit-Compile-Testループの中にいる。あなたはコードを編集し、コンパイルし、ちゃんと動くかテストする。 ここで肝心な点は、あなたがプログラムを書くときには、このループを何度も何度も繰り返す必要があることで、瞬時のコンパイルを上限とし、Edit-Compile-Testループが早ければ早いほどあなたの生産性は高くなっていくということだ。プログラマがすごく速いハードウェアを欲しがり、コンパイラ開発者が超高速Edit-Compile-Testループを実現するためにできることは何でもすることの、コンピュータサイエンス的な公式の説明がこれだ。Visual Basicはユーザが一行入力するごとに字句解析と構文解析を行うことで、最終的なコンパイルの超高速性を実現している。Visual C++はインクリメンタル・コンパイラ、プリコンパイル済みヘッダ、インクリメンタル・リンクによってこれを行っている。 複数の開発者とテスタのいるチームで働くようになると、あなたはさらに拡大された同じループに再び出会うことになる(フラクタルだ、すげえ!)テスタはコードのバグを見つけ、バグを報告し、プログラマがバグを修正する。テスタが修正バージョンのコードを手に入れるまでにどれくらいの時間がかかるか? 開発組織によっては、このReport-Fix-Retestループには2週間もかかり、それは組織全体が非生産的に運営されていることを意味している。開発プロセス全体がスムーズに実行されるようにするためには、このReport-Fix-Retestループを緊密にすることに集中する必要がある。 そのための良い方法のひとつはデイリービルドだ。デイリービルドは自動化された、毎日行われる、完全なソースツリー全体のビルドのことだ。 自動化 - (UNIXの)cron jobか(Windowsの)スケジュールサービスを使い、毎日同じ時刻にコードがコンパイルされるように構成するから。 毎日 - あるいはもっと頻繁に行う。継続的ビルドも魅力的ではあるが、すぐ後で述べるソース管理上の問題により、たぶんうまくいかないだろう。 完全 - たぶんあなたのコードには複数のバージョンがあることだろう。複数の言語、複数のオペレーティングシステム、上位バージョンに下位バージョン。デイリービルドではそれらのすべてをビルドしなければならない。すべてのファイルをスクラッチから、コンパイラの完璧ではないインクリメンタル・リビルド機能を使わずにビルドする必要がある。 以下にデイリービルドの利点をいくつか挙げよう:
以下にデイリービルドの手順を説明する。あなたにはデイリービルドのためのサーバが必要で、それはたぶんあなたが手に入れられる最速のコンピュータになるだろう。リポジトリ(ソース管理システムは使ってるんだよね?)から最新のソースコードの完全なコピーをチェックアウトし、出荷されるコードの各バージョンをスクラッチからビルドするスクリプトを書く。インストーラやセットアッププログラムがあるなら、それもビルドする。あなたが顧客に出荷するすべてのものがデイリービルドプロセスで作成される必要がある。それぞれのビルドを日付ごとのディレクトリに置く。スクリプトを毎日決まった時間に実行する。
さらに読み進めるのであれば:
この記事の原文(英語)は Daily Builds Are Your Friend です。 | ||
![]() ジョエル・スポルスキは、ニューヨーク市の小さなソフトウェア会社 Fog Creek Software の設立者です。イェール大学を卒業後、マイクロソフト社、Viacom社、 Juno社でプログラマとして働きました。 | |||
このページは著者の個人的な意見を掲載したものです。
All contents Copyright ©1999-2005 by Joel Spolsky. All Rights Reserved.