SlideShare a Scribd company logo
1 of 21
Download to read offline
OCamlによるプロダクト開発
∼ポータビリティを確保したミドルウェアの実現∼
合同会社フィールドワークス
梶田健史
自己紹介 (1)
梶田健史(かじたけんじ)
仕事 合同会社フィールドワークス プログラマ兼代表
Blog http://field-notes.hatenablog.jp/
Twitter @field_works
同い年の有名人:
山本昌(中日ドラゴンズ)
小泉今日子(女優・歌手)
尾美としのり(俳優)
古田新太(俳優)
自己紹介 (2)
合同会社フィールドワークス / Field Works, LLC.
設立 2007年5月
業務内容
PDF関連ソフトウェア製品の企画・開発・販売
PDFテンプレートエンジン「Field Reports」
クラウド帳票サービス「Field Reports for Cloud(β)」
ソフトウェア受託開発
URL http://www.field-works.co.jp/
所在地 愛知県春日井市
なぜOCamlか?
製品コンセプト
ポータブルな帳票ツール(ミドルウェア)
⇒どんなシステムにも組み込んで利用できる!(稼働環境の変化にも強い)
マルチプラットフォーム
Linux,Windowsは必須
マルチプログラミング言語
いわゆるLL言語(Ruby, Python, PHP)とJVM, .NET
⇒どこでも/だれでも帳票設計ができる!
PDF自体をテンプレートとして利用

⇒特別なSDKや帳票エディタも不要(開発費削減にも貢献)

⇒Excel方眼紙を元にテンプレートが作成できる。
ポータビリティを実現するための実装言語は?
C++
常識的に考えれば最も適した言語

⇒でも,メモリ管理が大変(もう疲れたよ,パトラッシュ…)
.Net/JVM系言語

⇒できれば,C形式共有ライブラリとして提供したい。
Lisp / Scheme
Gambit, Bigloo, ChickenあたりはCコードを出力できるらしい。

⇒でも,スクラッチから開発するのは工数がかかりそう。
OCaml
C共有ライブラリを作れるのは良いけど,ちょっと構文が …

⇒しかし,CamlPDFという良さそうなPDFライブラリを発見!

⇒言語仕様というよりも処理系の実装に惹かれて採用を決定
設計と実装
PDFテンプレート:静的要素を記述
レンダリングパラメータ:動的要素を記述
レンダリング機能:OCamlで実装
言語Bridge:各言語の拡張ライブラリとして実装
内部構成
下絵となるPDFを作成する
オフィスソフト(Excel,Wordなど)
DTPソフト(Illustrator,InDesignなど)
PDFテンプレート(1)
Acrobatでフィールドを配置する
PDFに配置したフィールドをプレースフォルダとして利用
表形式に並べるのをサポートする機能もある。
PDFテンプレート(2)
テンプレートの構成とフィール
ドに設定する値を記述する。
フィールド値は(フィールド名,
値)の組で表現
できるだけI/Fの結合が疎にな
るように設計
言語Bridge内で,ネイティブ
データ構造をJSONに変換
レンダリングパラメータ
レンダリング機能(1)
レンダリング機能(2)
OCaml 3.12.1で開発
使用ライブラリ
CamlPDF(Coherent Graphics社製)
ExtLib,json-wheel,cryptokit(できるだけ軽いものを選択)
C共有ライブラリを生成
ocamlopt -output-obj で,C形式オブジェクトを出力
各OSのリンカーで,共有ライブラリ・DLLを作成

⇒実際には,メモリ管理やエラー処理が難しいので,

 薄いラップ層を介して言語Bridgeから利用する。
言語Bridge
5つのAPIを用意するだけなので,実装は比較的容易
Python, Ruby, PHP, Perl

⇒拡張ライブラリとして実装

⇒ネイティブデータ構造→JSON変換を内包
JVM

⇒JNIライブラリとして実装
.NET

