このポストはWindows Store apps Advent Calendar 2012 8日目の記事です。
今日はWindowsストアアプリのライブラリについて少し書いてみたいと思います。
ちなみに私は.NETが専門なのでこの記事ではC++やHTML5については割愛させていただきますね(^^;
さて、それでははじめましょう。
ライブラリというと、アプリの中から利用できる機能や再利用を目的としたロジックの集まりですね。
アプリはライブラリを用いることで、重複するコードの記述を避けて再利用を行ったり、ロジックに対して意味的なグループを構成することで整理整頓したりといった場面で用いられる仕組みであることはご存じかと思います。
ひとくちにライブラリといっても、Windowsストアから利用できるライブラリには以下の3種類があります。
- Windowsランタイムコンポーネント
- クラスライブラリ(Windows ストア アプリ)
- ポータブルクラスライブラリ
これらは利用目的に合わせて選択することができるようになっています。
どのような形で使い分ければよいか、順に確認してみましょう。
Windowsランタイムコンポーネント
Windowsストアアプリは【XAML+C++】【XAML+C#/VB】【HTML/CSS/JavaScriot】という3種類の言語の組み合わせで開発ができることはご存じかと思います。
WindowsランタイムコンポーネントはWinRT環境のこれらの言語間で再利用できるコンポーネントになります。
通常・C++やC#・VBそしてJavaScriptは特別な仕組みを持たない限りは直接これらのロジックを利用することはできません。
しかし、Windowsストアアプリの基盤であるWinRTにはこれらの相互運用を実現するためWinRT用の特殊な型システムと言語プロジェクションという機能が用意されています。
これらの仕組みが規定する制約の上で作成されたロジックであれば、異なる言語間で再利用を行うライブラリの作成が可能です。
このあたりの制約は異なる言語間で利用するので致し方ないところではありますね。
つまり、種類のコンポーネント(ライブラリ)を利用しようという場合は、これらの型システムや言語プロジェクションなどの制約を受けることに注意が必要になります。
この制約については以下のページに記載があるので参考までに・・・。
C++ および Visual Basic での Windows ランタイム コンポーネントの作成
日本語ページ(英語はC#となっているのに、日本語はなぜかC++となっている・・・)
http://msdn.microsoft.com/ja-jp/library/windows/apps/br230301.aspx
Creating Windows Runtime Components in C# and Visual Basic
英語ページ(個人的にはこちらのほうがわかりやすいような・・・)
http://msdn.microsoft.com/en-us/library/windows/apps/br230301(v=VS.110).aspx
クラスライブラリ
Windowsランタイムコンポーネントのように異なる言語間での再利用が目的でないのであれば、クラスライブラリとして構成するをお勧めします。
WinRT for .NET環境だけでいいのであれば、クラスライブラリの中でもっとも自由に利用できるライブラリです。 相互運用などの制約はあくまで.NET環境の中で考慮すればよいため、言語上の規約に沿ったロジックであれば問題なく利用できます。
もちろん、利用方法は.NET Frameworkの時に行われていた方法と同じように利用できます。
ポータブルクラスライブラリ
上記のようにクラスライブラリはWinRT for .NET環境の中においては、一番自由度の高いライブラリですが、弱点もあります。
たとえば、.NETファミリーのフレームワークには通常の.NET Frameworkの他にもSilverlight、Windows Phone、XBoxといくつかの基盤があります。
これらのそれぞれ基盤では利用できるクラスライブラリの差異などもあり、基本的に異なるフレームワークで作成されたクラスライブラリは利用できません。
しかし、もともと.NETでは共通中間言語(いわゆるCIL)に一度変換されて言語やプラットフォーム間の差異を吸収する仕組みを持ちます。
CIL自体はどの基盤でも共通なので、対象となるフレームワーク特有の機能・ライブラリを利用していない場合、ソースコードレベルであれば再利用は可能です。
つまり、ソースコードのコピーを行って、その基盤に対応するクラスライブラリを作成することで再利用することはできますが、手間ですよね?
そこで.NET 4.5からはポータブルクラスライブラリ(PCL)という仕組みが導入されています。
PCLは異なる.NET系フレームワーク間やバージョン間で相互利用できるライブラリを作成することができるようになりました。
これらは利用先のフレームワークの種類やバージョンの指定が行えますので、対象となる種類・バージョンを狭めることで共通利用できるライブラリの種類を増やすことも可能です。
ということで、必要に応じてクラスライブラリは使いわけましょう!
ツイート