別に Bot Application に限った話ではないのですけどね。
Microsoft の Bot Framework を使った Bot Application の作成方法は、いくつかWebで公開されていますが、それらに沿って作成したソースコードを GitHub などの誰でも閲覧できるリポジトリで管理・公開すると、本来公開すべきでない以下の情報が含まれてしまいます。
これらをソースコード管理に含めないようにする方法を紹介します。
たとえば、
では、BotのIDやパスワードなどを、Web.config の <app key="BotId" などに設定するよう書かれています。
実際プロジェクト作成直後の Web.config を見ても "YourBotID" などと書かれており、「ここに書くのが当然」感を醸し出しています。これがよくない!
<!-- Web.config -->
<configuration>
<appsettings>
<!-- update these with your BotId, Microsoft App Id and your Microsoft App Password-->
<add key="BotId" value="YourBotID" />
<add key="MicrosoftAppId" value="" />
<add key="MicrosoftAppPassword" value="" />
</appsettings>
: (略)Web.config 及び Web.Debug.config, Web.Release.config は、 ASP.NET の Webアプリケーションに関する設定を記述するもので、ソースコード管理に含めるべき情報です。
ここにIDやパスワードを記述してはいけません
ではどこに記述するかというと、
で紹介されている方法を使って、別のファイルに逃します。
具体的には、
Web.local.config というファイル(ファイル名は何でもよい)をプロジェクトに追加し、秘匿情報を含む XML のブロックはそちらに記述するWeb.config に上記ファイルへの参照を記述するとします。
Web.local.config は、 Web.config などと同じディレクトリに追加し、ビルドアクションを「コンテンツ」とします。
Web.local.config の内容は以下です。
<!-- Web.local.config -->
<appSettings>
<add key="BotId" value="<あならのBOTID>" />
<add key="MicrosoftAppId" value="<あなたのMicrosoftAppId>" />
<add key="MicrosoftAppPassword" value="<あなたのMicrosoftAppPassword>" />
</appSettings>Web.config に記述していた <appSettings> 要素を切り出してきた感じですね。
そして、 Web.config を次のように修正します。
<!-- Web.config -->
<configuration>
<appSettings file="Web.local.config">
<!-- 秘匿でない設定情報があればここに書く -->
</appSettings>
: (略)<appSettings file="Web.local.config"> と記述することで、Web.local.config の内容をここに注入できます。
あとは Web.local.config を .gitignore に追加するなどしてソースコード管理対象から除外します。
Web.local.config が存在しなくてもビルドや実行はできるようですが、初見の人には不親切なので、 README.md で補足説明をしておくのがよいでしょう。
前の手順で設定したID、パスワードなどは「開発用」の情報です。 Azureに配置した本番環境では、別のID、パスワードを使用したいケースは普通にあります。 本番環境の設定はAzureポータルから行えます。
この図のように、
ここで設定した内容は、配布した Web.config にある <appSettings> の内容を上書きします。
Visual Studio 2017 は、IDE から Azure への発行ができてとても便利なのですが、発行のための情報も保持してしまうので、その際の情報もソースコード管理に含めるべきではありません。
これらの情報はプロジェクトのディレクトリの Properties\PublishProfiles というサブディレクトリに、 *.pubxml, *.pubxml.user というファイル名で保存されるようなので、このディレクトリ毎、あるいは個別のファイルを .gitignore に追加すればよいです。
Web.config には秘匿情報を書かないWeb.local.config を作って、そちらに書く、このファイルはソースコード管理しない結果、 .gitignore に次の2行を追加するとよいです。
# .gitignore
<省略>
*.local.config
PublishProfiles/手前味噌ですが、上記以外の .gitignore の設定は https://www.gitignore.io/ で "VisualStudio" と検索して生成されるものを使用すると便利です(上の2行が含まれているわけではありません)。