数ヶ月間のプレビュー期間を経て、先頃、Fake 5がリリースされた。この.NETアプリケーション用ビルドツールの新バージョンでは、コアが新たに書き直されただけでなく、多くの内部的な改良や機能が加えられている。メンテナのMatthias Dittrich氏に連絡を取り、すべての変更点や機能についての詳細を聞いた。
InfoQ: Fake 5のリリースで目標としたものは何でしたか?
Matthias Dittrich: これまでの経験から、FAKEの導入が、特に推奨されているアプローチにおいて大きな負担になっていると感じていました。PaketとFAKEを覚えて、
build.fsx
やpaket.dependencies
やpaket.lock
といったグローバルファイルをいくつも導入しなければならなかったからです。その上でPaketがpaket-files
、packages
、.paket
といったフォルダを、FAKEが.fake
フォルダを、それぞれ生成していたのです。このインフラストラクチャ自体にはまったく問題ありませんし、それらすべての背景には、極めてまっとうな理由があったのですが、小規模なプロジェクトや単純なスクリプトには大げさ過ぎて、私の意見としては、採用面で最も大きな問題になっていました。
その後、.NET Coreが導入されて、私たちが.NETについて知っていたことはすべて無駄になりました。インストール済みの.NETフレームワークに依存することなく、スタンドアロンアプリケーションを公開できるようになったのです。これが現行のブートストラップのアプローチを考え直す絶好の機会だと思ったので、(いつかやらなければならないと思っていた).NET Coreポートを使った実装を行いました。
ですから、基本的な目標は、上のような負担を修正して、もっと簡便なワークフローにオプトアウトすることでした。その他、以前から残っていた要望として、APIのクリーンアップと統一化、小さなモジュールへの分割などもありました。
以前からの経緯で、新しい機能のコントリビューションは、
Fakelib
という単一のプロジェクトに格納されていました。このライブラリが、5年から10年もかけて肥大していたのです!存在もよく分からないようなものも含めて、すべてがこの中に入っています。これは同時に、すべての人たちが、毎回、すべてのものをダウンロードしているという意味でもあります。ですが、エコシステムを破壊することなく、この問題を解決する方法が分からなかったのです。その方法が、やっとみつかりました。
InfoQ: ユーザが独自のモジュールを作成してFakeを拡張できるようになりましたが、どのように機能するのか、詳しく説明して頂けますか?
Dittrich: そうですね、実際には(ユーザの立場からは)驚くほど単純です。.NET(C#、F#など)ライブラリを任意のNuGet-Feedに公開して、ファイルの先頭でPaket文法を使って、ビルドスクリプトでそれを参照すればよいのです。
ライブラリの唯一の要件は、netstandard 2.0と互換性があることです。
例えば、.NET SDKがインストールされていれば、新たに
testfakelib
フォルダを作って、dotnet new classlib && dotnet pack
を実行した上で、bin/Debug/testfakelib.nupkg
ファイルをNuGetにアップロードすれば、それで完了です。技術的な面からは、推移的な依存関係を解決して、fake/f#スクリプトのコンパイルと実行に必要な正しいdllを見つけるために、Paketを背後で使用しています。少し単純化し過ぎですが、死ぬほど退屈というようなものでもありません。
InfoQ: 特に注目すべき機能や改善点は何かありますか?
Dittrich: 個人的な意見として、注目すべき機能は、
現在使用している環境や、使用するFAKEのブートストラップ/インストール方法に関わりなく、簡単に使い始められるようになりました。
スクリプティングや小規模な自動化の目的において、以前よりもはるかに実用的なものになりました(開発“専用”から大きく進歩しています)。
巨大なNuGetエコシステムを受け入れることで、ビルドや開発作業そのものを簡単に拡張することができるようになりました。
ただし、選択は本当に大変です。例えばAPIのクリーンアップとモジュール化に関しては、コミュニティからたくさんの支援があります。これ自体は素晴らしいことだと、誇りに思っています。
問題なのは、最初のショットで完璧なものを得られていないかも知れない、ということなのです。
ただし、モジュールシステムでは、より改善されたモジュールを作成して、互換性を失うことなく古いものと置き換えるというオプションもあります。
InfoQ: .NET Coreをサポートする上で、変更が必要であった部分は何でしたか?
Dittrich: 実際のところ、.NET Coreをサポートするために必要であったことは、それほど多くはありません。機会として利用しただけです。技術的には - 特にnetstandard20以降、大部分のコードは再コンパイルだけで済んでいます。あまり面白い作業ではありませんが。
Fakeに関する詳しい情報は、公式サイトで確認することができる。Fake 5のリリースノートも公開中である。
この記事を評価
- 編集者評
- 編集長アクション