2012年8月26日日曜日

ジョエルテスト①

「ジョエルテスト」は、Fog Creek Software社の設立者Joel Spolsky氏が提唱する、円滑なソフトウェア開発を行うために必要な12個のチェック項目です。

Joei Spolsky氏は、Yale大学にてコンピューターサイエンスの学士号を取得したあと、Microsoft社にてExcelの開発チームとしてVBAを設計した経験があります。
自身のWebサイト「Joel on Software」は非常に多くのエンジニアに広く知れ渡っており、日本でも翻訳された書籍がオーム社より発刊されています。

ジョエルテストの12項目は、以下のとおりです。

  1. ソース管理してる?
  2. ワンステップでビルドできる?
  3. デイリービルドしてる?
  4. バグデータベースはある?
  5. 新しいコードを書く前にバグを直してる?
  6. アップデートされているスケジュールがある?
  7. 仕様書はある?
  8. プログラマは静かな環境で作業してる?
  9. 手に入る最高のツールを使ってる?
  10. テスタはいる?
  11. 採用面接のときにコードを書かせてる?
  12. ユーザビリティテストはしてる?

ジョエルテストは、ソフトウェア開発を行う上で非常に有用なチェック項目なのですが、私が今までに携わった開発チームでは、これらの項目をすべて満たされたことは一度もありません。





2012年8月25日土曜日

iOSとAndroid - (途中)

私の携帯電話は、Samsung社のGalaxy s(Android)です。
これ以外に、電子書籍を読むときやゲームをするときなどにApple社のiPod Touch(iOS)を利用しています。

この2種類のOSを利用して私が感じた感想を、簡単に書いてみます。
スマホ選びなどの参考になれば幸いです。

まず、Androidについて。
Androidは、私の感覚では若干セキュリティの面において不安があります。
Androidアプリをダウンロードするためにもっとも利用するであろうAndroidマーケットには、ウィルスとよばれてもいいすぎではないようなアプリまでダウンロードできてしまうためです。
実際、Androidマーケットにアプリを登録する際、アプリの審査はほとんど行われていないのでは、とのうわさです。
しかしその反面、Androidマーケットにアップされているアプリは、実に多種多様です。
マーケットが自由なため、アプリのなかには中国サイトから音楽ファイルを検索してダウンロードするためのものまであります。
また、Androidマーケットだけでなく、その他のサイトからでも自由にアプリをダウンロードしてインストールすることもできます。

次に、iOSについて。
Androidと比べると、セキュリティの面ではとても安心できます。
iOSのためのAppストアでは、アプリをアップする際に非常に厳密な検査が行われるためです。
Androidマーケットのように、不正アプリがAppストアにアップされるといったことはまずないでしょう。
ただAndroidと違い、Appストア以外からのアプリのダウンロードおよびインストールは、原則不可能です。
そのために自由度が低く、Androidと違って上記のような違法スレスレの「怪しい」アプリをダウンロードすることはできません。


2012年8月19日日曜日

コメントのつけかた

先日偶然みつけた10年前に私が書いたプログラム(こちらを参照)をみていて思ったのですが、コメントのつけかたがまったくなっていません。

プログラム初心者のうちは、「なぜコメントをつけるのか」といった基本的なことが案外理解できていないようです。
「プログラムを読みやすくするためにコメントをつける」とだけ理解していても、実際はそれができていないのです。

たとえば、10年前に私が書いたプログラムには、こんなところにもコメントがふられていました。

'変数iに1を加算する
i = i + 1

変数iに1を加算することなど、コードをみればすぐわかります。
このような行にコメントをふるのは、まったくのナンセンスです。
当時の私は「とにかくコメントをつけることが大事」だと勘違いしていたようで、このような無駄なコメントがほとんどの行にふられており、これではいたずらにソースコードの行数を増やすだけです。

コメントは、コードをみただけではわかりづらいと感じた箇所にふるのです。
たとえば、関数やメソッドの定義まえにその関数やメソッドがどのような処理を行うかを記述することにより、その内容をソースコード上で読み解く必要がなくなります。
その際、
  • どのようなパラメータを指定する必要があるのか(データ型が存在するプログラミング言語の場合は、パラメータのデータ型も含む)
  • その関数もしくはメソッドの戻り値は何か(データ型が存在するプログラミング言語の場合は、戻り値のデータ型も含む)
の2点は必ずコメントに記述します。


2012年8月16日木曜日

伽藍とバザール②

この論文を読んで、「自分が開発しているソフトウェアのソースコードも公開しよう!」と思った人は多いはず。
実際、私もその一人です。
ソースコードを公開した場合のメリットについて詳しく知りたい場合は、Eric S Raymond氏の他の2つの論文(ノウアスフィアの開墾、魔法のおなべ)も併せて読むことをお勧めします。

