ビルド時間の短縮 - ccache

何をするにも時間は見つからないだろう。時間が欲しければ自分で作ることだ。
チャールズ・バクストン
ソフトウェアをはじめ開発プロジェクトの永遠の課題「いかに早く仕上げるか」。プロジェクト管理から設計・開発手法まで、その観点は多岐にわたりますが、結局のところ「いかに無駄を省くか」という点につきます(仕様を変えるという方法もありますが・・)。今回は、大規模ソフトウェア開発におけるビルド時間待ち時間の無駄を削減するccacheというコンパイラキャッシュプログラムを紹介します。

コンピュータの処理速度が向上したとしても、それと同等、時にはそれ以上にソフトウェア規模が大きくなってきており、そのビルド時間は膨大です。そして、開発の過程では、ソースコードのコンパイルは何度も繰り返されるものであり、この時間を抑制することは非常に価値があります。いや、今の規模ならまあ待てる範囲で問題ないよ、と言われる場合もありますが、そのような短いコンパイル時間ほど、さらに短くなることによって得られるこ効果が大きいことがあります。1時間も待たされると分かっていれば他の事をしようとしますが、中途半端な待ち時間は単に浪費されることが多いからです。

ビルドツールの基本と言えば、make。適切なMakefileを書けば(あるいは生成するようにしておけば)、不要な再コンパイルを抑制することができ、ビルド効率が改善されます。しかし、いくつかのソースファイルだけのコンパイルでも、それなりの時間がかかることもあります。数十行といった小さなソースファイルでも#includeステートメントによって数珠繋ぎにヘッダファイルがインクルードされていたりすることがあるため、プリプロセッサによる構文解析、及びそれによって増大した大きなソースファイルのコンパイルが必要となることがあるのです。

とはいえ、#includeの部分は開発中そういじるものではありませんので、毎回構文解析やヘッダ部分のコンパイルを行うのは考えても見れば非常に無駄な気がします。ここに目をつけたのがコンパイラキャッシュプログラム ccacheです。

詳しくは、IBMの解説ページが詳しいのでそちらを参照いただきたいのですが、動作としては、一度コンパイルした結果をキャッシュし、次回コンパイル時に部分的にキャッシュが再利用可能な部分をコンパイルせずに、単にキャッシュで置き換えるようにするというプログラムです。使い方もいたって簡単で、通常のコンパイルコマンドにccacheと書くだけです。Makefileを使うなら、
CCACHE = /usr/local/bin/ccache
CC = $(CCACHE) gcc
等と通常のgcc等のコマンドをccache gcc等置き換えるだけです。

実際に使ってみると、二回目以降のコンパイルが驚くほど早くなっているのが実感できます。キャッシュプログラムなので、オープンソースソフトをダウンロードしてmakeするような一度きりのビルドには効果を発揮しませんが、開発中何度も同じツリーをmakeするような場合には、非常に効果的なプログラムです。

※私は使ったことはありませんが、gccに特化したcachecc1というものもあります。

【関連リンク】
ccacheを使って共同作業のビルド時間を改善する (IBM dW)
cachecc1: a gcc cache
Manpage of Make

【関連書籍】
GNUソフトウェアプログラミング―オープンソース開発の原点オライリー・ジャパン
GCC GNU C Compiler―Manual & Reference
make 改訂版オライリー・ジャパン
GNU Autoconf/Automake/Libtool

ルールを破る時のルール

人間の自由を奪ったものは、暴君でも悪法でもなく、社会の習慣である。
以前、はてなの伊藤さんのブログ(naoyaのはてなダイアリー)でエアコンの設定温度を例に「ルールが一人歩きする」という記事がありました。この中で、満員の図書館でエアコンの設定温度を下げてくれというお願いに対し、設定温度は決められているでと言って下げてくれなかった、という話がとりあげられています。「手段」であるはずのルールが「目的」になってしまった典型的な例です。まさに「ルールの一人歩き」です。

さて、これはルールに盲従してしまっている例、言い方を変えると間違った「ルールの守り方」をしている例です。しかし、逆にルールの間違った「ルールの破り方」もあります。最近ちょうどそのような経験をしたのでちょっと書いてみます。

ソフトウェア開発でいうルールと言えば、コーディング規約等もプログラミング上のものから、リーリス方法等を規定したプロジェクト管理上のものまで様々あります。
プログラミング言語の文法もルールのようなものですが、これは簡単には破ることができません。それに対し、コーディング規約やリリースルールのようなものは開発者が無視しようと思えばいつでも無視できるようなものです。そうなると大抵の人はなまけがちですが、中には、ルールだからといって必要以上の努力を払ってまでそのルールを遵守しようとする人もいます。このようなルールへの盲従は、その人が疲れるばかりでなくかえって迷惑なことさえあります。無駄な説明が多くて要点がわからない、コメントが多すぎてかえって読みにくい、ちょっとした変更なのに修正後のテストといってリリースがでない。。。等など。先のエアコンの設定温度と同じく、ルールの本来の目的が失われ、ルールを守ることが目標になってしまっています。

