2014年7月28日月曜日

Scalaz勉強会しました

APPAREL CLOUDアパレルウェブが提供しているアパレル向けのクラウドサービスです。ボクが所属するEverforthの提供するEverforthプラットフォーム上に構築されています。
Everforthプラットフォームは、O2Oやオムニチャネル向けのクラウド・プラットフォームです。Everforthプラットフォームでは、サービスを実行するクラウド実行基盤と同時にO2Oやオムニチャネル・ビジネスをサービスに結び付けるための業務分析、システム分析を包含したサービス開発体系の提供も予定しています。
「サービス開発体系」は、オブジェクト指向ビジネス・モデリング、オブジェクト指向分析設計の技術をベースに、Everforthプラットフォームをターゲットとしたアプリケーション開発の方法論として整備していく予定です。
一般的なオブジェクト指向分析設計方法論が複雑で分かりづらいものになっているのは、どの業務分野、どの実装技術、どの実行基盤に対してもニュートラルな形で整備されているため、(1)汎用性を担保するために複雑化する、(2)ターゲットの業務分野、実装技術、実行基盤むけにカスタマイズが必要、という要因があると思います。
逆に、業務分野、実装技術、実行基盤を確定した上でカスタマイズすればかなりスリムなものにできるはずです。
Everforthサービス開発体系では、業務分野はO2O/オムニチャネル、(バックエンドの)実装技術はScalaによるOFP(Object-Functional Programming)、実行基盤はEverforthクラウドプラットフォームとすることで、この問題を解決しようとしています。

勉強会

Everforthサービス開発体系を業務に載せるためには、エンジニアの技術教育が非常に重要になってきます。
そこで上流のビジネス・モデリングからScalaでの実装にいたるまでの一連の技術の入門編を企画しました。これらの技術は連動しており、業務分析からオブジェクト指向分析/設計を経由してScalaでの実装まで一気通貫の体系になっています。
  • 実務者のためのかんたんScalaプログラミング
  • 実務者のためのかんたんScalaz(第1回)
  • 実務者のためのかんたんScala入出力プログラミング
  • 実務者のためのかんたんScala設計
  • 実務者のためのかんたんオブジェクト指向分析/設計
  • 実務者のためのかんたん業務分析
第1回は7月7日に札幌で開催しました。
札幌が東京と並んでEverforthの開発拠点になっているので、まず札幌で勉強会として開始しています。
今回は技術体系をざっくりおさらいするのが目的で、Eveforthプラットフォームに依存した部分もないので、オブジェクト指向技術やScalaの普及という目的もあり、一般の方も参加できる形にしています。

Scalaz

第1回「実務者のためのかんたんScalaz」の資料は以下になります。


最初のテーマとしてScalazを選んだのは、社内チャットでScalazについての質問があったのがきっかけになっていますが、関数型プログラミング導入の狙いの説明を最初にしておくのが有益ではないかという判断もあります。Scalazは「純粋」関数型プログラミングのためのライブラリなので、関数型プログラミングの方向性や特性をより際立った形で取り上げることができます。
かんたん?
今回の資料で「かんたん」なのは、スライドの右上に「かんたん」のマークがついている所で、以下の2つの要素です。
  • Scalazの便利機能
  • Monoid
それ以外は、なんとなく聞いておいてもらえばよい、というレベルの情報として考えています。
逆に「Monoid」についてはこの機会にプログラミングに取り入れて欲しい、という意図から「かんたん」の範囲に含めています。「Monoid」というととっつきにくく感じますが、プログラミングのイディオムとしては簡単で利用範囲の広い汎用テクニックであり、関数型プログラミングの考え方をマスターする起点にもなるという、一粒で二度も三度もおいしいものです。
Scalazを本格的に取り上げる場合は、Traversable・Foldable、Promise・Task、Free、Treeといった所もテーマにしたいのですが、今回は「かんたん」ということで断念しました。機会があればこの辺りも加味した、Object-Function Programmingという切り口でまとめてみたいと思います。

次回以降の予定

第2回は「実務者のためのかんたんScala設計」を札幌で予定しています。多分9月の初旬頃になると思います。
東京(or 横浜)でも準備ができしだい開催したいと思います。

0 件のコメント:

コメントを投稿