SlideShare a Scribd company logo
.事例発表
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 と yield
http://bleis-tift.hatenablog.com/entry/return-and-yield
これまでの主な活動
LangExt
https://github.com/LangExt/LangExt
http://langext.github.io/LangExt/
Basis.Core
https://github.com/BasisLib/Basis.Core
今日話すこと
弊社と F#
事例紹介
仕事で F#を使うために
弊社と.
弊社について
社員数は 20 人程度
プログラマは半分くらい
いわゆる一つの SIer
開発では主に、「ちょっと特殊なクライアン
ト」向けに Web API を作ってます
.NET 系なので、C#や F#を使ってます
弊社と.
入社後から、ちょっとしたツールとかに個人
的に使用
社内では、「条件さえあえば使ってみたい
ねー」って雰囲気
3 年か 4 年前に条件のあう案件が!
本格的に業務で F#を使い始めた
.使った主な案件
人力でやっていた作業を自動化する Web アプ
リ(1ヶ月)
プロキシサーバとして振る舞うシステムのコ
ア機能の Azure 化(3 週間)
WebAPI 用のフレームワーク
クラウド移行に伴うシステムの完全移行
.を使った社内ツール・ライブラリ
案件以外でも、社内ツールに 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#も関数プログラミングも知らない人
にいきなりつかわせるのは無理
当然教育が必要
とりあえず、実践 F#もしくはプログラミング
F#を読んでもらう
後は、実際に使ってもらいつつ、頻繁にレ
ビュー
より Fらしい書き方を伝える
ペアプロは有効
ループを書かない方法や、null と None の違いな
どを重点的に
教育の成果(サンプル数)
範囲外アクセスがほとんど出なかった
null 例外も F#に閉じた範囲では出なかった
C#に戻っても問題のあるコードを書くことが
減った
関数型初心者がいても、サポートできればいける
さらに、能力も向上
教育(その )
とにかく型(レコードや判別共用体)を作ら
せる
obj を許さない
リフレクションも許さない
F#コード養成ギプス
教育の効果(サンプル数 )
F#っぽいコードがある程度書けるように
なった
つまらないバグも減った
ただ、それ以前の問題は結局解決できな
かった
省略語はいくら言っても直らなかった・・・
よくいる普通のサラリーマンプログラマよりは使
える人材に
業務で.を使ってみて
教育はとても大事
ある種のバグは減る
生産性については、環境次第
今後も F#を業務で使っていきます
事例もできる限り出していきたい
おわり

More Related Content

Similar to F#事例発表

いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
 
Swift bondでつなげてプログラミング
Swift bondでつなげてプログラミングSwift bondでつなげてプログラミング
Swift bondでつなげてプログラミング
貴士 山本
 
Asp.netアプリケーションの最新プロファイリング
Asp.netアプリケーションの最新プロファイリングAsp.netアプリケーションの最新プロファイリング
Asp.netアプリケーションの最新プロファイリング
Kiyoaki Tsurutani
 
Webクリエイターに告ぐ!? ツールに頼って余った時間で◯◯しよう! ~ 注目!制作現場で触っておきたいツール紹介~
Webクリエイターに告ぐ!? ツールに頼って余った時間で◯◯しよう! ~ 注目!制作現場で触っておきたいツール紹介~Webクリエイターに告ぐ!? ツールに頼って余った時間で◯◯しよう! ~ 注目!制作現場で触っておきたいツール紹介~
Webクリエイターに告ぐ!? ツールに頼って余った時間で◯◯しよう! ~ 注目!制作現場で触っておきたいツール紹介~
Reimi Kuramochi Chiba
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSLurasandesu
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
 
Nom de fonction français
Nom de fonction françaisNom de fonction français
Nom de fonction français
hajikami
 

Similar to F#事例発表 (8)

いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
Swift bondでつなげてプログラミング
Swift bondでつなげてプログラミングSwift bondでつなげてプログラミング
Swift bondでつなげてプログラミング
 
C#とaop
C#とaopC#とaop
C#とaop
 
Asp.netアプリケーションの最新プロファイリング
Asp.netアプリケーションの最新プロファイリングAsp.netアプリケーションの最新プロファイリング
Asp.netアプリケーションの最新プロファイリング
 
Webクリエイターに告ぐ!? ツールに頼って余った時間で◯◯しよう! ~ 注目!制作現場で触っておきたいツール紹介~
Webクリエイターに告ぐ!? ツールに頼って余った時間で◯◯しよう! ~ 注目!制作現場で触っておきたいツール紹介~Webクリエイターに告ぐ!? ツールに頼って余った時間で◯◯しよう! ~ 注目!制作現場で触っておきたいツール紹介~
Webクリエイターに告ぐ!? ツールに頼って余った時間で◯◯しよう! ~ 注目!制作現場で触っておきたいツール紹介~
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSL
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
Nom de fonction français
Nom de fonction françaisNom de fonction français
Nom de fonction français
 

More from bleis tift

PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
bleis tift
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
bleis tift
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documents
bleis tift
 
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
bleis tift
 
効果の低いテストの話
効果の低いテストの話効果の低いテストの話
効果の低いテストの話
bleis tift
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前に
bleis tift
 
札束でExcelを殴る
札束でExcelを殴る札束でExcelを殴る
札束でExcelを殴る
bleis tift
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
bleis tift
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)
bleis tift
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
bleis tift
 
F#の基礎(嘘)
F#の基礎(嘘)F#の基礎(嘘)
F#の基礎(嘘)
bleis tift
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
bleis tift
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
bleis tift
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
bleis tift
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
bleis tift
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
bleis tift
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
bleis tift
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
bleis tift
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
bleis tift
 
自分戦略
自分戦略自分戦略
自分戦略
bleis tift
 

More from bleis tift (20)

PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documents
 
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
 
効果の低いテストの話
効果の低いテストの話効果の低いテストの話
効果の低いテストの話
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前に
 
札束でExcelを殴る
札束でExcelを殴る札束でExcelを殴る
札束でExcelを殴る
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
F#の基礎(嘘)
F#の基礎(嘘)F#の基礎(嘘)
F#の基礎(嘘)
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
 
自分戦略
自分戦略自分戦略
自分戦略
 

Recently uploaded

ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 

Recently uploaded (12)

ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 

F#事例発表