2014年2月に Microsoft がブラウザ上におけるソースコード閲覧の新しい体験を提供しました。今でも使うことが多い、Reference Source です!! 個人的にこの時の衝撃はすさまじいものがありました。
※ Reference Source で閲覧可能なソースは、現在の 4.6.2 までの全ソースを zip でダウンロードすることもできます。
さて、今回はこの Reference Source を自分のソースコードにも適用できますよ。というお話です。こんな感じで!
目次
Roslyn を使った Reference Source のジェネレータ
Reference Source 以外にも実は Roslyn も同様のフォーマットで公開されています。
これらはMicrosoft のエンジニアである KirillOsenkov がOSSとして 2015年に公開した SourceBrowser を使って生成されています。
The source browser engine behind http://t.co/E1Z9lVD1QU and http://t.co/tekcA2ldoz is now open-source: https://t.co/fzbBXUOs38
— Kirill Osenkov (@KirillOsenkov) September 24, 2015
SourceBrowser は非常に強力で、既存のC# プロジェクトの Solution ファイルを食わせるだけで自動的に静的サイトのdll やhtml を生成します。
早速見てみましょう。
サンプル
今回は、UniRx をリファレンスソースとして参照可能にしてみます。事前に、Visual Studio Tools for Unity をインストールしておきましょう。
visualstudiogallery.msdn.microsoft.com
SourceBrowser のビルド
SourceBrowser に含まれる HtmlGenerator で、ソースコードをHtml に変換、生成します。まずは、Github からクローンしたら、SourceBrowser.sln を開き HtmlGenerator
をDebugビルドしましょう。
ビルドできましたね?
静的Html の生成
では、次に HtmlGenerator のプロジェクトプロパティ
> Debug
で、Command line arguments
に Reference Source を生成したいプロジェクトの .sln ファイルを食わせましょう。今回、D:\GitHub\UniRx\UniRx.sln
に、UniRx を置いたので指定して実行します。これで Htmlが生成されます。
が、CI を前提にビルドされた .exe を使っても生成してみましょう。SourceBrowser\bin\Debug\HtmlGenerator
に HtmlGenerator.exe
が生成されているので次の書式で実行します。
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 を使うと爆速で同期できます。最高です。このツール、コードもきれいでシンプルで、本当に感動を覚えます。
Microsoft の中のエンジニアやっぱりすぎょい。こんな簡素なコードなのに同期ツールできるにょか.... バイナリ比較してくれるからすぎょい助かった // KirillOsenkov/ContentSync https://t.co/8YjK61IMFY
— guitarrapc_tech (@guitarrapc_tech) August 23, 2016
まとめ
グラニでは、実際にプロダクションコードを Github 以外にもブラウザから追跡可能なように提供しています。*1 この記事が、皆様のコード共有の役に立つことを願っています。
*1:AzureAD 認証を付けることで SSOも担保できます