ネットスケープ社にいたっては、この論文の影響を受け、自社で開発していたネットスケープ・コミュニケーターをオープンソース化することを決意しました。
Mozilaプロジェクトとして発足したネットスケープ・コミュニケーターのオープンソース・プロジェクトは、しばらくの間はまったく結果を残せないままでした。
それにいらだった当時Mozilaプロジェクトのスタッフとして勤務していたJamie Zawinski氏は、Resignation and Postmortem(辞職そして追悼)という手記を残してネットスケープ社を退職します。
(この手記の訳文は、http://www.bekkoame.ne.jp/~kmakoto/opencom/Jamie-san.htmlに掲載されています)
しかし、それからしばらく後、ついにMozilaプロジェクトのブラウザ「Firefox」は、本格的にMicrosoft社のInternet Explorerのブラウザ市場独占を脅かすほどになるのは承知のとおりです。

ちなみに、私が個人で開発した「ちゃち」なソフトのソースコードを公開したことによるメリットは、サイト閲覧者の増加でした。
サイトへのアクセスを解析すると、私のサイトへの検索キーワードには、「サンプル」や「ソースコード」といった文言が含まれている場合があります。
その結果、さまざまな方からソフトウェア開発の手助けをしていただけるようになりましたし、サイト運営などについてもご協力いただけるようになりました。


2012年8月15日水曜日

伽藍とバザール①

Linuxは破壊的存在なり。

Eric S. Raymond氏の論文、「The Cathedral and the Bazaar」(伽藍とバザール)の書き出しです。(山形浩生氏による訳文。翻訳文の原文は、http://cruel.org/freeware/cathedral.html。原文は、http://www.catb.org/~esr/writings/cathedral-bazaar/。)

私にはこの論文の書き出しが妙に格好良く感じられ、拙著のなかで「破壊」という単語を大した意味もなく使用しています。


「これならわかるSQL入門の入門」(翔泳社、2007年)
SQL(Structured Query Language:エスキューエル)は、とても強力な言語です。
SQLを使えば、会社の売上実績データや全社員の毎月の給与データなど、コツコツと蓄積されてきたデータを一瞬にして削除したり、一部のデータを改ざんしたりすることができるんです。
(もっとも、対象となるデータベースにアクセスできることが条件ですが・・・)
そのため、うっかり大切なデータを破壊してしまわないように、SQLはきちんと基礎から学ぶ必要があります。
本書は、この破壊力抜群の言語を、SQLの知識が全くない初学者に対して1から学習できるように著されています。

「Windows自動処理のためのWSHプログラミングガイド」(ソシム、2009年)
WSHは、Windowsが標準で保持している機能です。開発環境に複雑な設定は不要です。新たにソフトをインストールする必要もありません。今お使いの、Windowsパソコンだけで十分です。メモ帳でも開発ができます。にも関わらず、とても強力な言語なのです。使い方を一歩間違えば、大切なファイルが一気に削除されてしまったり、特定の相手にメールを何千件も勝手に送り続けてしまうなど、意図しなかった動作がまるでウィルス被害にあったかのような事態を発生させかねません。そのくらい、破壊的な言語なのです。

さてこの論文、Linuxのような精密かつ大規模なソフトウェアがオープンソースで開発できるのか、を論じた文章で、著者のEric S. Raymond氏自身、「Fetchmail」というオープンソースを開発してオープンソースの開発スタイルを論文のなかで再検証しています。

オープンソースの原典ともいえる有名な論文で、この論文を知らないプログラマーはもぐりとも言えるほどです。



2012年8月14日火曜日

10年前のソースコード②

そのジャンクアプリのソースコードですが、実際のところ、最後まで書きあげたものは3分の1程度です。
ほとんどがまともに動かず、ものによってはコンパイルすらとおりません。
ひどいものは、何がしたかったのかよくわからないものまであります。
どうやら、私は典型的な「熱しやすく冷めやすいタイプ」のようです。

ただ、その性格とは反するようですが凝り性でもあり、ソースコードには今も引き継がれている異常な神経質ぶりがすでにこのころから表れています。
たとえば、開発環境によって自動的にインデントされた際にできた空白は、すべてきれいに削除されていました。
あるソースコードには、なんとプログラム1行1行すべてにコメントがふられています。

ここまで神経質に数カ月もかけて書いていたソースコードを、ふと熱が冷めてしまって放置してしまうような性格なのですが、それでもいかちソフトウェアのサイトを10年以上も更新し続けることができたのは、案外奇跡といえるかもしれません。


10年前のソースコード①

先日、古くなった外付けハードディスクを整理していたところ、10年以上前に趣味で開発したジャンクアプリのソースコードを見つけました。
懐かしい・・・
しかも、結構な量です。

当時の私が書いたソースコードを眺めてみると、やっぱり恥ずかしくなるくらい技術力が低く、とても一般公開できるようなレベルではありません。
ただ、アイディアだけは(自分で言うのもなんですが)当時としてはなかなか良いものがありました。

たとえば、携帯電話の待ち受け画像を作成するアプリ。
DOCOMOはMOVA全盛期の時代で、ソースコードのいたるところにN503iだのP504だのと書いてありました。
スクリーンの解像度を機種によって判別するためです。
アプリのしくみは、アプリに取り込んだ画像を指定した機種の解像度にサイズ変更し、それをいかちソフトウェアが使用しているサーバーにアップ。
それを各携帯端末からダウンロードしてもらうようになっています。

他には、次のようなアプリの残骸がありました。

  • キーボードの繰り返し操作を記憶させておくことで、入力業務を自動化するためのアプリ
  • 郵便番号データベースをSQL Serverに自動作成するためのアプリ
  • 指定した時刻に指定したアプリを実行するためのアプリ
  • メールボムといわれるタイプのコンピュータウィルス(笑)

これだけのアプリを暇つぶしに書いていたとは、当時の私はよほどソフトウェア開発が好きだったのか、それともよほど暇だったのか。
いずれにせよ、このとき書いたプログラムは技術力向上のために十分役に立ったことだけは確かです。


ブログを開設しました


フリープログラミング工房 いかちソフトウェア のブログを開設しました。

ブログ開設の目的は、より多くの人に「いかちソフトウェア」のサイトを知っていただき、ご利用いただくことです。
いかちソフトウェアのサイトは、以下のURLをクリックするとご覧いただけます。
http://www.ikachi.org/

今までは上記サイトがメインでしたが、サイトはコンテンツがそろわないと更新できないため、更新頻度が少なくなりがちでした。
そのため、今後はこのブログを併設して、いかちソフトウェアの開発状況などをこまめに公開する予定です。