GAミント至上主義

Web Monomaniacal Developer.

NuxtJS + Composition APIのuseAsync()でハマった3つ

新しいサイトの開発でNuxtJS + Composition API + TypeScriptで快適な開発をしてますがuseAsyncは、サーバー、クライアント両方で実行することもあり、理解にちょっと時間がかかっていろいろハマったのでメモ。基本的にちゃんとドキュメント通りに使えば大丈…

NuxtJSでaxiosのリクエストをキャンセルする

NuxtJSでSSR + SPAでコンテンツをaxiosで取得するよくあるページを作っていたら、リンクを連打するとこんな感じになった。 言葉で説明するの大変なのでブログ用にTwitterに動画あげた。NuxtJSなどのSPA + Ajaxでコンテンツを非同期取得してるやつで、ページ…

CircleCIでAWS ECSのScheduled Taskのタスク定義を最新のリビジョンに更新する

AWSのECSを使った環境構築、↓この記事からの続きで、 uyamazak.hatenablog.com Laravelの php artisan schedule:runを実行するためにタスクのスケジューリングを使ってみることに。新規作成はコンソール上でなんなくできたものの、CircleCIからの更新方法が…

AWS初心者がElastic Beanstalk環境をFargate化したメモ

優先度が高い仕事が落ち着いてきたため、ずっとやりたかった本番環境コンテナ化に着手しました。たぶんお休みで全部忘れるので社内に説明用も兼ねてメモ。下記の記事のように現在のシニアジョブに入社してすぐ、開発環境はDocker化していました。シニアジョ…

自作パッケージをnpmに公開&GitHub Actionsで自動化する

趣味で開発しているPuppeteerを使ったPDFサーバーhc-pdf-serverで一部分をnpmにパッケージとして公開しています。これ↓ www.npmjs.com FastifyからPuppeteerを通して、Headless ChromeのPageを使用できるプラグインです。 名前の通り速いFastifyの長所を殺す…

Google Apps ScriptとNuxtJSで簡易来客受付システムをつくったら実質サーバーコスト無料だった

シニアジョブのオフィスの引越にあたり、セキュリティの面からも来客の記録システムが必要になりました。最初すでにいろんな会社が作ってると思ったので、それ使えばいいじゃんと思いましたが、仕様を聞くとたしかに超簡易的なものなのでまあいいかというこ…

Laravelの操作ログをGCPのDataflowテンプレートを使ってBigQueryに記録する

経緯 シニアジョブの人材管理システムで、もしもの時のセキュリティのために、すべての操作ログを記録することにしました。 Dataflowのテンプレートを使うことでちょっとのコードでできてしまったので、コードにならない部分の記録をするため雑にメモ。 記事…

Cloud BuildでApp EngineにデプロイしようとしたらPERMISSION_DENIED

NuxtJSで使った社内用アプリをCloud BuildでApp Engineに自動デプロイしようとしたら2時間くらいハマったのでメモ。GitHub Actionsもいいけど、やっぱGCP内で完結させたいなぁということでCloud Build使いました。GitHub Actionsと比べるとユーザーと情報が…

Google Apps ScriptからChartworkに投稿する

社内システムで最初、JavaScriptでブラウザからAPI叩こうとしたら、おそらくChatwork API側がPreflight requestに対応してないのが原因でCORSエラーが出て送れない・・・。 そのためGASのウェブアプリ側で送るようにしました。developer.mozilla.org UrlFetc…

Google Apps Scriptのウェブアプリでaxiosでリクエストする時にハマったメモ

