SlideShare a Scribd company logo
1 of 23
Download to read offline
@ 教養としての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 git@github.com: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 が少しでも参考になれば
● 理想一辺倒でも実用一辺倒でもないバランス。怖くなさそう
○ 十分な歴史があり、実用に耐えるものは多そう
○ 関数界隈のモナドとかそういう言葉は意外と見かけなかった
○ 勉学の秋にぜひ
まとめ

More Related Content

What's hot

Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Takuya Ueda
 

What's hot (20)

関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめLispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
go generate 完全入門
go generate 完全入門go generate 完全入門
go generate 完全入門
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
SPAのルーティングの話
SPAのルーティングの話SPAのルーティングの話
SPAのルーティングの話
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
 
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察
 

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

師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013 師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013
hiboma
 
sukusuku-scrum introduction
sukusuku-scrum introductionsukusuku-scrum introduction
sukusuku-scrum introduction
Nao Yamamoto
 
Coursera experience
Coursera experienceCoursera experience
Coursera experience
Brian Hooper
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会
Yu Shibatsuji
 
ソフトウェア開発ブースト4手
ソフトウェア開発ブースト4手ソフトウェア開発ブースト4手
ソフトウェア開発ブースト4手
Keiichi Kobayashi
 

Similar to Clojureに入門してみた、2017年秋 (20)

“Septeni×Scala”勉強会#1資料_20150219_寺坂
“Septeni×Scala”勉強会#1資料_20150219_寺坂“Septeni×Scala”勉強会#1資料_20150219_寺坂
“Septeni×Scala”勉強会#1資料_20150219_寺坂
 
goog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までgoog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生まで
 
つ部 2015 09 こわくないネイティブライブラリの使い方
つ部 2015 09 こわくないネイティブライブラリの使い方つ部 2015 09 こわくないネイティブライブラリの使い方
つ部 2015 09 こわくないネイティブライブラリの使い方
 
師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013 師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013
 
第1回全てのソフトウェアをインストールできる
第1回全てのソフトウェアをインストールできる第1回全てのソフトウェアをインストールできる
第1回全てのソフトウェアをインストールできる
 
sukusuku-scrum introduction
sukusuku-scrum introductionsukusuku-scrum introduction
sukusuku-scrum introduction
 
S07 t2 midorikawa
S07 t2 midorikawaS07 t2 midorikawa
S07 t2 midorikawa
 
スクラム開発に取り組んでみた
スクラム開発に取り組んでみたスクラム開発に取り組んでみた
スクラム開発に取り組んでみた
 
Web技術勉強会 20110611
Web技術勉強会 20110611Web技術勉強会 20110611
Web技術勉強会 20110611
 
Coursera experience
Coursera experienceCoursera experience
Coursera experience
 
勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会
 
教えてみてわかった、新しいことを覚えるしくみ
教えてみてわかった、新しいことを覚えるしくみ教えてみてわかった、新しいことを覚えるしくみ
教えてみてわかった、新しいことを覚えるしくみ
 
Hiroshima.rb on github
Hiroshima.rb on githubHiroshima.rb on github
Hiroshima.rb on github
 
研修デザインとプレゼンテクニックでディープラーニング活用の裾野を広げる
研修デザインとプレゼンテクニックでディープラーニング活用の裾野を広げる研修デザインとプレゼンテクニックでディープラーニング活用の裾野を広げる
研修デザインとプレゼンテクニックでディープラーニング活用の裾野を広げる
 
アジャイルのスクラムなるものを発見
アジャイルのスクラムなるものを発見アジャイルのスクラムなるものを発見
アジャイルのスクラムなるものを発見
 
Xtextハンズオン(仮)
Xtextハンズオン(仮)Xtextハンズオン(仮)
Xtextハンズオン(仮)
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
 
ソフトウェア開発ブースト4手
ソフトウェア開発ブースト4手ソフトウェア開発ブースト4手
ソフトウェア開発ブースト4手
 

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