LED通信事業プロジェクト エンジニアブログ
Windows Phoneの思い出 後編
記事更新日 2024年5月21日
はじめに
このブログは、Widows Phoneの思い出 後編です。前編からお読みいただくことをお勧めします。
前編までの状況説明
Windows Mobileを以てスマートフォンを先行していたと思われていたMicrosoft(MS)だったが、Apple iPhone登場により、そのアドバンテージは一瞬のうちにひっくり返されたどころか、大きな後れを取ってしまった。Google Androidはすぐさま追従したが、MSはiPhoneに対抗しうるスマートフォンを出すまでに3年以上もの年月がかかってしまった。
時間をかけて作り上げられたMSのスマートフォンは、Windows Phoneと名付けられた。タイルUIと呼ばれるホーム画面は、iPhoneともAndroidとも異なっていて、とてもスタイリッシュで差別化が出来ていた。同じようにスマートフォンで出遅れたフィンランドのNokiaから出されたWindows Phone端末は、iPhoneとまでは言わないまでも十分におしゃれであり、幾多のAndroidとの競争であれば、十分に勝負できうるポテンシャルを持っていた。
しかし、3年以上も遅れた代償は大きい。それが顕著となるのは「アプリの数」だ。iPhoneとAndroidのアプリ数は互角だった。というより、ツールでもゲームでも大半のアプリが両OSに対応していた。また、開発者は、どちらのOSも大手から個人まで星の数ほどいた。当時はまだ「アプリで一攫千金」という夢があり、黙っていても開発者はどんどん増えていった。一方で、出遅れていて市場に出ている端末が少ないWindows Phone向けのアプリを開発してくれる人は、当然のことながら少なかった。端末が少ないからアプリの開発者が少ないし、アプリの開発が少ないから端末が売れない。MSをもってしてもこの負のスパイラスから脱出するのは難しい。(もし、そんなことが出来る会社があるとすれば、自力ですべてのコンテンツを準備できる任天堂ぐらいなものだ・・・)
しかし、MSは、スマートフォン立ち上げ時のAppleやGoogleと異なり、最初から大きな開発者コミュニティーを持っていた。そう、.NET Frameworkだ。Windows Phoneのアプリは、.NETで開発できた。C#でもVB.NETでもどちらでもOK。文法もWindows用.NETと同じだし、何より高機能な、そして何より使い慣れたVisual Studioで開発できる。iPhoneはObject-Cという特殊な言語であり、AndroidはJava系だが環境を整えるのが難しかった。そういった面で、Windows Phoneは、iPhoneやAndroidに短期間で追いつくのは難しいとしても、立ちあげ時期としては十分な数のアプリが揃う可能性はあった。
しかし、その可能性はMSが自ら閉じてしまった。何と、Windows Phone用アプリを開発するには9800円(99ドル)が必要だったのだ。これは、AppleよりもGoogleよりもずっと高い。しかも、この料金はアプリストア登録料金となっているものの、実際はWindows Phone実機でアプリを動かす(つまりデバッグする)にも必要だった。これは、Windows Phoneは、実質的にお金を払わないとアプリ開発がスタートできないことを意味した。
この方策を圧倒的に先行していたAppleが採るなら分かる。しかし、なぜ後発で、頼んででも開発者数を増やさなければいけない側が、なぜこんな方策を採ったのだろうか。当然というか、誰もが予想できたとおり、この9800円、99ドルによって、特に個人の開発者は全く集まらなかった。焦ったMSは、後に19ドル、そして無料と価格を落としたが、時すでに遅し。iPhone、Androidとの「アプリ数」の差は縮まるどころか、勝負の舞台にすら立てない状況となってしまった・・・
と、前編と違うテイスト(生き延びることは出来るか風)でまとめてみました。これからWindows Phone、そして小型機器用Windowsはどうなっていくのでしょうか?テイストも、前編からの引き続きの「回想モード」に戻して後半スタートです。
自由度の低さとWindows 8
さて、Windows Phoneの開発に金がかかると言っても、.NETで開発できるということで私の期待は大きかったんですよ。安くなったとはいえ、お金も払ったわけですし。で、実際開発してみると、あれ?という感じが否めない。やりたいことが全然できないんですよ。特に、端末から取れる情報が少なすぎる。やっぱり、PCではなく、あえてスマートフォンで開発するんだから、端末のいろいろな情報をとったアプリを作りたいですよね。携帯やBluetoothのRSSI(受信電力)とか見たいじゃないですか?でも、そういったこと全然できないんですよね、Windows Phoneは。PCどころか、Android、いやWindows Mobileでもできる事が、Windows Phoneでは全くできない。セキュリティってのは分かるんですが、それにしても自由度が低い。もしかしたら、(私の興味がなくなった後の)晩年にはできるようになっていたのかもしれませんが、私がいじっている当時は「何も出来ない!」と悲しい思いをしました。
で、そうこうしているうちに、今度はPC版のWindowsが迷走していくんですよね。なぜか、Windows PhoneのUIをPCのWindows側に反映させるという暴挙(?)に出たのです。皆さんも、記憶にありますよね?そう、Windows 8です。PCなのに、なぜかフルスクリーンを強要する謎のUI。タッチパネルのPCなんて数が知れているのに、なぜかタッチパネル前提の画面。そして、Windows Phoneとは別に、ARM用のデスクトップOSであるWindows RTまで別に出る。いや、何がしたかったんだ?マイクロソフト。今考えても狂気ですよね。
で、OSはさておき、Windows 8に次いで、アプリ開発で出てきた概念がユニバーサルアプリ、正確に言うとユニバーサルWindowsプラットフォーム、略してUWPです※1。UWPは、一つのコードが、全てのデバイスで動くという概念を持っていました。UWPとして書けば、Windows 8、Windows Phone、ゲーム機であるXBOX360など、一つのコードでデバイス関係無く動くようにできています。残念ながらXBOXで動かしたことはないのですが、確かに同じアプリがPC WindowsでもWindows Phoneでも動きました。Windows 8とXBOXのCPUはインテル系ですが、Windows PhoneはARMなので、これって凄いことです。Windows 8のUIがあんな変なものになってしまったのも、きっとこのUWPのコンセプトを実現するためだったのだと考えれば、理解できないことはない。そのUWPは、先の自由度の低さも相まって普通のWindowsアプリの様には作れませんが、それでも、PCでもスマホでもゲーム機でも動くというコンセプトは素晴らしいと思いました。Javaが提唱していた”Write once, Run anywhere”の実現だ、私はそう思っていました。
だけど・・・ 実際アプリを作ってみると分かるんですが、PCで動かしたいアプリと、スマートフォンで動かしたいアプリって、全く異なるんですよね。はっきり言えば、PCとPhoneの両方で全く同じもの動かしたいと思うアプリは存在しないってこと。やっぱり、入力デバイスも違えば、画面サイズも違うし、利用シーンもちがう。使う人を考えたら、結局は別々に作った方が良いアプリになるんですよ。スマホ登場から15年近く経った2024年の今ですら、PCとスマートフォンのアプリで、全く同じものが動いてメリットがあったというアプリを聞いたことがありません。(少なくともメジャーなものにはない。もしあったら教えて!!)PCもスマホも同じコードで、っていうコンセプト、聞こえは良いけど、実は意味が無かったということでしょう。
さて、このUWPのために(?)、虎の子のPC版Windowsまでもをあんな風にしてしまったのに、蓋を開けるとUWPを求めている人はいなかったという大失敗。その結果、Windows Phoneはともかく、それに寄せたしまったWindows 8すら大不評で、UWP(系)の開発者はほとんどいなくなりましたとさ。とほほ・・・
Windows Phoneの終焉からのXamarin
Windows Phoneは盛り上がりをほとんど見せないまま、最終的にMSは手を引くことになりました。そもそも、Windows Phoneの端末を出してくれていたメーカーは少なかったですが、その少ない中の一社であるNokiaは、特に悲惨な目に遭いました。MSに全面協力してくれたNokia。それなのにMSは(端末メーカーとしての)Nokiaを買収したと思ったら、そのたった2年後にスマートフォン設計製造から完全撤退するなど、全フィンランド人を敵に回すようなことまでしていました※2。いやはや、71億ドルもかけて買収したのに、ほとんど何もしないまま解散させてしまうとは。このことも、私にはこれっぽっちも理解できませんでした。
話は変わりますが、Windows Phoneって、アプリのストアからそのアプリが削除されると、端末にインストールしているアプリも消えちゃうんですよね。もしかしたら、iPhoneやAndroidでも設定次第でそういうことになるのかも知れませんが、自分の使っている(設定の)iPhoneやAndroidはそうはならないので、とてもびっくり。そして、そのような状況で晩年のWindows Phoneがどうなったか?少ない中から頑張って探した有用なアプリが、知らない間にどんどん消えていっちゃうんです、勝手に。残っているデータとかお構いなしに。ユーザー置いてけぼりで。これが死んだOSの末路って奴ですよ、とほほ・・・
迷走するマイクロソフトのOSチームとは異なり、言語開発チームはすでに方向転換していました。それがXamarin(ザマリン)と呼ばれるフレームワークです。もともと、Xamarinはベンチャー企業でしたが、後にマイクロソフトに買収されました。この会社が何をしている会社なのかと言えば、.NET言語でAndroidとiPhoneのアプリ開発ができる、という中間言語を作っていたのです。このXamarinを使えば、AndroidでもiPhoneでも動くアプリを、.NET(C#、VB.NET、F#)で作ることができるのです。簡単に言えば、.NETのコードをiPhone、Androidでも動くように変換してくれるフレームワークってことです。もちろん、Object-Cのようなネイティブ言語のできる事が100%出来るわけじゃありませんし、またAndroidとiPhoneで完全に同じって訳にはいきませんが、それでも3Dゲームのような高度なことをやらないアプリなら、ほぼ何もせずに両方のOSで動くわけで、これは夢のような機能です。私は思いました。これが、求められていた真の"Write once, Run anywhere"なのではないかと。
あれあれ?我々にとっては.NETでアプリ開発できるからWindows Phoneが貴重だったのに、iPhoneもAndroidも.NETで開発できるなら、Windows Phoneなんていらなくない?と思いますよね? 私も、多くの人と同じようにWindows Phoneをあきらめ、Androidの開発の方に興味がうつるのでした。そういえば、マイクロソフトは何を思ったか、最後”Windows Phone”を”Windows 10 Mobile”と改名しました。大して機能も見た目も変わらない※3のに、何故名前だけ先祖返りさせたのか、その理由は今も理解不能ですが、Windows Phoneの歴史は、この最後のWindows 10 Mobileを以て終了となり、10年にも満たない短いOSの生涯に幕を下ろしたのでした。
Windows IoT
さて、世の中のスマートフォンブームとは別に、世の中にはもう一つの小型機器が広まりつつありました。それが「Raspberry Pi(通称ラズパイ)」です。ラズパイは、イギリスの慈善団体が開発した小型コンピューターで、デスクトップコンピューターの様に使うこともできれば、ロボットなどの電子工作にも使える。それでいて(当時は)5000円程度で入手できる。慈善団体が作った、学校での教育のためのコンピューターですからね、とにかく性能の割に安い。最新のラズパイは、円安の影響もあり最低でも一万円ぐらいしちゃいますが、性能的に言えば5万円ぐらいする小型Windowsパソコンよりずっと快適に使えるレベルですので、安価には違いありません。
ラズパイは通常、無料配布されているRaspberry Pi OS(ラズパイOS)で動かしますが、OSがプリインストールされているわけではなく、また他のOSでは動かないということでもないので、ユーザーはOSを自由に選ぶことができます。そこに目を付けたのが、我らがマイクロソフト。ラズパイでも動くWindowsを、ということでWindows IoT CoreというOSが作り出されました。
そもそも、ラズパイが出るずっと前からマイクロソフトは組み込み機器用のWindowsを作っていました。施設の案内表示とか、図書館で本を検索する端末の様なキオスク端末とかで、たまにバグってWindowsが見えちゃっているときありませんか?あれ、組み込み機器用のWindowsの可能性が高いです。かつて、組み込み用のWindowsはWindows Embeddedと呼ばれていました。例えばWindows 7ベースの組み込みOSは、Windows 7 Embeddedという名前でした。それが、Windows 10の時から"Embedded"の名前を捨てて、当時のバズワードであった"IoT"を使う様になり、Windows 10 IoTと呼ばれるようになりました。その中で、特にラズパイをターゲットとしたOSはWindows 10 IoT Coreと名付けられていました。実は、ラズパイだけでなく、似たような小型機器※4のいくつかに対応していたのですが、それら機器とラズパイでは世の中に出ている台数の桁が2つも3つも違うので、IoT Coreはラズパイ向けと考えるのが自然でしょう。
さて、このIoT CoreというOS。単体では何も出来ないOSで、どちらかというとファームウエアに近いものでした。かなり後のバージョンでは簡単なアプリ(ブラウザ等)が追加されましたが、基本的にはユーザーが入れたアプリを、起動と同時に動かすことを目的としていました。動作だけみればArduinoに近いですね。OSの設定とかは、原則リモート側の機器(PC)で行います。本家ラズパイOSは、LinuxベースのOSでデスクトップPCとして機能しますが、IoT Coreはそういった使い方はほぼできません。
Windows 10 IoT Coreメイン画面
実機で動かしていることを証明するため、スクリーンショットではなく、敢えてディスプレーを撮影(そのため、撮影者がちょっと反射していますがご容赦ください)
IoT Coreで動かせるアプリは、先ほども出てきたユニバーサルアプリ、UWPです。なので、Windows Phoneのアプリを作ったことがある人なら簡単に作れると思います。UWP準拠のUIも作れますし、ラズパイならではのGPIOやI2C※5なんかもAPIが用意されていて問題なく使えます。ですから、そこの部分には文句はありません。問題なのはOSの出来。IoT Coreって何も出来ない単機能OSのくせに、起動に恐ろしく時間がかかるのです。ラズパイOSの何倍も時間がかかります(先ほど計測したら起動まで5分30秒)。ラズパイOSは、フルスペックの重いOS。IoT Coreは単機能のOS。サクッと起動しても良いのに、なんでそんな時間がかかるんだ?というか、本家のOSが軽くて高機能なのに、サードパーティーの低機能のくせに信じられない程重いOSを、誰がわざわざ選ぶのでしょうか?しかも、起動は不安定・・・ 無料だったからよかったものの、有料だったら暴動ですよ。そんなもんなので、多くの開発者は、開発云々を考える前に「IoT Coreは使えない」という判断になってしまったと思います。MSは、なんでこんな未完成なものを出したのか?そもそも、誰のために作ったのか?裏では何らかの理由があったのでしょうが、やはり、このOSのことも私には理解できませんでした。
尚、ここでも言語開発チームは優秀で、なんと.NETをラズパイOS上でも(そしてMacでも)動くようにしてくれました。だから、私たちはWindows IoT Coreのような使えないOSを使う必要なく、軽くて高機能なラズパイOS上で動くアプリを.NETで開発できるようになりました。こちらは、ほんと素晴らしいので、その喜びを皆に伝えたいためこんな連載をしているんですよね。
ちなみに、このWindows 10 IoT Coreはラズパイユーザーへ全く広まることなく、Windows 10 Mobileと共に、ひっそりとサポート終了されていたのでした・・・ 繰り返しになりますが、IoT Coreって、一体何のために作ったんでしょうね?とほほ・・・
小型機器用のWindowsの結末
Windows CEから続いた、Windows Phone、そしてWindows 10 IoT coreは、広まることなく、というよりも、恐らくは元祖のWindows CE/Mobileよりもユーザーを減らしながら、2020年を前に姿を消しました。2024年現在、フルスペックの組み込み機器用Windows、及びARM用Windowsは健在ですが、スマートフォン等の小型機器用のWindowsは存在していません。残念ながら、この手のOSから撤退したと言える状態です。
一方で、.NETの方は、OSに限らず動くようになっていきました。.NETで作ったアプリは、Windowsだけでなく、ラズパイOSでも、Apple Macintoshでも同じように動きます。ちなみに、開発ツールも”Visual Studio Code”というMS製のアプリが、これまたどのOSでも動くように作られていて、世界で最も多くの人に使われている開発ツールとなっています(ちなみに、このブログもそのVS Codeで書いています)。また、先ほども書いたとおりiPhone、Android向けの開発も.NETで出来るようになっています。もっともこちらは、Xamarinから.NET MAUIと名前を変え、若干先行きが不透明になりつつありますが・・・
ともかく、私から見る、このOS騒動の結末は「OSなんて飾りです。偉い人にはそれが分からんのです。(マルチOSの.NET最高!!)」ということにしたいと思います。
まとめ
ここまで、私のWindows Phone、および小型機器用Windowsの思い出話に付き合っていただき、どうも有り難うございました。
なんか、自分で書いた小型用OSの歴史を改めて読むと「マイクロソフトの優秀な言語チームと迷走するOSチームの比較」って感じになってるんですよね。そして、これって「言語の.NETがオープンソース化したのに対して、OSのWindowsはプロプライエタリを維持しているから」じゃないかって、私は思うんですよね。何故そう思うのか?それは、「集合知って凄い」ってことをヒシヒシと感じるからです。もちろん、オープンソースが全て成功する訳ではありません。実際、オープンソースのスマートフォンであるFirefox OSは失敗しましたしね。しかし、それでもソフトウエアって、大規模になればなるほど、「知識の総量」ってものが力になると思うんです。そして、いろいろな原因が重なり、Windows Phoneにはそういった力が働かなかった、残念ながら。
と、まあオープンソースについて偉そうなことを言っていますが、私には皆様へ披露できるような高い技能も(光無線以外の)知識もあるわけじゃありませんので、大した事ができるわけではありません。それでも、このブログを通して少しでも集合知に貢献できればうれしいと考えていますので、今後ともどうかよろしくお願いいたします。
※1; UWPは、正確に言えばWindows 8.1の時に登場した概念だが、それ以前から「ストアアプリ」という形式で、PCとWindows Phoneがほぼ同じコードで作れるようになって、UWPはその流れをくんだものである。
※2; 2010年にMSから送られたElop氏がCEOに就任し、2014年にマイクロソフトがNokiaの携帯電話端末部門を買収(完了)、2016年にマイクロソフトがスマートフォンハードウエアからの撤退発表、すなわち旧Nokiaを解散させた。尚、基地局等のインフラ機器を製造販売する部門は継続し、現在のNokia社となっている。
※3; 目玉として"Continuum"と呼ばれる、スマートフォンの画面を大型ディスプレーに表示させ、マウス、キーボードを繋げると、デスクトップOSの様に動作するという機能が存在した。しかし、実際に使うと、遅いしUWPアプリしか使えないしで、キラーコンテンツとはならなかった。
※4; Dragonboard 410c、Minnowboard Maxといった、QualcommやIntelのチップで作った小型コンピューター(一般にシンブルボードコンピュータと呼ばれる)にも対応していた。
※5; GPIOやI2Cは、電子機器やセンサーなどを繋げるための端子規格の事。Raspberry Piには、そういった端子が数多く用意されている。