Telerikのテクニカルエバンジェリストで,Microsoft C# MVPの Chris Eargle 氏が先日,開発者のための Life Saving Tips(救命術) をいくつか公開してくれた。最初のアドバイスは,奇抜なコード構造を使わない,というものだ。ソフトウェアの正常な動作を妨げるようなバグの所在を突き止めるのが難しくなってしまう。
次に呼びかけるのが,プロフェッショナルなバージョン管理の必要性だ。これがあれば,開発者は何の苦労もなく,以前のバージョンのソースコードを取り戻すことができる。ソースを管理するサーバは別のシステム上で稼働させること,という指摘も忘れていない。
バックアップの作成と保存,復旧の重要性は,誰もが認めるところだ。氏はこれを3つめのTipsとして挙げて,定期的なバックアップスケジュールに従うように開発者仲間に勧めている。
さらにそのバックアップは,オリジナルのサーバとは違う場所に保管する必要がある,と氏は言う。火災や自然災害がいつ起こるとも限らないからだ。その一方で氏は,バックアップをオンラインのファイルホスティングサイトに置くことに対しては,それに関する特有のリスクがあるとして反対の意見を持っている。(詳細は下記のインタビューを参照)
失ったソースを回復する手段として氏が挙げているのは,JustDecompile などの 逆コンパイラ を利用することだ。
"ソースと1対1の対応にはなりませんが,ゼロからやり直すことに比べれば,90%からスタートする方がよいでしょう。何と言っても,.dllや.exeからでもプロジェクトを生成することができるのですから。" と氏は付け加えている。
パフォーマンスの問題はさまざまな形や規模で現れて,ユーザに多くの時間を浪費させる,と氏は言う。JustTraceなどの プロファイラ を導入して,最適化するべきターゲットの絞り込みを行うのがよいだろう。
その他にも,時間のかかる可能性のある処理には非同期呼び出しを使用してユーザインターフェースのロックを回避すること,管理外になったリソースの解放にfinallyブロックやdisposableパターンを活用すること,などを話題にしている。メモリリークの理由の特定に困っているのなら,サードパーティ製のメモリプロファイラを使って根本原因を見つけだすのがよいだろう。
大変な悪天候のため出社していなかったにも関わらず,氏はInfoQレポータの Anand Narayanaswamyとのチャットに応じてくれた。
InfoQ: あなた自身は,毎日のプログラミング作業で自分のTipsに従っていますか?
プロフェッショナルなソフトウェアに関して言えば,自分の提案に従っています。自分自身のためや,技術的なデモンストレーション目的でコードを書くようなプロジェクトでは,そこまで厳格にはなれません。ですから,このような方法で確かめています。
InfoQ: 無停止バックアップサービスは開発者に推奨できるものでしょうか?
バックアップサービスにはいろいろありますが,どれを選ぶべきかは,インフラストラクチャ上の要請によって違います。例えば私は,個人的なソースリポジトリの管理には有償の GitHub アカウントを使用しています。私のニーズにぴったりなのです。保険会社の仕事をするときには,サーバの内容をオンサイトでテープにバックアップして,以前のバックアップはオフサイトの物理ストレージサービスに保存します。この方法ならば,データの復旧が必要なときも短時間で可能ですし,物理的な災害からデータを保護することもできます。
あらゆるサイズのビジネスに対応可能な,本当にプロフェッショナルなデータストレージサービスと呼べるものも,いくつか存在します。次のセッションでは,もう少し小規模なサービスについて取り上げてみたいと思っています。
フォールトフリーであるためには,バックアップ形式の検討にも注意が必要です。リスクには明白なものと隠れたものがあります。許容されるコストの範囲内において,リスク全体を所定のレベルに抑えられるように注意しなければなりません。隠れたリスクの例をあげてみましょう。かってオンラインバックアッププロバイダとして,MegaUploadをたくさんの人たちが使用していました。MegaUpload(現在は MEGA)が著作権乱用の疑いで政府によって停止されたとき,多くの人たちは,自分たちの合法的なデータまで使えなくなることを予想してはいませんでした。さらに悪いことに,政府がデータの解放を拒否したため,このシステムのみに情報を保存していた人たちは,データをすべて失うはめになったのです。
InfoQ: バックアップストレージとしてSkyDriveを使うことについては,どう思いますか?
SkyDrive のようなクラウドストレージサービスは,データ量の少ないショップには最適でしょう。SkyDriveは提供する最大容量が100GB(有償の場合)ですので,企業には不向きでしょうね。
InfoQ: あなたはTelerikで働いていて,JustDecompileを推奨していますが,その他にお勧めの逆コンパイルツールはありますか?
他の.NET逆コンパイルツールは,私が関係しているものとは競合製品ということになりますから,それを推奨することは,私にとって利害上の対立になってしまいます。
InfoQ: Visual Studio 2012を古いコンピュータにインストールした場合,パフォーマンス上の問題があると思いますか?
私の経験では,以前のバージョンよりもVisual Studio 2012 の方が,古いコンピュータ上でのパフォーマンスに優れています。
InfoQ: 最近の開発者は,サードパーティのツールを使ってアプリケ-ション開発を行うことが多くなりました。.NETコンポーネントツールを選ぶ上で従うべきTipsとしては,どのようなものがありますか?
まず何よりも,生産性を向上してくれるツールを選ぶべきです。これは機能やユーザエクスペリエンス,現在の開発環境を(目立ちすぎるなどの理由で)阻害しないかなど,多くの特性によって影響されます。コンポーネントの選択でも同様ですが,重視すべき点が開発者への影響から,ユーザへの影響に移っている部分が違います。コンポーネントを選ぶ上で,技術的な問題もあると思います。私はもっぱら ASP.NET MVC を使ってウェブサイト開発を行っているのですが,ASP.NET AJAX RadControl よりも Kendo UI の方がはるかに使いやすいと思っています。しかし ASP.NET WebFormsを使っている人ならば,前者の方がよいと感じるかも知れません。どちらの環境でどちらを使っても構いませんが,コードは保守しやすくなければなりません。そのためには,クリーンな実装ということに大きな意味があります。