it プランニングにおける...

Post on 28-Oct-2019

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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 プランニングにおける関数プログラミング

top related