gaaamiiのブログ

間違ったことを書いている時があります。コメントやTwitter、ブコメなどでご指摘ください

Elmやってるけどどうか(途中経過)

趣味でElmを書いていて、最近では仕事でも一部Elmを使わせてもらっている。作っているもの自体は大きくないし、人に説明できるような理解度でもないのだけど、やっていってる途中でどう感じてるのか雑に書いてみてもいいのではと思ってだらだら書いてみた。

関数シグネチャの読み方

Elmでは関数の引数は一つしか取れない。そのため関数はこういう形になる。

append : List a -> List a -> List a

Put two lists together.

append [1,1,2] [3,5,8] == [1,1,2,3,5,8]
append ['a','b'] ['c'] == ['a','b','c']
You can also use the (++) operator to append lists.

List - core 5.1.1

関数を利用しているappend [1,1,2] [3,5,8] の部分を見ると、なんか引数が2つあるように見えるけど、そうではない。append [1,1,2] を評価して返ってくる関数に [3,5,8] を渡している。

REPLで1つずつ試していける。

> List.append
<function> : List a -> List a -> List a

List.appendList a を受け取って List a を返す関数を返す関数だ。

> List.append [1,2,3]
<function> : List number -> List number

List.append [1,2,3]は、List number を受け取って List number を返す関数だ。

> List.append [1,2,3] [4,5,6]
[1,2,3,4,5,6] : List number

List.append [1,2,3] [4,5,6]は、List numberだ。

となる。ふむ。

謎の安心感

謎の安心感がある。型を合わせていけば何かが出来上がっていく感じがある。JS書いてると console.log とか多用してたけどElmではあんまり Debug.log してない気がする。型合わせていけばなんかちゃんとできるというのと、あとDebuggerという便利ツールがあって、状態の遷移がupdateを通る都度確認できるからというのもある。

Debugger

Debuggerはなんか普通に気に入った。Google Chromeの使いこなしテクニックとかいろいろ覚えるのしんどい。これくらいシンプルにアプリの状態見れるツールがあるのは嬉しい。

Elm Architecture

基本Model View Update の3つで、難しくないという印象。この印象のおかげで、Elmを始めた。

ただ、CommandとSubscriptionという副作用を扱うための登場人物がいて、これをちゃんと使えないとアプリケーション書けない。

Ports

JSとつなぐ仕組み。localStorage使いたいけどElm側から扱えないじゃんというような問題があって、そういうときはこの仕組みを使ってJSとつなぐ。

HTML見づらい問題

HTMLも関数で記述するので最初は見づらかったけどもう慣れた感がある。

モジュール分割

こうするべきというのがよくわかってない。コンポーネント分けについては以下のブログ記事を何度も読み返してる。

jinjor-labo.hatenablog.com

雑感

正直Elmを触りだしたのは半分冗談というか、社内LTネタになるかなくらいの気持ちだったんだけど、触り続けてるともうなんかJSとかTS書くよりこちらをやっていたほうが楽しいんじゃないかみたいな気持ちまで芽生えてきた。この謎の良さをもう少しちゃんと言語化できるようになるくらいまでは触り続けていきたい。

仕事メモの取り方

shgam.hatenadiary.jp

仕事が遅れて気持ち的に辛い日々が続いている。どうにかしたいと思いながら過ごしていて、そんな中で学びもあった。それがメモの取り方。

仕事が遅れるとつらい。そして何が原因なのかわからないと無限につらい。なのでメモを取るようにした、という話。

改良しながらやっていきたい。

メモの取り方

  • まず日付のページを作って、その日のタスクを書いておく
  • 出勤してデスクについたら時間をそのときの時間を書いて仕事開始
  • 違うタスクに着手する時に時間をメモする

というルールで、できたメモ(を社外に公開しても差し支えないように具体的な名前をすべてxxxに改変したもの)がこちら。

# 2018/07/20
昨日:[[2018/07/19]]

## 仕事
- 11:00〜11:30
    - 雑談とか
- 11:30〜12:00
    - [ ] xxx
        - [x] xxxのあたり修正
- 12:00〜12:30
    - レビュー
- 12:30〜12:44
    - MTG
- 12:44〜13:11
    - レビュー
        - xxx
        - 直す
