我が名はなんとか菜である!

主に技術系の記事を書きますが、ポエムも混入します。

【Redux】ActionType, ActionCreator, Actions を書くときの個人的ベストプラクティス

TypeScriptでの話です。 不要論者はさっさと帰れ
バージョンは 2021/02/20 現在最新の 4.1.5 の話ではあるけど、 ReturnType とか as const が使える 3.4 以降が推奨。
ちなみにこの書き方は Redux には一切依存していないので、 useReducer を使うときに書く Action 周りでも使えるため、 useReducer 使ってたけどやっぱり Redux 使いたくなったときも移行が楽です。

ActionType

export const COUNT_UP = "COUNT_UP" as const;

ポイント

  • as const とすることで ActionType の型が string に推論されてしまうのを防ぐ
    • と思ってたんですが、 TypeScript 4.1.5 現在だと as const しなくてもリテラル型に推論されるっぽいのでなくてもいいかも
  • きちんと定数として定義する
    • Reducer の switch-case で使うときに文字列ではなくこの定数名がエディタによって補完されるようになるので変更に強い。(VSCodeならF2の変数名リファクタリング機能で該当箇所を自動で変えてくれる)

ActionCreator

export const CountUp = (increases: number) => ({
  type: COUNT_UP,
  payload: {
    increases
  }
});

ポイント

  • ActionType の定義の真下に書く
    • 無駄に場所を離すと修正するときにダルいので近いところに定義する
  • function は書くのがダルいのでアロー関数で書く
  • 関数名は Upper Camel のほうが見やすいのですき
    • dispatch(countUp(1)) より dispatch(CountUp(1)) のほうがメリハリ付いて読みやすくない?程度なのでプロジェクトと好みに合わせて
  • payload には変数名をキーにしてくれる構文(名前知らない)を使って簡潔に書く

Actions

export type Actions = ReturnType<
  | typeof CountUp
  | typeof OtherAction
>;

ポイント

  • ReturnType は1回、 typeof は毎回
  • なんか ActionCreator をオブジェクトで定義して Mapped Type で一気に生成する書き方も見つけたけど、Utiliy Typeを自分で書かずに組み込み型だけで行けるこれが一番シンプルだと思う
    • 結局 reducer の switch-case で推論ができれば何でも良い

おまけ: Reducer の書き方

export function reducer(state: State, action: Actions): State {
  switch(action.type) {
    case COUNT_UP: {
      return {
        ...state,
        count: state.count + action.payload.increases
      };
    }
  }
  return state;
}

ポイント

  • 戻り値の型をきちんと書く
    • うっかり色々書き忘れて return する state の型が不完全になるのを防ぐため
  • case節内は {} で囲う
    • 好みのレベルだけど、ここで変数を定義したくなったときに eslint の no-shadow に引っかかることがあるのでやっといて損はない。 {} まみれになって嫌なら書かないし、気にならないなら書く、ぐらいでよいと思う
  • default節は書かない
    • default節を書いてしまうと、caseで拾い損ねている Action があってもエラーにならなくなるため

まとめ

そろそろみんなで書き方統一しない??って思ったので書きました。
なにか意見あればブコメでもTwitterでもここのコメント欄でも積極的に書いていってください。

初めて一人暮らしを始めたり就活したり色々やった2020年の振り返り

2020年も残すところあと3日になりました。

お世話になった皆様、ありがとうございました。

3日というと、もうあと2回寝たら終わりです、やばいな?

さて、2020年は世間的に色々と大変な年になってしまいましたが、それとはあまり関係ないところで自分も結構色々あった1年でした。

というわけで、この記事では今年の活動(書いた記事、作ったアプリ、試したライブラリ、その他生活について)を時系列順に振り返っていこうと思います。

続きを読む

言語化の難易度を下げたい

書き散らします。

最近アウトプットの速度が露骨に落ちていて少し焦っている。

こういう作業ってなんというかリズムと言うか勢いというか、如何に習慣とするかが肝なので、一度この感覚が崩れてしまうと元に戻すのにめちゃくちゃ時間が掛かる気がする。

ちょっと前は原稿用紙10枚分ぐらいの文章を1時間ぐらいで書き上げるのなんて余裕だったはず(※体感ベース)なんだが、引っ越しやらなんやらで9月ぐらいにすべての生活習慣が変わったのと同時にその能力が失われてしまった。

正確にいうと、環境が変わったことでそこで新しいペースを作っている間に以前はどうやって生活リズムを作っていたのかが分からなくなった。まあそれだけ実家にいたころは家事周りを親に依存していたということだろう。

それでもなんとか最近は実家にいた頃にやっていた「一日中家でごろごろする」というのを実現するためにやるべきことが徐々に分かってきたので、頑張って続けてればそのうちパフォーマンスも元に戻っていくといいな。

まあ、頑張りたくはないんだけど。

閑話休題

人に与えられた時間は誰でも平等に1日24時間である。なので、アウトプットの量がすごい人というのは必ずなにかを犠牲にしているはずなのだが、そういうハイスペな人ほど気がついたら配偶者がいたりつよつよIT企業で成果をバンバン挙げていたりする。

そういう人ほど、周囲の嫉妬を買いやすいのはよくある話だ。

人は悲しい生き物で、想像が付かない領域に対して驚くほど無頓着である。

要するに「わからないことがわからない」という状態に陥ると、なんとかそこの整合性を保とうとして、突然正気を失い出したりする。

他人への無理解の原因はそこにあると思うのだが、自分でも何が言いたいのかがよくわからない。読んでる人もよくわからないと思う。

一つ確実言えるとすれば、自分はいつも自分より年齢や経験値が上の人と比べられがちだったので、以前はそれを真に受けて「自分は他より劣っている」という考えになりがちだったのだが、そのへんのメンタルコントロールのやり方が何となく分かってきた気がする。

自分の能力を絶対的に測るのは不可能だし無意味だ。

自分の客観的な評価が欲しければ、色んな人の自分への評価を総合した評価を「絶対評価」として扱うしかない。

そのためには色んな場所で経験やらなんやらを積む必要があるのだが、自分は今「経験を得るためには経験が必要である」と世間から言われているような気がしていて、それでモヤモヤしてこんな文章を書いている。

で、何が言いたいかというと、どんなに今成果を挙げている人だって、周囲から認めらなかった時期というのがあったはずなのだ。

はっきりいえば、そういう今現在業界の中心になっている人と自分が、絶対的に自分のほうが劣っているとは思っていない。

自分だってその人と同じ場数を踏めば肩を並べられる自信はまだ持っている。

ただ、このまま「認めて」もらう機会が得られないと、絶対に追いつくことは不可能だろうなという焦りも若干ある。

これを書いている時点で、最終面接まで行ったが落ちた企業が5社、返事待ちのままなかなか返ってこない企業が2社、N次面接のスケジュール調整中の企業が1社、面接が確定している企業が3社と言ったところ。

数字はちょっと適当かもしれない。まあつまり色々受けて色々話をしたということだ。

自分はめちゃくちゃ優秀というわけではないが、平均以下ということもないはずだ。それだけに、病み上がり後の就活にこれ以上ないほど苦戦を強いられていることに少し悔しさを感じる。

一体自分はどうしていれば道を外さずに済んだのだろう。

いつ、また元の、自分の思い描いていた道に戻れるのだろう。

たった一度の事故で道が閉ざされてしまうのは嫌だなぁと思いながら、今日も適当にYoutubeで宇宙ヤバいChとかのばまんゲームスの動画を見て寝ようと思います。

元鬱病患者が就活に落ち続けている話と、企業は応募者を落とすぐらいならスカウトを最初から送ってくるな

愚痴らせろ

エンジニア転職サイトから飛んでくるスカウトは健常者を前提としたものである

実際のところはどうか知らんけど、大体合ってるんじゃないのかな

返信したスカウトはどこも、自分は以前の職場でうつ病になって辞めてるという事実を話した段階で落とされているからだ

とにかくこの1ヶ月受けてきた5社ほどに関して、不誠実だと言わざるを得ないと感じた

※逆に言うと、ここからの内容は5社しか受けてない時点での感想なので、「あ、はい」と思ったのなら回れ右をしろ