シニアジョブで簡単な来客記録システムを作りあたり、Google Workspaceを使っているので、 NuxtJSでUI作って、Google スプレッドシートとGASでいけるんじゃね? と思ってやってみたら、ちょっとハマったものの出来たのでメモ。 ※画面は開発中のものです(圧…

Puppeteer v7.1.0でViewportの型エラーが解消しないので調査したログ

結論 mainに入ってるけどまだリリースされてないだけだった。 リリースちゃんと読もう。 TypeScriptでPuppeteerガンガン使いましょう。 経緯 Puppeteerはv6でTypeScriptの型がビルドインになり、@types/puppeteerが必要なくなりました・・・だと良かったんで…

あなたの欲しかった小数点以下"切り捨て"はMath.floorではなくMath.truncかもしれない

「JavaScript 小数点切り捨て」で検索するとMath.floor()とparseInt()使う記事が出てきてよろしくないと思ったのでメモ。 結論 小数点以下を削除したいのならMath.trunc()使え。負の時は思ってたのと違うかも。 小数点以下切り下げならMath.floor() 正の値の…

GitHub ActionsでDockerイメージのビルド結果だけを確認するActionを作る

このhc-pdf-serverのレポジトリで、ユニットテストの他に、Dockerイメージのビルドが成功するかどうかを確認したかった。 以前ファイル名などを変えた際に、テストは通るがdocker buildできない状況が発生していて気づけなかったことがある。 github.com普通…

Puppeteer + TypeScriptでWEBサイトをスクレイピングしたメモ

業務でとある業界のいわゆるアタックリストが必要になり、複数のサイトをスクレイピングしてCSVにしました。スクレイピング処理には、WEBブラウザ(Chrome or Chromium)を操るPuppeteerを使いました。https://pptr.dev/その過程で得たことをメモ。 スクレイピ…

2020年振り返り

2020/1/14よりシニアジョブに入ったのでほぼ1年。ざっと振り返り。 GitHubを仕事で使えるようになったので草もたくさん生やせました。 3行 いろいろやった 2021年はサウナ行きたい アズールレーン友達募集中 シニアジョブのお仕事 1ヶ月のときに書いたのはこ…

BigQueryの標準SQLでGROUP_CONCATしたいときはSTRING_AGG

BigQueryでGROUP BYした項目を文字列結合したいとき、レガシーSQLでは`GROUP_CONCAT`を使ってました。標準SQLにはなく、検索しても見つけづらかったのでメモ。 結論 STRING_AGGが使えます。 STRING_AGG([DISTINCT] expression [, delimiter] [ORDER BY key […

令和二年度 源泉徴収の給与所得控除後の給与等の計算処理実装でつらかったこと

業務で年末調整処理の一部、源泉徴収の給与所得控除後の給与等の計算を実装したけど いろいろつらかったことをメモする。主に行政資料への不満。従業員として出すだけでも面倒な年末調整ですが、もちろんその背後で行われている処理はもっと面倒です。www.nt…

シニアジョブの開発メンバー、こんな人欲しいなぁ(ポエム)

これまでエンジニア職の採用面接を適当にやりすぎていて、確認し忘れが出てしまうのが良くない。 採用基準とまではいけないけど、最低限確認したいこととをまとめたい。会社のエンジニア採用ページ。私が保守してるので内容は大丈夫なはず。 corp.senior-job…

TypeScriptでオプション的なオブジェクトをデフォルト値つきでいい感じに扱う

関数の引数や、クラスのコンストラクタとかでオプション系の値をオブジェクトで受け取るときに、いい感じに省略可能にする方法をよく忘れるのでメモ。 interface HogeFunctionOptions { optionFoo: string optionBar: string optionBuzz: string } const def…

ブラウザだけでVtuber用動画をつくるツールをKonvaとVueでつくってる

動画サンプル https://youtu.be/3t2l1OH00lU youtu.be 声はまだない。 作ってるやつ(スマホ非対応) uyamazak.github.io 使い方 STARTしていろんな操作して録画、STOPすると出てくるDOWNLOADボタンで落とせます。UIまじで並べただけ。 経緯 架空のVtuberを…

このブログについて(先頭固定)

【お約束】 投稿内容は個人の見解であり、所属する(していた)組織の公式見解ではありません。名前:uyamazak(昔いた会社で上司が開発用Linuxサーバーのユーザー名に「yuyamazaki」が長いので勝手に作ってくれた。読み方わからないけどウヤマザク)高校あ…

既存のLaravelプロジェクトに入ってたVueまわりの環境を整備した

一行 ESlint入れてたつもりがJSは1/3、CSSは2/3を削除できた 一行 そもそも? ESlint, Prettierインストール eslintの設定 .prettierrc lintコマンド追加 実行 JavaScript, CSSの容量削減 使ってないパッケージ削除で容量削減 fontawesomeの読み込み最適化 l…

Googleスプレッドシートを一行ずつJSONのファイルにしてGoogleドライブに書き出す

前回↓につづきスプレッドシートの処理。 uyamazak.hatenablog.com前回は1つのJSONだからメッセージに出してコピペで良かった。でも今回は都道府県ごとに数百文字のテキストがあり、すべてを1ファイルにまとめてしまうと100KB近くいってしまい、Ajaxでの取得…

Googleスプレッドシートを使って政府統計のデータをChart.jsで使えるJSONに変換する

シニアジョブで、サイトのコンテンツとして年代別就業状況の統計データを使うためにいろいろやったので流れをメモ。データは政府の政府統計ポータルサイトe-Statのものを使いました。リンクは都道府県別のもの。 www.e-stat.go.jp利用の際は出典の明記が必要…

microCMSのリッチテキスト内のimgタグをamp-imgに変換する

7/1に公開したシニアタイムズでは、NuxtJSとamp-moduleを使ってAMP対応を行いました。でもmicroCMSのリッチテキストで保存している記事本文は自分で対応する必要があります。基本的に生成されるHTMLはきれいなのでほとんど問題ないのですが、imgタグだけはam…

NuxtJSのAMPモジュールでamp-analyticsを使う方法

NuxtJS + AMPモジュールでGoogle Analyticsのタグを貼る際、ちょっと手コヅったのでメモ。GitHub - nuxt-community/amp-module: AMP Module for Nuxt このページを参考に AMP のグローバル サイトタグ | グローバル サイトタグ(gtag.js) | Google Develope…

NuxtJSとTypeScriptとmicroCMSとNetlifyとAlgoliaで自社メディアサイトつくった

2020/7/1に公開しました↓。いわゆるオウンドメディア的なもの。ここでは忘れないうちに技術的なことだけ書いておきます。 senior-job.co.jp見た感じ普通のブログですが、裏側はタイトルどおり今どきな技術で攻められるだけ攻めきった感あります。そのおかげ…

NuxtJSでhead内のbaseタグをhooksを使って無理やり消してAMPエラー解消した

ちょっと無理やりなややこしいことをしたのでその経緯を含めてメモ。設定でできるようになるといいな。NuxtJSでAMP対応をしてますが、router.baseを設定しサブディレクトリに公開しているため、headにbaseタグが入ってしまい、これがAMPテストツールのエラー…

Vue.js (NuxtJS) + TypeScriptでSlickを使うならvue-slick-carouselがおすすめ

デザイナーさんが作ったHTML + CSSをNuxtJS + TypeScript化していましたが、カルーセルにslickというライブラリが使われていました。レスポンシブにも対応していて、非常に高機能です。kenwheeler.github.io しかし、jQueryに依存しており、メンテナンス性や…

Firebase Functions + TypeScriptで複数リージョン指定する方法

デフォルトでus-central1で動くFirebase Functionsですが、やっぱりネットワークでレスポンス遅くなるので日本でも動かしたいなと思ってやってみたら下記のエラーが起きたのでメモ。Cloud Functions のロケーション | Firebase functions.region() でカンマ…