Xamarin から BLOB ストレージを使用する方法How to use Blob Storage from Xamarin

Xamarin を利用すれば、開発者は共有 C# コードベースを利用して iOS、Android、Windows Store アプリをネイティブ ユーザー インターフェイスで作成できます。Xamarin enables developers to use a shared C# codebase to create iOS, Android, and Windows Store apps with their native user interfaces. このチュートリアルでは、Xamarin アプリケーションで Azure BLOB ストレージを使用する方法を紹介します。This tutorial shows you how to use Azure Blob storage with a Xamarin application. コードの説明に入る前に Azure Storage について学習するには、「 Microsoft Azure Storage の概要」を参照してください。If you'd like to learn more about Azure Storage, before diving into the code, see Introduction to Microsoft Azure Storage.

Azure のストレージ アカウントの作成Create an Azure storage account

最初の Azure ストレージ アカウントを作成する最も簡単な方法は、Azure Portal を利用することです。The easiest way to create your first Azure storage account is by using the Azure portal. 詳細については、「 ストレージ アカウントの作成」を参照してください。To learn more, see Create a storage account.

Azure Storage アカウントは、Azure PowerShellAzure CLI、または .NET 用 Azure ストレージ リソース プロバイダーを使用して作成することもできます。You can also create an Azure storage account by using Azure PowerShell, Azure CLI, or the Azure Storage Resource Provider for .NET.

現時点で Azure にストレージ アカウントを作成しない場合は、Azure ストレージ エミュレーターを使って、ローカル環境でコードの実行とテストを行うこともできます。If you prefer not to create a storage account in Azure at this time, you can also use the Azure storage emulator to run and test your code in a local environment. 詳細については、「 開発とテストのための Azure のストレージ エミュレーター使用」を参照してください。For more information, see Use the Azure Storage Emulator for Development and Testing.

Azure Storage にアクセスするようにアプリケーションを構成するConfigure your application to access Azure Storage

Storage サービスにアクセスできるようにアプリケーションを認証するには、次の 2 つの方法があります。There are two ways to authenticate your application to access Storage services:

  • 共有キー: テスト目的のみに共有キーを使用しますShared Key: Use Shared Key for testing purposes only
  • Shared Access Signature (SAS): 運用アプリケーション用に SAS を使用しますShared Access Signature (SAS): Use SAS for production applications

共有キーShared Key

共有キー認証の場合、アプリケーションは Storage サービスへのアクセスにアカウント名とアカウント キーを使用します。Shared Key authentication means that your application will use your account name and account key to access Storage services. このライブラリを使用する方法を簡単に説明するため、ここでは共有キー認証を使用します。For the purposes of quickly showing how to use this library, we will be using Shared Key authentication in this getting started.

警告

共有キー認証はテスト目的にのみ使用します。Only use Shared Key authentication for testing purposes! アカウント名とアカウント キーは、関連付けられているストレージ アカウントへの完全な読み取りおよび書き込みアクセスが付与されており、アプリをダウンロードするすべてのユーザーに配布されます。Your account name and account key, which give full read/write access to the associated Storage account, will be distributed to every person that downloads your app. これは信頼できないクライアントによってキーが侵害される危険があるため、 お勧めしませんThis is not a good practice as you risk having your key compromised by untrusted clients.

共有キー認証を使用する場合は、 接続文字列を作成します。When using Shared Key authentication, you will create a connection string. 接続文字列の構成要素は次のとおりです。The connection string is comprised of:

  • DefaultEndpointsProtocol - HTTP または HTTPS を選択できますが、The DefaultEndpointsProtocol - you can choose HTTP or HTTPS. HTTPS の使用を強くお勧めします。However, using HTTPS is highly recommended.
  • Account Name - ストレージ アカウントの名前The Account Name - the name of your storage account
  • Account Key - Azure Portal でお使いのストレージ アカウントに移動し、 [キー] アイコンをクリックして確認します。The Account Key - On the Azure Portal, navigate to your storage account and click the Keys icon to find this information.
  • (省略可能) EndpointSuffix - Azure China、Azure Governance など、別のエンドポイント サフィックスを持つリージョンのストレージ サービスに対して使用されます。(Optional) EndpointSuffix - This is used for storage services in regions with different endpoint suffixes, such as Azure China or Azure Governance.

