Slide 1

Slide 1 text

@KBABA1001• 26 DEC 2020 マイナー言語で 生きていく neumann.tokyo

Slide 2

Slide 2 text

1 kbaba1001 (馬場 一樹) 2 Clojure, Ruby, JavaScript, etc 3 元ギークハウスオーナー、地方移住 4 趣味: 英語、イラスト PROFILE

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

受託開発 Go, TypeScript 受託データ分析 SQL 自社開発(未ローンチ) Clojure, ClojureScript 2020年度の仕事

Slide 5

Slide 5 text

受託開発 Clojure, ClojureScript, Ruby, JavaScript/TypeScript 自社開発(未ローンチ) Clojure, ClojureScript 2021年度の仕事の予定

Slide 6

Slide 6 text

Clojure 好きな言語

Slide 7

Slide 7 text

What? 関数型プログラミング言語、JVMで動くLisp Why? Webサービスを設計しやすい言語を求めた結果Clojureにたどり着いた 特徴 JVMによる豊富なライブラリ、安定したシステム開発 ClojureScriptによるフロントエンド開発 CLOJURE

Slide 8

Slide 8 text

1 Circle CI 2 Pitch 3 テンクー、トヨクモ、GYAO、トレタ 4 Nubank どこで使われているか 参考: https://github.com/athos/japanese-clojure-companies https://clojure.org/community/companies

Slide 9

Slide 9 text

合同会社ノイマンでの活用 Solution –

Slide 10

Slide 10 text

Word Penne demo

Slide 11

Slide 11 text

shadow-cljs build tool Reagent/re-frame react/redux stylefy css-in-js DEVELOPMENT TOOLS rebase hosting, database, authentication, etc

Slide 12

Slide 12 text

https://www.neumann.tokyo/internships

Slide 13

Slide 13 text

なぜClojureを採用したのか Solution –

Slide 14

Slide 14 text

好きだから

Slide 15

Slide 15 text

1 通常「好きだから」という理由だけで動けない 2 一日のほとんどをプログラムを書くことで過ごしている。 それを嫌いな言語で行うのはつらい。 3 自分で会社を経営する意味。 誰にも縛られずに仕事をできる。 4 Clojureを採用することによるデメリットも多々ある 好きだから

Slide 16

Slide 16 text

Clojureを採用するデメリット Problem –

Slide 17

Slide 17 text

人が少ない

Slide 18

Slide 18 text

1 Clojureプログラマが少ない 2 受託できる案件が少ない 3 ライブラリやドキュメントも少ない 4 孤独感 人が少ない

Slide 19

Slide 19 text

• 小さいからこその親密なコミュニティ • 技術力の高い人が多い • 海外に目を向ける CLOJUREプログラマが少ない

Slide 20

Slide 20 text

• 日本で Clojure/ClojureScript を利用 している会社一覧 • https://github.com/athos/japanese-clojure-companies • 社員募集をしている会社に受託開発の ダイレクトメール営業 受託できる案件が少ない

Slide 21

Slide 21 text

• 2015年頃から日本語の書籍は出ていない • 英語は毎年出ているのでそれらを読む • ライブラリはJavaやJavaScriptのものも活 用できる • 言語のドキュメントは結構ある • ライブラリのドキュメントは少ないのでソー スコードを読むこともしばしば ライブラリやドキュメントが少ない

Slide 22

Slide 22 text

• 友達と盛り上がれない • SNSでも盛り上がれない • それでもコードを書く • モチベーション管理が重要 孤独感

Slide 23

Slide 23 text

Clojure以外も学ぶ必 要がある

Slide 24

Slide 24 text

1 Java, JavaScriptの知識が必要なことがある 2 「他の言語で流行のあれを取り込んだ」が多い。 その場合ドキュメントが少ない。例: re-frame, core.async 3 マイナー言語だけで生きていくのは至難の業 4 言語に限らず幅広い知識は必要になりがち CLOJURE以外も学ぶ必要がある

Slide 25

Slide 25 text

流行ってる言語を採用するメリット Section –

Slide 26

Slide 26 text

流行りつつある言語 Go, TypeScript, Rust, Kotlin ある程度枯れた言語 C, Ruby, PHP, Java 流行らないが熱心なユーザーがいる言語 Clojure, Haskell, OCaml, Elixir, Elm 流行ってる言語 ※主観的な意見です

Slide 27

Slide 27 text

流行りつつある言語 Go, TypeScript, Rust, Kotlin ある程度枯れた言語 C, Ruby, PHP, Java 流行らないが熱心なユーザーがいる言語 Clojure, Haskell, OCaml, Elixir, Elm 流行ってる言語 ※主観的な意見です 一番メリットが多い

Slide 28

Slide 28 text

1 使える人が多い 2 ライブラリやドキュメントが多い 3 失敗をたくさんしているので安定している。 大体の困り事は解決できる。 4 インフラのサポートが充実している 枯れた言語のメリット

Slide 29

Slide 29 text

