iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

2021-06-01から1ヶ月間の記事一覧

【Firebase】CloudFunctionsでメンテナンス中画面にリダイレクトさせる

今回は、下記のようなCloudFunctionsdeNext.jsがホストされている状態を想定してメモしています‍♀️ const { join } = require('path') const { https } = require('firebase-functions') const { default: next } = require('next') const nextjsDistDir = j…

【Firebase】FirebaseDynamicLinksの動的生成が意外と楽だった

FirebaseDynamicLinksを動的に生成する方法が、予想と反して意外とシュッとできそうだったのでメモ‍♀️ 【おさらい】そもそもFirebase Dynamic Linksとは? 以前にかる〜く触れたので、下記を参考にしてみてください。 yamato8010.hatenablog.com 要は、アプ…

【React】useCallbackとは?

useCallbackとは? 以前に紹介したuseMemoと同じ感じで、関数をメモ化します。 yamato8010.hatenablog.com つまり、初回時のレンダリングまたは、依存する値が変わらない限りは、前回と同じ関数インスタンスを再利用するようになるので、パフォーマンスが向…

iTunesConnectの解析パラメータメモ

FirebaseDynamicLinksのURLを手動で構築する際に付与できるiTunesConnectの解析パラメーターの意味がよくわからなかったので、メモ。 結論 意味は下記の通り。 parameter 意味 at Affiliate Tokenの略でアフィリエイト用のIDなどを付与する際に使用します。 …

WebStorageを調べましたよ

Webフロントを入門して、初めてWebStorage周りを触る機会があったので、WebStorageの基本について調べてみました WebStorageの種類 WebStorageには、sessionStorageとlocalStorageの二つの種類があります。 sessionStorage セッション期間中のデータを保存す…

npmとyarnどちらを使えばいいのか?

JavaScriptのパッケージ管理を行う際によく登場するnpmとyarnですが、双方にどんな違いがあってどちらを使った方が良さそうなのか知らなかったので、簡単に調べて見ました npm Node.jsがリリースされた翌年に公開されたパッケージマネージャーで、Node.jsが…

【React】useMemoとは?

useMemoとは? useMemoは初回時に実行された関数の値を保持して、次回以降はその保持した値を再利用することでパフォーマンスを向上させる仕組みです。(Swiftでいうところのlazy varとかに近いかな) 使い方 下記のように使うことができます。 const isSoccer…

Next.jsとwebpackでのインポートを楽にする

動機 他の階層のモジュールを相対パスでインポートすると、見辛いし、パスが変更した時に書き換えが大変ですよね import Hoge from '../../../components/templates/Hoge' なので、下記のようにしたい。 import Hoge from '~/components/templates/Hoge' 結…

【TypeScript】pngをimportできるようにするぞ

やっていく src>types内に、index.d.tsというファイルを作りモジュールの型を定義します。ちなみに、d.tsは型定義ファイルと呼ばれ、JavaScriptのライブラリなどをTypeScriptなどで使う際に型情報を付与する目的で使用されます。 declare module '*.png' あ…

【React】特定のコンポーネントの外側のタップを検出する

結論 下記のようにして、全体の要素のmousedownイベントを監視して、そのイベントの中のtargetRefに関するイベントのみ除外することで、特定の要素以外の場所がタップされたことを検知することができます👀 const targetRef: React.RefObject<HTMLDivElement> = React.createRe</htmldivelement>…

【CSS】overflow-y: visible がスクロールになってしまう

CSS

縦方向へのoverflowのみを表示させようと、下記のようにcssを設定していたら、なぜかスクロールできるようになってしまいました。 .container { max-width: 100%; overflow-x: hidden; overflow-y: visible; } まさにこんな感じ。 参照: https://stackoverfl…

Error in render: "ReferenceError: location is not defined" の対処法

SSRするような場合に、下記のように直接locationを参照したらエラーが発生していました。 const hoge = location.pathname == '/hoge' Error in render: "ReferenceError: location is not defined" 結論 下記のようにブラウザの処理時に、locationにアクセ…

【React】useEffectとはなんなのか?

useEffectとは? useEffectは、Reactのコンポーネントがレンダリングされた後にフックされる特別な関数です。 毎回呼ばれるの? 公式ドキュメントにも載っているような、下記のシンプルな例の場合では、毎回レンダリング後にuseEffectが呼ばれます。 import …

npmのスクリプトを並列で実行したい

npm

