質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

1回答

5709閲覧

2017年版 共有プロジェクトとPCLのどちらがお勧めですか?

hossy

総合スコア15

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2017/03/21 12:34

###聞きたいこと

Visual Studio 2017がリリースされた現在、新規にXamarin.Formsのプロジェクトを作る時に、共有プロジェクトとPCLのどちらがお勧めかについて、考慮する点などがあれば教えていただきたいです。

###自分の認識している考慮点

自分が認識している共有プロジェクトとPCLの違いとしては、以下のような点があると考えています。

  • ビルド時間

PCLの場合、変更がPCLの部分のみで済む時には、Android/iOS側は更新不要でビルドに時間がかからない。
共有プロジェクトの場合、Android/iOSのビルドが必要になるので時間がかかる。

  • .NET Standardを使ったライブラリの使用

共有プロジェクトの場合、AndroidとiOSの事だけ考るのであれば、MonoAndroid/Xamarin.iOSにだけ対応していれば良いので.NET Standard 1.4対応のライブラリが使用できる。
PCLの場合、Profileにもよるが1.1くらいまでしか使えない。

###その他

PCLのプロジェクトを.NET Standardに変更して使うというやりかたもあるかと思います。
ただ、この方法に関しては以下の点がマイナスだと考えています。

  1. project.jsonを使った古いプロジェクト構成
  2. iOSのビルドで警告が出ることがあった(?)

上記を踏まえた上で、この方法に関するメリット等があれば教えていただきたいです。

###その他

共有プロジェクトを使うかPCLを使うかの違いについて、バッドノウハウが必要になるケースや、ビルド警告が出るケースなどの情報も知っていたら教えていただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

PCL vs 共有プロジェクト

私は PCL を使用します。

共有プロジェクトは、原理的には if-else で処理を分岐しているに過ぎないので、その分岐箇所が増えてくると可読性、保守性の面でメリットがありません。

PCL を使用した場合、プラットフォーム固有の処理は、別DLLに切り出すことを強制されるので、共有プロジェクトのように処理がごちゃごちゃすることはありません。同じく、共通化する機能を抽象クラスなどで定義する必要があるので、「どのような機能がプラットフォーム固有なのか」が管理しやすいです。

.NET Standard について

共有プロジェクトの場合、AndroidとiOSの事だけ考るのであれば、MonoAndroid/Xamarin.iOSにだけ対応していれば良いので.NET Standard 1.4対応のライブラリが使用できる。
PCLの場合、Profileにもよるが1.1くらいまでしか使えない。

Visual Studio 2017 で新規プロジェクト作成時の既定値が「共有プロジェクト」になっていますが、これは上記のような問題を(一時的に)回避するためかな、と推測しています。(でなければ .NET Standard を作る意味がないのでは。)

投稿2017/03/21 13:09

amay077

総合スコア1075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hossy

2017/03/21 13:26 編集

回答ありがとうございます。 今回聞きたかったのは、責務をどうわけるかという設計的な観点というよりも、テクノロジー的なメリット・デメリット、嵌まりポイントの有無についてでした。 ちょっと構成を変えたりしようとすると、なにかしらの警告に遭遇することが多いと感じたもので。 実際にそれぞれを選択しているケースで、遭遇する問題点など、なにか情報がありましたら教えていただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問