共有キー認証を使用する接続文字列の例を次に示します。Here is an example of connection string using Shared Key authentication:

"DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here"

Shared Access Signatures (SAS)Shared Access Signatures (SAS)

モバイル アプリケーションの場合、Azure Storage サービスに対するクライアントからの要求を認証する際には、Shared Access Signature (SAS) を使用することをお勧めします。For a mobile application, the recommended method for authenticating a request by a client against the Azure Storage service is by using a Shared Access Signature (SAS). SAS を使用すると、期間およびアクセス許可セットを指定して、リソースへのクライアント アクセスを許可することができます。SAS allows you to grant a client access to a resource for a specified period of time, with a specified set of permissions. ストレージ アカウント所有者は、モバイル クライアントが使用する SAS を生成する必要があります。As the storage account owner, you'll need to generate a SAS for your mobile clients to consume. SAS を生成するには、クライアントに配布する SAS を生成する別のサービスを記述することが必要になります。To generate the SAS, you'll probably want to write a separate service that generates the SAS to be distributed to your clients. テスト目的で、Microsoft Azure ストレージ エクスプローラーまたは Azure Portal を使用して SAS を生成できます。For testing purposes, you can use the Microsoft Azure Storage Explorer or the Azure Portal to generate a SAS. SAS の作成時には、SAS の有効期間と、SAS がクライアントに付与するアクセス許可を指定できます。When you create the SAS, you can specify the time interval over which the SAS is valid, and the permissions that the SAS grants to the client.

次に示すのは、Microsoft Azure ストレージ エクスプローラーを使用して SAS を生成する方法の例です。The following example shows how to use the Microsoft Azure Storage Explorer to generate a SAS.

  1. まだインストールしていない場合は、 Microsoft Azure ストレージ エクスプローラーをインストールIf you haven't already, Install the Microsoft Azure Storage Explorer

  2. サブスクリプションに接続します。Connect to your subscription.

  3. ストレージ アカウントをクリックし、左下の [アクション] タブをクリックします。Click on your Storage account and click on the "Actions" tab at the bottom left. [Get Shared Access Signature] (Shared Access Signature の取得) をクリックすると、SAS の "接続文字列" が生成されます。Click "Get Shared Access Signature" to generate a "connection string" for your SAS.

  4. 次に示すのは、ストレージ アカウントの BLOB サービスに対するサービス、コンテナー、およびオブジェクト レベルの読み取りおよび書き込みのアクセス許可を付与する SAS 接続文字列の例です。Here is an example of a SAS connection string that grants read and write permissions at the service, container and object level for the blob service of the Storage account.

    "SharedAccessSignature=sv=2015-04-05&ss=b&srt=sco&sp=rw&se=2016-07-21T18%3A00%3A00Z&sig=3ABdLOJZosCp0o491T%2BqZGKIhafF1nlM3MzESDDD3Gg%3D;BlobEndpoint=https://youraccount.blob.core.windows.net"

ご覧のように、SAS を使用する場合、アプリケーションでアカウント キーを公開することはありません。As you can see, when using a SAS, you’re not exposing your account key in your application. SAS の詳細および SAS 使用のベスト プラクティスについては、 Shared Access Signature: SAS モデルの説明に関するページをご覧ください。You can learn more about SAS and best practices for using SAS by checking out Shared Access Signatures: Understanding the SAS model.

新しい Xamarin アプリケーションの作成Create a new Xamarin Application

このチュートリアルでは、Android、iOS、および Windows を対象とするアプリケーションを作成します。For this tutorial, we'll be creating an app that targets Android, iOS, and Windows. このアプリケーションは、コンテナーを作成し、そのコンテナーに BLOB をアップロードします。This app will simply create a container and upload a blob into this container. ここでは Windows で Visual Studio を使用しますが、macOS で Xamarin Studio を使用しても同じようにアプリケーションを作成できます。We'll be using Visual Studio on Windows, but the same learnings can be applied when creating an app using Xamarin Studio on macOS.

次の手順でアプリケーションを作成します。Follow these steps to create your application:

  1. Xamarin for Visual Studioをダウンロードしてインストールします (まだ、インストールしていない場合)。If you haven't already, download and install Xamarin for Visual Studio.
  2. Visual Studio を開き、空のアプリ (ネイティブ ポータブル) を作成します ( [ファイル] > [新規] > [プロジェクト] > [クロス プラットフォーム] > [空のアプリ (ネイティブ ポータブル)] )。Open Visual Studio, and create a Blank App (Native Portable): File > New > Project > Cross-Platform > Blank App(Native Portable).
  3. [ソリューション エクスプローラー] ウィンドウでソリューションを右クリックし、 [ソリューションの NuGet パッケージの管理] を選択します。Right-click your solution in the Solution Explorer pane and select Manage NuGet Packages for Solution. WindowsAzure.Storage を検索し、最新の安定バージョンを、ソリューション内のすべてのプロジェクトにインストールします。Search for WindowsAzure.Storage and install the latest stable version to all projects in your solution.
  4. プロジェクトをビルドして実行します。Build and run your project.

これで、ボタンをクリックすることでカウンターをインクリメントできるアプリケーションが作成されます。You should now have an application that allows you to click a button which increments a counter.

コンテナーの作成および BLOB のアップロードCreate container and upload blob

次に、(Portable) プロジェクトで、コードを MyClass.cs に追加します。Next, under your (Portable) project, you'll add some code to MyClass.cs. このコードでは、コンテナーを作成し、このコンテナーに BLOB をアップロードします。This code creates a container and uploads a blob into this container. MyClass.cs は次のようになります。MyClass.cs should look like the following:

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System.Threading.Tasks;

namespace XamarinApp
{
    public class MyClass
    {
        public MyClass ()
        {
        }

        public static async Task performBlobOperation()
        {
            // Retrieve storage account from connection string.
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=your_account_name_here;AccountKey=your_account_key_here");

            // Create the blob client.
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // Retrieve reference to a previously created container.
            CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

            // Create the container if it doesn't already exist.
            await container.CreateIfNotExistsAsync();

            // Retrieve reference to a blob named "myblob".
            CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob");

            // Create the "myblob" blob with the text "Hello, world!"
            await blockBlob.UploadTextAsync("Hello, world!");
        }
    }
}

"Your_account_name_here" と "your_account_key_here" は、実際のアカウント名とアカウント キーに置き換えます。Make sure to replace "your_account_name_here" and "your_account_key_here" with your actual account name and account key.

iOS、Android、および Windows Phone プロジェクトすべてが、ポータブル プロジェクトを参照します。つまり、すべての共有コードを 1 か所に記述して、すべてのプロジェクトで使用できます。Your iOS, Android, and Windows Phone projects all have references to your Portable project - meaning you can write all of your shared code in one place and use it across all of your projects. これで、次のコード行を各プロジェクトに追加して、利用を開始することができます: MyClass.performBlobOperation()You can now add the following line of code to each project to start taking advantage: MyClass.performBlobOperation()

XamarinApp.Droid > MainActivity.csXamarinApp.Droid > MainActivity.cs

using Android.App;
using Android.Widget;
using Android.OS;

namespace XamarinApp.Droid
{
    [Activity (Label = "XamarinApp.Droid", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        int count = 1;

        protected override async void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button> (Resource.Id.myButton);

            button.Click += delegate {
                button.Text = string.Format ("{0} clicks!", count++);
            };

            await MyClass.performBlobOperation();
            }
        }
    }
}

XamarinApp.iOS > ViewController.csXamarinApp.iOS > ViewController.cs

using System;
using UIKit;

namespace XamarinApp.iOS
{
    public partial class ViewController : UIViewController
    {
        int count = 1;

        public ViewController (IntPtr handle) : base (handle)
        {
        }

