2014年2月にMicrosoftがブラウザ上におけるソースコード閲覧の新しい体験を提供しました。今でも使うことが多い、Reference Sourceです!! 個人的にこの時の衝撃はすさまじいものがありました。
https://blogs.msdn.microsoft.com/dotnet/2014/02/24/a-new-look-for-net-reference-source/
※ Reference Sourceで閲覧可能なソースは、現在の4.6.2までの全ソースをzipでダウンロードできます。
さて、今回はこのReference Sourceを自分のソースコードにも適用できますよ。というお話です。こんな感じで!

Roslyn を使った Reference Source のジェネレータ
Reference Source以外にも実はRoslynも同様のフォーマットで公開されています。
これらはMicrosoftのエンジニアであるKirillOsenkovがOSSとして2015年に公開したSourceBrowserを使って生成されています。
Kirill Osenkov (@KirillOsenkov) September 24, 2015
SourceBrowserは非常に強力で、既存のC# プロジェクトのSolutionファイルを食わせるだけで自動的に静的サイトのdllやhtmlを生成します。
早速見てみましょう。
サンプル
今回は、UniRxをリファレンスソースとして参照可能にしてみます。事前に、Visual Studio Tools for Unityをインストールしておきましょう。
https://visualstudiogallery.msdn.microsoft.com/8d26236e-4a64-4d64-8486-7df95156aba9
SourceBrowser のビルド
SourceBrowserに含まれるHtmlGeneratorで、ソースコードをHtmlに変換、生成します。まずは、GitHubからクローンしたら、SourceBrowser.slnを開きHtmlGeneratorをDebugビルドしましょう。

ビルドできましたね?

静的Html の生成
では、次にHtmlGenerator のプロジェクトプロパティ > HtmlGenerator のプロジェクトプロパティで、HtmlGenerator のプロジェクトプロパティにReference Sourceを生成したいプロジェクトの .slnファイルを食わせましょう。今回、HtmlGenerator のプロジェクトプロパティに、UniRxを置いたので指定して実行します。これでHtmlが生成されます。

が、CIを前提にビルドされた .exeを使っても生成してみましょう。SourceBrowser\bin\Debug\HtmlGeneratorにSourceBrowser\bin\Debug\HtmlGeneratorが生成されているので次の書式で実行します。
HtmlGenerator.exe <生成したいプロジェクトの.sln> <生成先パス>
今回、私はHtmlGenerator.exe "D:\GitHub\UniRx\UniRx.sln" "D:\GitHub\UniRx.ReferenceSource\src"としました。

実行すると、さくさく生成されます。

中略

生成されました。非常に高速です。
Writing referencing assemblies complete. Took: 00:00:00.0277302 04:16:02 Finalizing references complete. Took: 00:00:08.6732978 04:16:02 Generating website complete. Took: 00:00:31.2171024
生成されたファイルは、HtmlGenerator.exeと同パスのIndexフォルダに生成されます。

Azure Web Apps にデプロイ
生成された中身はWeb.configやGlobal.asaxをはじめ、各種dllまで含まれておりRoslynベースで動いています。そのため、ホスティングするサーバーは .NET 4.6が動いている必要があります。まさにAzure Web Sites向けですね!


生成したファイルをGitHub経由でデプロイして閲覧できるようにしました。個人的に、こういう大量のファイルをただデプロイする場合は、GitHub -> Azure Web Apps連携がいいです。くれぐれもMSBuild + Deploy PackageやMSDeployは無駄なのでやめたいところです。
できました! Azure Web Appsも無料プランでお財布に優しいです。

UniRx.ReferenceSource
ということで、どうぞ。UniRxのソースをブラウザ上で閲覧できます。

できることはReference Source 同様です。定義へのジャンプ、コード検索、シンタックスハイライト、コード選択でURL共有、などなどちょっとしたIDEよりも高性能です。

CI
ちなみにVSTSを使うと、ビルドパイプラインをガシガシ重ねることで特別なスクリプトなどもなしにCI/CDが可能です。
同期ツール
イミュータブルなビルドパイプラインを作っていると、ローカルで同期をしたくなることがあります。しかし、RoboCopyは最終更新時間で判定、MSDeployはチェックサム検証コピーが可能ですが遅いと従来のツールでは問題があります。そこで、同じくKirillOsenkovが作成したCotentSyncを使うと爆速で同期できます。最高です。このツール、コードもきれいでシンプルで、本当に感動を覚えます。
guitarrapc_tech (@guitarrapc_tech) August 23, 2016
まとめ
グラニでは、実際にプロダクションコードをGitHub以外にもブラウザから追跡可能なように提供しています。*1 この記事が、皆様のコード共有の役に立つことを願っています。
*1:AzureAD認証を付けることでSSOも担保できます