以下の内容はhttps://tech.guitarrapc.com/entry/2016/08/24/044850より取得しました。


Azure Web Apps を使ったReference Source による ブラウザ上でのコード追跡

2014年2月にMicrosoftがブラウザ上におけるソースコード閲覧の新しい体験を提供しました。今でも使うことが多い、Reference Sourceです!! 個人的にこの時の衝撃はすさまじいものがありました。

https://blogs.msdn.microsoft.com/dotnet/2014/02/24/a-new-look-for-net-reference-source/

http://referencesource.microsoft.com/

※ Reference Sourceで閲覧可能なソースは、現在の4.6.2までの全ソースをzipでダウンロードできます。

Download the entire reference source

さて、今回はこのReference Sourceを自分のソースコードにも適用できますよ。というお話です。こんな感じで!

Roslyn を使った Reference Source のジェネレータ

Reference Source以外にも実はRoslynも同様のフォーマットで公開されています。

Roslyn Reference Source

これらはMicrosoftのエンジニアであるKirillOsenkovがOSSとして2015年に公開したSourceBrowserを使って生成されています。

https://github.com/KirillOsenkov/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\HtmlGeneratorSourceBrowser\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は無駄なのでやめたいところです。

https://github.com/guitarrapc/UniRx.ReferenceSource

できました! Azure Web Appsも無料プランでお財布に優しいです。

UniRx.ReferenceSource

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

UniRx.ReferenceSource

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

CI

ちなみにVSTSを使うと、ビルドパイプラインをガシガシ重ねることで特別なスクリプトなどもなしにCI/CDが可能です。

同期ツール

イミュータブルなビルドパイプラインを作っていると、ローカルで同期をしたくなることがあります。しかし、RoboCopyは最終更新時間で判定、MSDeployはチェックサム検証コピーが可能ですが遅いと従来のツールでは問題があります。そこで、同じくKirillOsenkovが作成したCotentSyncを使うと爆速で同期できます。最高です。このツール、コードもきれいでシンプルで、本当に感動を覚えます。

https://github.com/KirillOsenkov/ContentSync

guitarrapc_tech (@guitarrapc_tech) August 23, 2016

まとめ

グラニでは、実際にプロダクションコードをGitHub以外にもブラウザから追跡可能なように提供しています。*1 この記事が、皆様のコード共有の役に立つことを願っています。

*1:AzureAD認証を付けることでSSOも担保できます




以上の内容はhttps://tech.guitarrapc.com/entry/2016/08/24/044850より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14