Upgrade to Pro — share decks privately, control downloads, hide ads and more …

I live by using a minor language

kbaba1001
December 26, 2020

I live by using a minor language

kbaba1001

December 26, 2020
Tweet

More Decks by kbaba1001

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. View Slide

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

    View Slide

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

    View Slide

  6. Clojure
    好きな言語

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. Word Penne
    demo

    View Slide

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

    View Slide

  12. https://www.neumann.tokyo/internships

    View Slide

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

    View Slide

  14. 好きだから

    View Slide

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

    View Slide

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

    View Slide

  17. 人が少ない

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. Clojure以外も学ぶ必
    要がある

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  33. 枯れた言語
    vs
    その他

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  37. なぜClojureが好きなのか
    Section –

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  42. 関数型プログラミング

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. 人気なエディタ用の拡張機能がだいたいある
    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
    その他好きなところ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  50. https://www.4clojure.com/

    View Slide

  51. 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コミュニティ

    View Slide

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

    View Slide

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

    View Slide