clojureについてまとめていきます。
まったくご無沙汰しております。
昨年の暮れから、年賀状の宛名印刷ツールをclojureで実装してたんですが、clojureでのコーディングが楽しくて学習結果を全然まとめていませんでした。
んで、今何をしているかというと宛名印刷ツールはちょっと一休みして、clominalというテキストエディタ(Swingで作られたEmacsもどき)を作ろうとしています。もちろんclojureで。
その過程でいろいろ学習する事ができました。とはいってもいわゆるclojureらしいプログラミングというよりは、主に「clojureからjavaを使うにはどうすればいいのか」ってのが主眼になっていますが。ま、扱うメインがSwingですしねぇ。
しかし、その開発途中、InputMethod絡みのjava側の問題にぶち当たりましてちょっと停滞してました。開発をやめるつもりは全くないのですが、この停滞が気分的によい機会になり、そろそろclojureの事を自分なりにまとめていこうかなという気分が出てきました。
で、まとめるにはお題があった方がやりやすいのですが、それのネタに使うにはちょっとEmacsもどきの話題はデカ過ぎるので、「ファイル操作をメインにしたバッチ処理コマンド体系をclojureで作る」をお題にする事にしました。(実はこのコンセプトの機能はclominal開発当初から組み込むつもりでいました。そもそもclominalの名前の由来が「CLOjure + terMINAL」ですしね。)
ま、普段からwindowsでのバッチコマンドに対しては、機能も表現力も貧弱すぎるという不満があったんですけどね。
私個人のバッチ処理に対する意見としては、
- 日々のくだらない作業はバッチ処理にやらせるべき。
- 便利なプログラムはバッチ処理のような書き捨てのものから育っていくことが多い。
- バッチ処理は、新規作成や改良が気軽に行えられるべき。(それこそテキストエディタオンリーでもイケる的な。)
- バッチ処理は、柔軟な組合せができるかどうかが使い勝手のよさに直結する。(unixのshellは「豊富なコマンド群」+「パイプとリダイレクト」が環境として用意されている為に実現できている)
- バッチ処理そのものを単品のexeで作るのはバッチ処理の開発サイクルの非効率化の温床。
- exeだけ一人歩きしはじめるとソースコードが入手できず、学習も改良もできない。
- 共通ロジックはライブラリ化されるべき。
- ライブラリ化されるなら「環境」まで視野に入れて考えるべき。(それがclominalそのものになる予定なわけですが。)
- いずれにせよexe単品で考えていてはいけない。
- あわよくばGUIまで同じノリで作れると最高。
この上述の要素について、clojureなら高レベルでクリアできそうだと思ったのがそもそものclominalの開発動機になっています。
環境はjava実行環境+clojure.jar(contribとかもですけども。)でOK。java環境に対してアレルギーのある会社はそうそう無いでしょう?
贅沢言わなければGUIは標準ライブラリのSwingで実現できます。
実際の処理内容は「*.clj」というテキストファイルとして管理しますし、
柔軟性に至ってはclojureフルスペックの「S式」が使えるわけです。マクロまで使えるファイル処理系バッチ言語w
というわけで投資に値すると踏み、コマンド群を作っていこうと思います。
さらにこれをネタとして、clojureについてまとめていきます。
概要としてはこんな感じで。
- まずは環境構築(最小構成の環境の構築のしかた。sh、またはbatの書き方。leinは使用しない。通信で上手くjarを取得できない環境があり、躓きの原因になりうる。それに動き方をちゃんと理解した方があとあと良いかと。)
- replでLispについて少し慣れてみる。
- ファイルに記述して、それを実行する方法。
- Lispについて。文法について。(手続き型言語との比較。簡単なLisp的考え方。)
- コマンド群を作りながら慣れる。(普段使いするには気楽に使えないとね。)
- Swingを使ってGUIを作る。
さー頑張るぞー。