F#事例発表

5,487 views

Published on

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

Published in: Technology
  • Be the first to comment

F#事例発表

  1. 1. .事例発表 bleis-tift August 3, 2014
  2. 2. 自己紹介 id:bleis-tift / @bleis なごやではたらくゆるふわ F#er 仕事で F#使ってます!
  3. 3. これまでの主な活動 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
  4. 4. これまでの主な活動 モナドハンズオン前座 http://www.slideshare.net/bleistift/ss-15215415 yield と return の話 http://www.slideshare.net/bleistift/yieldreturn
  5. 5. これまでの主な活動 再帰で考える 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 と yield http://bleis-tift.hatenablog.com/entry/return-and-yield
  6. 6. これまでの主な活動 LangExt https://github.com/LangExt/LangExt http://langext.github.io/LangExt/ Basis.Core https://github.com/BasisLib/Basis.Core
  7. 7. 今日話すこと 弊社と F# 事例紹介 仕事で F#を使うために
  8. 8. 弊社と.
  9. 9. 弊社について 社員数は 20 人程度 プログラマは半分くらい いわゆる一つの SIer 開発では主に、「ちょっと特殊なクライアン ト」向けに Web API を作ってます .NET 系なので、C#や F#を使ってます
  10. 10. 弊社と. 入社後から、ちょっとしたツールとかに個人 的に使用 社内では、「条件さえあえば使ってみたい ねー」って雰囲気 3 年か 4 年前に条件のあう案件が! 本格的に業務で F#を使い始めた
  11. 11. .使った主な案件 人力でやっていた作業を自動化する Web アプ リ(1ヶ月) プロキシサーバとして振る舞うシステムのコ ア機能の Azure 化(3 週間) WebAPI 用のフレームワーク クラウド移行に伴うシステムの完全移行
  12. 12. .を使った社内ツール・ライブラリ 案件以外でも、社内ツールに F#を使っている XML 用 DSL ライブラリ Web アプリ画面テスト支援ツール Web API 用テスティングフレームワーク 1 Web API 用テスティングフレームワーク 2
  13. 13. 事例紹介
  14. 14. 背景 某クラウドから某クラウドへの移行案件 権利的な問題から、元のシステム(C#で構 築)をそのまま持っていけない 「仕様書も自動化された結合テストもあるの でタイにオフショアします」(想像) 社員 O「是非 F#でやらせてください!」 役員 K「いいよ!」 社内としては、社員 O を含む 2 名が開発者として 開発スタート タイ側は開発者 2 名+ 1
  15. 15. 問題発生 社員 O が都合により案件から離れる 社員 K「タイ側のコード、レビューしても らっていいですか?」 type Function = obj[] - obj[] !? →タイに渡航し、F#や Git について教育
  16. 16. 全体の設計 トランザクションスクリプト風 個人の能力のばらつきを考えて API ごとに分離 全体を Result を返すブロックで構築 Railway oriented programming(鉄道指向プログラ ミング) これのためにライブラリを作成(Basis.Core) 自称ちゃんと return する唯一のコンピュテーショ ン式ライブラリ
  17. 17. ここには当日何かあったらしい
  18. 18. 全体的な結果 機能が増えたにもかかわらず、総行数は約 2 割減った 些細なバグがほとんどなくなった ドタバタはあったが、納期には間に合った C#だったらたぶん間に合わなかったし、バグも出 たはず
  19. 19. 仕事で.を使うために
  20. 20. 教育(その) 全く F#も関数プログラミングも知らない人 にいきなりつかわせるのは無理 当然教育が必要 とりあえず、実践 F#もしくはプログラミング F#を読んでもらう 後は、実際に使ってもらいつつ、頻繁にレ ビュー より Fらしい書き方を伝える ペアプロは有効 ループを書かない方法や、null と None の違いな どを重点的に
  21. 21. 教育の成果(サンプル数) 範囲外アクセスがほとんど出なかった null 例外も F#に閉じた範囲では出なかった C#に戻っても問題のあるコードを書くことが 減った 関数型初心者がいても、サポートできればいける さらに、能力も向上
  22. 22. 教育(その ) とにかく型(レコードや判別共用体)を作ら せる obj を許さない リフレクションも許さない F#コード養成ギプス
  23. 23. 教育の効果(サンプル数 ) F#っぽいコードがある程度書けるように なった つまらないバグも減った ただ、それ以前の問題は結局解決できな かった 省略語はいくら言っても直らなかった・・・ よくいる普通のサラリーマンプログラマよりは使 える人材に
  24. 24. 業務で.を使ってみて 教育はとても大事 ある種のバグは減る 生産性については、環境次第 今後も F#を業務で使っていきます 事例もできる限り出していきたい
  25. 25. おわり

×