Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

超簡単! WPFなどの.NETのアプリからUWPのAPIを使う
~日本語の読み仮名を取得するAPIを題材に

UWPアプリ開発の最前線 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/03/06 14:00

 今回は、UWPアプリ用のAPIを、WPF/Windows Forms/コンソールプログラムなどの従来の.NETアプリから利用する方法を紹介します。

目次
  • 適用バージョン:Windows 10 全バージョン(version 1507/build 12040以降)

はじめに

 Windows 10に追加された新機能の多くはUWP(Universal Windows Platform)だけに搭載されます。そのような新機能は、従来の.NETのアプリからは使えないのでしょうか?

 そんなことはありません。UWPの多くのAPIは、.NETのアプリからも簡単に利用できるのです。

 今回は、日本語の漢字混じりの文字列から読み仮名を取得するAPIなどを題材にして、.NETアプリからUWPのAPIを呼び出せるようにする方法を紹介します。

対象読者

  • .NET FrameworkでWindows用のアプリを作っている開発者
  • UWPアプリの開発者

必要な環境

 サンプルコード(GitHub)をそのまま試してみるには以下の環境が必要です。

  • Windows 10 version 1703(build 15063)以降
  • Visual Studio 2015 Update 3以降(無償のCommunity Editionで可)
  • UWP用Windows 10 SDK:C#/VB用の10.0.15063以降

どんな機能なのか?

 まずはサンプルコード(WPFアプリ)の画面を見てください(⇒UF02UwpDesktop)。

UWPのAPIを使っているWPFアプリ
UWPのAPIを使っているWPFアプリ

 このアプリはWPFです。リリースビルドしたものは、Windows 7などでも起動します(画面が表示されるだけで機能はしません)。Windows 10上で動いているときは、そのコードビハインドからUWPのAPIを呼び出して、読み仮名などを取得します。このように、従来の.NETアプリからUWPのAPIを利用できるのです。

 このアプリの画面は次のようになっています。

  • 1段目:ここに文字列を入力します
  • 2段目:入力された文字列の読み仮名が表示されます
  • 3段目:入力された文字列に振り仮名を付けて表示されます(この部分は1607/14393以降)
  • 4段目:生成した読み仮名から得られたカナ漢字変換の候補を一覧します

 2段目~4段目の出力は、UWPのAPIを使って得ています。ここで利用しているUWPのAPIは、形態素解析を行いつつ読みを推定します。例えば「須弥山登山計画」は、「須弥山/登山/計画」と3つの形態素に分割して「しゅみせん/とざん/けいかく」と読みを付けてくれます。この読み仮名を取得するAPIの使い方も、後ほど紹介します。

 このように従来の.NETアプリからUWPのAPIを利用できるといっても、そのための作業が複雑なものであったなら気軽に利用したりはできません。今回の主題はそこになります。たいていはとても簡単にできるのです。

簡単! NuGetから導入する方法

 さっそくやってみましょう。まず、Visual Studioを開き、WPFのプロジェクトを作ります(Windows Formsやコンソールアプリでも構いません)。

 そうしたら、NuGetからUwpDesktopをプロジェクトに導入します。Visual Studio 2015での導入手順は、次のようになります。

  1. ソリューション エクスプローラーでプロジェクトを右クリックして[NuGet パッケージの管理]メニューを選択する
  2. 開いたNuGet パッケージ マネージャーの上部のタブで[参照]を選択し(次の画像の①)、検索ボックスに「UwpDesktop」と入力して(②)検索を実行する
  3. 検索結果に「UwpDesktop」が出てくるので(③)、それを選択してインストールする
NuGetからUwpDesktopを導入
NuGetからUwpDesktopを導入するために検索したところ

 たったこれだけで、もうUWPのAPIを使ったコーディングができます。

 例えば次のように、MainWindowクラスのコンストラクターにコードを追加してみてください。

UWP APIを使ってピクチャ フォルダーのファイル一覧を表示する
public partial class MainWindow : Window
{
  public MainWindow()
  {
    InitializeComponent();

    // ピクチャ フォルダーのファイル一覧を取得してみる
    Task.Run(async () =>
    {
      var files
        = await Windows.Storage.KnownFolders.PicturesLibrary.GetFilesAsync();
      var myPictures = string.Join("\n", files.Select(f => f.Name));
      MessageBox.Show(myPictures);
    });
  }
  ……省略……

 これで実行してみると、次の画像のようにピクチャ フォルダー内のファイル名一覧が表示されるはずです。UWPのAPIは、このように簡単に利用できるのです。

ピクチャ フォルダーのファイル一覧が表示できた
UWP APIを使ってピクチャ フォルダーのファイル一覧が表示できた(メイン ウィンドウを隠しています)

 こんなにあっさりと使えてしまうとは、拍子抜けもいいところですね! ただし、このUwpDesktopは開発が止まってしまっていて、Windows 10 version 1607/build 14393までにしか対応していません。1703/15063以降のAPIを利用したいときには、手動でセットアップすることになります(後述)。

Capability(「機能」)の宣言は不要

 UWPパッケージにしていない.NET Frameworkのアプリでは、UWPのCapability(「機能」)宣言は不要です。上の例ではピクチャ フォルダーにアクセスするAPIを利用していますが、もしもUWPアプリであればパッケージ マニフェストにCapabilityの宣言が必要になるところです。同じAPIを従来のデスクトップアプリから呼び出す場合には、制限が掛からないのです(デスクトップ ブリッジでUWPパッケージ化すると制限が掛かります)。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2018/04/10 20:50 「手動でセットアップする方法」の節を加筆しました。

著者プロフィール

  • biac(ばいあっく)

    HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来20年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。 Microsoft MVP (Windows Development)...

バックナンバー

連載:UWPアプリ開発の最前線

もっと読む

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5