CSOM(C#)でSharePointサイトを作成する

#概要
CSOM(C#)で新しくSharePointサイトを作成するのに、簡単かと思いきや意外と迷走したので備忘録として書いておきます。
機能としてはそれほど需要が無いかもしれませんが、テスト用に複数のサイトをまとめて作る場合などに便利です。

#コード

```c#:ControlSite.cs
                var loginUser = ConfigurationManager.AppSettings["SPO_ID"];
                var loginPass = ConfigurationManager.AppSettings["SPO_PASS"];
                var siteCollectionUrl = ConfigurationManager.AppSettings["SITE_URL"];

                using (var clientContext = new ClientContext(siteCollectionUrl))
                using (var secureString = new SecureString())
                {
                    foreach (var c in loginPass) secureString.AppendChar(c);
                    secureString.MakeReadOnly();
                    clientContext.Credentials = new SharePointOnlineCredentials(loginUser, secureString);

                    //作成するサイト情報
                    var subSiteCreateInfo = new WebCreationInformation
                    {
                        Title = "サブサイトです",               // タイトル
                        Description = "サブサイトの説明です",   // 説明
                        Language = 1041,                        // 言語(日本語)
                        Url = "subsite20200205-01",             // Url
                        UseSamePermissionsAsParentSite = true,  // 権限の継承
                        WebTemplate = "STS#3"                   // サイトテンプレート(チームサイト・Office365グループ無し)
                    };

                    //作成
                    var newWebSite = clientContext.Web.Webs.Add(subSiteCreateInfo);
                    clientContext.Load(
                        newWebSite,
                        s => s.ServerRelativeUrl,       // 結果出力用
                        s => s.Created);                // 結果出力用
                    clientContext.ExecuteQuery();

                    Console.WriteLine($"サブサイトが正常に作成されました。Url:{newWebSite.ServerRelativeUrl} Created:{newWebSite.Created}");
                }

```

#コード説明
1. サイトコレクションまたはサイトに接続
2. WebCreationInformationクラスを用いて新しいサイトのプロパティを指定
3. ClientContext.Web.Webs.Addで、現在のサイトのサブサイトとして新しいサイトが作成される

#WebCreationInformationクラス
新しいサイトのプロパティを設定します。

* Title … サイト名を指定
* Description … サイトの説明を指定
* Language … LCIDを指定
* Url … URLを指定
* UseSamePermissionsAsParentSite … True：権限を継承する / False：権限を継承しない
* WebTemplate … サイトテンプレートを指定

##WebCreationInformation.Lanuguage
LCIDを指定します。日本語の場合、1041です。
他言語の場合は、下記が参照になると思います。
[Language.Lcid property](https://docs.microsoft.com/en-us/previous-versions/office/sharepoint-server/jj167546(v%3Doffice.15)) 

##WebCreationInformation.WebTemplate 
サイトテンプレートを指定します。
チームサイト・Office365グループ無しは、"STS#3" です。

サイトテンプレート一覧を探したのですが、Microsoft公式からは見つけられませんでしたので、下記リンクを置いておきます。
[SharePoint Site Template ID – Microsoft Office 365](https://www.technologytobusiness.com/microsoft-sharepoint/sharepoint-online-site-template-id )
[ブラウザ上で、サイト作成時に使用したテンプレートを特定する](https://blog.house-soft.info/archives/487)

ちなみに私は一つサイトを作り、そのWebサイトのプロパティをデバッグで調べるという力技を使いました。

#実行結果
下記のように新しくサイトが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94732/a7d793b3-3268-2a86-ea78-b302e01e34c3.png)

#参考
[SharePoint のクライアント ライブラリ コードを使用して基本的な操作を完了する](https://docs.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/complete-basic-operations-using-sharepoint-client-library-code)