マイクロソフト、Mac版Microsoft OfficeのソースコードをWindows版のソースコードと一本化実現
20年以上の歴史上はじめて、Microsoft OfficeのWindows版のソースコードとMac版のソースコード、iOS版、Android版のソースコードが一本化されたと、マイクロソフトのプリンシパルソフトウェアエンジニアであるEric Schwiebert氏のツイートで報告されました。
すなわち1本のソースコードをビルドすることで、Mac版やWindows版など複数のプラットフォーム用のMicrosoft Officeが生成できるようになったということです。これにより、すべてのプラットフォームで同じように迅速な新機能の提供といったアップデートが実現していきます。
マイクロソフトは、Officeのような巨大なソフトウェアのソースコードを一本化する作業を、製品をリリースし続けながら行ってきました。それは相当に複雑な作業だったはずです。
いくつかの資料から、これまでの状況をまとめてみました。
マイクロソフトも一度は失敗した、ソースコードの一本化
もともとMicorosoft Office(以下Office)は、1983年にMS-DOS版のWordが登場したことがその端緒で、1985年にはMac版のWordが登場、そしてExcelもMac版としてはじめて登場しました。
この時点ではまだWordとExcelはそれぞれ別の製品であり、DOS版とMac版も別々のソースコードです。
そして1990年に、ExcelやWordなどをオフィススイートとしてまとめたMicrosoft Officeが登場します。このタイミングでマイクロソフトはWindows版とMac版のソースコードを一本化しようとしました。しかしそれは、残念ながらうまくいかなかったとのことです。
その後Mac版Officeは激動のときを迎えます。
2005年にはアップルがMacのプロセッサをインテル製へ変更すると発表。そしてOffice自身もOffice 2007でファイルフォーマットがXML対応の新しいものになり、ユーザーインターフェイスもリボンが採用された新しいものになりました。
これら大きな変更が重なったことで、Mac版のOfficeの開発はWindows版Office 2007よりも1年も多く時間がかかり、しかもWindows版のすべての機能が実装されたわけではありませんでした。
さらにこの頃にはiOSやAndroidといった新しいOSを搭載したモバイルデバイスの普及も始まっています。これら新しいデバイスにOfficeを対応させようとしたとき、それぞれまた大きな手間と時間をかけて開発するような愚を繰り返すわけにはいきません。
マイクロソフトは2008年からコードの一本化を目指して作業を開始。Windows版とMac版で分かれていたリポジトリを1つにしてそれぞれのソースコードの相互参照を容易にし、少しずつコードを共通化していきます。
マイクロソフトは2014年に開催されたC++のイベント「CppCon 2014」において、「How Microsoft Uses C++ to Deliver Office (and More) Across iOS, Android, Windows, and Mac, Part I」(マイクロソフトはC++を用いていかにOfficeをiOS、Android、Windows、Mac用に開発しているか)という講演を行い、このときすでにC++でソースコードの一本化をすすめていることを明らかにしていました。
そしてついに2018年、その一本化の作業が終わったことが報告されたわけです。
プラットフォーム間の違いを吸収するアーキテクチャ
異なるプラットフォームにまたがってOfficeのソースコードを一本化したとしても、当然ながらプラットフォーム固有部分を完全になくすことはできません。
マイクロソフトの説明によると、Officeは下記のようなアーキテクチャとなっており、一番下にプラットフォームごとに最適化されたレイヤが用意され、これがプラットフォーム間で共通のコードを実現する基盤となっています。
その上に「Shared Common Logic」と呼ばれる全プラットフォーム共通のコードがあり、その上に「Native UX Layer」としてプラットフォーム固有のUXを実現するコードとそのためのサービスがある、という形になっています。
こうした経緯や技術的な解説は、下記の2つの動画で詳しく解説されています。
カテゴリ 業務アプリケーション / Office
タグ Microsoft , Office
あわせてお読みください
前の記事
Kubernetesに初めて実装された「Container Storage Interface」は、Kubernetes、Mesos、Docker、Cloud Foundryが共同策定したコンテナ用ストレージAPI