f#事例発表

25
事例発表

Upload: bleis-tift

Post on 12-Jun-2015

3.815 views

Category:

Technology


2 download

DESCRIPTION

F# Meetup in TokyoでのF#の事例発表についての発表資料です。

TRANSCRIPT

Page 1: F#事例発表

F#事例発表

bleis-tift

August 3, 2014

Page 2: F#事例発表

自己紹介

id:bleis-tift / @bleis

なごやではたらくゆるふわ F#er

仕事で F#使ってます!

Page 3: 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

Page 4: F#事例発表

これまでの主な活動

モナドハンズオン前座http://www.slideshare.net/bleistift/ss-15215415

yieldと returnの話http://www.slideshare.net/bleistift/yieldreturn

Page 5: F#事例発表

これまでの主な活動

再帰で考える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

Page 6: F#事例発表

これまでの主な活動

LangExthttps://github.com/LangExt/LangExt

http://langext.github.io/LangExt/

Basis.Corehttps://github.com/BasisLib/Basis.Core

Page 7: F#事例発表

今日話すこと

弊社と F#

事例紹介

仕事で F#を使うために

Page 8: F#事例発表

弊社とF#

Page 9: F#事例発表

弊社について

社員数は 20人程度

プログラマは半分くらい

いわゆる一つの SIer

開発では主に、「ちょっと特殊なクライアント」向けにWeb APIを作ってます

.NET系なので、C#や F#を使ってます

Page 10: F#事例発表

弊社とF#

入社後から、ちょっとしたツールとかに個人的に使用

社内では、「条件さえあえば使ってみたいねー」って雰囲気

3年か 4年前に条件のあう案件が!

本格的に業務で F#を使い始めた

Page 11: F#事例発表

F#使った主な案件

人力でやっていた作業を自動化するWebアプリ(1ヶ月)

プロキシサーバとして振る舞うシステムのコア機能のAzure化(3週間)

WebAPI用のフレームワーク

クラウド移行に伴うシステムの完全移行

Page 12: F#事例発表

F#を使った社内ツール・ライブラリ

案件以外でも、社内ツールに F#を使っている

XML用DSLライブラリ

Webアプリ画面テスト支援ツール

Web API用テスティングフレームワーク 1

Web API用テスティングフレームワーク 2

Page 13: F#事例発表

事例紹介

Page 14: F#事例発表

背景

某クラウドから某クラウドへの移行案件

権利的な問題から、元のシステム(C#で構築)をそのまま持っていけない

「仕様書も自動化された結合テストもあるのでタイにオフショアします」(想像)

社員O「是非 F#でやらせてください!」役員K「いいよ!」

社内としては、社員Oを含む 2名が開発者として開発スタートタイ側は開発者 2名+ 1

Page 15: F#事例発表

問題発生

社員Oが都合により案件から離れる

社員K「タイ側のコード、レビューしてもらっていいですか?」

type Function = obj[] -> obj[]

!?

→タイに渡航し、F#やGitについて教育

Page 16: F#事例発表

全体の設計

トランザクションスクリプト風個人の能力のばらつきを考えて APIごとに分離

全体をResultを返すブロックで構築Railway oriented programming(鉄道指向プログラミング)

これのためにライブラリを作成(Basis.Core)自称ちゃんと returnする唯一のコンピュテーション式ライブラリ

Page 17: F#事例発表

ここには当日何かあったらしい

Page 18: F#事例発表

全体的な結果

機能が増えたにもかかわらず、総行数は約 2割減った

些細なバグがほとんどなくなった

ドタバタはあったが、納期には間に合った

C#だったらたぶん間に合わなかったし、バグも出たはず

Page 19: F#事例発表

仕事でF#を使うために

Page 20: F#事例発表

教育(その1)

全く F#も関数プログラミングも知らない人にいきなりつかわせるのは無理

当然教育が必要

とりあえず、実践F#もしくはプログラミングF#を読んでもらう後は、実際に使ってもらいつつ、頻繁にレビュー

より F#らしい書き方を伝えるペアプロは有効ループを書かない方法や、nullとNoneの違いなどを重点的に

Page 21: F#事例発表

教育の成果(サンプル数1)

範囲外アクセスがほとんど出なかった

null例外も F#に閉じた範囲では出なかった

C#に戻っても問題のあるコードを書くことが減った

関数型初心者がいても、サポートできればいけるさらに、能力も向上

Page 22: F#事例発表

教育(その2)

とにかく型(レコードや判別共用体)を作らせる

objを許さない

リフレクションも許さない

F#コード養成ギプス

Page 23: F#事例発表

教育の効果(サンプル数2)

F#っぽいコードがある程度書けるようになった

つまらないバグも減ったただ、それ以前の問題は結局解決できなかった

省略語はいくら言っても直らなかった・・・

よくいる普通のサラリーマンプログラマよりは使える人材に

Page 24: F#事例発表

業務でF#を使ってみて

教育はとても大事

ある種のバグは減る

生産性については、環境次第

今後も F#を業務で使っていきます

事例もできる限り出していきたい

Page 25: F#事例発表

おわり