BT

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

| 作者: Pierre-Luc Maheu フォローする 4 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2017年1月5日. 推定読書時間: 3 分 |

原文(投稿日: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からの抜粋である。

 
 

この記事を評価

関連性
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT