自動ホスト型 SharePoint アドインをプロバイダー ホスト型アドインに変換する
Microsoft SharePoint は SharePoint サイトの拡張に、ソリューション ベースのカスタマイズを使用する従来のアプローチに加えて、新しいアプローチを導入しました。 このアドイン モデルと呼ばれる SharePoint 用の新しい拡張モデルを使うと、開発者は、社内、SharePoint Online、またはハイブリッド展開のいずれで動作している場合でも、SharePoint 環境に展開できるカスタム実装を作成することができます。
開発者は、2 種類の SharePoint アドインを構築できます。1 番目の SharePoint ホスト型アドインは、主にブラウザーで動作します。この種類のアドインをサポートする、HTML、CSS、イメージ、JavaScript などのアセットは、すべて SharePoint で保存およびサービス提供されます。 他方の種類のアドインは、クラウド アドイン モデル (CAM) に分類され、SharePoint の外部にある別のサーバーで主に動作し、クライアント側のオブジェクト モデル (CSOM) と REST API を使用して SharePoint と通信します。 それらのアドインは、SharePoint がサポートしていて定評のある OAuth 2.0 プロトコルを使用してアイデンティティを確立します。
開発者は、プロバイダー向けのホスト型アドインまたは自動ホスト型アドインのどちらかのアドイン モデルを使用してアドインを実装することができました。 自動ホスト型アドインは、SharePoint がリリースされたときに、プレビュー プログラムとしてリリースされましたが、2014 年 5 月、Microsoft は、プレビュー プログラムを終了することと、自動ホスト型アドインの作成をこれ以後サポートしないことをアナウンスしました。アナウンスの詳細については、「自動ホスト型アドインのプレビュー プログラムの更新」を参照してください。
この記事では、自動ホスト型アドインをプロバイダー向けのホスト型アドインに変換し移行する方法を説明します。 しかし、2 つのアプローチの間の特有のいくつかの違いに関する知識が変換プロセスを大幅に単純化するのに役立つため、開発者がこのことを理解することは重要です。
自動ホスト型アドインをプロバイダー向けのホスト型アドインに変換するための前提条件
自動ホスト型アドインを変換する前に知っておくべき中心概念
自動ホスト型アドインをプロバイダー向けのホスト型アドインに変換する前に、SharePoint アドインの基本を理解し、SharePoint ホスト型、プロバイダー ホスト型、自動ホスト型の SharePoint アドインの間に生じる違いを理解する必要があります。次の表に一覧表示されている記事を読めば、それらを理解することができます。
記事のタイトル | 説明 |
---|---|
SharePoint アドイン | エンドユーザー向けの小型で使いやすいソリューションであるアドインを作成できる、SharePoint の新しいアドイン モデルについて説明します。 |
SharePoint アドイン アーキテクチャと開発環境に関する重要な要素 | SharePoint アドインと SharePoint アドイン用のモデルのアーキテクチャの側面 (アドインのホスティング オプション、ユーザー インターフェイス (UI) オプション、展開システム、セキュリティ システム、ライフサイクルなど) について説明しています。 |
SharePoint アドインを開発およびホスティングするためのパターンを選択する | SharePoint アドイン をホストするためのさまざまな方法を説明しています。 |
SharePoint のホスト Web、アドイン Web、および SharePoint コンポーネント | ホスト Web とアドイン Web の違いを説明します。 また、どのような SharePoint コンポーネントを SharePoint アドインに含めることができるのか、何がホスト Web に展開され、何がアドイン Web に展開されるのか、アドイン Web がどのように分離ドメインに展開されるのかも説明します。 |
アドインの変換
自動ホスト型 SharePoint アドインをプロバイダー向けのホスト型アドインへ変換するには、以下の 2 つまたは 3 つのコンポーネントの変更が必要です。
- SharePoint アドイン本体
- リモート Web アプリケーションまたはサービス
- アドイン内の Microsoft Azure SQL Database (存在する場合)
SharePoint の自動ホスト型アドインは、インストール時に Azure Web サイトと Azure SQL Database に自動的に展開していますが、プロバイダー向けのホスト型アドインは、リモート Web アプリケーションおよび他のサービスを任意の Web プラットフォーム上に保有することができます。 この記事では、自動ホスト型アドインのリモート コンポーネントが、プロバイダー向けのホスト型アドインへ変換した後も Azure サービスとして残ると仮定しています。
次のセクションでは、自動ホスト型アドインをプロバイダー向けのホスト型アドインへ変換するプロセスを説明します。 実際のアドインよりも変換手順に集中するために、自動ホスト型アドインの例には、単純な Customer Manager を使用します。 これは 3 つのプロジェクトで構成されます。
CustomersDb: 必要な *.dacpac を生成する SQL データベース プロジェクトです。 なお、このプロジェクトには、スキーマが定義されていません。 このプロジェクトは単にデータベースを作成するために使用されます。スキーマは ASP.NET Web アプリケーションによって作成されるためです。
CustomerManagerAH: 作成する SharePoint アドイン パッケージに、ASP.NET の Web アプリケーション プロジェクトと Azure SQL データ層アプリケーションを含めるように構成された SharePoint 自動ホスト型アドインです。
CustomerManagerAHWeb: ”Entity Framework Code First with Migrations” アプローチを使用してデータベース スキーマを作成し、データベースの読み取り/書き込みを行う ASP.NET MVC の Web アプリケーションです。
このアドインは ASP.NET MVC の Web アプリケーションであり、Azure SQL Database のテーブルから顧客を表示したり、新しい顧客を追加したりすることができます。 これは匿名の Web アプリケーションであり、誰でも顧客を参照または追加することができます。 自動ホスト型アドインおよび関連するプロジェクト用の Visual Studio ソリューションは、 Autohosted-Migration-Code-Samples というパブリック リポジトリからダウンロードできます。
SharePoint の自動ホスト型アドインからプロバイダー向けのホスト型アドインへの変換には、複数の手順が関係しています。 各手順は以下のセクションで説明します。
Azure SQL Database の展開
Azure Web サイトを作成してリモート Web アプリケーションをホストする
SharePoint サイトでアドインを登録する
リモート Web アプリケーション用に Azure Web サイトを更新および展開する
SharePoint アドイン プロジェクトの再構成
Azure SQL Database の展開
自動ホスト型アドインをプロバイダー向けのホスト型アドインに変換する最初の手順は、ASP.NET Web アプリケーションが依存する Azure SQL Database を展開することです。 Azure SQL Database を作成する方法は数多くありますが、そのいくつかは Azure ドキュメント サイトの「SQL Server データベースからクラウドの SQL Server への移行」に記載されています。
以下の手順で説明するアプローチでは、データ層アプリケーション展開モデルを使用します。 これは SharePoint 自動ホスト型アドインにデータベースを展開するためのモデルであり、データ層アプリケーション パッケージ (*.dacpac) の生成、およびそれを使用したデータベースの作成が含まれます。
Azure SQL Database の作成
Visual Studio で自動ホスト型ソリューションを開きます。
データベース プロジェクト [CustomerDb] を右クリックし、[ビルド] を選択します。 これにより、
[..]\bin\[debug | release]
フォルダーに CustomerDb.dacpac ファイルが作成されます。新しい Azure SQL Database を作成します。 Azure ポータルにサインインし、ダッシュボードの読み込み後、ページの余白で SQL DATABASES リンクを選択します。
トップ ナビゲーションで [サーバー] リンクを選択してから、次の図に示すフッターの [追加] ボタンを選択します。
表示される [サーバーの作成] ダイアログで、サーバーへのアクセス権を持つことになるユーザーの、Azure の [サブスクリプション]、[ログイン名] および [パスワード] を選択し、事前に Azure Web サイトを作成した際に使用したものと同じ [地域] を選択します。 この後の手順で必要になるため、ログイン名およびパスワードを記録しておいてください。
このフォームを入力したら、右下のチェック アイコンを選択してデータベースを作成します。 サーバーが作成されましたが、このサーバーがアクセスできるリソースは、他の Azure サービスだけです。 この後の手順で必要になるため、Azure SQL Database の名前を記録しておいてください。
Azure SQL Database を展開するには
Azure SQL Database に接続してデータベースを展開するには、データベースを展開するコンピューターからのトラフィックを許可するように、ファイアウォール規則を作成する必要があります。 そうしない場合、Azure SQL Database への接続は、次の図の例と同様のエラーが出て拒否されます。
ファイアウォール規則を作成するには、Azure ポータル内で、事前に作成した Azure SQL Database を選択してから、トップ ナビゲーションにある [構成] リンクをクリックします。
[許可する IP アドレス] セクションでは、次の図のように、自分の IP アドレスが現在示されています。 [許可する IP アドレスに追加] を選択してファイアウォール規則を追加します。 これによって Azure SQL Database とデータベースの展開への接続が可能になります。 フッターにある [保存] を選択します。
Azure SDK for .NET 2.3 を使用して Visual Studio からデータベースを展開します。
Visual Studio で [SQL Server オブジェクト エクスプローラー] ツール ウィンドウを開き、[SQL Server] ノードを右クリックして、[SQL Server の追加] を選択します。
[サーバーに接続] ダイアログでサーバー名を入力し、認証を [SQL Server 認証] に設定し、Azure SQL Database を作成した際に定義したものと同じログインとパスワードを入力します。 このサーバー名は、サーバーの完全修飾名 (
[server-name].database.windows.net
) である必要があります。次の図を参照してください。
Azure SQL Database へ接続後、新しく追加されたサーバーのノードを展開し、[データベース] ノードを右クリックして、[データ層アプリケーションを発行] を選択して発行ウィザードを開きます。
[ソース データ層アプリケーション (.dacpac)] セクションで、[参照] ボタンを使用してデータベース プロジェクトが前の手順で構築されたときに作成した *.dacpac ファイルを探し、データベース名が CustomerDb に設定されていることを確認します。
[発行] をクリックして Azure SQL Database の CustomerDb を発行します。
Visual Studio [ SQL Server オブジェクト エクスプローラー] ツール ウィンドウを更新して、[ データベース] ノード以下にリストされた CustomerDb を確認します。
注:
データベースが自動ホスト型アドイン用にどのような方法で作成されたかによって、Azure への展開用に余分の作業が必要になる場合があります。 詳細については、「Visual Studio でのデータベースとデータ層アプリケーションの作成と管理」を参照してください。
展開後のアクション
Azure SQL Database の作成後に、データベースへの接続の確立で使用する接続文字列のコピーを作成します。 これは 2 つの方法で取得することができます。
1 つは Azure ポータルへサインインして、前回の手順で作成された Azure SQL Database (CustomerDb) へ移動する方法です。 データベースの [ダッシュボード] ページで、[接続文字列の表示] リンクをクリックして、接続文字列のリストを確認します。 後での使用のために [ADO.NET] 接続文字列のコピーを作成します。
接続文字列を取得するもう 1 つの方法は、Azure SDK v2.3 がインストールされている Visual Studio 内から行う方法です。 Visual Studio の [SQL Server オブジェクト エクスプローラー] ツール ウィンドウ内で、[CustomerDb] データベースを選択します。 データベースを選択後、[プロパティ] ツール ウィンドウを表示して接続文字列を確認します。 これは上述の Azure ポータルにあるのと同じ値です。
Azure Web サイトの作成
次の手順では、プロバイダー向けのホスト型アドイン用にリモート Web アプリケーションが存在する、新しい Azure Web サイトを作成します。 これは、アドインを登録する前にリモート Web アプリケーションの URL が必要であるため、最初に実行する必要があります。 ただし、SharePoint でのアドインの登録は、ASP.NET Web アプリケーション用のファイルを展開する前に行う必要があります。これは、登録プロセス (クライアント ID とクライアント シークレット) からの 2 つの出力が、ASP.NET Web アプリケーション ファイルの展開前に必要となるためです。
新しい Azure Web サイトを作成する
Azure ポータルにサインインします。 ダッシュボードの読み込みが終わったら、次の図に示すように、左側の余白にある [Web サイト] ナビゲーション リンクをクリックして、フッターにある [新規] ボタンを選択します。
新しい Web サイト ウィザードで、[コンピューティング]、[Web サイト]、[簡易作成] の順に選択してから、[URL] と [Web ホスティング プラン] を指定します。 最後に、Web サイトを作成する [地域] を指定します。 後で作成する Azure SQL Database でも同じ地域を使用するため、選択した地域を覚えておいてください。
また Web ホスティング プランがまだ存在しない場合や新しいプランを使用したい場合は、[新しい Web ホスティング プランの作成] を選択します。 次の図に例を示します。
Azure Web サイトの作成後、そのサイトで使用した URL を記録します。 上記の図では、作成したサイトは
http://spahapptoph.azurewebsites.net
です。
新しいアドインの登録
アドイン モデルを使用して作成されたすべての SharePoint アドインは、SharePoint とリモート Web アプリケーションの間の信頼を確立するために、ホストする SharePoint ファームまたはテナントに登録する必要があります。 そのためには、次の値を指定して SharePoint に新しいアドイン プリンシパルを登録します。
- クライアント ID: アドイン ID
- クライアント シークレット: アドインのパスワード
- タイトル: アドインの名前
- アドイン ドメイン: リモート Web アプリケーションのトップレベル ドメイン
自動ホスト型アドインが SharePoint Online にインストールされると、Office 365 はアドイン プリンシパルを自動的に作成します。 リモート Web アプリケーションの URL を知っているのは、そのサイトを自動的に作成するためです。 さらにクライアント ID およびクライアント シークレットも取り込んで、リモート Web アプリケーションの web.config に追加します。web.config とは、Microsoft が提供するクラス (TokenHelper.cs または .vb ファイル) が、要求を検証したり SharePoint で認証したりするときに参照する場所です。
しかし、プロバイダー向けのホスト型アドインでは、開発者はアドインを手動で登録し、ASP.NET Web プロジェクトの web.config を手動で更新する必要があります。
新しいアドインを登録するには
アドインをインストールする SharePoint Web サイトのアドイン登録ページへ移動します。 このページは、
http://[SharePoint-site-url]/_layouts/15/appregnew.aspx
にあります。アドイン登録ページで、アドインの種類を [Web サーバーで実行中のアドイン] に設定してから、2 つの [生成] ボタンを選択して新しいクライアント ID およびクライアント シークレットを作成します。
[タイトル] フィールドにアドインの名前を入力し、前回の手順で作成した対象 Azure Web サイトの URL を [アドイン ドメイン] フィールドに入力します。 最後に [作成] ボタンを選択します。
アドインが登録されると、SharePoint は、登録を作成するためのフォームに使用した情報の要約を表示します。 後の手順で必要となるため、この情報 (具体的にはクライアント ID とクライアント シークレット) をコピーして保管しておくことは非常に重要です。
リモート Web アプリケーション用に Azure Web サイトを更新および展開する
次の手順は、リモート Web アプリケーションを、自動ホスト型アドインではなくプロバイダー向けのホスト型アドインとして展開できるように再構成することです。 ASP.NET サイトを Azure Web サイトに展開する方法は複数あります。Visual Studio からの直接の展開、Visual Studio Team Services などのソース コントロールからの自動展開、または GitHub からの展開、さらには試験済みで本物の FTP オプションを使用した展開などがあります。 この記事では Visual Studio を使用します。 しかし、Web アプリケーションを展開するには、まずプロバイダー向けのホスト型アドインを使えるようにするために、多少の更新が必要です。
リモート Web アプリケーション プロジェクトを更新するには
ASP.NET MVC Web アプリケーション内で実行する必要がある大きな変更は、web.config ファイルにあります。 このファイル内には、appSettings> ノード内に< 3 つの設定があります。 それらは、 ClientId、 ClientSecret、および SqlAzureConnectionString です。 最初の 2 つは Microsoft 提供のクラス (TokenHelper.cs または .vb) により、リモート Web アプリケーションから SharePoint への認証および通信を容易にするために使用されます。 後者の SqlAzureConnectionString は、Azure SQL データベースに接続するためにアドインによって使用されます。
SharePoint の自動ホスト型アドインの場合、これらの設定用の値は、アドインのインストール時に Azure Web サイトおよび Azure SQL Database が作成される際に Office 365 が入力します。 ただし、プロバイダー向けのホスト型アドインでは、これらはアドインが展開される前に手動で設定しておく必要があります。
1 つのオプションは、前述の手順で 3 つの設定に値を貼り付けることですが、このアプローチの欠点は、いったんそれらの変更が必要になると、web.config を手動で更新して Azure Web サイトへ再展開する必要があることです。
もう 1 つのオプションとして、単にこれらの設定をクリア (各種設定キーはそのままで、value="" 属性を空の文字列に設定) して、代わりにそれらを Azure ポータルから Azure Web サイト設定で定義する方法があります。 このアプローチから、各種の設定はコードベースの更新なしに変更できることがわかります。 これを実行するには、次の操作を実行します。
Azure ポータルにサインインし、前の手順で作成した Azure Web サイトに移動します。
Azure Web サイト ダッシュボード ページから、トップ ナビゲーション メニューの [構成] を選択し、[アドインの設定] セクションまで下へスクロールします。
3 つの新しいアドイン設定を、web.config ファイルにある同名の設定を使用して追加します。 これまでの手順で取得した値を ClientId、ClientSecret、および SqlAzureConnectionString に対して使用します。
Azure SQL Database 接続文字列が正確で有効であることを確認してください。接続文字列は Azure ポータルと Visual Studio では、パスワード属性はマスクに置換されるからです。 接続文字列内のマスクされたパスワードは、Azure SQL Database のログインを作成する際に、定義済みの正しいパスワードを使用するように変更する必要があります。
リモート Web アプリケーションを Azure Web サイトへ展開する
ここで ASP.NET MVC Web アプリケーション ファイルをリモート Web アプリケーションとして Azure Web サイトへ展開する必要があります。
Visual Studio 内で Web プロジェクトを右クリックして [発行] を選択します。 これにより [Web の発行] ウィザード ダイアログが起動します。
このダイアログで、[Windows Azure Web サイト] を選択して [発行] をクリックします。
以下の図に示すように、ここまでの手順で作成した Azure Web サイトの名前を選択して [OK] を選択し、さらにサイトの URL が HTTPS であることを確認します。
[接続の検証] ボタンをクリックして、設定と接続状態が良好であることを確認します。
[発行] を選択すると、Visual Studio によって、ASP.NET Web アプリケーションの Azure Web サイトへの展開が開始されます。
サイトの URL をコピーします。
Web サイトの展開後、Visual Studio は既定のデバッグ ブラウザーを起動して Azure Web サイトへ移動します。 ただし、このサイトの表示はエラーになることが予想されます。エラーが予想される理由は、ASP.NET MVC コントローラーが、SharePoint からの HTTP POST 要求のヘッダーで、特定の値をコントローラーに送信することが想定される属性 (具体的には SharePointContextFilter
) で修飾されているにもかかわらず、既定では、ブラウザーが HTTP GET 要求を送信するためです。
注:
ASP.NET Web アプリケーションを Azure Web サイトに展開する際の追加オプションについては、「Azure App Service へのローカル Git 展開」を参照してください。
Azure Web サイトのカスタム ドメインと SSL 証明書
すべての Azure Web サイトでは、次の名前付け規則を使用します: http[s]://[site-name].azurewebsites.net
。 Microsoft では、*.azurewebsites.net
ドメイン下にあるすべての Web サイトにワイルドカード SSL 証明書を既に追加済みですが、顧客は各自の Azure Web サイトでカスタム ドメインを自由に利用し、同時にそれらのカスタム ドメインには顧客独自の SSL 証明書を使用できます。
カスタム ドメインの使用の詳細については、「既存のカスタム DNS 名を Azure Web アプリケーションにマッピングする」を参照してください。
カスタム ドメイン名へのカスタム SSL 証明書の追加の詳細については、「既存のカスタム SSL 証明書を Azure Web アプリケーションにバインドする」を参照してください。
SharePoint アドイン プロジェクトの再構成
最後の手順は、SharePoint アドイン プロジェクトの再構成です。 SharePoint アドイン用の Visual Studio プロジェクトでは、アドインの種類が自動ホスト型に構成されています。これをプロバイダー向けのホスト型に変更する必要があります。
SharePoint アドイン プロジェクトを再構成するには
SharePoint アドイン プロジェクトの AppManifest.xml ファイルを開き、[ホスティングの種類] オプションを [自動ホスト型] から [プロバイダー向けのホスト型] へ変更します。
アドインのスタート ページをリモート Web アプリケーションのスタート ページの URL (Azure Web サイトの URL) を指すように設定します。 クエリ文字列の値 {StandardTokens} がまだない場合は、必ず含めてください。 これにより、SharePoint がリモート Web アプリケーションを開いたときに、コアのクエリ文字列トークンを URL に確実に追加します。
Visual Studio のソリューション エクスプローラーで SharePoint アドイン プロジェクトを選択し、SharePoint アドイン プロジェクトにある ASP.NET MVC Web アプリケーションへの参照を削除します。 以下の図に示すとおり、[プロパティ] ツール ウィンドウ内で、[Web プロジェクト] プロパティを [(なし)] に設定します。
この手順では、一部の設定がデザイナー内で公開されていないため、AppManifest.xml ファイルの手動の更新が必要です。 この作業は、AppManifest.xml ファイルの既存の変更を保存してから、同じファイルをソリューション エクスプローラーで右クリックして [コードの表示] を選択することで行います。
AppManifest.xml ファイルのコードの表示内で、ASP.NET MVC Web アプリケーション プロジェクトと SQL データ層アプリケーション プロジェクトへの 2 つの参照を削除します。これらは SharePoint プロバイダー向けのホスト型アドイン内では必要ないためです。
新しい GUID を作成して、ProductId 属性にある既存の GUID と置き換えます。 これで SharePoint に対して、これが既存のアドインの更新ではなく新しいアドインであることを知らせます。
重要
既存の ProductID が使用されていた場合、SharePoint は、変換されたアドインがインストールされていると、「指定されたアドインと異なる別のアドインに同じバージョンと製品 ID が付けられています」というエラーを返します。
RemoteWebApplication> 要素を<見つけて、ClientId 属性を、アドインを SharePoint に登録するときに取得されたものと同じ GUID に更新し、Azure Web サイトの web.config アドイン設定で使用された GUID と同じにします。
すべての変更を AppManifest.xml ファイルに保存すると、このアドインを SharePoint プロバイダー向けのホスト型アドインとしてテストする準備が完了します。 アドインを SharePoint ファームまたは SharePoint Online サイトに展開して、変換手順が正しく実行されたことを確認します。