活動記録: 2007年7月アーカイブ
ふと思いついて、
WSHでWikiシステムを開発してます。
目的は、「会社の部署内での情報共有」。
イントラWebサーバを部署で自由に使えない会社って多いと思うので、結構需要あると思われます。
ポイントは、
・既存のWiki整形ルールを採用しない。
PukiwikiやPyukiwikiがキャズムを超えられない(=技術に詳しい人しか使わない)のは、あの整形ルールにあると思います。
WSH Wikiでは、ぜひとも人間にやさしくいWiki文法を採用したいと思っています。
Wikiが生成したHTMLビューと、もとの整形前テキストを見比べて、違和感がないシステムを提供するのが重要だと思います。
サーバ不要・インストール不要
PyukiwikiもMovableTypeもそうですが、CGIスクリプトをいじってFTPでアップロードしなきゃならないシステムというのは、それだけでキャズムを超えられない十分な要因になるのです。
また、個人でブログやWikiを立ち上げるよりも、部署で社内ブログや社内Wikiを立ち上げる方が何十倍も敷居が高いものです。特に非IT業界の大企業ではそう。社内Wikiなど夢のまた夢。
添付ファイル
大企業では、添付ファイルこそが情報共有のすべて(いや、8割?)といっても過言ではない。
Wikiよりもブログよりも何よりも、まずエクセルやパワポでファイルを作ってメールに添付することで仕事がまわる。この慣習にうまく応えることが重要。
ファイル/フォルダシステムを覆す
みんなWindowsのファイル/フォルダシステムを当たり前のように使っている。
はっきり言おう。フォルダなど必要ないと。
フォルダというシステムは、「ファイルは分類して整理しないといけない」という間違った考え方を人間に押し付ける。
フォルダにファイルを整理保存する行為は、情報を埋葬しているに等しい。
フォルダとは、情報の墓場である。
この週末、家に引きこもってWeb出勤簿の作成に熱中してました。
何でそんなものを作るのか?
会社の出勤簿(エクセル)って、毎日チマチマ入力するのめんどくさいし、何日分かまとめて入力しようとすると、数週間前のの出社退社時間を思い出すのが大変!
そこで考えたのが(たぶん誰でも思いつくけど)、ケータイから入力できるWeb出勤簿。
これだと、毎日帰りの通勤電車の中で入力すればいいので、出社退社時間を覚えてるうちに入力できるし、時間の節約になる。
なおかつ、ロジックが簡単なのでPerl/CGIの勉強にはもってこい。^-^
せっかくの久々のWebアプリ製作なので、いろいろと新しい技にチャレンジしてみました。
・Windowsローカルで開発・デバグ
Apacheを立ち上げてCGIを手元のPCで動かしてみました。
さらに、ブラウザでテストする前にコマンドラインでスクリプトをデバグ( -wスイッチ)。
結果、スクリプトを書く→テスト の工程が短くなり、開発効率が劇的に向上しました。
今までFTPでアップロードしてCGI::Carpのエラーメッセージとにらめっこしてたのが馬鹿みたい。
・HTML::Templateの利用
ViewとLogicの分離というやつです。
スクリプトがだいぶ見やすくなりました。
加えて、ロジックとデザインで頭を切り替えて作業できるので、頭がすっきりします。
今回はLOOPに初挑戦。ハッシュへのリファレンスを配列に格納するというのが難易度高かった。
・リファレンス
ハッシュへのリファレンスを配列に格納し、さらにその配列のリファレンスをテンプレートオブジェクトに渡す。
・use strictを最初から使用
やっぱuse strictはプログラムを書き始める最初の段階から入れておくのがよいです。
以前、Webアプリをある程度作りこんでからuse strictを導入したら、大量のエラーで大混乱したので。
今回、use strictのおかげで何がよくなったのかあまり実感ないですが、とりあえずソースコードが現代的になりました。
・サブルーチンを多用
YukiWikiMiniのソースコードを読んで、ソースの構成をマネしてみました。
意味のまとまりごとに、細かくサブルーチンを作りました。
名前のつけかたにも工夫(動詞を使うとか)して、見た目すっきり。
・スクリプトを1ファイルにまとめる(mycmdパラメータでモード切替)
これもYukiWikiMiniから学んだ。
いままで、モード(動作)ごとに別々のスクリプトファイル(.cgi)を作っちゃってました。
ファイルを1つにしたことで、保守性・可読性が劇的に改善。結城さんに感謝です。
・sprintf , printfで文字列を整形
初歩的な技ですが、数字を扱うWebアプリでは重要です。
これのおかげで数字の見た目を簡単に整形できました。(2007-07-01とか、0900とか)
・File::Copyを導入
さらりと導入できました。
・テキストファイルの行ソートを実装
「よくわかるPerl」からアルゴリズムを借用。
結構便利です。
my @lines =;
my @sorted_lines = sort { &yyyymmdd($b) cmp &yyyymmdd($a) } @lines;
print OUT @sorted_lines;