それとも各社に27歳にしては不十分なスキルしか持ち合わせていないと思われているのだろうか。
驕るわけではないが、自分は同年代の人間と比較したときに特別劣っているというわけではないと思うよ、だってスカウト自体はバンバン来るわけだし

とにかく、こっちは後がない手札を消費しながら必死で受けている面接を企業は平気で返事まで1週間ぐらい掛けた後お祈りしてくるってのがこう何度も続くと流石に参ってくるんだよね、っていう、今日はそんな感じの記事なのでぶっちゃけ読まなくていいよ、Twitterに書くとクソ長いからこっちに書いてるだけと思ってもらえればいいんで

実際「病歴」ってどれぐらいディスアドバンテージなの?

人より大体10年ぐらい先行してコンピューターサイエンスやらプログラミングやらをやってきて、社会人になってからも少なくない成果を出してきたのに、たった一回「鬱病になった」というだけで、
そのアドバンテージを全て無視されているということにクソ腹が立っているわけだが、じゃあ実際のところどれぐらい信用を失うものなんだろうか

以前、鬱病に罹ったことがあると二度と生命保険には入れないと聞いたことがある
まあ、それ自体もおかしな話だと思うけど……

つまり、鬱病になると末期癌になったレベルで信頼が損なわれるわけだ でも脳がおかしくなる病気とはいえ、体自体は脳が元気になってくればまた以前のように動かせるようになるし、それらが同率で扱われるというのはやっぱり違和感がある

実際、今の自分は元気だった頃と比べてもまあそれなりに活動できていると思うし

再開したらどうなるか分からないとでも思われてるのかなぁ、でもさあ、それって別に鬱病に限らないわけじゃん?
運動選手だって一度足を怪我してもリハビリ期間を経てその後は現役に復帰できるわけでしょ

なんでプログラマーにはそういう道がないんだろうな?

自分にプログラマーが向いてないとは思わないし、そんなことを他人に言われたとしても全力で反対すると思う

僕はコードを書くのが好きだし、それによって誰かが助かるのを見るのも好きだし、何より作ったものが思った通りの働きをしているのを見るとすごく幸せな気分になる、というのは、自分のアイデンティティを構成する要素の一つである

難しい処理をアイデアで単純化したり、それが出来なくとも泥臭いコードを書いて何度も試行したりする地道な作業も好きな方だし、なんだったら自分はスマートでなくともクソ長いコードを書いてしまいがちなので、ここ数年はそれを直そうと意識しながら書いているぐらいだ

話が逸れたけど、書類選考の段階で落としてきた2社に関しては、こういう自分の中にある気持ちを軽々しく捉えられていると感じてしまった
だって書類選考の段階で落として来てるんだからね。お前の話は聞くまでもないってことでしょ?しかもただ「鬱病歴がある」というだけでさ、マジでクソ萎えるわ

プログラマー界隈は、一度失敗した人間は再挑戦の意思があってもその機会を与えられることがない

まあ結局こういうことなんでしょうね、その失敗の原因が自分だろうが他人だろうが、重視されるのは履歴書と職務経歴書に空白がないかとか、そういう書面上の綺麗さだけ

どいつもこいつも、口では「人手が足りない」なんて言いながら本音はこっちなんですわ
数年置いてみて成果が出るかどうかを一度見てみるみたいな余裕すらない企業ばかり。逆に自分にとってはフィルターになってるのかもしれないけど。

まああと、自分は昔から個人でのアウトプットのほうを重視する人間なんで、書類上ある程度不利になるリスクはあるよなぁとは一度ぼんやり考えたことはある(一つの分野を長くやるよりも色々気になったものにぱっぱと手につける方が好きな点とか)
とはいえこんな早くにリタイアするとは思ってなかったけども

愚痴は終わりだ、さっさと解散しろ

どうせこの記事を公開したあとにどっかで「こんな記事を公開しちゃう時点で人間性で落とされたんでしょ」ってしたり顔で言われるんだろうな

後出しって言われるのも癪だから先に書いておくわ

まあ、こんな乱文誰にも読まれずにネットの海に埋もれるほうが世界のためだと思うけどな

