ADVENT CALENDAR 2019
F#のプロジェクトテンプレートを作ってみた
By wraikny
はじめに
F#のプロジェクトを作るときにFAKE( 5日目 に紹介しました)やCIを書き直すのが面倒だったし、初心者もわかりやすいように、テンプレートを作ってみました。
F#に関しては、こちらの記事がとても詳しく丁寧です:
F# を知ってほしい - Qiita
今回説明するのはこちらです。
READMEだけでも大体わかります。
wraikny/FsTemplate - GitHub
環境
.NET Core SDK 3.0以上が必要です。
未インストールの方はこちらから
https://dotnet.microsoft.com/download
$ dotnet --version
3.0.100
また、VSCodeやVimを使っている方は、Ionideという拡張機能をインストールすることで補完等が効くようになります。 自分はVSCode + Ionideを使っていてオススメです。
使っていく
リポジトリを作る
まずは先程のリポジトリを開いてみましょう。
“Use this template” という緑色のボタンを押した後、名前の入力などを行って、リポジトリが作られます。
Cloneした後、toolとpaketの復元をしましょう。
$ git clone <Your Repository>
$ dotnet tool restore
$ dotnet paket restore
CI Statusの参照先を変える
以下のCIに対応しています。
- Github Actions
- Travis CI
- AppVeyor
PushやPull Request時に自動的にビルドと単体テストを実行して結果を表示する事ができます。
README.md を見ると、デフォルトではwraikny/FsTemplatのCI StatusのBadgeを表示しています。 これを 作成したリポジトリ に変更していきます。
wraikny/FsTemplate
をあなたの OWNER/REPOSITORY
に置換すると、Github ActionsとTravis CIのBadgeの参照先が変わります。
Github Actionsは リポジトリ構造 から自動的に実行されるので終わりです。
基本的にはGithub Actionsだけで十分なので、他のCI Badgeは<!--- comment out --->
してよいでしょう。
(他のCIの設定方法は本記事の末尾に記載しておきます)
プロジェクトを作る
デフォルトだと
- アプリケーション用のプロジェクトsrc/SampleApp
- テスト用のプロジェクトtests/SampleTest
がありますね。
$ dotnet fake build # Build
$ dotnet run --project src/SampleApp # プロジェクト実行
$ dotnet fake build -t Test # build.fsxのTestプロジェクトを実行
実行プロジェクト
新しくF#の実行プロジェクトを作ってみます。
ここではHogeApp
という名前で作ります。
$ dotnet new console -lang=f# -o src/HogeApp
$ echo 'FSharp.Core' > src/HogeApp/paket.references
$ paket install
以下のコマンドで実行できます。
$ dotnet run --project src/HogeApp
Hello World from F#!
単体テストプロジェクト
新しくF#の単体テストプロジェクトを作ってみます。
ここではHogeTest
という名前で作ります。
$ dotnet new console -lang=f# -o tests/HogeTest
$ echo -e 'FSharp.Core\nExpecto\nExpecto.FsCheck' > tests/HogeTest/paket.references
$ paket install
単体テストフレームワークはExpecto
を想定しています。
使い方は
F#のテストフレームワーク「expecto」を使ってみる - Qiita
などを見ると良いでしょう。
その後、
build.fsx
のtestProjects
に、"HogeTest"
を追加しましょう。
let testProjects = [
// "SampleTest"
"HogeTest"
]
これにより、FAKEのTest
ターゲットから実行されるようになります。
CIではfake build -t Test
を使用しているので、ここを編集するだけで大丈夫です。
コードを編集する
では、src/HogeApp/Program.fs
を開いてみましょう。
[<EntryPoint>]
let main argv =
printfn "Hello World from F#!"
0 // return an integer exit code
ここを編集すれば動作するようになります。
F#を書いたことのない方は F# syntax in 60 seconds で文法速習をするのも良いでしょう。
最近は日本語wikiのfsugjp wikiのチュートリアルが更新されつつあるので、将来的にはこちらを見るのもいいと思います。
Paket
サラッと利用していますが、Paketというのは.NETの依存関係マネージャです。 nugetに限らずGitHubファイルをとってきたり、一元管理するので複数のプロジェクトでライブラリのパージョンが違うといったことを防げます。
paket.dependencies に以下のように記述して、ライブラリを追加できます。
version 5.226.0
source https://www.nuget.org/api/v2
nuget FSharp.Core
nuget Expecto
nuget Expecto.FsCheck
また、各プロジェクトの
paket.references
というファイルで使用するものを選択していて、
*.*proj
ファイルで以下のように参照しています(前述のpaket install
で追加されます。)
<Import Project="..\..\.paket\Paket.Restore.targets" />
おわりに
わからない事があればTwitter等で聞いてください!
使ってくれたら⭐等貰えると嬉しいです!
wraikny/FsTemplate - GitHub
参考リンク
- Paket(.NETのパッケージマネージャー)とFAKE(F#のMake)について - anti scroll
- .NET Core 3.0 の新機能 #ローカルツール - Microsoft Docs
補足:CIの設定
Travis CI
- Travis CIのサイトからGitHubの連携をします。
- 自分のアイコンをクリックして表示されるリポジトリ一覧から、作成したリポジトリを選択します。
- .travis.ymlが実行されるようになります。
AppVeyor
- AppVeyorからアカウント連携をして、NEW PROJECTからリポジトリを選択します。
- Settingsから “Custom configuration
.yml
file name” に “appveyor.yml” と入力して、SAVEします。 - 左のサイドバーからBadgesを選び、 “Sample markdown code” のMarkdownをコピーしてREADMEに上書きします。
SHARE THIS POST
Tweet