• 何かしら枯れた言語の課題を解決して いる • 信頼できそうな開発元 • キラーアプリ • プログラマがミーハーだから なぜ新しい言語が流行るのか

Slide 30

Slide 30 text

1 ライブラリやドキュメントが未成熟。 枯れた言語で簡単にできることが他の言語では難しいこともある。 2 デファクトスタンダードがない。何かとカオス 3 使える人が少ない 4 特に設計の知見が不足気味 流行っている言語を採用するデメリット

Slide 31

Slide 31 text

この特徴はClojureの デメリットとほぼ一 致する

Slide 32

Slide 32 text

流行りつつある言語 Go, TypeScript, Rust, Kotlin ある程度枯れた言語 C, Ruby, PHP, Java 流行らないが熱心なユーザーがいる言語 Clojure, Haskell, OCaml, Elixir, Elm 流行ってる言語 ※主観的な意見です この2つは実用上 ほぼ同じ苦労をする

Slide 33

Slide 33 text

枯れた言語 vs その他

Slide 34

Slide 34 text

• 枯れた技術で困ったことを改善したい • 美しくない、楽しくない、飽きた • 新しい技術のほうが面白い 枯れた技術を使いたくない理由

Slide 35

Slide 35 text

枯れた言語を採用し ないなら茨の道

Slide 36

Slide 36 text

自分が良いと思える 技術を使おう

Slide 37

Slide 37 text

なぜClojureが好きなのか Section –

Slide 38

Slide 38 text

Rubyプログラマが なぜClojureをはじめたのか SUB SECTION

Slide 39

Slide 39 text

1 RailsやHanamiは複雑すぎるように感じた。 MVCもDDDもしんどい 2 関数型プログラミング 3 ORMを使っていても結局生SQLは書く 4 非同期処理、型とか RUBYプログラマがなぜCLOJUREをはじめたのか

Slide 40

Slide 40 text

1 RailsやHanamiは複雑すぎるように感じた MVCもDDDもしんどい →クラスが多すぎる。Clojureは全て関数なのでシンプル 2 関数型プログラミング →map, reduceなどは僕には必須 3 ORMを使っていても結局生SQLは書く →Clojure文化ではORMはメジャーではない 4 非同期処理、型とか →Future, core.async, core.spec RUBYプログラマがなぜCLOJUREをはじめたのか

Slide 41

Slide 41 text

少ないデータ構造と、 たくさんの関数 http://boxofpapers.hatenablog.com/entry/2017/04/10/154333

Slide 42

Slide 42 text

関数型プログラミング

Slide 43

Slide 43 text

RDB操作 • ORMもなくはないけど JDBC + 何かしらの SQL Builder の組み合わせのほう が一般的 • JDBC + HoneySQL, JDBC + HugSQL など • Toucan という ORM もある • 結果はクラスではなくハッシュマップで扱う • 全体的にハッシュマップを操作する関数がたくさんあるので問題ない • SQLやデータベースからの結果を過度に抽象化しないので扱いやすい • 余分な知識を必要としない

Slide 44

Slide 44 text

• STMとかFutureとかあるけどcore.asyncが人気? • channelにデータを送ったり受け取ったりする core.async 非同期処理

Slide 45

Slide 45 text

• Clojureは動的型付け言語だしハッシュマップや配列でデータをやり取り するので、型ではなくスキーマを定義することで仕様を明白にできる • instrument 関数を実行したときだけチェックする core.spec 型?

Slide 46

Slide 46 text

人気なエディタ用の拡張機能がだいたいある VS Code, Emacs, Vim, IntelliJ, etc スタンダードなビルド環境 leiningen, shadow-cljs, etc 一通りライブラリが揃っていて、過度に乱立していない Ring, Pedestal, Reagent, re-frame, etc ライブラリも小さいものが多い 100行程度の物もしばしばある 全てClojureにできる Java, JavaScript, CSS-in-JS, React Native, etc その他好きなところ

Slide 47

Slide 47 text

何からはじめたらいいのか Clojure 入門 –

Slide 48

Slide 48 text

インストール WSL/Mac/Linux brew install clojure/tools/clojure brew install leiningen

Slide 49

Slide 49 text

https://qiita.com/lagenorhynque/items/68c314c288b75a9492ba

Slide 50

Slide 50 text

https://www.4clojure.com/

Slide 51

Slide 51 text

Shibuya.lisp (slack) https://join.slack.com/t/shibuya-lisp/shared_invite/zt-a5skvfkm- Hx3YbwuS7d1hqU_Ebs1h3g clojurians (slack) http://clojurians.net/ ノイマンlab (discord) https://discord.com/invite/qTEfHCjQQN ONLINEコミュニティ

Slide 52

Slide 52 text

困ったらTwitterで "clojure" の文字を入れてツ イートしよう。 たぶん誰かが助けてくれるはず。

Slide 53

Slide 53 text

はじめよう、Clojure WSL/Mac/Linux brew install clojure/tools/clojure brew install leiningen