⇒アンマネージコードを呼び出すライブラリをC#で実装

⇒COMインターフェースも公開(Excelからでも呼び出せる!)
言語Bridgeのソースを添付

⇒マイナー言語への移植も可能
マルチプラットフォームの実現
Linux, Windows, Mac OS X対応

⇒32bit/64bit対応しているので,実質計6プラットフォームに対応

⇒基本的にOCamlがサポートしているアーキテクチャであれば対応可能

 (以前はMac OSのPPCにも対応していたが,現在は廃止)
OCamlを使ってみての評価
OCamlの習得について
初期状態
関数型言語の実務経験なし
Lisp, Scheme, ML, OCamlの本を何冊か読んだ程度

⇒正直,関数型で実務コードが書ける気がしなかった。
1ヶ月目
OCamlPDFのソース解析から着手
ガチ関数型でなく,良い意味で肩の力の抜けたコード

⇒ちょっと,安心
3ヶ月目
普通にコーディングできるようになったかな?

⇒ただし,現在に至るもOCamlの基本的な機能しか使っていない
OCamlの記述性について
コードの生産性
プログラム規模:15,000行程度

⇒感覚的には,C#/Javaと比較して半分程度?
OCamlで書ききれなかった処理
プログラミング言語Bridge
Cライブラリ呼び出し

⇒libcurl連携,システムコール(ハードウェア情報取得など)
文字コード変換

⇒一部データで32bitが必要になったためCに置き換え
match式べんり!
PDFオブジェクトの型により分岐する処理が非常に書きやすい。

⇒OOPだと,Visitorパターンを多用し煩雑になりがち
パフォーマンス
測定結果
単ページの帳票 ⇒ 20枚/秒
10,000ページの帳票 ⇒ 45分
(Core 2 Quad 2.66GHz,メモリ4GB)
バイナリデータの処理
フォント,画像などバイナリデータの処理もOCamlで記述

⇒特にボトルネックにはなってなさそう。

※ただし,getByte的な関数を末尾再帰で回す力ずくの実装
今後の課題
OCaml 4.0対応
OPAMのWindows対応を待っているが,無理?
テスト環境の拡充
単体テスト

⇒少ないです。すいません。
結合テスト

⇒テストパターンを自動生成。ただし,確認は目視
2.0版リリース遅れ
組版機能の確認に手間取っている。
ご清聴ありがとうございました。

More Related Content

What's hot

第7回SIA研究会(例会)プレゼン資料 堀野様
第7回SIA研究会(例会)プレゼン資料 堀野様第7回SIA研究会(例会)プレゼン資料 堀野様
第7回SIA研究会(例会)プレゼン資料 堀野様
Tae Yoshida
 

What's hot (20)

Developer summit 2014 summer
Developer summit 2014 summerDeveloper summit 2014 summer
Developer summit 2014 summer
 
iQONを支えるクローラーの裏側
iQONを支えるクローラーの裏側iQONを支えるクローラーの裏側
iQONを支えるクローラーの裏側
 
WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~
WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~ WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~
WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~
 
Softlayer_summit
Softlayer_summitSoftlayer_summit
Softlayer_summit
 
JAWS-UG 注目支部ご紹介
JAWS-UG 注目支部ご紹介JAWS-UG 注目支部ご紹介
JAWS-UG 注目支部ご紹介
 
【SoftLayerのスタートアップ企業支援プログラム Catalyst事例】テラスマイル株式会社
【SoftLayerのスタートアップ企業支援プログラム Catalyst事例】テラスマイル株式会社【SoftLayerのスタートアップ企業支援プログラム Catalyst事例】テラスマイル株式会社
【SoftLayerのスタートアップ企業支援プログラム Catalyst事例】テラスマイル株式会社
 
[CT10] CTO とチョークトーク! 私たちがクラウド時代/AI時代に求める技術者
[CT10] CTO とチョークトーク! 私たちがクラウド時代/AI時代に求める技術者[CT10] CTO とチョークトーク! 私たちがクラウド時代/AI時代に求める技術者
[CT10] CTO とチョークトーク! 私たちがクラウド時代/AI時代に求める技術者
 
アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発
 
20180119 AI で業務効率化 ~B To Employee ではじめる Chat Bot~
20180119 AI で業務効率化 ~B To Employee ではじめる Chat Bot~20180119 AI で業務効率化 ~B To Employee ではじめる Chat Bot~
20180119 AI で業務効率化 ~B To Employee ではじめる Chat Bot~
 
産業用ロボットにおけるUnityとAI技術の活用
産業用ロボットにおけるUnityとAI技術の活用産業用ロボットにおけるUnityとAI技術の活用
産業用ロボットにおけるUnityとAI技術の活用
 
2016年冬 IBMクラウド最新動向
2016年冬 IBMクラウド最新動向2016年冬 IBMクラウド最新動向
2016年冬 IBMクラウド最新動向
 
Ops meets NoOps
Ops meets NoOpsOps meets NoOps
Ops meets NoOps
 
Html5/JSモバイルアプリ最前線
Html5/JSモバイルアプリ最前線Html5/JSモバイルアプリ最前線
Html5/JSモバイルアプリ最前線
 
第7回SIA研究会(例会)プレゼン資料 堀野様
第7回SIA研究会(例会)プレゼン資料 堀野様第7回SIA研究会(例会)プレゼン資料 堀野様
第7回SIA研究会(例会)プレゼン資料 堀野様
 
MRを活用した車両分解訓練(双子ゲームス)
MRを活用した車両分解訓練(双子ゲームス)MRを活用した車両分解訓練(双子ゲームス)
MRを活用した車両分解訓練(双子ゲームス)
 
RPAタスクの実行や予約どうやっていますか?
RPAタスクの実行や予約どうやっていますか?RPAタスクの実行や予約どうやっていますか?
RPAタスクの実行や予約どうやっていますか?
 
ZOZOTOWNのCloud Native Journey
ZOZOTOWNのCloud Native JourneyZOZOTOWNのCloud Native Journey
ZOZOTOWNのCloud Native Journey
 
ZOZOTOWN の Cloud Native Journey
ZOZOTOWN の Cloud Native JourneyZOZOTOWN の Cloud Native Journey
ZOZOTOWN の Cloud Native Journey
 
Mobile cloudnight 2015/11/11
Mobile cloudnight 2015/11/11Mobile cloudnight 2015/11/11
Mobile cloudnight 2015/11/11
 
【Ltech#7】Pardotによるマーケティングオートメーション
【Ltech#7】Pardotによるマーケティングオートメーション【Ltech#7】Pardotによるマーケティングオートメーション
【Ltech#7】Pardotによるマーケティングオートメーション
 

Viewers also liked

Viewers also liked (15)

関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
 
Modular Macros for OCaml
Modular Macros for OCamlModular Macros for OCaml
Modular Macros for OCaml
 
OCamlでJavaScriptが幸せ
OCamlでJavaScriptが幸せOCamlでJavaScriptが幸せ
OCamlでJavaScriptが幸せ
 
おいしいお茶の淹れ方
おいしいお茶の淹れ方おいしいお茶の淹れ方
おいしいお茶の淹れ方
 
ビジネスアプリケーション特論 2013-09-02
ビジネスアプリケーション特論 2013-09-02ビジネスアプリケーション特論 2013-09-02
ビジネスアプリケーション特論 2013-09-02
 
プロダクトデザインとしてのライティング20141011
プロダクトデザインとしてのライティング20141011プロダクトデザインとしてのライティング20141011
プロダクトデザインとしてのライティング20141011
 
世界征服を目指すJubatusだからこそ期待する5つのポイント
世界征服を目指すJubatusだからこそ期待する5つのポイント世界征服を目指すJubatusだからこそ期待する5つのポイント
世界征服を目指すJubatusだからこそ期待する5つのポイント
 
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slides
 
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
 
「作らないことも選択肢に」「なぜやるのかを自分の言葉で」未経験エンジニアが社会人1年目で学んだ6つの教訓|(株)リブセンス
「作らないことも選択肢に」「なぜやるのかを自分の言葉で」未経験エンジニアが社会人1年目で学んだ6つの教訓|(株)リブセンス「作らないことも選択肢に」「なぜやるのかを自分の言葉で」未経験エンジニアが社会人1年目で学んだ6つの教訓|(株)リブセンス
「作らないことも選択肢に」「なぜやるのかを自分の言葉で」未経験エンジニアが社会人1年目で学んだ6つの教訓|(株)リブセンス
 
Railway Oriented Programming
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented Programming
 
価値をデザインしながら開発する方法と仕事術
価値をデザインしながら開発する方法と仕事術価値をデザインしながら開発する方法と仕事術
価値をデザインしながら開発する方法と仕事術
 
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか
 
ゼロからはじめるプロダクトマネージャー生活
ゼロからはじめるプロダクトマネージャー生活ゼロからはじめるプロダクトマネージャー生活
ゼロからはじめるプロダクトマネージャー生活
 

Similar to OCamlによるプロダクト開発

Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話
Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話
Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話
Daisuke Tsutsumi
 
第14回SIA例会プレゼン資料
第14回SIA例会プレゼン資料第14回SIA例会プレゼン資料
第14回SIA例会プレゼン資料
Tae Yoshida
 
2020/9/10 静岡ギルド(準備中)勉強会「"これからアジャイル"のはじめ方を、アジャイルの源流XPから辿る」(抜粋版)
2020/9/10 静岡ギルド(準備中)勉強会「"これからアジャイル"のはじめ方を、アジャイルの源流XPから辿る」(抜粋版)2020/9/10 静岡ギルド(準備中)勉強会「"これからアジャイル"のはじめ方を、アジャイルの源流XPから辿る」(抜粋版)
2020/9/10 静岡ギルド(準備中)勉強会「"これからアジャイル"のはじめ方を、アジャイルの源流XPから辿る」(抜粋版)
Tomoaki Kambe
 
R04_WHITEROOM ではじめるコラボレーティブコンピューティング [Microsoft Japan Digital Days]
R04_WHITEROOM ではじめるコラボレーティブコンピューティング [Microsoft Japan Digital Days]R04_WHITEROOM ではじめるコラボレーティブコンピューティング [Microsoft Japan Digital Days]
R04_WHITEROOM ではじめるコラボレーティブコンピューティング [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
Jet brainsnight resharper全社導入事例
Jet brainsnight resharper全社導入事例Jet brainsnight resharper全社導入事例
Jet brainsnight resharper全社導入事例
AkihiroYamamoto
 
Setta soft layersummit(公開用)_creationline
Setta soft layersummit(公開用)_creationlineSetta soft layersummit(公開用)_creationline
Setta soft layersummit(公開用)_creationline
chenree3
 
Setta soft layersummit(公開用)_creationline
Setta soft layersummit(公開用)_creationlineSetta soft layersummit(公開用)_creationline
Setta soft layersummit(公開用)_creationline
softlayerjp
 
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
Yoshihito Kuranuki
 

Similar to OCamlによるプロダクト開発 (20)

第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
 
Smartphoneseminar orso_sakamoto
Smartphoneseminar orso_sakamotoSmartphoneseminar orso_sakamoto
Smartphoneseminar orso_sakamoto
 
Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話
Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話
Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話
 
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションC# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
 
第14回SIA例会プレゼン資料
第14回SIA例会プレゼン資料第14回SIA例会プレゼン資料
第14回SIA例会プレゼン資料
 
2020/9/10 静岡ギルド(準備中)勉強会「"これからアジャイル"のはじめ方を、アジャイルの源流XPから辿る」(抜粋版)
2020/9/10 静岡ギルド(準備中)勉強会「"これからアジャイル"のはじめ方を、アジャイルの源流XPから辿る」(抜粋版)2020/9/10 静岡ギルド(準備中)勉強会「"これからアジャイル"のはじめ方を、アジャイルの源流XPから辿る」(抜粋版)
2020/9/10 静岡ギルド(準備中)勉強会「"これからアジャイル"のはじめ方を、アジャイルの源流XPから辿る」(抜粋版)
 
R04_WHITEROOM ではじめるコラボレーティブコンピューティング [Microsoft Japan Digital Days]
R04_WHITEROOM ではじめるコラボレーティブコンピューティング [Microsoft Japan Digital Days]R04_WHITEROOM ではじめるコラボレーティブコンピューティング [Microsoft Japan Digital Days]
R04_WHITEROOM ではじめるコラボレーティブコンピューティング [Microsoft Japan Digital Days]
 
生成AIが切り拓く新しいゲームの創り方・遊び方
生成AIが切り拓く新しいゲームの創り方・遊び方生成AIが切り拓く新しいゲームの創り方・遊び方
生成AIが切り拓く新しいゲームの創り方・遊び方
 
エンタープライズにおけるiOSアプリ開発で押さえておくべき7つのこと
エンタープライズにおけるiOSアプリ開発で押さえておくべき7つのことエンタープライズにおけるiOSアプリ開発で押さえておくべき7つのこと
エンタープライズにおけるiOSアプリ開発で押さえておくべき7つのこと
 
HoloLab_20191016_ceatec
HoloLab_20191016_ceatecHoloLab_20191016_ceatec
HoloLab_20191016_ceatec
 
エンタープライズにおける iOSアプリ開発・導入のいろは
エンタープライズにおける iOSアプリ開発・導入のいろはエンタープライズにおける iOSアプリ開発・導入のいろは
エンタープライズにおける iOSアプリ開発・導入のいろは
 
20110624 sem facebook_yaoi
20110624 sem facebook_yaoi20110624 sem facebook_yaoi
20110624 sem facebook_yaoi
 
Jet brainsnight resharper全社導入事例
Jet brainsnight resharper全社導入事例Jet brainsnight resharper全社導入事例
Jet brainsnight resharper全社導入事例
 
SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜
SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜
SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜
 
if-up 2019 | C3. コンシューマープロダクトにおけるクラウド実践
if-up 2019 | C3. コンシューマープロダクトにおけるクラウド実践if-up 2019 | C3. コンシューマープロダクトにおけるクラウド実践
if-up 2019 | C3. コンシューマープロダクトにおけるクラウド実践
 
iPadアプリ選択のベストプラクティス(in 名古屋)
iPadアプリ選択のベストプラクティス(in 名古屋)iPadアプリ選択のベストプラクティス(in 名古屋)
iPadアプリ選択のベストプラクティス(in 名古屋)
 
Setta soft layersummit(公開用)_creationline
Setta soft layersummit(公開用)_creationlineSetta soft layersummit(公開用)_creationline
Setta soft layersummit(公開用)_creationline
 
Setta soft layersummit(公開用)_creationline
Setta soft layersummit(公開用)_creationlineSetta soft layersummit(公開用)_creationline
Setta soft layersummit(公開用)_creationline
 
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
 
顧客要望と情熱のあいだ - B2B SaaS のプロダクトマネジメント -
顧客要望と情熱のあいだ - B2B SaaS のプロダクトマネジメント -顧客要望と情熱のあいだ - B2B SaaS のプロダクトマネジメント -
顧客要望と情熱のあいだ - B2B SaaS のプロダクトマネジメント -
 

OCamlによるプロダクト開発