Vueでプロジェクトを初期化したときのメモ
vue create <project-name>
でVueプロジェクトを作成したとき、毎回同じところでハマっているのでいい加減手順をメモしておく。
構成は Vue+Firebase、UIにVuetifyを使用する(Vue 4系)。
あと、ついでにFirebase FunctionsではローカルのESLintを有効にする(グローバルインスコしない)。
手順
どうもVueで初期化したプロジェクトフォルダ内でfirebase init
すると、Functionsのpackage.json
とVueのpackage.json
が競合(nodeモジュールが思ったところにインストールされない)してしまうため、frontendとbackendディレクトリに分けて構成した。
package.json
がnode_moduleを走査するときの動作が影響しているような気がするけど、いまいち分からん。
…と思って検索したらこうすればよかった件。でもやっぱりめんどそうだな…( ˘ω˘)
手順少し修正。FunctionsとHostingを同一フォルダにインストールしようとしてたのがいけない…。
Firebase でプロジェクトを作成
Firebase コンソールでプロジェクトを作成する。
FunctionsやStorage等初期化しておく(reagionは
asia-northeast1
(東京))
あとでindex.html
に注入するHtmlスニペットはとりあえず脇に置いておく。
ローカルにプロジェクトを作成
前準備として、
frontend
とbackend/firebase
ディレクトリを作成するfrontend
ディレクトリにて、vue create <project-name>
でVueプロジェクトを作成する。このとき、TypeScript
を選択しておく(あとから導入する場合)tsconfig.json
にてcompilerOptions.module: "commonjs"
とするとりあえず
npm run build
でビルドできることを確認する(dist
ディレクトリが生成)vue add vuetify
でVuetifyを導入する。App.vue等書き換えるか聞かれるが、問題なければYesで。tsconfig.json
にて、compilerOptions.types: ["vuetify"]
を追加する。忘れると型定義を参照できないためコンパイル時にエラー吐く。backend/firebase
に移動し、firebase init
でFirebase プロジェクトを初期化するFirebase コンソールにて作成したプロジェクトを選択する
とりあえずFirestore
とHostingとFunctionsを選択する。Hostingはfrontend
ディレクトリで初期化する。FuncitonsをインストールするときにTSLintを導入するか聞かれるが、現在はESLintに移行しているようなのでNoを選択する
ひととおりインストールが終わったら、
frontend
ディレクトリに移動し、firebase init hosting
でホスティングをインストールするHostingの設定時にデプロイするディレクトリを聞かれるので、
dist
とする。このとき既存のファイルを上書きするか聞かれるが、Noとするfirebase serve
でVuetifyの初期ページが表示されることを確認backend/firebase/package.json
にてdevDependencies
にeslint
の依存関係を追加し、npm i
./node_modules/.bin/eslint --init
でESLintを導入frontend/public/index.html
の<body></body>
内にFirebaseを利用するためのHtmlスニペットを記載する
以上で終わり。 ローカルの構築にトラップがありすぎる。これ全部覚えてるフロントエンドエンジニアつよすぎでは…。
参考
PowerShellスクリプトでbuild.gradleをオレオレ記述化
Android Studioでプロジェクトを初期化したときに生成されるbuild.gradleをオレオレ記述化したのでメモ。
書き換える動機はこちらの記事が基です。
今まで手動で直していましたが、あまりにもめんどうだったのでテンプレート化してみました。 なお筋肉で解決しているので、ps1ファイルに処理べた書きです。必要に応じ function に切り出し等行ってください。
- どのように書き換えるか
- 使った技術
- PowerShell スクリプト
- init_gradle.ps1
- build-template.gradle
- スクリプトの実行
Firebaseの初期化でハマった
Firebaseの初期化でめちゃくちゃハマったのでメモ。
ネット上をさまよったが、どうもFirebaseの新旧のバージョンで書き方が変わったため、かなり情報がごちゃごちゃになってるっぽい。
- 環境
- 何ができなかったのか
- 何が原因だったか
- どうやって解決したか
- コード上でFirebaseを初期化する
- 所感
CLIP STUDIO PAINTファイルからプレビュー画像を生成する
CLIP STUDIO PAINT ファイル(.clip)のプレビュー画像を node.js で出力したのでメモ。
なお、fs.readFileSync/writeFileSync
を使用しているが、
テスト用に記述してるだけなので、実装する場合はfs.readFile/writeFile
推奨。
- コード
- 解説
- 感想
- 参考
- 主にPowerShell関係
MVVM+DataBinding+RecyclerViewでカレンダーを作る - 1
2021年7月12日 追記
RecyclerView.AdapterのアイテムにDataBindingを用いるため、コンストラクタで LifecycleOwner (FragmentのviewLifecycleOwner) を渡すのは誤った実装でした。
発見に至った経緯
まったく別のアプリ開発でLifecycleRegistry.java
内のObserverWithState.dispatchEvent
を確認していたところ、newState = event.getTargetState
にて、本来生きているはずの親FragmentのON_DESTROY
が渡ってきていました。
static class ObserverWithState { State mState; LifecycleEventObserver mLifecycleObserver; ObserverWithState(LifecycleObserver observer, State initialState) { mLifecycleObserver = Lifecycling.lifecycleEventObserver(observer); mState = initialState; } void dispatchEvent(LifecycleOwner owner, Event event) { State newState = event.getTargetState(); mState = min(mState, newState); mLifecycleObserver.onStateChanged(owner, event); mState = newState; } }
ハッと、binding.lifecycleOwner = parentLifecycleOwner (実体はviewLifecycleOwner)
を渡していたことを思い出しググってみたところ、上記の記事を発見したところです。
RecyclerView+DataBindingはどうすればいいんでしょうかね……。
以下、ご参考まで。
RecyclerViewでカレンダー風の表示を作ったので、備忘録的なまとめその1。 MVVM+DataBinding でViewに表示させるまでです。
- 発見に至った経緯
- できるもの
- 使用した技術的なモノ
- 項目を sealed class で用意する
- sealed class Content の定義
- データバインディングレイアウトファイルの作成
- CalendarActivity の定義
- CalendarActivityViewModel の定義
- CalendarAdapter の定義
- RecyclerView の拡張関数の定義
- CalendarFragment の定義
- レイアウトファイルとバインド
- Fragment の定義
- GitHub