SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

  • 適用バージョン: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から導入する方法

追補:Windows 10 1803以降の場合

 以降で説明しているUwpDesktopではなく、Windows 10 WinRT API Packを使います。これは2019年9月にリリースされたものです。

 詳細はWindows Blogsの"Windows 10 WinRT API Packs released"を参照してください。ただし、この追補を書いている時点では、.NET Coreのプロジェクトでは問題なさそうでしたが、.Net Frameworkのプロジェクトでは限られたUWP APIしか使えないようでした。

(2019/11/9 追記)

 さっそくやってみましょう。まず、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パッケージ化すると制限が掛かります)。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
利用できないUWP APIについて

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10654 2019/11/09 15:44

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング