Clojureに入門してみた、2017年秋
-
Upload
satoshi-kobayashi -
Category
Technology
-
view
911 -
download
1
Transcript of Clojureに入門してみた、2017年秋
@ 教養としてのClojure / 2017.10.4
Clojureに入門してみた、2017年秋〜 寄り道したかもしれない 10 ステップの足跡 〜
はじめに
● 小林 達 (こばやし さとし)
● BizReachで3年半。「スタンバイ」「HRMOS」立ち上げ
● 年の割にコード歴短い。雰囲気プログラマー
○ Scalaが主でサーバーサイドよりのフルスタック
● 土日は、娘の相手と、娘の写真と、料理担当
● Clojureは興味だけは前からあった
○ これは半年前にスケジュール登録
○ 登壇者3人が決まって役割を75%終えたようなもの
○ Clojureを1ヶ月経ったが、ほぼインプットのみ
誰かな?
「教養(きょうよう)とは
個人の人格や学習に結びついた
知識や行いのこと」
一般に、独立した人間が持っているべきと考えられる一定レベルの様々
な分野にわたる知識や常識と、古典文学や芸術など質の高い文化に対す
る幅広い造詣が、品位や人格および、物事に対する理解力や創造力に結
びついている状態を指す - Wikipedia
教養とは?1/2
Clojureの知識・常識・造詣
理解力・想像力に結びつき、さらに品位・人格まで!?
● 実務に取り入れる淡い夢を抱きつつ、まず日々の開発に新鮮な視点を提供してく
れることを期待
● もしかして Must Learnな技術のひとつとしてブランディングできたりしないかな?
教養とは? 2/2
10ステップの足跡
Step 1. Clojureのコンセプトを掴む
Clojure - 論理的根拠 より
● Lisp: シンプル、データとしてのコード(code-as-data)
○ 文法が少ない。data-as-code = evalみたいなもの?
○ ただ、括弧が増えすぎない・Javaが呼びやすいよう+αの工夫
● 関数型プログラミングのための言語 (イミュータブル、高階関数)
● 確立されたプラットフォーム(JVM)と共存できる言語
● 並行処理のために設計された言語
また、
● REPLでインタラクティブに開発ができる!
● フレームワークよりライブラリ
● 動的な型付け
根拠
● 言語としては成熟期に入っていそう
○ Clojure 1.9.0-beta1 (September 2017)
○ Clojure 1.8.0 (January, 2016)
○ Clojure 1.7.0 (June, 2015)
○ Clojure 1.6.0 (March, 2014)
○ Clojure 1.5.1 (March, 2013)
○ Clojure 1.4.0 (April, 2012)
○ Clojure 1.3.0 (September, 2011)
○ Clojure 1.2.1 (September, 2010)
○ Clojure 1.2.0 (August, 2010)
○ Clojure 1.1.0 (January, 2010)
○ Clojure 1.0.0 (July, 2009)
Step 2. Clojureの現在 1/3
● Stack Overflow Developer Survey 2017
○ 年収1位!、好きな言語上位!
● JVMerが最後に辿り着く
場所なのかもしれない
Step 2. Clojureの現在 2/3
国内事例はどうか (順不同)
● オプトさん -
Clojureをプロダクトに導入した話 - Opt Technologies Magazine
● サイボウズスタートアップさん -
Clojureを用いたWebアプリケーション開発 - SSSSLIDE
● ユーザベースさん - Clojureの世界観 - 紙箱
● 楽天さん?リクルートさん?TISさん?
● 小さな会社さん多数?
Step 2. Clojureの現在 2/3
Step 3. とりあえずコードを眺める
Learn X in Y minutes
● 1ページで少量
● 小一時間で雰囲気をつかむことができる
● 眺めるもので、電車の中で読むような感じ
● REPLっぽい。コメント、コード、の連続
● 余裕があれば、マクロ版も。
※ 「X」として多くの言語があるが、REPLに
最適化されたClojureはこの形式が特にあってそう
Step 4. 最低限の文法を学ぶ 1/2
Step 4. 最低限の文法を学ぶ 2/2
(… 漢文みたいにレ点を入れたくなった)
● ビルドツール。で REPL を起動できる
● インストールに時間はかからない
○ 初回の立ち上げでJARを少しだけダウンロード ($HOME/.m2/repository に入
る)
● lein new で、新規プロジェクトの雛形を作れる
○ project.clj とその他のファイルを読むとなんとなく分かる
● 最近は、 boot なるものも
● 写経しながら、慣れた気分になる
Step 5. Leiningen で REPL
$ brew install leiningen
$ lein repl
基本の一冊を選ぶならこれか
● 家に、第一版第一刷があった
○ 流し読み
● 現在、第三版がベータでリリース間近
○ 買ってみたが、初心者レベルでは
差がほとんどわからず
○ 日本語と英語の訳の対比に少し利用
Step 6. 「プログラミング Clojure」を読む 1/2
出版されると流行がくる?
● 第3版 (英: 2017/11/25 )
● 第2版 (英: 2012/4 日: 2013/4)
● 第1版 (英: 2009/6 日: 2010/1)
Step 6. 「プログラミング Clojure」を読む 2/2
● 変更を保存すると即時評価される。正解なら次の課題に自動で進む
○ はい次、はい次、と行けるので理解できてくる感がある
● koan01から24まで。数時間ぐらい
○ 基本構造、関数、並行プログラミング、マクロまで
● ただ、エラーの内容がコンソールから読み取れない
○ 別ウィンドウで `lein repl` しておいて、コピペで試しながら進めた
http://clojurescriptkoans.com/ は、更にお手軽。内容は大体(全く?)同じ。慣れるま
で基本の反復練習として手を動かすのにいいかもしれない。
Step 7. Clojure Koans を解く
$ git clone [email protected]:functional-koans/clojure-koans.git
$ cd clojure-koans
$ lein koan run
時々出てくるLips用語でわからなかった。マクロはわかるけど、リーダー?フォーム?そんなときに発見: Clojure
の基礎 〜マクロ編〜 (athosさん)
理解:
● フォーム … プログラムが読まれる単位。文字列、数値、キーワード、リストなどを指す ref.
● リーダー… テキストをパースし、コンパイラが解釈できるデータ構造を生成する ref.
● リーダーマクロ… 前置きされる特定のマクロ文字によって起動されるリーダーの特殊動作。冗長なリスト
形式の省略形としてつかう。新規登録は不可。「;」「’」「#」など
● マクロ … コードからコードへの変換を定義する関数 ref.
Step 8. 押さえておきたい「リーダー」のあたり
フォーム
リーダー
リーダーマクロ
※青字で元資料に追加
学ぶ過程でお世話になったリソースたちを gist にまとめ
Step 9. リソースを整理
「Clojure で Web 開発をはじめてみよう — Clojure の日本語ガイド」(by あやぴーさん)を
順を追って見てだいたい雰囲気がつかめる!
● ルーティング、HTMLテンプレート、DBアクセス、バリデーション
● サーバ再起動せずに変更を反映できるREPL上の開発
● 他のライブラリの解説も充実
Step 10. Web開発のイロハ
道半ば。
● IntelliJの力はどうなんだ?
● ClojureScriptを試したかった!
○ React とか Redux とかと
● Rich Hickey をまだあまり知らない
○ 有名な格言とその哲学
Step 無念.
まとめ
● 最初は慣れない
○ 短い名前の関数とかが読みづらい。ただ、よく使うものは少なそう
○ 手を動かす経験を重ねるのがよさそう。REPL便利
○ Java/Scala辺りの経験はある程度あった方がよさそう
● 既に学ぶリソースは多く存在する
○ 情報にのまれたが少ないよりいい
○ Step 1-10 が少しでも参考になれば
● 理想一辺倒でも実用一辺倒でもないバランス。怖くなさそう
○ 十分な歴史があり、実用に耐えるものは多そう
○ 関数界隈のモナドとかそういう言葉は意外と見かけなかった
○ 勉学の秋にぜひ
まとめ