nugetの社内利用のススメ

54
NuGet ののののののののの のののの ののの Hokuriku.NET vol.11 2013/01/26

Upload: narami-kiyokura

Post on 28-May-2015

1.532 views

Category:

Technology


3 download

DESCRIPTION

Hokuriku.NET Vol.11の同名のセッションで使用したスライド資料です

TRANSCRIPT

Page 1: NuGetの社内利用のススメ

NuGet の社内利用のススメ

きよくら ならみ

Hokuriku.NET vol.11

2013/01/26

Page 2: NuGetの社内利用のススメ

自己紹介

• ハンドル:「きよくら ならみ」• @kiyokura

• 岡山生まれ岡山育ちのプログラマー• 現在は県内の某製造業で社内 SE

• NET 系の開発や Web アプリ開発• Microsoft MVP for ASP.NET/IIS

Page 3: NuGetの社内利用のススメ

コミュニティ等

• Okayama IT Engineers Community

• 運営メンバー

• 主に MS 系のテクノロジを扱う

• 3/16 に岡山で、ヒーロー島さんと合同イベント• 日本マイクロソフトより、某緑の方が登壇予定!

• ASP.NET や Azure 系でご登壇いただける方を絶賛募集中です!

Page 4: NuGetの社内利用のススメ

本日のアジェンダ

• NuGet ってなんだろう?

• 基本的な特徴と利用法

• 様々な機能

• 社内利用のススメ

Page 5: NuGetの社内利用のススメ

NuGet ってなんだろう?

Page 6: NuGetの社内利用のススメ

NuGet とは?

• .NET 用のライブラリ・パッケージ・マネージャ

• 読み方• ネイティブの人の発音は「ニューゲット」

• 日本人的には「ヌゲット」

Page 7: NuGetの社内利用のススメ

ライブラリ パッケージ マネージャ

• ライブラリのパッケージをいい感じに管理するツール

• 導入や更新、依存関係の管理などなど

• 他の例だと…• Ruby の Gems, 古くは Perl の CPAN など

Page 8: NuGetの社内利用のススメ

Q :ライブライをどうやって管理する?

• プロジェクトに DLL を直接取り込む?

• PC にインストールする?

Page 9: NuGetの社内利用のススメ

• フリーのロギングのライブラリ、 log4netを使いたいと思った時の例• ( 「何で log4net ?」と思うかもしれません

が、たまたまなのでお気になさらず)

Page 10: NuGetの社内利用のススメ

どこからとってくるんだっけ?

• とりあえずググ Bing って、反射的にトップにある記事をクリック

Page 11: NuGetの社内利用のススメ

どこかリンクはないかな…

• それっぽいのを見つけてクリック

Page 12: NuGetの社内利用のススメ

えっと、 log4net は…

• あったあった。

Page 13: NuGetの社内利用のススメ

ダウンロードはどこから…?

• どこからおとすねん…あ、これか

Page 14: NuGetの社内利用のススメ

だからどこやねん…

Page 15: NuGetの社内利用のススメ

やっと落とせた…って、

• … で、どれを使えばいいの??

なんかそれぞれのフォルダに dllがあるんだけど…

Page 16: NuGetの社内利用のススメ

いろいろ面倒なことがありませんか?

• DLL のバージョン管理

• 依存関係の管理

• 関連する設定は何か必要?

• バージョンの衝突

• DLL Hell

Page 17: NuGetの社内利用のススメ

これらの問題を解決するためのもの• ライブラリ パッケージマネージャとは、

これらの問題をいい感じにするためのもの

• さらに NuGet ならではの機能や特徴も

Page 18: NuGetの社内利用のススメ

ちなみに… NuGet でやるとこんな感じ

• 利用するプロジェクトでマネージャを起動

Page 19: NuGetの社内利用のススメ

log4net を検索

• 見つかった!ので、インストール!

Page 20: NuGetの社内利用のススメ

あっという間にインストール完了

Page 21: NuGetの社内利用のススメ

適切な dll をプロジェクトから参照

• 自動的に設定完了

Page 22: NuGetの社内利用のススメ

基本的な特徴と利用法

Page 23: NuGetの社内利用のススメ

NuGet の代表的な特徴

• Visual Studio との統合

• インターネット上のギャラリーの利用

• 基本的な管理機能

• ソリューション間での独立性の確保

• 独自のライブラリのサーバの設置可能

• .NET 開発での標準的なツールに

