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

What's hot (20)

あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 

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手
 

Recently uploaded

Recently uploaded (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

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