別に 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行が含まれているわけではありません)。