ブックマーク / blog.ojisan.io (17)

  • 自分がプログラミング力の成長を実感できるようになった瞬間について

    私はプログラミングを 3 年近くやってみて、「ただ知らなかっただけで損した」という悔しい経験をたくさんしました。 そこで自分にとって「これを知っているだけでエンジニアとしてステップアップできた」というものをまとめてみようと思います。 ちなみにステップアップする前の私はこのようなとても凄いコードを書いていました。 ご査収ください。 プログラミングを始めて最初に作った成果物です。 https://gist.github.com/sadnessOjisan/6f1a1956d4848e3c17f0c0c5af28cfb8 (//varを付けたらダメだよ(ローカル変数になっちゃう。関数内だからローカル変数使うと外部からアクセスできない) というコメントがすごい・・・) はじめに 書こうと思ったきっかけ 自分は大学生の時にプログラミングに触れたことがあるものの情報系を出ておらず、エンジニアになったの

    自分がプログラミング力の成長を実感できるようになった瞬間について
  • 会社をやめて約1年プログラミングの勉強に費やしたことに対する満足と後悔

    働いていないことへの言い訳記事です。 この夢のような生活がもうすぐ終わるので書きたくなりました... ちなみにサムネイルは「仕事」でぱくたそで検索したら出てきました。 「エレベーターも給料も下降中の写真素材」というタイトルです。 https://www.pakutaso.com/20140914273post-4629.html 何をしていたのか 会社を辞めて約 1 年ほどプログラミングの勉強をしていました。 前職では「みんなのレベルが高くて着いていけないな〜」って感じることが多く、その原因のほとんどが知識や経験不足に依るところだったので、そういうのを先に補ってから働いた方が良さそうと思って辞めました。 いわゆる異業種からのキャリアチェンジでプログラマとしてのキャリアを始めたので、知識や経験は同世代の人たちに比べるとかなりのハンデがあり、そのハンデを埋めるための勉強をしました。 プログラミ

    会社をやめて約1年プログラミングの勉強に費やしたことに対する満足と後悔
  • preact コードリーディング

    preact なんとなく理解した記念ブログです。 もともと React を読むつもりが挫折したので慣れるために preact を読みました。 おかげで仮想 DOM の悲鳴が聞こえるようになりました。 preact とは React の軽量版・サブセットです。 公式では Fast 3kB React alternative with the same modern API. Components & Virtual DOM. と説明されています。 (p)react には、 状態を持て、書き換えも可能である 状態を書き換えるとそれに対応して HTML が書き換わる という特徴があります。 それがどのようにして実現されているのかを見ていきましょう。 前提となる知識 preact のコードリーディングを進める上では VNode というオブジェクトに慣れる必要があります。 これは JSX を仮想 D

    preact コードリーディング
  • Reactのパフォーマンスチューニングの歴史をまとめてみた

    最近 React のパフォーマンスチューニング、特に再レンダリング抑制について調べたのでそのまとめです。 特に昔からおまじないとして書いていたことを、「なんであの書き方していたんだっけ」というのを調べてまとめました。 古いものを調べたのは、今あるチューニング方法とその当時の解決方法を比較したかったからです。 再レンダリングとはなにか 公式に説明があったのでそのまま引用します。(https://ja.reactjs.org/docs/optimizing-performance.html#avoid-reconciliation) React では、コンポーネントの props や state が変更された場合、React は新しく返された要素と以前にレンダーされたものとを比較することで、実際の DOM の更新が必要かを判断します。それらが等しくない場合、React は DOM を更新します

    Reactのパフォーマンスチューニングの歴史をまとめてみた
  • Reactのフォームをコントロールしたときのデメリットを考える

    公式では制御されたコンポーネントを推奨し、<input type="text" value={this.state.value} onChange={this.handleChange} /> のように onChange を使って更新、value に state を入れて制御するようにしているのですが、推奨は言いすぎではと思っていることについて書きます。 「公式のここがおかしいのではないか」という問いかけはだいたい自分が間違っているだけという場合がほとんであることは自覚していますので、もし間違っていたら """優しく""" 指摘してくれると嬉しいです。 React は制御されたコンポーネントを推奨している まず制御されたコンポーネントについて、公式の定義をみましょう。 HTML では <input>、<textarea>、そして <select> のようなフォーム要素は通常、自身で状態を保

    Reactのフォームをコントロールしたときのデメリットを考える
  • Reactのコンポーネント周りの用語を整理する

  • どうしてJSXを使ってもエラーにならないのか?

  • Preactの環境構築 of 2020

  • Firebaseの存在をフロントエンドから隠蔽するために

    「Firebase は安いし楽だしマジ最高」という一心で技術選定してしまったプロダクトが成功して見えてきた課題、割高なコスト・権限管理・カスタマイズ性、そして (特性やスキルセット的に)RDB 製品が適していたのに無理やり Firestore を採用したことによるデータ不整合。 その結果チーム内で Firebase を抜ける機運が高まるも、Firebase べっとりなアプリケーションすぎて移行しづらいといった問題に出会うかもしれません。 そのような場合に備え、Firebase の存在を隠蔽して開発することに挑戦してみましょう。 注意: Firebase を剥がしているときに「俺、次は絶対そうするわ」と感じたものを書いているだけであり、まだ実際にはこのパターンでプロダクション導入していません。 あくまで個人開発で試してみていけそうと思ったので、提案しますという体です。 また Firebase

    Firebaseの存在をフロントエンドから隠蔽するために
  • ブログの1ヶ月を振り返る

    ちょうどこのブログを初めて 1 ヶ月たったので、 なんでこのブログをやっているか どういう意識でやっているか 読者の反応 これからどうするか みたいなことを書きます。 ブログを始めた理由 開発のサンドボックス 好き放題に開発できる場所が欲しかったのが一番の理由です。 エッジな技術を採用したり、パフォーマンスを追求したりするためのサンドボックスを持っておきたかったです。 結果としては Gatsby + TypeScript + graphql-codegen という王道パターンを突き進んだわけですが、元々は gulp と AMP Toolbox を使って AMP Valid なコードを吐き出す SSG を自作しようとしていたり、色々チャレンジをしていました。 現に今ある実装でも lighthouse のスコアを緑にしたり、記事の読みやすさにこだわりを持って実装しているところもあり、チャレンジ

    ブログの1ヶ月を振り返る
  • S3にSPAはデプロイできるのか -HostingとRouting-

    できます。 ここにある通り、S3 の設定ページで エラードキュメント に index.html をセットするだけで良いです。CloudFront がなくてもできます。 (完) ただ、たとえば /about でリロードして、404 Not Found になっていたものが、エラードキュメントに index.html を指定したら /about が見れるって違和感ありませんか? 少なくとも私は「index.html に redirect するのだから、そこで見えるものって / なのでは!なんで/about が見えるんですか!?」という疑問を持っていました。 あと、「S3 SPA」で検索すると、CloudFront 前提だったり、index.html を書くことで解決される理由は書かれてなさそうなので、そういうのを解説したいと思います。 どうして SPA のホスティングで悩むのか SPA(Sing

    S3にSPAはデプロイできるのか -HostingとRouting-
  • css-loader と style-loaderを間違えない ~css-loaderを使わずにcssを使ってみる~

    css-loader と style-loaderを間違えない ~css-loaderを使わずにcssを使ってみる~2020-06-26 css-loader と style-loader どっちがどっちかってたまになるので、そうならないための備忘です。 これらは webpack の loader であり、JS で構築されるアプリケーション内で CSS を扱うために利用されます。 最近は CSS in JS の利用も増え、CSS ファイルを読み込む機会は減ってはきているものの、reset.css を読み込んだり、UI ライブラリが提供するグローバルな CSS を読み込んだりと CSS を直接 JS に import する機会はまだまだ多いと思います。 そして 1 ファイルでも CSS を読み込むなら loader にその設定が必要となるので、まだまだお世話になり続けるでしょう。 そんな利用

    css-loader と style-loaderを間違えない ~css-loaderを使わずにcssを使ってみる~
  • ESLint と Prettier の共存設定とその根拠について

    注意 この記事は 2020 年 09 月 24 日現在、古い情報となりました。 eslint-plugin-prettier の利用は非推奨であると公式がアナウンスを出しています。 そのことについては Prettier と ESLint の組み合わせの公式推奨が変わった にてまとめましたので、こちらもご覧ください。 また eslint-plugin-prettier は公式推奨ではなくなりましたが、それは Editor などの外部環境の進化によるものでこのプラグイン自体に何か問題が起きたわけではありません。 そして eslint-plugin-prettier を利用した設定方法、特に eslint-plugin-prettier と eslint-config-prettier が何を解決していたかを知らないと、prettier-eslint が何をどう解決したかを理解できないはずなので

    ESLint と Prettier の共存設定とその根拠について
  • JavaScriptライブラリを読むときのコツ

    少し前からライブラリを読むトレーニングを始めたのですが、最近ようやく読み方がわかってきたので、やり始めた頃に知っておきたかったことをまとめます。 これから JavaScript/TypeScript で書かれたライブラリを読んでみようと思っている方の助けになれば嬉しいです。 「私はこういう道具を使ったり、こういう工夫をしています」みたいな感じの内容ですので、もし「もっといい読み方があるよ」みたいなのがありましたらIssueなどで教えていただきたいです。 (※ライブラリを読むにあたって、ブラウザの話と NodeJS の話があるのですが、似てる点がほとんどなのでごった煮します。) エントリポイントを探す ライブラリを読むにあたって そのライブラリが持つ module がどう協調して全体が作られるのか その関数は正確にはどういう挙動をするのか などを考えると、ユーザーから渡された入力や呼び出しが

    JavaScriptライブラリを読むときのコツ
  • ESLint の Plugin と Extend の違い

    ESLint の Plugin と Extend の違いを説明できますか? 違いを知っている人からすれば(というかそもそも全然違うものなので)、「え、それ悩む?」となるところなのですが、ユーザー向けドキュメントには Plugin の定義が書かれておらず、Extend の説明も不十分で、さらに Plugin の設定をする Extend なんてものがあるお陰で、慣れないうちは混乱すると思います。 特に最後の事象は個人的には印象的で、「Plugin の設定をしていないのに Plugin が設定されている。Plugin って何?」といった混乱の原因になっていました。 この混乱は ESLint の全体感を掴むと混乱しなくなるのでそういう話を書きたいと思います。 実際に混乱してた人も多そうです(6/24 更新) 結論を言うと、Extend は Extend です。設定を Extend する役割を持って

    ESLint の Plugin と Extend の違い
  • Babelの変換処理と向き合う

    そういえば Babel をちゃんと勉強したことなかったなと思ってちゃんと勉強してみたって言う話です。 つまり Babel をノリで使ってたことになるのですが、自分がプログラミングを始めたときは @babel/preset-env がすでに存在しており、それを使っているだけで全てを倒せていたので勉強する必要がなかったという事情があります。 ただ、流石に知らないと言ってもネットサーフィンしているとなんらかの情報のインプットはされるので、 Babel は ES6 -> ES5 に変換する(これは間違った理解) Babel は AST 操作によって変換する Babel は parse -> traverse -> generate して変換する みたいな順番で少しずつ解像度を上げながら理解はしていました。 最後の、「Babel が parse -> traverse -> generate して変

    Babelの変換処理と向き合う
  • Gatsby + TypeScript で技術ブログを書くための知見

    Blog を作りました!!!!! 会社を辞めて 5 ヶ月経とうとしており、ついに堕落しきった生活による危機感が生まれはじめました。 その危機感が結実したものがこの Blog です。 で、Blog を作ってみたものの書く内容が特にないので、まずはこのブログをどうやって作ったかについて書きます。 「こういう記法にちゃんと対応できてる?」を試す目的でもあります。 技術スタック 根幹になっているものは、 TypeScript Gatsby です。 元々は amdx + NextJS, もしくは完全自作 SSG を考えていたのですが、 ブログは完璧を目指しているといつまでも完成しない ということは知っているので、自分にとって自信があるツールとして Gatsby を選びました。 しかし、ただ使うだけなのはチャレンジ性がなかったので、TypeScript を使ってみることにしました。 昔の Gatsby

    Gatsby + TypeScript で技術ブログを書くための知見
  • 1