資料6 中部カンファレンス 事例発表chubu.env.go.jp/2015/post56-shiryo-6.pdf · 2016/9/1 中部カンファレンス 事例発表 長野県飯田市 市民協働環境部
F#事例発表
-
Upload
bleis-tift -
Category
Technology
-
view
3.816 -
download
2
description
Transcript of F#事例発表
F#事例発表
bleis-tift
August 3, 2014
自己紹介
id:bleis-tift / @bleis
なごやではたらくゆるふわ F#er
仕事で F#使ってます!
これまでの主な活動
C#(VB)プログラマのための F#入門http://www.slideshare.net/bleistift/cvbf
そうだ、bf処理系をつくろう!もちろんSQLで!http://www.slideshare.net/bleistift/bfsql-7401985
仕事で使う F#http://www.slideshare.net/bleistift/f-9062112
Better C#の脱却を目指してhttp://www.slideshare.net/bleistift/better-c
F#による Functional Programming入門http://www.slideshare.net/bleistift/�unctional-
programming
これまでの主な活動
モナドハンズオン前座http://www.slideshare.net/bleistift/ss-15215415
yieldと returnの話http://www.slideshare.net/bleistift/yieldreturn
これまでの主な活動
再帰で考えるhttp://bleis-tift.hatenablog.com/entry/20120119/1326944722
F#で初めての関数型プログラミングhttp://www.atmarkit.co.jp/fdotnet/special/introfs_01/introfs_01_01.html
http://www.atmarkit.co.jp/fdotnet/special/introfs_02/introfs_02_01.html
C#から使いやすい F#コードの書き方http://bleis-tift.hatenablog.com/entry/20121201/1354362376
.NETの標準ライブラリと仲良くする話http://bleis-tift.hatenablog.com/entry/fsadvent2013
詳説コンピュテーション式http://bleis-tift.hatenablog.com/entry/computation-expression
コンピュテーション式における returnと yieldhttp://bleis-tift.hatenablog.com/entry/return-and-yield
これまでの主な活動
LangExthttps://github.com/LangExt/LangExt
http://langext.github.io/LangExt/
Basis.Corehttps://github.com/BasisLib/Basis.Core
今日話すこと
弊社と F#
事例紹介
仕事で F#を使うために
弊社とF#
弊社について
社員数は 20人程度
プログラマは半分くらい
いわゆる一つの SIer
開発では主に、「ちょっと特殊なクライアント」向けにWeb APIを作ってます
.NET系なので、C#や F#を使ってます
弊社とF#
入社後から、ちょっとしたツールとかに個人的に使用
社内では、「条件さえあえば使ってみたいねー」って雰囲気
3年か 4年前に条件のあう案件が!
本格的に業務で F#を使い始めた
F#使った主な案件
人力でやっていた作業を自動化するWebアプリ(1ヶ月)
プロキシサーバとして振る舞うシステムのコア機能のAzure化(3週間)
WebAPI用のフレームワーク
クラウド移行に伴うシステムの完全移行
F#を使った社内ツール・ライブラリ
案件以外でも、社内ツールに F#を使っている
XML用DSLライブラリ
Webアプリ画面テスト支援ツール
Web API用テスティングフレームワーク 1
Web API用テスティングフレームワーク 2
事例紹介
背景
某クラウドから某クラウドへの移行案件
権利的な問題から、元のシステム(C#で構築)をそのまま持っていけない
「仕様書も自動化された結合テストもあるのでタイにオフショアします」(想像)
社員O「是非 F#でやらせてください!」役員K「いいよ!」
社内としては、社員Oを含む 2名が開発者として開発スタートタイ側は開発者 2名+ 1
問題発生
社員Oが都合により案件から離れる
社員K「タイ側のコード、レビューしてもらっていいですか?」
type Function = obj[] -> obj[]
!?
→タイに渡航し、F#やGitについて教育
全体の設計
トランザクションスクリプト風個人の能力のばらつきを考えて APIごとに分離
全体をResultを返すブロックで構築Railway oriented programming(鉄道指向プログラミング)
これのためにライブラリを作成(Basis.Core)自称ちゃんと returnする唯一のコンピュテーション式ライブラリ
ここには当日何かあったらしい
全体的な結果
機能が増えたにもかかわらず、総行数は約 2割減った
些細なバグがほとんどなくなった
ドタバタはあったが、納期には間に合った
C#だったらたぶん間に合わなかったし、バグも出たはず
仕事でF#を使うために
教育(その1)
全く F#も関数プログラミングも知らない人にいきなりつかわせるのは無理
当然教育が必要
とりあえず、実践F#もしくはプログラミングF#を読んでもらう後は、実際に使ってもらいつつ、頻繁にレビュー
より F#らしい書き方を伝えるペアプロは有効ループを書かない方法や、nullとNoneの違いなどを重点的に
教育の成果(サンプル数1)
範囲外アクセスがほとんど出なかった
null例外も F#に閉じた範囲では出なかった
C#に戻っても問題のあるコードを書くことが減った
関数型初心者がいても、サポートできればいけるさらに、能力も向上
教育(その2)
とにかく型(レコードや判別共用体)を作らせる
objを許さない
リフレクションも許さない
F#コード養成ギプス
教育の効果(サンプル数2)
F#っぽいコードがある程度書けるようになった
つまらないバグも減ったただ、それ以前の問題は結局解決できなかった
省略語はいくら言っても直らなかった・・・
よくいる普通のサラリーマンプログラマよりは使える人材に
業務でF#を使ってみて
教育はとても大事
ある種のバグは減る
生産性については、環境次第
今後も F#を業務で使っていきます
事例もできる限り出していきたい
おわり