ちなみにここまで読んでくれた物好きに教えると、使った転職サイトは例の偏差値出すところだよ
今来てるスカウト全部返信し終わったら二度と使わないでおこうと思う、インスタントに人間を漁りに来ている企業しか登録していない感じがすごく薄寒いと思ったので

Surface Pro X に 20H1アップデートが当たらないまま3ヶ月が経過し、その間に 20H2 が来ちゃったのでキレた話

何度試しても 20H1(May 2020 Update)への更新に失敗する

7月ぐらいにMacBookAirを売り払ってSurfaceProXを買ったんですが、そいつに 20H1 が当たらないまま3ヶ月がすぎていい加減キレてます。

なぜ 20H1 が当たらないと困るかというと、WSL2が使えないからです。
一応1909でもWSL2が使えるようになるというアップデートは来てはいますが、残念ながらこれはx64専用。

forest.watch.impress.co.jp

なにが原因なのかすら分からず、とりあえず巷に書いてあった方法を片っ端から試しましたがどれもダメだったので列挙していこうと思います。

続きを読む

27歳にして一人暮らしデビューした男の引っ越しエントリー

部屋が一通り片付いて新しい場所で生活していくためのリズム感が整ってきたので、文章を書くためのリハビリをそろそろしておこうと思います。

2016年から2020年までのざっくりした来歴

遡ること2016年、4月に社会人になることを控えていた自分は早速一人暮らしをすることを画策していた。
最初は当然、東京に居を構えるつもりで都心~西東京辺りを狙って探していたりしたけど、どうしても周りの施設やら居住環境やら家賃やらでいまいち決められずにいた。
というのも、実家の位置がかなり周辺施設に恵まれてる場所だったので、当然新居もそういう環境があるかどうかに目が行ってしまう。
人間というのは罪深い生き物で、一度生活レベルを上げてしまうと下げることは困難である。 よって、この「暮らしやすさ」というポイントについてはかなり自分の中のハードルが上がってしまっていた。
しかし、納得の行く環境のある部屋というのはどうしても家賃が割高であった。
加えて、ある程度の部屋の大きさも欲しかったため、そうすると家賃は8万~9万コースである。

悲しいことに2016年当時そんな収入は自分にはなかった(手取り17万)ので、泣く泣く延期することにした。
とはいえそんな調子では一生引っ越しが出来ないので、収入を理由に新卒で入った会社からは1年半で辞めた。(だって3期通して上がった給料が2500円って舐めてるとしか思えなかったので…)

さて、次に入った会社はここでも何度か書いているがドワンゴであった。
この会社はさすがに給与面では十分クラスだったので、前述の考えで動いていたら早速引っ越しという感じになっていたはずなのだが、どうやら2017年当時で自分は相当弱っていたらしく、とにかく家に帰って寝ていたいと思うようになっていた。

つまり、部屋を探せるような精神状態ではなかった。
今思えば、そのとき頼るべきはドワンゴに紹介してくれた大学の先輩ではなく心療内科だったのかもしれない。

うつ病発症から仕事をやめたちょっとあとまでと両親の話

続きを読む

僕が「文系プログラマー」に抱く不信感の理由

ポエム

概要

本日の議題は

コンピューターサイエンスを知らない人間が商用ソフトウェアのコードを書くことの違和感

です。

例えば電気技師は取得した資格のレベルによって扱える電圧が決まるし、医師はご存知のように所定の機関で研修を終えて医師免許を取得する必要がある。

一方、コンピューターというのは開かれた世界だ。
間口はとても広い(若しくは広くあるべきだ)し、沢山の人に色々な使われ方をするのがこの業界の発展に於いてはとても重要であると思う。

しかし、これがお金の絡んでくる商用ソフトウェアを書く プログラマー となると話は変わってくる。
プログラマーは、時に複雑に相互作用しながら動作するコンピューター群と、それを制御するためのソフトウェアを記述・管理・運営する役割を担っている、いわば専門職である。

専門職であるにも関わらず、巷ではあたかもプログラマーは誰にでもなれて簡単にお金が稼げる 美味い 職業だと思われている。

今回は、なぜプログラマーは専門職であると思うのかという僕の持論と、そこから「文系プログラマーはどうして信頼できないのか」という表題の件の問いの答えまでを書いていこうと思う。

続きを読む