- 13:11〜14:40
    - [ ] xxx
        - あとなんだっけ
        - xxx画面の方だ
            - もうでかいし別PRにするか
        - これできたら昼飯いこう
- 14:40〜15:00 昼飯
- 15:00〜16:00
    - エンジニアMTG
- 16:00〜16:55
    - 雑談
    - レビュー修正
        - xxxしてない件
        - xxxの件
- 17:00〜18:20
    - MTG
    - 雑談
- 18:20〜19:00
    - レビュー修正
        - [x] xxxしてない件
            - [x] 実装
            - [x] テスト
        - [x] attr_readerの件
        - [ ] `xxx` の件
        - [ ] xxxカラムの件
        - [ ] xxxの型の件
            - なんかテストが落ち始めた
ruby
      NoMethodError:
        undefined method `[]' for #<Tempfile:/tmp/xxx.png>

        - [x] xxxの型の件
- 19:00〜19:10
    - Standup MTG
- 19:10〜20:10
    - デザイン相談とか雑談とか
- 20:10〜21:08
    - レビュー修正
        - [x] xxxしてない件
            - [x] 実装
            - [x] テスト
        - [x] xxxの件
        - [x] xxxカラムの件
        - [x] xxxの件
        - [x] xxxの件
            - なんかテストが落ち始めた
            - 本物の`ActionDispatch::Http::UploadedFile`使ってないので `xxx`のところで落ちていた
- 21:08〜22:00
    - [ ] xxxをxxx画面に設置
- [ ] xxxにはxxxできないようにする
- [ ] xxxフィルタ
- [ ] xxx
- [ ] xxx

明日 [[2018/07/22]]

#private/日記

(念のため書いておくと、いつもこんな残業してるわけじゃない。昨日は残ってしまった。なるべく8時間で帰りたい)

これの何が嬉しいか

こうしておけばあとで振り返りができる。実際やってみて気づいたけど、試行錯誤や手戻りによって時間がかかること、雑談に思いの外時間を使っていたり、あとこの日は飯の時間が取れなかったのでおにぎり2つで済ました結果20時ごろからとてもイライラしていた。アホだ。

Githubやタスク管理ツール上でもなるべく小さい単位でタスクを管理・消化していけたらいいのだけど、それが最初から完璧にできたら苦労しないわけで、実際はやりながら「あれもやらないと、これも」みたいなことになる。「なんかPull Rrequestがでかくなってしまった」みたいな振り返りではなく、具体的に何をしたかを残しておくことで、膨らんだ部分を認識できる。次回からの見積もりの精度をあげたり、効率を上げるための仕組みづくりの必要性を感じたりできるかもしれない。

こういったことをいちいちメモしないでも覚えておけるという人はたくさんいると思う。しかし自分のように頭が悪めの人間はこういう工夫をしていかないとつらいことになるのでやっていきたい。

仕事遅い問題

前も書いたなこのお題…。

‪自分の仕事が遅くて仕方ないので、時間とやってることのメモを細かくとるようにしたら、かなり些細なところで長時間つまづいてるのがわかる感じになった。たとえばこういうやつ。

https://twitter.com/gaaamii/status/1019201848014602240

https://twitter.com/gaaamii/status/1019561987510898688

初めからドキュメント読めよって感じなんだけど、つまづいてる時はそのライブラリの使い方が原因ってことに気づいてないのでどうしたもんかという感じ。‬

自分はときどき、疲れてると特に、何となくで動かして挙動見がちなので、何を確認するのかを常に明確にして行動する必要がありそう。あとはエディタの設定やらwebpackのビルド時間とか地味に効きそうな環境改善も必要そう。

入社して2年経ってた

そういえば入社して丸2年経ってた。 この一年は何やってたんだろう。

たぶん、

  • AMP対応
  • WordPress
  • React
  • フロントエンドのテスト
  • Rails
  • Railsアプリにフロントエンドの設定
  • JSのエラー収集ツールの調査と導入

あたりをやってた。あれ、AMP対応はもっと前だっけ…?まあいいや。そのほかにもSQL集計業やらCircleCIの設定やらも地味なタスクをもそもそとやっていた。

直近はひたすらRailsと格闘してる。

3年目も引き続き頑張ります。