青竹雑記帖(6代目)

雑記帖がまた新しくなりました。

自立したソフトウェア

昨日の記事「JavaScriptフレームワーク(泣)」からの関連で少し続けます。

aotake91.hatenablog.com

当記事中で紹介した「Windows/Mac/UNIX すべてで20年動くプログラムはどう書くべきか」(松浦智之著・USP研究所監修)の序章において、松浦氏はこのように述べています。

20年間本当に動き続ける保証のあるソフトウェアを手に入れるにはどうすればいいのか。答えは、他人に頼らず自分で保守できる知恵を身に付けること、だ。

数年前の私はこの言葉に大変感銘を受けました。同書では他人が作ったものに過度に依存し、高度化した技術の内部にまで目を配る余裕がなくなっているソフトウェア開発現場の現状を指摘しています。これについて、昨日の記事を踏まえて自分から拙い例を挙げますと、たとえばJavaScriptフレームワーク「Vue.js」は、GitHubリポジトリ (https://github.com/vuejs/core) を置いて、今では300人を超える人が何らかの形で開発に携わっています。私を含む多くの人はこの Vue.js の成果をありがたく享受し、ウェブアプリケーション開発に勤しんでいます。GitHubを見てもらうとわかりますが、このソフトウェアは「MIT License」により提供されています。このライセンスは、Vue.js の開発者の著作権表示と、MIT Licenseが定める利用許諾表示をすることを条件に、ソフトウェアを誰でも無制限に自由に取り扱うことを許しています。また、「作者または著作権者は、ソフトウェアに関してなんら責任を負わない」ことを定めています。つまり、何らかの事情があれば自分で保守できなければならないということも含意しています。しかし幸いなことにソフトウェアの作者およびコミュニティの偉大なる技術力と継続的開発のおかげで数多くの問題が発見修正され、我々はバグレポートを上げつつ、その成果物の恩恵に浴することができます。

それでは我々は、この Vue.js の中身を理解できているでしょうか。Vue.js の根幹はTypeScriptで記述されており、TypeScriptのコンパイラにより最終的にはJavaScriptに変換されます。TypeScriptやJavaScriptの知識があれば読み解けるわけですが、私はまだ理解するに至っていません。理解が及んでいないながらも、潤沢なドキュメントや書物のおかげで、なんとかその機能を利用して開発をしています。ただ、自分の知識水準を考えると、Vue.js という技術を適切に自分の手で使いこなせているとは言いがたい面があります。もし何らかの事情があって自ら保守しなければならなくなったらお手上げです。過度であるかどうかは措くとして、少なくとも依存していることは確かです。*1

他人が作ったものに過度に依存しないとして、ではどこまで自立すると良いかですが、松浦氏の書にある事項を基準として一言で表しますと「コンピュータを使う多くの人が確実に入手整備できる環境さえあれば、動くようにする」となります。その解のひとつが UNIX 環境で、しかも「POSIX標準」です。目安はそのプログラムを動かすにあたって、追加の言語処理系や標準外のライブラリ・コマンドをできるだけシステムに追加せずに済む(Debian系のLinuxであれば、sudo apt installを打たずに済むか、打つにしても標準リポジトリで済む範囲にする)ところでしょうか。より補足すると、ひとつの表現は「UNIXが動くレンタルサーバにおいてはどこに持っていっても常に動く」となります。過度に依存しない姿勢をウェブに向けて拡張すると「POSIX中心主義(POSIX標準 + ウェブアクセス用コマンド・ライブラリ + W3C標準)」です。先の例であれば、JavaScriptのうち標準化されている範囲だけで自ら記述すればこの姿勢を満たすことができます。

もちろん、大規模なプロダクトに関わるチームの下っ端のひとりであれば、この姿勢を貫いて開発を実施することはまず無理でしょう。もしかしたら、そうした現場のプログラマの中には、不幸にして自分が携わるソフトウェアがどのような技術に依存しているかを理解していない人がいて、話が通じない可能性があります。でも、この記事をわざわざ読みに来るような、技術について深い理解を得ている人は、ぜひこのような姿勢があることを知り、少しでも実践していきましょう。あるいは、自分が設計・構築を自ら差配できる立場であるならば、思いきって導入するのも手かもしれません。

この自立の姿勢を持ち続け、良いプロダクトの開発につなげていきましょう。

*1:ちなみに、ソフトウェアの作者にとっては、「ソフトウェアの実装詳細が分からなくてもきちんと使え、本質的な開発に集中できる」状態を実現できているのは作者冥利に尽きます。しかし、我々プログラマは同業の達人の謦咳に接するという意味でも、やはりソフトウェアの中身を知ることは大切だと思います。中身を知っていれば、移植の必要性が生じてもそれを円滑に実施する助けになるはずです。