# 目次
# はじめに
以下の記事は,オライリージャパン社から出版された
『プログラマが知るべき97のこと』
の中から1つのエッセイを選び,
そのエッセイを,クリエイティブコモンズ3.0の条件の元で転載したものです.
Creative Commons ― 表示 3.0 アメリカ合衆国 ― CC BY 3.0
もし,他のエッセイを読みたい場合には,
記事末のリンクを辿るか,
以下のリンク先のTwitterアカウントのつぶやきからお探し下さい.
Twitter Account: 97 Things Bot
10. ツールの選択は慎重に ジョヴァンニ・アスプローニ (Giovanni Asproni):『プログラマが知るべき97のこと』
昨今では,
アプリケーションを全くのゼロから開発することは稀です.
通常は,既存のツール
(コンポーネント,ライブラリ,フレームワークなど)
を組み合わせて作ります.
それは次のような理由です.
[1]
アプリケーションの規模は以前に比べて大きくなり,
複雑で高度になってきている.
対照的に,開発にかけられている時間は短くなる一方である.
プログラマの時間と能力は,最大限有効に活かす必要がある.
つまり,インフラのコードよりも,
ビジネスドメインのコードに,
時間と能力をできる限り振り向けるべきである.
[2]
広く使用されているコンポーネントやフレームワークの方が,
自前で開発しているものに比べ,
バグが少ない傾向にある.
[3]
多くの高品質のソフトウェアを
Webから無料で入手できるようになった.
これは,開発コスト削減につながるだけでなく,
然るべき知識と技術を備えた技術者と出会う機会を増加させた.
[4]
ソフトウェアの開発や保守は多くの人でを要し,
人件費のかかる仕事である.
一般的に言って,
新しいものをゼロから作るよりは,
すでに存在するものを買った方が安く上がる.
ただ,既存のツールを適切に組み合わせることは,
実は容易なことではありません.
事前に十分な検討が必要でしょう.
その際には,以下のような事柄に留意すべきです.
[1]
コンテキストに関する前提条件はツール毎に異なっている.
例えば,
どのようなインフラ,制御モデル,データモデル,通信プロトコル
などを前提条件とするのかが,ツール毎に異なる.
注意しないと,
アプリケーションと前提条件が一致しないツールを使ってしまう.
そのような不一致があると,
対処策,回避策を数多く講じる必要が生じ,
コードが必要以上に煩雑になってしまう.
[2]
ツールによってそのライフサイクルは異なる.
利用しているツールを1つだけアップグレードするというのは,
極めて困難で長い時間を要する.
機能の追加,設計の変更,
あるいはバグ修正などによって,
他のツールとの齟齬が生じる可能性がある.
利用するツールの数が多くなればなるほど,
この問題は深刻になる.
[3]
ツールによっては,
複雑な設定作業が必要になる場合がある.
いくつものXMLファイルを使用した設定が必要なツールも多い.
そういうツールは,
十分に注意しなければ,
すぐに制御不能に陥る危険性がある.
多数のXMLファイルで設定を行うツールばかりを
組み合わせてアプリケーションを作ると,
結果的に大部分がXMLで構成されていて,
プログラミング言語で書いたわずかな量のコードを加えただけ,
というようなアプリケーションが出来上がってしまうこともある.
設定作業は極めて煩雑になってしまい,
アプリケーションの保守や拡張も困難になる.
[4]
特定のベンダのツールに依存すると,
いわゆる「ベンダロックイン」に陥ってしまう.
そうなると,保守性,パフォーマンス,拡張性,価格などに
制約が生じてしまう.
なぜなら,ベンダの動向にどうしても影響されるからだ.
[5]
フリーソフトウェアを利用するからといって,
すべてが無料になるわけではない.
商用サポートを受ける場合には,
フリーソフトウェアだからと言っても,
サポート費用が安いとは限らないのである.
[6]
ライセンスに関する条件の確認も重要で,
それはフリーソフトウェアを利用する場合にも当てはまる.
企業によっては,GPLソフトウェア*1の利用が認められないこともある.
GPLソフトウェアの派生物は必ずソースコードと共に
配布しなければならないという
ウイルスに例えられる条項が問題になるからである*2.
ここまで挙げてきたような問題の発生を防ぐために,
私は,
「まずは最低限のツールだけを導入する」
という戦略を採っています.
よく検討して,
どうしても必要だと判断したものだけに絞り込んで導入するのです.
通常,
初期段階で重要視するのは,
「インフラ関連の低水準プログラミングの手間を省き,
問題の発生を防ぐ」ということです.
例えば分散アプリケーションを開発するなら,
直接ソケット*3を扱うのではなく,
ミドルウェアを使用するということです.
その後も必要になったタイミングで
新たなツールを追加していきます.
新たにツールを追加する際には,
ツールをビジネスドメインオブジェクトから隔離するための
インタフェースやレイヤを導入すれば,
ツールの変更が必要になった時の手間が最小限に抑えられるでしょう.
最後に,
ここまで話してきたアプローチには,
良い副作用があります.
当初の予測よりも導入するツールが少なくて済み,
アプリケーションも肥大化せずに済むのです.
■著者データ
[ジョヴァンニ・アスプローニ (Giovanni Asproni)]
英国在住のフリーの開発者,コンサルタント.
これまでいくつかの企業に勤務し,
アーキテクト,チームリーダー,トレーナー,メンターなど
様々な仕事を経験してきたが,
心はいつもプログラマであり,
コードはシンプルであるべき,という信条も常に変わらない.
通常の業務の他,
カンファレンスでの講演なども頻繁に行なっており,
London XPDayカンファレンスの委員会メンバにもなっている.
また,ACCU,AgileAlliane, ACM,IEEEコンピュータ・ソサエティのメンバでもある.
関連記事
1.分別のある行動 Seb Rose:『プログラマが知るべき97のこと』 - MY ENIGMA
2.関数プログラミングを学ぶことの重要性 Edward Garson:『プログラマが知るべき97のこと』 - MY ENIGMA
3.ユーザが何をするかを観察する (あなたはユーザではない) Giles Colborne:『プログラマが知るべき97のこと』 - MY ENIGMA
4.コーディング規約を自動化する Filip van Laenen:『プログラマが知るべき97のこと』 - MY ENIGMA
5.美はシンプルさに宿る Jorn Olmheim:『プログラマが知るべき97のこと』 - MY ENIGMA
6.リファクタリングの際に注意すべきこと Rajith Attapattu:『プログラマが知るべき97のこと』 - MY ENIGMA
7.共有は慎重に Udi Dahan:『プログラマが知るべき97のこと』 - MY ENIGMA
8. ボーイスカウト・ルール Robert C. Martin:『プログラマが知るべき97のこと』 - MY ENIGMA
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。
*1:GNU (General Public License)は,LinuxやMySQLをはじめとするフリー・ソフトウエアが採用するライセンス方式. ここで,フリー・ソフトウエアの「フリー」は「無料」という意味ではなく,オブジェクト・コードの保有者がソース・コードに自由にアクセスし複写できるという意味である。GPLは,ソフトウエアが「フリー」であり続ける仕組みをコードに植え付けるためのライセンス形式といえる。 GPL - 日経エレクトロニクス - Tech-On!
*2:これはあまりGPLに関してフェアでない記述なので,GPL誤解などというキーワードで調べて見ることをオススメする by 監修者.
*3:ソケット(英: Socket)とは、BSD系UNIXを起源とするAPIであり、C言語によるアプリケーション開発でのプロセス間通信、特にコンピュータネットワークに関するライブラリを構成する.ソケット (BSD) - Wikipedia