デザイナーから見たClojureの会社

# デザイナーから見たClojureの会社

エンジニアさん全員がClojureを使う会社(テンクーと言います)で10年くらい働いているデザイナーです。
デザイナー(非エンジニア)から見た、Clojureの会社についてお話しします。

## 仕事環境

- Mac(Windows禁止、というか誰も使ってない)
    - 一見Windowsでは?なパソコンもLinux🐧というOSが入っているらしい。
    - サーバもLinux🐧で動いている。
    - ほぼ全員が英語キーボードである。それはなぜか? 私も知らない。
    - 大体の人がダークモードで使ってます。
    - とてもキーの高さ(厚み?)があったり、2つに別れるキーボードを使う人を見る。仕事終わったら、カバーもかけるんだね。大事にされている。
    - そういえば非エンジニアは、パソコンを組み立ててUbuntu入れる実習があります...。
- テキストエディタはだいたい3つあるみたいです。
    - Emacs(メイン！)
        - 私の設定ファイルはEmacsが好き方からもらいました。
    - Vim
        - サーバーの中ではこれを使うらしい。
    - VSCode
        - 最近ちょっと見かける。
- Markdownを使う
    - 機械さんの読みやすさ優先です。
- YAMLがしょっちゅう出てくる
    - 同上
- Office365的なソフトを殺そうとしてる。
    - 上記のとおり、Markdownでいろいろ書く。
    - データはYAMLとかCSVとかで書かされている。
    - Excelが出てくるとみんなキレちゃう。お客さんから送られてきて、それをエンジニアさんに展開するときはヒヤッとします。(せめてCSVに書き出したりしよう。)
- Github, HackMD, Slack などを利用している。
    - そういえば今まで1度も社内メールしたことない。
- 2020年2月の結構早い段階から完全リモートワークだった。
    - その後、特に業務に問題なく、快適なのでそのままな感じ。コロナ終わってもこのままな気がしています。
    - 毎日5人程度が出社している感じです。私は毎日出社してるよ！

## 私のClojureの経験

Clojureが会社で広まる前は(すごく前)、HTML/CSSとPythonとJavaScriptでWebアプリケーションなどを作っていました。私がいじるのはHTML少しとCSSがほとんどでした。

ある日突然、Leiningenというプログラム `lein` を使って、`.clj`, `.cljs` ファイルをEmacsで編集するように言われました。CSSはSCSSになっており、読み込ませる設定をしていました。

(今まで携わったWebアプリケーションのほとんどが、ログインとログアウトがあるようなWebアプリケーションで、ユーザに閲覧者/編集者/管理者などの権限があり、その権限によって、ユーザのできることを変化させて表示するような感じでした。)

その中で私がいじるフォルダは以下

- `src` フォルダ
  - `.clj`
      - ログインページとか、一番外側の共通で読み込ませるフレームがあるだけ。
  - `.cljs`
      - ログイン後に表示されるアプリケーション本体が、それぞれの機能別に`.cljs`がある。
      - JavaScriptに変換されて、Reactというシステムでブラウザに表示されるみたい。
  - `.scss`
      - `.css`とほぼ一緒。機能毎に分けて、共通する設定は`main.css`とかに入れよう。
- `resources/public/img` フォルダ
  - Webサイトの画像たちを置く。
  - icoファイルはpublicに置いちゃおう。一緒だね。

`.clj` はそんなにいじらなかった。ほとんど`.cljs`とSCSSについて、今までのHTML/CSSと似ていそうなところを編集していったら、最低限はなんとかなりました。(たまに見かけた`.cljc`とはなんだったのか...?)

いじるのは、下の例ようなHTMLっぽい構造のところ。

```clojure
(defn login-view [req]
  (page
   req
   [:div.login-panel
    [:div.login-form
     [:form {:method :post}
      [:div.section
       [:input {:type "email" :name "email" :placeholder "Email address" :required "" :autoFocus true}]
       [:input {:type "password" :name "password" :placeholder "Password" :required ""}]
       (anti-forgery-field)]
      [:div.section
       [:button {:type "submit"} "Sign in"]]]]]))
```

- ファイルの中見るとすごくカッコが多い！`[]`が個人的には馴染み深かったけど、`[]`の次は`{}`だったり、一番外側は`()`だったり、その結果最後の方いろんなかっこが並んで震えてくる `)}]]])`
- Emacsの効果(もらった設定ファイル)でハイライトがつくので、括弧のかたまりはよく見える。設定のせいか、カッコを消すのが固い(消えにくい...)
- ファイルの中の構成について、上の方に重要なことがまとめてあり、それから下の方はやりたいことについて(`def` とか `defn` の後に書いてある)それぞれブロックに、だいたい視覚に収まる範囲で書かれているところ良い⭕️ (JavaScriptとかすごーく長くなって視覚に収まらない)
- ログインなどアクティブなところをPHPなど使わなくていいのはいいな、1ファイルでまとまるのも良い⭕️

非エンジニアのClojure入口としてはこのへんなのかなと思いました。

Clojureは、ちゃんとあるべきところにあるべき要素が片付けができている感じがすばらしく、別のWebアプケーションを作る際にも部分的な使い回しがしやすく、見た目はさっぱりとして理解しやすい感じで、デザイナーとも親和性あり。好きになる人の気持ちがわかる気がしました。(みなさん、あってますか?)

その後、数名しかいなかった会社も、エンジニアさんが少しずつ増えてきて、このような簡単なところはパパッと実装を終わらせてしまうため、最近は `.clj`や `.cljs` ファイルを編集することは少なくなってしまいました。

当時を思い出すと、すぐに聞ける人がそこらじゅうにいるのは、よかったのう :tea: ありがたかったです。

## Clojureエンジニアとのコミュニケーション

入社時などの初対面でエンジニアさんとお話しするときの鉄板ネタは以下。
「Clojure、抽象的で、いいですよね！！」
なお、意味はわかってない。

反応は、だいたい2種類

- すごくにっこり 😊
- Lispが好きなんで、Clojureはこれからなんで知らんっす 😀

入り口がLispの人も結構いて、気づいたらバリバリClojure書いてる感じです。
Haskellが好きな人も何人かいらっしゃいました！

### (Clojure関係ない)ゲーム交流

週一回くらいで、Zoomでエンジニアさんたちとゲームしてます。

- AmongUs
    - かわいい人狼ゲーム
    - 会社でやってもらわなかったら一生できなかったゲーム！(メンツを集められないから。) 週一のお楽しみ。ありがたい。
    - 最初は村が死にまくっていたけど、みなさんどんどん強くなり、なかなかインポスターが勝てない村になった。
- Gartic Phone
    - お絵描き伝言ゲーム
    - みなさん絵が上手くて驚きます！
    - 答え合わせの時間が笑いが絶えなくてすごくなごむ！

## 終わりに

うちの会社の事業ドメイン、医療系で、東大出身で、Clojureがメインということで、外から見ると「うわー敷居高そう」と思われるかもしれませんが、非エンジニアでもClojureに関りながら10年働ける、優しい会社です。
というか、うちの会社にいると、すごく優しいところから、ものすごく難しいところまでClojureでできているので、自動的にナチュラルボーンのClojure使いになってしまう🤔

いきなりClojureで仕事をする自信はないけど、Clojure好きで興味がある方は、小さいClojureの仕事からステップアップしていく環境と文化がありますので、ぜひご連絡いただければと思います:telephone_receiver: 

株式会社テンクー 坂田
https://xcoo.co.jp/