はじめに
この記事はC# Advent Calendar 2019の22日目の記事となります。
C#というより.NET Coreの話となりそうですが……。
dotnet-install スクリプト、使っていますか?
皆さんは.NET Core SDKをどのようにインストールしていますか?
Microsoftのダウンロードページからインストーラーをダウンロードして実行しますか?
Visual Studio Installerからインストールしていますか?
管理者権限のない方はzipで適当な場所に配置しますか?
Windows以外の方はどうですか?
macOSでもインストーラーを使っていますか?
Linuxではパッケージマネージャー?
dotnet-install スクリプトという選択肢、そもそも知っていましたか?
前提条件
以降の内容は以下の環境で行われています。
- CentOS 7.6.1810
dotnet-install スクリプトとは
dotnet-install スクリプトは.NET Core CLI ツールと共有ランタイムをインストールするために使うスクリプトです。詳細についてはMicrosoft Docsを参照ください。
ただ、「詳細は別ページで確認して下さい」だけでは本記事がここで終わってしまうので、まずは**「これがわかれば使える」**という使い方を紹介いたします。
dotnet-install スクリプトのダウンロード
dotnet-install スクリプトは環境に合わせて2種類用意されています。ご自身の環境に合わせてダウンロードしてください。
- Windows
- macOS/Linux/WSL
dotnet SDKのインストール
最新のSDKをインストールしたい
ためしに、現在の最新のSDKをインストールしてみましょう。--version
でlatest
を指定することで最新のSDKをダウンロードします。--install-dir
ではdotnet CLIのパスを通したい場所を指定してください。
$ sh dotnet-install.sh --version latest --install-dir /path/to/cli
$ cd /path/to/cli
$ dotnet --version
3.1.100
実行後は下記のような構造になります。
/path/to/cli
|-- LICENSE.txt
|-- ThirdPartyNotices.txt
|-- dotnet
|-- host
|-- packs
|-- sdk
| `-- 3.1.100
|-- shared
`-- templates
この/path/to/cli/sdk
の中に指定したバージョンのSDKが追加されていきます。ですので、基本的に--install-dir
の指定はバージョン指定ごとに変える必要はありません。
LTSのみ対象としてインストールしたい
--version
をlatest
と指定することで最新のSDKをインストールしましたが、場合によってはLTSのみをインストール対象としたいというケースもありえるかと思います。そのような場合は--channel
でLTS
と指定しましょう。
$ sh dotnet-install.sh --channel LTS --install-dir /path/to/cli
こちらの--channel
ではブランチ名やX.Y
(たとえば 2.2
や3.0
)といった指定も可能です。「.NET Coreの2.2系をインストールしたいけど2.2系の詳細なバージョン覚えてないや」といった場合も安心ですね。
インストール済みのSDKバージョンを把握したい
当然、インストールしてあるSDKのバージョンを知りたいときもありますよね。--install-dir
で指定したパスのsdk
の中身を見ても判断できますが、こちらはdotnet CLIの標準のオプションで確認できます。
$ dotnet --list-sdks
2.2.402 [/path/to/cli/sdk]
3.0.100 [/path/to/cli/sdk]
3.1.100 [/path/to/cli/sdk]
実行したいだけだからSDKじゃなくてruntimeをインストールしたい
「.NET Coreで作ったプログラムを動かしたいだけだから実行環境だけあればいい」なんてこともありますよね。その場合は--runtime
を指定しましょう。
$ sh dotnet-install.sh --channel LTS --install-dir /path/to/cli --runtime dotnet
「ASP.NET CoreでWebアプリを動かしたいだけだからSDKをインストールするのは無駄」なんて場合はaspnetcore
と指定しましょう。
$ sh dotnet-install.sh --channel LTS --install-dir /path/to/cli --runtime aspnetcore
まとめ
PythonやNode.js、Goといった言語ではpyenvやgoenvといった容易な環境構築とバージョン管理を行えるツールがあります。
ターゲットフレームワークという仕組みがある.NETでも、dotnet-install スクリプトによって容易に環境構築を行えることがお分かりいただけたかと思います。
もちろん「私はインストーラー派なんだ」という方を否定するわけではありませんが、環境構築の一手段としてこのようなツールが存在するということを知っていただければと……。
C#のコード一文字も書いてないけど許してください。