Vuexのプロジェクトに「vuex-i18n」で多言語対応を導入する方法。インストール、英語と日本語のメッセージファイルの用意、storeへのデフォルト言語設定、i18n.tsの作成、template側の実装、プルダウンでの動的切り替えまで♪
Java8のStream APIでListをMapにするとHashMapになって順序が保証されない問題の解決方法。Collectors.toMapの引数にLinkedHashMap::newを渡せば元の並び順を保てます。TreeMapではダメな理由も♪
Hibernate5でDBのスネークケースのカラムをEntityのキャメルケースのフィールドに自動でマッピングする方法。廃止されたImprovedNamingStrategyの代わりにPhysicalNamingStrategyStandardImplを継承して設定します♪
TypeScriptで依存ライブラリ側のstreamやBufferなどNode.jsコアモジュールのエラーが出るときは、tsconfig.jsonのcompilerOptions.typesに「node」を1行追加するだけで解決します♪
PWAアプリのインストールボタンのクリック・インストール・キャンセルの3イベントをGoogle Analyticsに送信して集計する方法。gaのevent処理を追加するだけ。ストアを介さないPWAでは貴重なデータになります♪
PWAアプリのインストールダイアログをJavaScriptのbeforeinstallpromptイベントで制御し、ボタンを押したタイミングでインストールできるようにする方法。初回に断られると出なくなるダイアログの代わりに導線を用意します♪
Vue-CLI3のプロジェクトをルート以外のサブディレクトリにデプロイするときのURL設定。vue.config.jsにpublicPathを書くだけです。Vue-CLI2のassetsPublicPathは廃止、baseUrlも非推奨になっています♪
TypeScriptでFileReaderのevent.target.resultをstring型のフィールドに代入するとコンパイルエラーになる原因は、戻り値がstring | ArrayBuffer型だから。フィールドの型定義を合わせれば解決します♪
Vue-cli3でTypeScriptのプロジェクトにVuetifyを入れると出る「implicitly has an 'any' type.」のビルドエラーは、tsconfig.jsonに1行追加するだけで解決します。@types/vuetifyのインストールは不要です♪
ElectronアプリにGoogleAnalyticsを入れて機能の利用状況を解析する方法。ビルド後はドメインが無くて普通のGA導入は動かないので、universal-analyticsでイベント送信し、ClientIDを付与して集計します♪