I is for When Your Stack Learns to Share|OSSのABC
オタク諸君!オープンソースソフトウェアの世界を一文字ずつ分解していく「OSSのABC」へようこそ。私はテイラーで、今日は「相互運用性」の「I」を取り上げます。
なぜ相互運用性が重要なのかを説明しよう。2つの技術を互いに会話させようとしているとき、基本的に異なる言語を話しているときの感覚をご存知だろうか?私たちがここで闘っているのはそういうことだ。相互運用性とは、異なるシステム同士をつなげようとしたときに癇癪を起こすのではなく、うまく連携させるものなのだ。
オープンソースの世界における相互運用性については、単なる機能ではなく、事実上宗教のようなものだ。なぜか?なぜなら、誰も自分の小さなバブルの中で生きるソフトウェアを作りたくないからだ。オープンソースの要点は、共有とコラボレーションであり、それはあなたのものが他の人のものと動作する必要があることを意味する。
なぜこれが重要なのか、現実的に考えてみよう。まず第一に、優れた相互運用性がなければ、どのような技術スタックで始めても、基本的にはそれに縛られることになる。データベースを乗り換えたい?その移行には幸運が必要だ。新しいサービスと統合したい?ゼロからカスタムアダプターを書くのが好きならいいが。しかし、適切な相互運用性があれば、レゴブロックで組み立てるように、ツールを組み合わせて使うことができる。
オープンソースコミュニティは、相互運用性に関しては、絶対に潰しにかかっている。HTTPとJSONを例に取ろう。これらは、誰かが適当に作った標準ではない。これらは、ウェブ上のあらゆるものが互いにやり取りするためのバックボーンであり、オープンソースに深く根ざしている。
相互運用性を実際に見てみたい?コンテナを見てみよう。KubernetesとDockerの連携は、異なるツールがいかにお互いを補完し合えるかというマスタークラスのようなものだ。Electronを使えば、WindowsでもMacでもLinuxでも、どこでも動くデスクトップアプリを作ることができる。これが優れた相互運用性の力だ。
しかし、すべてが晴れやかで虹がかかっているようなふりをしてはいけない。異なるシステムを連動させるのは大変な苦痛だ。時には規格が競合することもある。バージョンの互換性は悪夢のようなものだ。依存性地獄に対処したことのある人なら、私が何を言っているかわかるだろう。そして、すべてをうまく機能させるために必要なコンフィギュレーションは?目隠しをしてルービックキューブを解いているような気分になることもある。
では、これを台無しにしないためにはどうすればいいのか?まず、できる限りオープンスタンダードにこだわることだ。独自のプロトコルを構築することもできるかもしれないが、よほどの理由がない限り、それはやめよう。明確なドキュメントを書くこと-つまり、実際に明確なドキュメントを書くということだ。
テストも非常に重要だ。自分のソフトウェアが他のソフトウェアとうまく動作するかどうかを定期的にチェックする必要がある。そして、コミュニティに参加することだ。コミュニティでは、実際に重要な標準やプラクティスについて学ぶことができる。
相互運用性とは、単に物事を連動させることだと思っている。しかし、相互運用性はそれ以上のものだ。可能性を生み出すことなのだ。システム同士が効果的に会話できるようになれば、他の方法では不可能なものを構築することができる。開発者に超能力を与えるようなものだが、空を飛んだり透明人間になったりする代わりに、仕事を辞めたいと思うことなく、異なるソフトウェアの断片を連携させる能力を得ることができる。
これがOSSのABCの9番目の文字だ!次回は、JavaScriptフレームワークのJです。
それまでは、コードをクリーンに保ち、APIをきちんと文書化しておくことだ。
平和を祈る。