Page 24: NuGetの社内利用のススメ

Visual Studio との統合

• Visual Studio に統合された環境で利用できます• VS2010 … 拡張機能としてインストールする

• VS2012 … 標準でインストールされている

• GUI と CUI

• GUI により直感的に操作可能

• 細かな操作は PowerShell による CUI で操作

Page 25: NuGetの社内利用のススメ

GUI と CUI

Page 26: NuGetの社内利用のススメ

インターネット上のギャラリーの利用

• 公式の NuGet Gallery からソリューションに直接取り込み

• NuGet の GUI/CUI から直接検索・指定して操作

• 自作パッケージを Gallery に登録して公開することも可能

Page 27: NuGetの社内利用のススメ

基本的な管理機能

• パッケージの取込・更新・削除

• パッケージ間の依存関係も自動で解決• バージョン単位で依存を管理・解決

Page 28: NuGetの社内利用のススメ

バージョン単位での依存解決

• 『ライブラリ A Ver1.0 』が『ライブラリB Ver.1.0 』に依存し、

• 『ライブラリ A Ver2.0 』が『ライブラリB Ver.1.5 』に依存する場合、

• 『ライブラリ A 』を 2.0 にバージョンアップする操作をすると、自動的に『ライブラリ B 』も 1.5 にバージョンアップ

Page 29: NuGetの社内利用のススメ

ソリューション間での独立性の確保• NuGet の管理の対象はソリューション or

プロジェクト単位

• ソリューション外で影響を与えない• DLL HELL の防止

• 目の前のソリューションのことだけを考えて、ライブラリの選定やバージョンアップを行うことが可能

Page 30: NuGetの社内利用のススメ

独自のサーバを簡単に設置可能

• 独自にギャラリーを設置可能• XML でカタログを返す Web サーバ

• Windows のファイル共有機能• 社内などではとても簡単に設置可能

• 社内標準ライブラリの管理にも利用可能

Page 31: NuGetの社内利用のススメ

プライベートリポジトリ(配布サーバ)の作成

• 配布方法は大まかに 2種類• HTTP経由( Web サーバ)で配布

• 極論すると、 Web サーバなら何でも OK

•カタログを xml ( ATOM形式)で返す

• nupack のバイナリを返す

• これを簡単に実現する ASP.NET 製のアプリもある

• Windows ファイルシステムで配布• ローカルのファイルシステム上のフォルダ

•テストするときや、自分だけで使うときはこれで OK

• Windows のネットワーク共有も OK

•社内や部署内レベルだと、これが一番楽

Page 32: NuGetの社内利用のススメ

サーバへの配置

• Webの場合• 公開方法によって違う

• 手動でやる場合は面倒• カタログファイルを手動で更新したり…

• Windows ファイルシステムの場合• フォルダに nupack ファイルを配置すれば

OK !

Page 33: NuGetの社内利用のススメ

.NET 開発での標準的なツールに

• Visual Studio の標準テンプレートでも利用されている

• Microsoft 自身も自社製ライブラリをNuGet で配布することが増えてきている

Page 34: NuGetの社内利用のススメ

様々な機能

Page 35: NuGetの社内利用のススメ

ざっくりとした仕組み

• 所定の形式のパッケージファイルを扱う• *.nupkg ファイル

• このパッケージは、以下を zip で固めたもの• ライブラリ本体

• マニュフェスト

• その他メタデータなど

Page 36: NuGetの社内利用のススメ

自分でパッケージが作成できます

1.配布するライブラリの実体を用意

2.nuspec ファイルを記述

3.コマンドラインツールでコンパイル

• 以上で出来上がり!• hoge.1.0.0.0.nupkg というパッケージファ

イルが出来上がります

Page 37: NuGetの社内利用のススメ

NuGet のさまざまな機能の概要

• マルチ・ターゲット

• 依存関係設定

• アセンブリ参照の追加

• 設定ファイル変換機能

• ソースコード変換機能

• スクリプト実行

Page 38: NuGetの社内利用のススメ

マルチ・ターゲット

• 異なるフィーチャー / フレームワークバージョン向けのものを同梱して配布• 取り込んだプロジェクトごとに適切なバージョ

ンの DLL を自動的に参照設定する

• フレームワークのバージョンだけでなく、異なるターゲット向けの制御も可能• Silverlight向けと WPF向け等

Page 39: NuGetの社内利用のススメ

依存関係設定

