Clojureに入門してみた、2017年秋

23
@ 教養としてのClojure / 2017.10.4 Clojureに入門してみた、2017年秋 〜 寄り道したかもしれない 10 ステップの足跡 〜

Transcript of Clojureに入門してみた、2017年秋

Page 1: Clojureに入門してみた、2017年秋

@ 教養としてのClojure / 2017.10.4

Clojureに入門してみた、2017年秋〜 寄り道したかもしれない 10 ステップの足跡 〜

Page 2: Clojureに入門してみた、2017年秋

はじめに

Page 3: Clojureに入門してみた、2017年秋

● 小林 達 (こばやし さとし)

● BizReachで3年半。「スタンバイ」「HRMOS」立ち上げ

● 年の割にコード歴短い。雰囲気プログラマー

○ Scalaが主でサーバーサイドよりのフルスタック

● 土日は、娘の相手と、娘の写真と、料理担当

● Clojureは興味だけは前からあった

○ これは半年前にスケジュール登録

○ 登壇者3人が決まって役割を75%終えたようなもの

○ Clojureを1ヶ月経ったが、ほぼインプットのみ

誰かな?

Page 4: Clojureに入門してみた、2017年秋

「教養(きょうよう)とは

個人の人格や学習に結びついた

知識や行いのこと」

一般に、独立した人間が持っているべきと考えられる一定レベルの様々

な分野にわたる知識や常識と、古典文学や芸術など質の高い文化に対す

る幅広い造詣が、品位や人格および、物事に対する理解力や創造力に結

びついている状態を指す - Wikipedia

教養とは?1/2

Page 5: Clojureに入門してみた、2017年秋

Clojureの知識・常識・造詣

理解力・想像力に結びつき、さらに品位・人格まで!?

● 実務に取り入れる淡い夢を抱きつつ、まず日々の開発に新鮮な視点を提供してく

れることを期待

● もしかして Must Learnな技術のひとつとしてブランディングできたりしないかな?

教養とは? 2/2

Page 6: Clojureに入門してみた、2017年秋

10ステップの足跡

Page 7: Clojureに入門してみた、2017年秋

Step 1. Clojureのコンセプトを掴む

Clojure - 論理的根拠 より

● Lisp: シンプル、データとしてのコード(code-as-data)

○ 文法が少ない。data-as-code = evalみたいなもの?

○ ただ、括弧が増えすぎない・Javaが呼びやすいよう+αの工夫

● 関数型プログラミングのための言語 (イミュータブル、高階関数)

● 確立されたプラットフォーム(JVM)と共存できる言語

● 並行処理のために設計された言語

また、

● REPLでインタラクティブに開発ができる!

● フレームワークよりライブラリ

● 動的な型付け

根拠

Page 8: Clojureに入門してみた、2017年秋

● 言語としては成熟期に入っていそう

○ 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

Page 9: Clojureに入門してみた、2017年秋

● Stack Overflow Developer Survey 2017

○ 年収1位!、好きな言語上位!

● JVMerが最後に辿り着く

場所なのかもしれない

Step 2. Clojureの現在 2/3

Page 10: Clojureに入門してみた、2017年秋

国内事例はどうか (順不同)

● オプトさん -

Clojureをプロダクトに導入した話 - Opt Technologies Magazine

● サイボウズスタートアップさん -

Clojureを用いたWebアプリケーション開発 - SSSSLIDE

● ユーザベースさん - Clojureの世界観 - 紙箱

● 楽天さん?リクルートさん?TISさん?

● 小さな会社さん多数?

Step 2. Clojureの現在 2/3

Page 11: Clojureに入門してみた、2017年秋

Step 3. とりあえずコードを眺める

Learn X in Y minutes

● 1ページで少量

● 小一時間で雰囲気をつかむことができる

● 眺めるもので、電車の中で読むような感じ

● REPLっぽい。コメント、コード、の連続

● 余裕があれば、マクロ版も。

※ 「X」として多くの言語があるが、REPLに

最適化されたClojureはこの形式が特にあってそう

Page 12: Clojureに入門してみた、2017年秋

Step 4. 最低限の文法を学ぶ 1/2