結論 Concurrentlyというツールを使ってサクッと並列で実行することができました。 www.npmjs.com まずはインストール。 $ npm install --save-dev concurrently あとは下記のようにconcurrentlyキーワードで複数の処理を実行できます。 "scripts": { "dev":…

【TypeScript】配列からundefinedを取り除く

結論 undefinedを許容した配列型のまま取り除きたい場合は下記のようにシンプルに記述できます。 items .filter(item => item.documentSnapshot !== undefined) // (number | undefined)[] undefinedを許容しない配列型にしたい場合は、タイプガードを使って…

【React】props. children を簡単に使う

結論 Functional Componentを実装する際に、下記のように定義するのではなく、 const Ex = (props: Props) => { return ( <div> hoge </div> ) } React.FCを使って実装すれば、呼び出しからchildrenプロパティを参照できるようになります。 const Section: React.FC<SectionProps> = p</sectionprops>…

【TypeScript】スプレッド演算子って便利

結論 元のオブジェクトに変更を加えることなく、新しいオブジェクトを作成したい場合などに便利です。例えば、下記のようなaとbをプロパティに持つオブジェクトにcを追加する時など。 const hoge1 = {a: 1, b: 2} const hoge2 = {...hoge1, c: 3} ちなみに、…

ECMAScriptとはなんなのか?

最近Webフロントを入門したことで、JavaScriptを勉強する機会が増えたが、ECMAScriptについての理解が曖昧だったので軽くメモ‍♀️ ブラウザでのJavaScript JavaScriptのコードをプログラムとして動作させるには、JavaScriptエンジンでコードをコンパイルして…

【TypeScript】Objectの配列をスマートにDictionaryに変換したい

オブジェクトの配列をDictionaryに変換する際に、下記のようにObject.assignで変換していましたが、もっとスマートな書き方があったのでメモしておきます。 const params = [ { key: 'hoge', value: 'value' }, { key: 'hoge2', value: 'value' } ] const di…

【TypeScript】A required parameter cannot follow an optional parameter. の対処法

TypeScriptで下記のようなコードを書いていたら A required parameter cannot follow an optional parameter.というErrorに遭遇して、若干ハマったのでメモします。 function hoge(a?: string, b: string) { console.log(a) console.log(b) } 結論 結論、エ…

【TypeScript】Objectsをマージしたい

結論 Object.assignでObjectsをマージできるらしいです。 const target = { a: 1, b: 2 } const source = { b: 4, c: 5 } const returnedTarget = Object.assign(target, source) console.log(target) // expected output: Object { a: 1, b: 4, c: 5 } cons…

【React】動的にコンポーネントを追加するには

ボタンタップ時などに、動的にフォームを追加する方法がわからなかったので簡単にメモ。 結論 JSXでは{ }で囲んだコードは、JavaScriptとして認識されるので、動的にコンテンツを追加したい場合は下記のように記述することができます。 public render() { re…

【TypeScript】Dictionaryをループ処理

TypeScriptでは、インデックスシグネチャと呼ばれる機能を使って下記のように、KeyとValueの型を明示的に指定したDictionaryを作成することができます。 interface Dictionary<T> { [index: string]: T; } 今回は、このDictionaryに格納された配列をどのように</t>…

【Git】untracked filesもstashしたい

git

結論 -u もしくは--include-untrackedオプションでuntracked filesもまとめてstashすることができます。(今までよく使わないで、ここまでやってこれたな) $ git stash -u ちなみにステージングしていないかつ、untracked filesもまとめてstashしたい時は、--…

TypeScriptのunion型って便利ですね

TypeScriptのunion型に感動したので、簡単にメモ。 union型 union型とは、enumのように、型に入る値を定義できるもので、下記の例で、argに設定することができるのはa・b・cのいずれかの値になります。 function hoge(arg: 'a' | 'b' | 'c') { console.log(a…

TypeScriptで型チェックってどうやるの?

結論 typeof演算子を使って下記のように分岐を行うことができます。 if (typeof value === 'number') { return (value as number).toString() } また、下記のような場合はundefinedは判定されますが、nullは許容されるので、nullをはじきたい場合はその下の…

【TypeScript】declareキーワードってなんぞや

結論 アンビエント宣言というものらしい。 アンビエント宣言とは? JavaScriptのライブラリをTypeScriptなどから利用する場合、TypeScriptは静的型付け言語なので、型の情報が必要になります。そのような場合、JavaScriptのオブジェクトをdeclareを使って宣…

JavaScriptのimportを調べた

JSのimportって? import 文は、他のモジュールによってエクスポートされた読み込み専用のライブバインディングをインポートするために使用します。 ライブバンディングとは、バインディングをエクスポートしたモジュールによって値が更新されることを指すそ…

コマンドでAndroidプロジェクトを開く

本日はAndroid StudioのTipsを紹介します‍♀️ Terminalでプロジェクトのルートにいるとき、vscodeのcode .コマンドのように、プロジェクトを開きたい時ってありますよね。 そんな時、Android Studioでは studio .コマンドが使えます。ちなみに、デフォルトで…

【React】Class Component と Functional Component

React勉強中なので、簡単にClass ComponentとFunctional Componentの違いをメモしておきます‍♀️ Class Component Class ComponentはStateやライフサイクルを持つことができます。実装クラスはReact.Componentを継承する必要があります。 class Summary exten…