it プランニングにおける...
TRANSCRIPT
ITプランニングにおける関数プログラミング
今井宜洋@yoshihiro503
有限会社 IT プランニング
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
ITプランニングとは
I 5年前に設立I 社員: @osiire + @yoshihiro503 +
@keigoi +バイトI 受託開発のソフトウェア会社I 本社: 名古屋 (インキュベータ施設)I 全員 (静的型付き)関数型言語で仕事してる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
ITプランニングとは
I 5年前に設立
I 社員: @osiire + @yoshihiro503 +@keigoi +バイト
I 受託開発のソフトウェア会社I 本社: 名古屋 (インキュベータ施設)I 全員 (静的型付き)関数型言語で仕事してる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
ITプランニングとは
I 5年前に設立I 社員: @osiire + @yoshihiro503 +
@keigoi +バイト
I 受託開発のソフトウェア会社I 本社: 名古屋 (インキュベータ施設)I 全員 (静的型付き)関数型言語で仕事してる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
ITプランニングとは
I 5年前に設立I 社員: @osiire + @yoshihiro503 +
@keigoi +バイトI 受託開発のソフトウェア会社
I 本社: 名古屋 (インキュベータ施設)I 全員 (静的型付き)関数型言語で仕事してる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
ITプランニングとは
I 5年前に設立I 社員: @osiire + @yoshihiro503 +
@keigoi +バイトI 受託開発のソフトウェア会社I 本社: 名古屋 (インキュベータ施設)
I 全員 (静的型付き)関数型言語で仕事してる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
ITプランニングとは
I 5年前に設立I 社員: @osiire + @yoshihiro503 +
@keigoi +バイトI 受託開発のソフトウェア会社I 本社: 名古屋 (インキュベータ施設)I 全員 (静的型付き)関数型言語で仕事してる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
これまでやった案件 (抜粋)
I FXチャートI大学ネットワーク管理システム
I iZE Smart Desktop
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
これまでやった案件 (抜粋)
I FXチャート
I大学ネットワーク管理システム
I iZE Smart Desktop
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
これまでやった案件 (抜粋)
I FXチャートI大学ネットワーク管理システム
I iZE Smart Desktop
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
これまでやった案件 (抜粋)
I FXチャートI大学ネットワーク管理システム
I iZE Smart Desktop
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
FXチャート
サーバーサイドのバックエンドをOCamlで開発@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
FXチャート
ロウソク生成器I 24時間データを集めて 1分足、5分足, ... ,月足を作る
I 365日可動。停止してはいけないI 単純なようで、サマータイムなどを考慮する必要があるためけっこう複雑
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
OCamlを使ったので
Good:I nullがない。型が強力→実行時エラーが起こりにくい
I 型チェックのおかげで拡張に強いI 副作用がない→見通しがよいI パフォーマンスがよい
Bad:I Microsoft SQLサーバーとの連携I Oracleとの連携
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
OCamlを使ったので
Good:I nullがない。型が強力→実行時エラーが起こりにくい
I 型チェックのおかげで拡張に強いI 副作用がない→見通しがよいI パフォーマンスがよい
Bad:I Microsoft SQLサーバーとの連携I Oracleとの連携
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
実際のOCamlコード
unfold Db.fetch
+> take_while (newer_than date)
+> Candle.reduce
+> Db.update_all
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
FXチャートは好評でいくつもの派生案件が生ま
れた
I JavaアプレットI 携帯アプリ (iアプリ,Sアプリ,)I スマートフォン用Webアプリ
(ocamljs)I スマートフォンアプリ (iPhoneアプリ、Androidアプリ)
「それはとってもうれしいなって」
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
FXチャートは好評でいくつもの派生案件が生ま
れた
I JavaアプレットI 携帯アプリ (iアプリ,Sアプリ,)I スマートフォン用Webアプリ
(ocamljs)I スマートフォンアプリ (iPhoneアプリ、Androidアプリ)
「それはとってもうれしいなって」@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
名古屋大学ネットワーク管理システム
I 独自の対話環境I いろいろな管理ツールを総括するようなシステム
I ScalaI パーサーコンビネータで独自言語を簡単実装
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
名古屋大学ネットワーク管理システム
I 独自の対話環境
I いろいろな管理ツールを総括するようなシステム
I ScalaI パーサーコンビネータで独自言語を簡単実装
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
名古屋大学ネットワーク管理システム
I 独自の対話環境I いろいろな管理ツールを総括するようなシステム
I ScalaI パーサーコンビネータで独自言語を簡単実装
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
名古屋大学ネットワーク管理システム
I 独自の対話環境I いろいろな管理ツールを総括するようなシステム
I Scala
I パーサーコンビネータで独自言語を簡単実装
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
名古屋大学ネットワーク管理システム
I 独自の対話環境I いろいろな管理ツールを総括するようなシステム
I ScalaI パーサーコンビネータで独自言語を簡単実装
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
Scalaを使ったので
Good:I 型チェックのおかげで復数人開発が容易I パーサー部分など見通しがよい
Bad:I 学習コストI ドキュメント不足
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
Scalaを使ったので
Good:I 型チェックのおかげで復数人開発が容易I パーサー部分など見通しがよい
Bad:I 学習コストI ドキュメント不足
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
iZE Smart Desktop
サーバーサイドとクライアントサイドそれぞれ開発
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
サーバーサイド (GAE + Scala)
def getIconAPI () =
for {
token <- S.param("token")
user <- auth(token)
sdate <- S.param("date")
date <- parseDate(sdate)
_ <- guard(check(user, date))
kind <- S.param("kind")
} yield DB.findIcon(kind, date).toXml()
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
サーバーサイド (GAE + Scala)
def getIconAPI () =
for {
token <- S.param("token") ?˜"認証エラー"user <- auth(token) ?˜"認証エラー"sdate <- S.param("date") ?˜"パラメータエラー"date <- parseDate(sdate) ?˜"時刻: パースエラー"_ <- guard(check(user, date)) ?˜"無効な値です"kind <- S.param("kind") ?˜"パラメータエラー"
} yield DB.findIcon(kind, date).toXml()
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
クライアントサイド (haXe + OCaml + Coq)
I 単体テストが容易I ハードウェアが提供するAPIをクライアント側からもれなく使えるプロトコルを証明、実装。
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
その他の案件
I 中古車相場分析システム(haXe + OCaml)
I 金属工場の生産受注管理システム(F#)
I Androidアプリ (Scala)I Coqの改造 (OCaml)
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
その他の案件
I 中古車相場分析システム(haXe + OCaml)
I 金属工場の生産受注管理システム(F#)
I Androidアプリ (Scala)I Coqの改造 (OCaml)
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
その他の案件
I 中古車相場分析システム(haXe + OCaml)
I 金属工場の生産受注管理システム(F#)
I Androidアプリ (Scala)I Coqの改造 (OCaml)
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
その他の案件
I 中古車相場分析システム(haXe + OCaml)
I 金属工場の生産受注管理システム(F#)
I Androidアプリ (Scala)
I Coqの改造 (OCaml)
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
その他の案件
I 中古車相場分析システム(haXe + OCaml)
I 金属工場の生産受注管理システム(F#)
I Androidアプリ (Scala)I Coqの改造 (OCaml)
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
(静的型付き)関数型言語でよかったこと
I DBやHTTP通信、Webサーバーなどとビジネスロジックを分離できる。
I 実行時エラーがなく強固なサーバー、メンテナンスや複数人開発が容易
I 高階関数、パターンマッチ、型推論、モナド:短く簡単に処理を記述
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
(静的型付き)関数型言語で苦労したところ
I ドキュメント不足I 枯れたライブラリが少ないI (開発環境?)
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
関数型言語を使うには
I お客さんの信頼を得るI 開発言語を選択、提案できるI 関数型言語を使うI いいものができる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
関数型言語を使うには
I お客さんの信頼を得る
I 開発言語を選択、提案できるI 関数型言語を使うI いいものができる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
関数型言語を使うには
I お客さんの信頼を得るI 開発言語を選択、提案できる
I 関数型言語を使うI いいものができる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
関数型言語を使うには
I お客さんの信頼を得るI 開発言語を選択、提案できるI 関数型言語を使う
I いいものができる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
関数型言語を使うには
I お客さんの信頼を得るI 開発言語を選択、提案できるI 関数型言語を使うI いいものができる
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
これぞ函数的円環の理
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
関数型言語をお仕事で使おう
I まずは小さな社内プロジェクトから
I まわりの同僚を巻き込もうI 社内、社外勉強会を開いて裾野を広げよう
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
関数型言語をお仕事で使おう
I まずは小さな社内プロジェクトから
I まわりの同僚を巻き込もうI 社内、社外勉強会を開いて裾野を広げよう
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
関数型言語をお仕事で使おう
I まずは小さな社内プロジェクトから
I まわりの同僚を巻き込もう
I 社内、社外勉強会を開いて裾野を広げよう
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
関数型言語をお仕事で使おう
I まずは小さな社内プロジェクトから
I まわりの同僚を巻き込もうI 社内、社外勉強会を開いて裾野を広げよう
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング
「ボクと契約して関数プログラマになってよ!」
@yoshihiro503 有限会社 IT プランニング
IT プランニングにおける関数プログラミング