Page 13: Clojureに入門してみた、2017年秋

Step 4. 最低限の文法を学ぶ 2/2

(… 漢文みたいにレ点を入れたくなった)

Page 14: Clojureに入門してみた、2017年秋

● ビルドツール。で REPL を起動できる

● インストールに時間はかからない

○ 初回の立ち上げでJARを少しだけダウンロード ($HOME/.m2/repository に入

る)

● lein new で、新規プロジェクトの雛形を作れる

○ project.clj とその他のファイルを読むとなんとなく分かる

● 最近は、 boot なるものも

● 写経しながら、慣れた気分になる

Step 5. Leiningen で REPL

$ brew install leiningen

$ lein repl

Page 15: Clojureに入門してみた、2017年秋

基本の一冊を選ぶならこれか

● 家に、第一版第一刷があった

○ 流し読み

● 現在、第三版がベータでリリース間近

○ 買ってみたが、初心者レベルでは

差がほとんどわからず

○ 日本語と英語の訳の対比に少し利用

Step 6. 「プログラミング Clojure」を読む 1/2

Page 16: Clojureに入門してみた、2017年秋

出版されると流行がくる?

● 第3版 (英: 2017/11/25 )

● 第2版 (英: 2012/4 日: 2013/4)

● 第1版 (英: 2009/6 日: 2010/1)

Step 6. 「プログラミング Clojure」を読む 2/2

Page 17: Clojureに入門してみた、2017年秋

● 変更を保存すると即時評価される。正解なら次の課題に自動で進む

○ はい次、はい次、と行けるので理解できてくる感がある

● 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

Page 18: Clojureに入門してみた、2017年秋

時々出てくるLips用語でわからなかった。マクロはわかるけど、リーダー?フォーム?そんなときに発見: Clojure

の基礎 〜マクロ編〜 (athosさん)

理解:

● フォーム … プログラムが読まれる単位。文字列、数値、キーワード、リストなどを指す ref.

● リーダー… テキストをパースし、コンパイラが解釈できるデータ構造を生成する ref.

● リーダーマクロ… 前置きされる特定のマクロ文字によって起動されるリーダーの特殊動作。冗長なリスト

形式の省略形としてつかう。新規登録は不可。「;」「’」「#」など

● マクロ … コードからコードへの変換を定義する関数 ref.

Step 8. 押さえておきたい「リーダー」のあたり

フォーム

リーダー

リーダーマクロ

※青字で元資料に追加

Page 19: Clojureに入門してみた、2017年秋

学ぶ過程でお世話になったリソースたちを gist にまとめ

Step 9. リソースを整理

Page 20: Clojureに入門してみた、2017年秋

「Clojure で Web 開発をはじめてみよう — Clojure の日本語ガイド」(by あやぴーさん)を

順を追って見てだいたい雰囲気がつかめる!

● ルーティング、HTMLテンプレート、DBアクセス、バリデーション

● サーバ再起動せずに変更を反映できるREPL上の開発

● 他のライブラリの解説も充実

Step 10. Web開発のイロハ

Page 21: Clojureに入門してみた、2017年秋

道半ば。

● IntelliJの力はどうなんだ?

● ClojureScriptを試したかった!

○ React とか Redux とかと

● Rich Hickey をまだあまり知らない

○ 有名な格言とその哲学

Step 無念.

Page 22: Clojureに入門してみた、2017年秋

まとめ

Page 23: Clojureに入門してみた、2017年秋

● 最初は慣れない

○ 短い名前の関数とかが読みづらい。ただ、よく使うものは少なそう

○ 手を動かす経験を重ねるのがよさそう。REPL便利

○ Java/Scala辺りの経験はある程度あった方がよさそう

● 既に学ぶリソースは多く存在する

○ 情報にのまれたが少ないよりいい

○ Step 1-10 が少しでも参考になれば

● 理想一辺倒でも実用一辺倒でもないバランス。怖くなさそう

○ 十分な歴史があり、実用に耐えるものは多そう

○ 関数界隈のモナドとかそういう言葉は意外と見かけなかった

○ 勉学の秋にぜひ

まとめ