Clojureについて
Clojureは、Rich Hickeyにより作られ2007年に登場した比較的新しい言語である。新しいとは言っても、言語自体は1958年に登場したLISP言語の方言の一つであり、またJVMの上で動作してレガシーなプログラミング言語であるJAVAのコードをそのまま利用できるという古い顔と新しい顔を併せ持つ言語となっている。
Clojureの特徴の一つとして関数型言語であるというものがある。これはpythonやjavascript等の通常の言語が手続きを書き並べていく言語であるのに対して、関数という機能ブロックで全てのプログラムを構成するというプログラミング言語の歴史の中では最新のトレンドに部類されるものとなる。
プログラミング言語の開発の視点の一つに再利用性の向上がある。関数型言語の前に一世を風靡したオブジェクト指向型言語もそのような観点で開発されたものだが、関数というブロックで構成するというアイデアは更なる再利用性の向上を実現している。
また、REPLと呼ばれるコードを書きながらその都度関数を評価していくしくみは、作成時のバグを低減し、コード生成の効率化をもたらす。更に、LISPの持つ「データ=コード」という特徴は、プログラムの自動生成を含めた人工知能技術を実現する可能性を持つ。
ここでは国内外で出版されているClojureの参考図書についてまとめた。 機械学習の参考図書に関しては別途まとめる。
Clojureの参考図書(一般)
まず「おいしいClojure入門」、少し古い(2013)情報で一部のライブラリは使えないものもあるが、使うという観点で、ウェブから機械学習、音声・画像処理、andoroidかIOT等非常に広範囲な領域についてのサンプルコードが記載されておりプログラミングの楽しみを味合わせてくれると共に、関数型プログラミングの容易さ(ほとんど文法は覚えなくて良い)を感じされてる図書となっている。以下に項目の抜粋を述べる。
「おいしいClojure入門」 第1章 Clojur環境の作り方と始め方 道に迷った時は 依存関係を見る Eclipseで一仕事 セッションにライブラリをダイナミックに追加する Javaのコードを走らせるっていうのは、ここだけの話 もう一つのRuby JRuby 第2章 数行のコードで毎日の仕事が楽になるClojure 今日からできるClojure 非同期でhttpサーバーとクライアントを接続する 統計するならIncanter ドキュメントならMrginalia 簡単素敵なグラフ Seasawでユーザーインターフェース docjureで表計算 Postalでスパムマスター お知らせするならGrowl 通知アプリケーション ターミナルを使ってユーザーと対話する ツリアルポート使ってる? PCのUSBポートへのアクセスを実現する 巨大なXMLファイルを処理するパーサー Clojureで自然言語処理 Conduitでストリームプロセッシング全開 Aliceが暗号化すればBobも安心 ニューラルネットワークにはNetz Overtoneから派生 非常にシビアなタイミングをサポート スケジューリングして、スケジュールの開始/停止を設定 javaでよく使われているLexer(字句解析器)とParser(構文解析器) ネットワーク越しに他の言語と通信できる Luceneに繋げる Solrベースの検索エンジンとつなぐ PDFにしたい時は Esperを使って複雑なイベントを処理する 大量のメッセージやイベントを処理する必要のあるアプリケーションの開発を容易にする イベントのフィルタリングと解析を行い、リアルタイムに応答 1秒間に20万個のイベントの処理が可能 Esper ドメイン特化言語(DSL) パーサーを作る 第3章 開発心が沸き立つClojure フラクタル 手続き型イメージ生成ライブラリ 用途 ゲーム用に2D素材の質感生成 フラクタルイメージ/アートワークの作成 レイトレーシングの3D/4D質感生成 パターン生成(マップのランダム生成等) 遺伝的アルゴリズム Gajure 論理プログラミング Prologはどこへ行った? ルールエンジンが熱い 組み込みデータベース Cupboard データベースの変更管理とマイグレーションを提供 動画の変換が必要な時に利用する テストする GUIベースのブラウザをClojureから操作 第4章 Clojureでお手軽、チョー楽しいWeb開発 Lord of the Ring Web開発の最強パートナー ringの世界 compojureによるHTTPルーティング セキュリティ関連 webテンプレート RESTfulなアプリケーションは今や当たり前 第5章 メッセージのベストプラクティス JMS、AMQP、 RabbitMQ用ツールキット Clamq Active MQとの接続 Cli-camel スケジューリングが必要な時はQuartz タスクスケジュール ClojureのRedis ZookeeperとAvoutでアプリケーションの状態を配信する memcached Spyglass Apache Casandra Clojureで使いやすいHBase Cascalogを使って、ClojureからHadoopにクエリ Storm Clojureから利用可能なリアルタイム分散システム 第6章 クラウドとClojureの明るい日々 5分でHerokuにデプロイする SSHでのアクセスを準備する アプリケーションをGoogle App Engineにアタッチする クラウドでぷロイメントを提供するPassサービス Amazon Web ServiceでBeanstalkかClojure Clojureでのシステムモニタリング パラレルSSH 同時に複数のサーバーに対して、同じシェルコマンドを実行できる 一回で複数のマシンのディスクの空き容量を確認 シンプルなモニタリング ClojureからAmazon EC2のインスタンスを直接モニタする 仮想PCの利用 インフラをコードで書く 第7章 サウンドもClojureでコントロール スピーチでClojure、音声認識でClojure Clojure で話す 音楽をライブするなら 野獣とライブ 第8章 Clojureでグラフィクス Processing Clojureに移植された最高のビジュアルツール OpenCVと画像処理 第9章 Androidアプリ開発で稼いでみませんか! SDKのインストール Androidプロジェクトを作成して動かす 第10章 今日はArduinoで組み込みプログラミング Clodiuno AndroidのClojure ブレットボードの使い方 第11章 Clojureでゲーム開発! お猿さんも喜ぶ、Clojureでゲーム 次のゲームはどこに? 第12章 プラットフォーム Ruby+Clojure=Rouge ClojureCLR(.NETでClojure) ClojureScript(ClojureをJavaScriptにコンパイル)
一通りプログラムが書けるようになったところで、実用を考える際に必要なサンプルコードが記載されている参考図書。
「Clojure Recipes」 1. Starting Your Project with Leiningen 1. Leiningenでプロジェクトを始める 2. Packaging Clojure for a Java EE Enviroment 2. Java EE環境でのClojureのパッケージ化 3. Creating a REST Server in Compojure 3. CompojureでのRESTサーバの作成 4. Creating a REST Server with Liberator 4. LiberatorによるRESTサーバーの作成 5. A REST Client in Clojurescript 5. ClojurescriptによるRESTクライアントの作成 6. A Simple JSON Server 6. シンプルなJSONサーバー 7. A Simple Server Using the Pedestal Framework 7. Pedestalフレームワークを使ったシンプルなサーバ 8. A Stock Ticker on the Pedestal Framework Server 8. Pedestal Frameworkサーバー上の株式ティッカー 9. Simplifying Logging with a Macro 9. ロギングをマクロで簡単にする 10.Extending the Compiler with a Macro 10.マクロを使ったコンパイラの拡張 11. Simplifying Datomic Syntax by Writing a DSL 11. DSLを書いてDatomic構文を簡略化する 12. Reading the SASS DSL and Generating CSS with Clojure Zippers 12. SASS DSLを読んでClojure ZippersでCSSを生成する 13. Introduction to Cascalog 13. カスカログ入門 14. Catalog and Hadoop 14. カタログとHadoop 15. Loading a Data File into Cascalog 15. カスカログへのデータファイルの読み込み 16. Writing Out a Data File with Cascalog 16. Cascalog によるデータファイルの書き出し 17. Cascalog and Structured Data 17. カスカログと構造化データ 18. Loading Custom Data Formats into Cascalog 18. Cascalog へのカスタムデータ形式の読み込み 19. Connecting to Datomic from Your Application 19. アプリケーションから Datomic への接続 20. Getting Started with Storm 20. Storm を始める 21. Getting Started with JMS in Clojure 21. ClojureでJMSを始めよう 22. Integrating Storm and JMS 22. StormとJMSの統合 23. CSV Reader 23. CSVリーダー 24. Detecting Errors with a Log Monitoring Application 24. ログ監視アプリケーションでエラーを検出する 25. Bundling Clojure as Ant Plug-in 25. ClojureをAntのプラグインとしてバンドルする 26. Bundling Clojure as a Maven Plug-in 26. MavenプラグインとしてのClojureの束ね方 27. Integrating Clojure by Scripting Web Tests 27. WebテストをスクリプトすることによるClojureの統合 28. Monitoring Availability with a Website 28. Webサイトによる可用性の監視
発行されている参考図書の中で最新のもの。
「The Clojure Workshop」 Chapter 1: Hello REPL! 第1章:Hello REPL! Chapter 2: Data Types and Immutability 第2章:データ型と不変性 Chapter 3: Functions in Depth 第3章:関数の詳細 Chapter 4: Mapping and Filtering 第4章:マッピングとフィルタリング Chapter 5: Many to One: Reducing 第5章:多対一:レデューシング Chapter 6: Recursion and Looping 第6章:再帰とルーピング Chapter 7: Recursion II: Lazy Sequences 第7章:再帰II: 遅延シーケンス Chapter 8: Namespaces, Libraries and Leiningen 第8章:名前空間、ライブラリ、レイニンゲン Chapter 9: Host Platform Interoperability with Java and JavaScript 第9章:JavaとJavaScriptによるホストプラットフォームの相互運用性 Chapter 10: Testing 第10章:テスト Chapter 11: Macros 第11章:マクロ Chapter 12: Concurrency 第12章: 並行処理 Chapter 13: Database Interaction and the Application Layer 第13章:データベースとの連携とアプリケーション層 Chapter 14: HTTP with Ring 第14章:リングによるHTTP Chapter 15: The Frontend: A ClojureScript UI 第15章:フロントエンド。ClojureScriptによるUI Summary Appendix
教科書的な情報よりは、より実用的な実装の観点でまとめられたもの。
「PROFESSIONAL CLOJURE」 CHAPTER 1: HAVE A BEGINNER’S MIND 第1章: ビギナーズマインドを持つ CHAPTER 2: RAPID FEEDBACK CYCLES WITH CLOJURE 第2章 Clojureによる迅速なフィードバックサイクル CHAPTER 3: WEB SERVICES 第3章:ウェブサービス CHAPTER 4: TESTING 第4章:テスト CHAPTER 5: REACTIVE WEB PAGES IN CLOJURESCRIPT 第5章 Clojurescriptで作るリアクティブなWebページ CHAPTER 6: THE DATOMIC DATABASE 第6章:デートミック・データベース CHAPTER 7: PERFORMANCE 第7章:パフォーマンス What Is Performance? パフォーマンスとは何か? Summary まとめ
「Clojure Programming Cookbook」 Chapter 1 : Live Programming with Clojure 第1章: Clojureによるライブプログラミング Chapter 2 : Interacting with Collections 第2章:コレクションとの付き合い方 Chapter 3 : Clojure Next 第3章:Clojure Next Chapter 4 : File Acmes and Network 第4章:ファイルエイムとネットワーク Chapter 5 : Working with Other Lan 第5章:他のLanとの連携 Chapter 6 : Concurrency and Parallelism 第6章:同時実行と並列処理 Chapter 7 : Advanced Tips 第7章 応用編 Chapter 8 : Web Applications 第8章:Webアプリケーション Chapter 9 : Testing 第9章:テスト Chapter 10 : Deployment and DevOps 第10章:デプロイメントとDevOps
教科書的な参考図書。
「Living Clojure」 I. A Guided Tour of Clojure I. Clojureのガイドツアー 1. The Structure of Clojure 1. Clojureの構造 2. Flow and Functional Transformations 2. フローと関数型変換 3. State and Concurrency 3. 状態と並行性 4. Java Interop and Polymorphism 4. Javaの相互運用とポリモーフィズム 5. How to Use Clojure Projects and Libraries 5. Clojureプロジェクトとライブラリの使い方 6. Communication with core.async 6. core.asyncとのコミュニケーション 7. Creating Web Applications with Clojure 7. ClojureでWebアプリケーションを作る 8. The Power of Macros 8. マクロの威力 II. Living Clojure Training Program II. リビングClojureトレーニングプログラム 9. Joining the Clojure Community 9. Clojureコミュニティへの参加 10. Weekly Living Clojure Training Plan 10. 週間リビングClojureトレーニングプラン 11. Further Adventures 11. さらなる冒険
core.async等非同期プログラミングに特化した参考図書。
「Hands-on Reactive Programming with Clojure」 Chapter 1: What is Reactive Programming? 第1章:リアクティブプログラミングとは? Chapter 2: A Look at Reactive Extensions 第2章 リアクティブ・エクステンションの紹介 Chapter 3: Asynchronous Programming and Networking 第3章:非同期プログラミングとネットワーク Chapter 4: Introduction to core.async 第4章:core.asyncの紹介 Chapter 5: Creating Your Own CES Framework with core.async 第5章:core.asyncで独自のCESフレームワークを作る Chapter 6: Building a Simple ClojureScript Game with Reagi 第6章 ReagiでシンプルなClojureScriptゲームを作る Chapter 7: The UI as a Function 第7章 関数としてのUI Chapter 8: A New Approach to Futures 第8章 先物への新しいアプローチ Chapter 9: A Reactive API to Amazon Web Services 第9章:Amazon Web ServicesへのリアクティブなAPI Chapter 10: Reactive Microservices 第10章:リアクティブなマイクロサービス Chapter 11: Testing Reactive Apps 第11章:リアクティブアプリのテスト Chapter 12: Concurrency Utilities in Clojure 第12章:Clojureのコンカレンシーユーティリティー
webサービスの中でもマイクロサービスに特化した参考図書。
「Microservice with Clojure」 Chapter 1 : Monolithic Versus Microservice 第1章: モノリシックとマイクロサービスの違い Chapter 2 : Microservice Architecture 第2章:マイクロサービスアーキテクチャ Cahpre 3 : Microservice for Helping Hands Application 第3章:マイクロサービスを使ったHelping Handsアプリケーション Chapter 4 : Development Enviroment 第4章:開発環境 Chapter 5 : REST APIs for Microservices 第5章:マイクロサービスのためのREST API Chapter 6 : Introduction to Pedestal 第6章:Pedestalの紹介 Chapter 7 : Achieving Imuutability with Datomic 第7章 : Datomicによるイミュータビリティの実現 Chapter 8 : Building Microservices for Helping Hands 第8章:マイクロサービスの構築方法 Chapter 9 : Configuring Microservices 第9章 : マイクロサービスの設定 Chapter 10 : Event-Driven Patterns for Microservices 第10章:マイクロサービスのイベント駆動型パターン Chapter 11 : Deploying and Monitoring Secured Microservices 第11章 : セキュリティで保護されたマイクロサービスのデプロイと監視
「Clojure Hight Performance Programming」 Chapter 1: Performance by Design 第1章:パフォーマンス・バイ・デザイン Chapter 2: Clojure Abstractions 第2章:Clojureの抽象化 Chapter 3: Leaning on Java 第3章:Javaに寄り添う Chapter 4: Host Performance 第4章:ホストのパフォーマンス Chapter 5: Concurrency 第5章:コンカレンシー Chapter 6: Measuring Performance 第6章:パフォーマンスの測定 Chapter 7: Performance Optimization 第7章:パフォーマンスの最適化 Chapter 8: Application Performance 第8章:アプリケーションのパフォーマンス
コメント
[…] Clojure全般の参考図書 […]