• 依存する別の NuGet パッケージ / バージョンを自動で解決

• バージョンは細かく指定が可能• 例:• 特定のバージョンのみ

• 特定のバージョン以下

• 特定のバージョン以上

• 特定のバージョン~特定のバージョンの範囲

Page 40: NuGetの社内利用のススメ

アセンブリ参照の追加

• 配布するライブラリの動作に必要なアセンブリの参照を記述する• 例:配布する DLL が

Microsoft.VisualBasic.dll に依存する場合等

• ここで指定したアセンブリへの参照が自動的にプロジェクトクトの参照設定に追加される

Page 41: NuGetの社内利用のススメ

設定ファイル変換機能

• Web.Config や App.Cofig に記述を追加する• マージさせるイメージ

• Configuration File Transformations 機能• 公式の翻訳が見つからないので勝手に訳してます

• 設定ファイルに転記したい内容のみを「 .transform 」という拡張子に記載する• いい感じにマージされる

• アンインストール時は同じ部分だけ削除される

Page 42: NuGetの社内利用のススメ

ソースコード変換機能

• ソースファイルそのものを配布することも可能

• ただし、そのまま配布しても通常は問題がある• 名前空間などを差し替える必要がある

• Source Code Transformations 機能を利用すると、簡単に解決可能

• 拡張子 .pp を付けて、差し替えたい部分をプレースホルダで置き換える

namespace $rootnamespace$.Models { public class CategoryInfo { public string categoryid {get; set;} public string description {get; set;} }}

Page 43: NuGetの社内利用のススメ

ASPX ファイル等も対象にできる

• ASPX ファイル等でも可能<%@ Page Title=“共通ログイン " Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind=“Login.aspx.cs" Inherits="$rootnamespace$.Login" %>

Page 44: NuGetの社内利用のススメ

スクリプト実行

• PowerShell のスクリプトを記述し実行させることが可能• インストール時、アンインストール時それぞれ実行可能

Page 45: NuGetの社内利用のススメ

社内利用のススメ

Page 46: NuGetの社内利用のススメ

これらの機能を利用すると…

• 社内でのライブラリ管理

• ライブラリの管理だけでなく、様々なプロジェクト標準などを使いやすく(守りやすく)できるかもしれません

Page 47: NuGetの社内利用のススメ

• ファイルサーバの○○からとってきてプロジェクトに入れといて

• ×× に書いてあるから、コピペして必ず転記しておいて

• □□を使うときは、絶対に「 hogehoge 」って名前のクラスにすることになってるからね!!

NuGet でエレガントに解決!!

… できるかも??

Page 48: NuGetの社内利用のススメ

カスタムテンプレート的に利用する例

• 機能を色々組み合わせて簡易カスタムテンプレートとして• プロジェクト標準のフォルダ構成を配布

• ダミーのファイルを配布することでフォルダ構造を配布する

• 任意のパッケージの利用を強制する• 本来依存していないパッケージを依存関係に記載する

• 任意の記述を設定ファイルに記載する• 社内 DB 参照のための記述など、お決まりの記述

• 必ず使う名前のローカル実装クラスのテンプレートの配布• 例:社内標準のログインフォームなど

Page 49: NuGetの社内利用のススメ

本来のカスタムテンプレートと使い分け

• ぞれぞれのメリットを考えながら• プロジェクトテンプレートとしてはカスタムテ

ンプレートのほうが行き届く

• 更新の配布などは NuGet のほうがカジュアルで楽、等

Page 50: NuGetの社内利用のススメ

その他に実際やってる事

• NuGet パッケージとして配布されていないパッケージを勝手に NuGET で社内配布• ファイルサーバにおいて「このバージョンを

使って!」ってやってる部分をシステマチックにしただけ

• ライセンスに注意。• 特に有償コンポーネント

• もっと黒いことも…• あるけどここでは割愛

Page 51: NuGetの社内利用のススメ

まとめ

Page 52: NuGetの社内利用のススメ

NuGet は便利です

• .NET 開発においてもはや標準のツールといって過言ではない

• 便利なので、 NuGet Gallery で公開されているライブラリを使うなら、 NuGet を使わない手はない

Page 53: NuGetの社内利用のススメ

プライベートリポジトリが便利

• 社内ライブラリの管理・運用もとっても楽になる

• 工夫次第で有効に使える場面が色々ありそう

Page 54: NuGetの社内利用のススメ

御清聴ありがとうございました