BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース FakeとPaketを使ったF#によるスクリプティング

FakeとPaketを使ったF#によるスクリプティング

原文(投稿日:2016/12/12)へのリンク

F#のスクリプトは通常,.fsxファイルとF# Interactive (Fsi)を使って行なう。再利用されるスクリプトは,PaketFakeを使うことで,さまざまなユースケースに対応する機能が利用できる。Fakeは複雑なスクリプトを構築するために使用し,Paketは依存性管理を行なう。

Fake
Fakeは,コアとしてはビルドツールだが,そのターゲットシステムをスクリプトの構築に用いることも可能だ。ターゲットは,スクリプトでは一般的なように,相互の関連で定義することができる。Fakeを使うことで,任意の.Netライブラリの使用も可能になる。次のスニペットは,FluentMigratorマイグレーションを実行する2つのターゲットの定義を示している。

open System.Management.Automation

Target "BuildMigrations" (fun _ ->
    !! "src/app/**/migrations.csproj"
      |> MSBuildRelease buildDir "Build"
)

Target "RunMigrations" (fun _ ->
    MigrateToLatest connectionString [assembly] options
)

// Dependencies
"BuildMigrations"
  ==> "RunMigrations"

スクリプト言語に望まれるのは,コンパイルなしで小さなスニペットコードを実行できる能力だ。F#はこの要件をF# Interactive(Fsi)によって満たしているが,スクリプトを実行するすべてのマシンにFsiをインストールしなければならないという意味でもある。一方Fakeでは,事前のコンパイルなしでスクリプトを実行することができる。実行するマシン上にF#コンパイラは必要ない。この機能は,Fakeにコンパイラを直接埋め込むという,F# Compiler Servicesプロジェクトの成果を利用したものだ。

FakeからPowershellスクリプトを実行することや,必要ならばF#とPowershellを組み合わせることも可能だ。

open System.Management.Automation

Target "Powershell" (fun _ ->
    PowerShell.Create()
      .AddScript("& 'configure-server.ps1'")
      .AddParameter("Verbose", "")
      .Invoke())

Paket
ある種のスクリプト,特に外部サービスを扱うスクリプトでは,追加ライブラリが必要となる。スクリプトではあまり一般的ではないが,パッケージマネージャを使った依存関係の管理も可能だ。Paketを使うことで,スクリプトで一般的なもうひとつのケースとして,個々のファイルを参照することが可能になる。

// Reference a nuget package
nuget FSharp.Management
// Reference a single file from GitHub
github myRepo/aProject dependency.dll 

Paketは依存性をグループ化する機能も備えているため,サブセットのみが必要な場合には,すべてのパッケージをフェッチする必要はない。いくつかのスクリプトが同じ依存ファイルを使用する場合があるので,この機能はスクリプトに適していると言える。

// Shared dependencies
nuget Newtonsoft.Json
nuget FSharp.Core

group Web
    nuget Fake.IIS
    nuget Suave

group Database
    nuget FluentMigrator
    nuget SQLProvider

この記事は,F#コミュニティが進めているF# Advent Calendarからの抜粋である。

 
 

この記事を評価

関連性
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT