no link
2016年02月02日 00:09:49
うちのサイトは、いちおう法人名義のサイトではあるのですが、分類としては、「古き良き個人サイト」と分類してよいと思います。
その「個人サイト」のブログ部分は、「News Collector」という自前プログラムで動いています。
その昔「個人ニュースサイト」というものが流行った頃に、自分でプログラムを書いて、そういったサイトの更新を、しやすくしていたのですね。
その後、「個人ニュースサイト」から「ブログ」へと、世の中の流行が変化したのですが、過去のデータをぶった切るのも、もったいなかったので、同じプログラムを建て増しして運用してきました。
「News Collector」の最初のバージョンは、2001年の3月23日。そこから15年ほど運用してきたのですが、さすがにプログラムを1から書き直した方がよい状態になっていました。
でも、それだけ長く運用してきたコードをリプレースするのって、かなりしんどいのですね。
とは言っても、メンテナンス コストが高くなりすぎて、メンテナンスが困難になっていたので、先週末と先々週末の4日ほどを使って、全面的にリニューアルしました。
その結果、プログラムのメンテナンス性を取り戻せました。というわけで、その時の話をまとめておきたいと思います。
● 元の構成
「News Collector」というプログラムは、ローカルでデータを管理して、FTPでデータや静的HTMLを、サーバーに送ります。
このプログラムは「WSH(Windows Scripting Host)」で書かれたものです。UIは「HTA(HTML Applications)」です。何というか、出てくる言葉が、やたら古めかしいです。
それとは別に、サーバー側でCGIとして動作する「Perl」のプログラムが存在していました。「Perl」自体も、この15年ほどで色々とありました。
構成をまとめると、以下のような感じです。
ローカル
・WSHで、記事データの管理と、静的HTMLの出力。
・サーバーにFTPで、データや静的HTMLを送る。
サーバー
・ローカルから送られた静的なHTML(サイトのトップページ)。
・ローカルから送られたデータで動く、PerlのCGI(検索や個別ページの表示)。
このローカルのWSHのプログラムは合計366KB.。サーバー側のPerlプログラムは合計99KBありました。
ただ、使われなくなった機能のコードも多く、生きているコードがどれぐらいなのか、ちょっとわからない状態です。
それに、この15年の間に、私の実力が大きく変化しています。そのため、ほぼ別人と言っていい人間が、コードを追加しまくっている状態になっています。
その結果、よく分からない巨大なスパゲッティコードになっています。
このコードを元に、リニューアルをするのは非現実的です。というわけで、構成を完全に刷新して、新たに0からコードを書くことにしました。
● 新しい構成
いくつか課題がありました。
・自分がよく使うプログラミング言語に置き換えたい。
・ローカルとサーバーのコードを、ある程度共通化したい。
・文字コードを、SJISではなく、UTF-8にしたい。
これらを解決するために、プログラミング言語は「JavaScript」を選び、ローカルは「electton」、サーバーは「node.js」という構成にしました。
最先端の方々からは、「node.js でサーバーを立てるんじゃなくて、CGI をやるなんて馬鹿じゃねえの」という声が聞こえてきそうです。
まあ、そうですね。
しかし、ローカルとサーバーのコードを共有化できるというメリットは、「メンテナンス性」を回復するという面から、計り知れない恩恵があります。
今回のような、「ローカルとサーバーに、データがまたがる構成」は、だいぶ特殊な事例なので。
というわけで、最初の週は、生まれて初めて「electton」をインストールして、2日ほどでクライアントアプリを書きました。UIやシステムは、今の自分が作るならばという視点で、完全に刷新しました。
この段階では、文字コードはSJISのままです。
次の週に、「node.js」用のCGIプログラムを書き、2日ほどでサーバー側を置き換えるプログラムを書きました。
この段階で、文字コードをUTF-8に切り替えました。
コードのファイルサイズは、以下のように激減しました。
・ローカル:
コード:366KB → 53KB(14%に減少)
・サーバー:
コード:99KB → 21KB(21%に減少)
スキン:63KB → 46KB(73%に減少)
コードが非常に整理されましたので、今後のメンテナンスは、かなりやりやすくなります。
スキンのファイルサイズが減っているのは、スキンのシステムも、今の視点で作り直したからです。
● まとめ
プログラムは、放っておくと、どんどん肥大していくので、どこかでメンテナンスが必要ですね。
あと、技術のトレンドや「自分自身の興味」も大きく変遷していくので、数日で置き換え可能なプログラムなら、数年に一度は書き換える、あるいは大幅なメンテナンスをするのがよさそうだと思いました。
しかしまあ、何年もちまちまと書いていたプログラムを、今のレベルと視点で書くと、4日で終わるのか……。あの労力は何だったのかと。まあ、血肉になっているのでしょう。
というわけで今回は、「electron」の勉強も兼ねて、こういったリニューアルをしてみました。
バグが見つかったら、ちまちまと修正します。お知らせください(汗