        public override async void ViewDidLoad ()
        {
            int count = 1;

            public ViewController (IntPtr handle) : base (handle)
            {
            }

            public override async void ViewDidLoad ()
            {
                base.ViewDidLoad ();
                // Perform any additional setup after loading the view, typically from a nib.
                Button.AccessibilityIdentifier = "myButton";
                Button.TouchUpInside += delegate {
                    var title = string.Format ("{0} clicks!", count++);
                    Button.SetTitle (title, UIControlState.Normal);
                };

                await MyClass.performBlobOperation();
            }

            public override void DidReceiveMemoryWarning ()
            {
                base.DidReceiveMemoryWarning ();
                // Release any cached data, images, etc. that aren't in use.
            }
        }
    }
}

XamarinApp.WinPhone > MainPage.xaml > MainPage.xaml.csXamarinApp.WinPhone > MainPage.xaml > MainPage.xaml.cs

using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=391641

namespace XamarinApp.WinPhone
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        int count = 1;

        public MainPage()
        {
            this.InitializeComponent();

            this.NavigationCacheMode = NavigationCacheMode.Required;
        }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.
        /// This parameter is typically used to configure the page.</param>
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            int count = 1;

            public MainPage()
            {
                this.InitializeComponent();

                this.NavigationCacheMode = NavigationCacheMode.Required;
            }

            /// <summary>
            /// Invoked when this page is about to be displayed in a Frame.
            /// </summary>
            /// <param name="e">Event data that describes how this page was reached.
            /// This parameter is typically used to configure the page.</param>
            protected override async void OnNavigatedTo(NavigationEventArgs e)
            {
                // TODO: Prepare page for display here.

                // TODO: If your application contains multiple pages, ensure that you are
                // handling the hardware Back button by registering for the
                // Windows.Phone.UI.Input.HardwareButtons.BackPressed event.
                // If you are using the NavigationHelper provided by some templates,
                // this event is handled for you.
                Button.Click += delegate {
                    var title = string.Format("{0} clicks!", count++);
                    Button.Content = title;
                };

                await MyClass.performBlobOperation();
            }
        }
    }
}

アプリケーションの実行Run the application

これで、このアプリケーションを、Android または Windows Phone エミュレーターで実行できます。You can now run this application in an Android or Windows Phone emulator. iOS エミュレーターで、このアプリケーションを実行することもできますが、それには Mac が必要です。You can also run this application in an iOS emulator, but this will require a Mac. これを行う具体的な手順については、 Mac への Visual Studio の接続For specific instructions on how to do this, please read the documentation for connecting Visual Studio to a Mac

アプリケーションを実行すると、コンテナー mycontainer がストレージ アカウントに作成されます。Once you run your app, it will create the container mycontainer in your Storage account. これには、テキスト Hello, world! が示された BLOB myblob が含まれています。It should contain the blob, myblob, which has the text, Hello, world!. これを確認するには、 Microsoft Azure ストレージ エクスプ ローラーを使用します。You can verify this by using the Microsoft Azure Storage Explorer.

次のステップNext steps

このチュートリアルでは、Blob Storage の 1 つのシナリオに焦点を当て、Xamarin で Azure Storage を使用するクロスプラットフォームのアプリケーションを作成する方法を学習しました。In this tutorial, you learned how to create a cross-platform application in Xamarin that uses Azure Storage, specifically focusing on one scenario in Blob Storage. ただし、Blob Storage だけでなく、Table Storage、File Storage、および Queue Storage を使用すると、さらに多くのことを行うことができます。However, you can do a lot more with not only Blob Storage, but also with Table, File, and Queue Storage. 詳細については、次の記事を確認してください。Please check out the following articles to learn more:

ヒント

Azure Storage Explorer を使用して Azure Blob Storage リソースを管理します。Manage Azure Blob storage resources with Azure Storage Explorer. Azure Storage Explorer は、Azure Blob Storage のリソースを管理できる Microsoft 製の無料のスタンドアロン アプリです。Azure Storage Explorer is a free, standalone app from Microsoft that enables you to manage Azure Blob storage resources. Azure Storage Explorer を使用して、BLOB コンテナーおよび BLOB を視覚的に作成、読み取り、更新、削除できるほか、BLOB コンテナーおよび BLOB へのアクセスを管理できます。Using Azure Storage Explorer, you can visually create, read, update, and delete blob containers and blobs, as well as manage access to your blobs containers and blobs.