さて、このようなルールへの盲従は問題ですが、だからといって自由気ままにルールを破ったり無視したりしてはいけません。先の例のように、ルールに従うことは無駄な作業を発生させることがあります。しかし、それが本当に無駄かどうかは目的をよく考えた上で判断しなければなりません。タブ幅がなぜ決まっているのか、なぜドキュメントが必要なのか、なぜリリース前のテスト項目がこれだけあるのか。自分のポリシーと照らし合わせておかしいとかいうのは理由になりません。自分ひとりの開発では単なる足かせでも、複数人の開発では意味があるかもしれません。大抵のルールは局所最適ではなく全体最適のためにあります。勝手にルールを無視すると、他の人への影響があるかもしれません。

ルールの盲従も、ルールの無視も、本来ルールが何のためにあるのかを理解していないから起こります。必要なのはまずルールの目的を理解することです。また、ルールは目的ではなく手段なのですから変えることだってできるのです。ルールがおかしいと気付けば勝手に無視するのではなく、積極的に変えるよう働きかけるべきです。

赤信号だって一旦とまって左右確認して安全だと分かれば渡っても良いでしょう。しかし、信号「無視」はいけません。ルールを破るにもルールがあるのです。

【関連リンク】
ルールが一人歩きする - naoyaのはてなダイアリー

【関連書籍】
ライト、ついてますか―問題発見の人間学 ドナルド・C・ゴース G.M.ワインバーグ
仕事の哲学 P・F・ドラッカー
チェンジ・ザ・ルール! エリヤフ・ゴールドラット
まず、ルールを破れ―すぐれたマネジャーはここが違う マーカス・バッキンガム カート・コフマン
C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス

価値の定量化

どんなつまらないものでも、時期や状況によっては素晴らしく価値のあるものになります。そのときを見極めて活かしましょう。
ゲーテ
ものの価値というものは、それを必要とする人やその状況によって変わってくるものです。特に「情報」や「サービス」といった形のない物はそれが顕著です。Webコンテンツも、このような無形物から構成されるものなので、人によってその価値は変わってきますが、一般的な尺度で見た「価値」というものも存在します。今回はブログの価値について書きたいと思います。


My blog is worth $7,903.56.
How much is your blog worth?

1ヶ月程前に多くのブログで取り上げられていたブログの価値を計算してくれるサイト「Business Opportunities Weblog | How Much Is My Blog Worth」。当サイトも試しにやってみました。結果は右のBOX中の通り。日々変動していますが本記事執筆時点で、$7,903.56 (日本円で100万円間近!!)。まぁ、実際はそんなはずはないですが(^^;)

さて、このサービスでは、テクノラティAPIを利用して、各ブログの非リンク数を基に計算しているそうです。(詳細は絵文禄ことのはさんの記事が詳しいです。ちなみに絵文禄ことのはさんの結果は1億円over!)。Googleのpage rankと似たような考え方ですね。Google Page Rankの方は単なる数だけでなく、各リンク元のポイント値を重み付けしたものがベースになっているそうですが。

Webコンテンツの価値・重要度といったものを計るもとしては、被リンク数は確かに一つの尺度ですが、その他にもページのアクセス数や集計サイトへの逆リンクアクセス数が用いられることもあります。
アクセス数をもとにしたものとしては、Blog ranking.netのようなランキングサイト。これらはinframeタグ等を張ることでアクセス数を収集しています。
逆リンクアクセス数を利用したものとしては、本サイトも参加している人気ブログランキングあたりが有名どころでしょうか。逆リンクアクセス型は、必然的にランキングサイトに誘導されるのでランキングサイトの運営側にとっては最も都合が良さそうですが、ランキングに参加する側としては、これらはクリックしてもらう必要があるので、それなりに見える位置にリンクを配置する必要があります。丁度クリック広告のように本来のページの体裁を崩してまで、目立つ箇所にバナーを貼っているのを見かけると、ちょっと残念な気持ちになります。
ブログならではのものだと、トラックバックやコメントの数からランク付けを行っているサービスもあったりしますね。

最近では、検索エンジンで調べ物をするとブログの記事が数多く上位に入ります。勿論ブログにも有用な記事はたくさんあるのですが、単なる引用に終わっている記事や一行コメントの記事ばかりが上位に来ていることも多く、有用な情報の取捨選択が非常に難しくなってきています。信頼性の高い情報源としての書籍検索等(参考:ITmedia: 日本人のアタマを救え――書籍検索でネットに“知の信頼性”を)も出てきていますが、ネットにはネットの良さがあります。

情報の価値をどう判断するか。難しい問題ですが、これらからもますます重要になる問題です。いい案ないかなと考える今日この頃です。

【関連リンク】
Technorati JAPAN
絵文禄ことのは - このブログの価値は1億円?
Google の秘密 - PageRank 徹底解説
人気ブログランキング - プログラミング
blog ranking.net

【関連書籍】
踊るコンテンツ・ビジネスの未来
最新WebサービスAPIエクスプロ-ラ ~Amazon、はてな、Google、Yahoo! 4大Webサービス完全攻略
できる 100ワザ ブログ アフィリエイトも楽しめるアクセスアップの実践テクニック
アルファブロガー 11人の人気ブロガーが語る成功するウェブログの秘訣とインターネットのこれから
人気エントリ
最近の記事
本のおすすめ

4274065979

4844337858

482228493X

4904807057

4873114799


最近のコメント
Links
プロフィール
  • Author:proger
  • 組み込み関係で仕事してます
ブログ内検索