GAミント至上主義

Web Monomaniacal Developer.

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

【お約束】 投稿内容は個人の見解であり、所属する(していた)組織の公式見解ではありません。

名前:uyamazak(昔いた会社で上司が開発用Linuxサーバーのユーザー名に「yuyamazaki」が長いので勝手に作ってくれた。読み方わからないけどウヤマザク)

高校あたりからWEBサイトをやったり趣味の延長でWEB系を仕事にした感じの人間。

2020年1月から株式会社シニアジョブにジョイン。
2021/1現在、まだ開発者は3人、これからの会社なのでビジネス貢献しつつ、きれいな設計をしたい

アズールレーン@竹敷でモバイルのUI、UX研究中(初嫁ジャベリン)
フレンド&大艦隊メンバー募集してます ID:939524678 @竹敷



GitHub: https://github.com/uyamazak/

これまでの主なプロジェクト

続きを読む

2020年振り返り

2020/1/14よりシニアジョブに入ったのでほぼ1年。ざっと振り返り。
GitHubを仕事で使えるようになったので草もたくさん生やせました。
f:id:uyamazak:20210108184003p:plain

3行

シニアジョブのお仕事

1ヶ月のときに書いたのはこれ。
uyamazak.hatenablog.com

その後のトピック的には

初Nuxt.jsのメディアサイ

uyamazak.hatenablog.com

これは広報さんのおかげで記事にもなりました。
prtimes.jp

二酸化炭素濃度システム

まだオフィスで稼働してて換気の目安になってます。
uyamazak.hatenablog.com

ソースコード
GitHub - uyamazak/co2signals: Co2 Sensor System. Raspberry Pi + MH-Z19B + Firebase

地図で市区町村選択できるやつ

社長いわく営業の労働時間短縮にはこれが一番効いたらしい(後日詳細が?)
uyamazak.hatenablog.com

BigQuery周り

まだ一部ですが、導入できました。超早いし超便利なのに超安いのなんなの。WITH文とかWindow関数とか使ったのも初めてだったかも。

Google Search Console & Page Speed Insight 対応

SEO対策も兼ねて、エラー潰したり、高速化のために不要なnpmパッケージ消したり(moment.jsとかmoment.jsとか)いろいろやりました。


その他いろいろ社内システムの自動化まわりを結構やった気がする。

とくに給与計算とか源泉徴収とか、ただでさえややこしいのに、設計とかコードがひどい所を見ることとなり、精神的つらみがありました。
勤怠とか給与はいいのがたくさんあるので、はやく外部API連携したい・・・。

エンジニア1人入社!

10人以上面接したかな?
いい人入ってくれました!

Rubyな職場からPHPメインなうちに来てバリバリやってくれてます!感謝!

その他

サイゼリヤ野菜ランチ研究

健康診断でLDLコレステロール中性脂肪が高めなこともあり、ランチで野菜を取ろうと決意。
会社近場でいろいろ試したけどサイゼリヤが最強っぽいと思い、出社日は必ずサイゼリヤで食べることに決定。
あと新型コロナの影響もあり、広めで感染対策ちゃんとしてそうというのもポイント。

800円程度を上限として、いろいろ試したけど、コールスローサラダがつくランチセット各種(500円)と柔らか青豆の温サラダ(200円)か、ほうれん草ソテー(200円)と組み合わせがずっと食べられそう。

でもこれを見てからオリーブオイルをたっぷりかけるようになりました。
今では無事オリーブオイル中毒となり、野菜よりもオリーブオイルを求めてサイゼリヤに通ってます。

緊急事態宣言終わって出社したらまた行きたい。



ブラウザで動画つくるやつ

友人と話して勢いでやった。ブラウザで動画作れる時代になったんだなぁと。

uyamazak.hatenablog.com

https://uyamazak.github.io/marika_kitada/

TypeScriptを結構書けた

仕事ではNuxt.jsの時のほか、Puppeteerを使ったスクレイピングにもあえてTypeScriptを使ったりしました。

あと弱小個人レポジトリの中では一番スターとかフォークされてたレポジトリ(hcep-pdf-server)をTypeScriptの練習も兼ねて新しく作り直しました。
Fastifyも使ってみたり、テストも充実できて、GitHub Actionsも使って、TypeScript以外もいろいろ勉強になった気がする。
ユーザー、コントリビューターともに募集してます!

github.com

2021年

だいぶTypeScriptにも慣れてきたので、ずっと温めてるキャラクター駆動開発を進めたい。Vue3かReactでかなぁ。
あとやっぱり趣味を仕事にしてる影響もあり器用貧乏なので、なにか強い軸みたいなものがほしいなぁと漠然と思っていたり。

新型コロナ中は自粛してるけど、やっぱサウナ行きたい。

最後に

というわけで2018年からやってる美少女着せ替え購入ゲーム「アズールレーン」の友達がいないので募集してます!
f:id:uyamazak:20210108190423p:plain

竹敷サーバーで大艦隊(一人)もやってます!ID: 939524678


シニアジョブのエンジニア募集はこちら

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

BigQueryでGROUP BYした項目を文字列結合したいとき、レガシーSQLでは`GROUP_CONCAT`を使ってました。

標準SQLにはなく、検索しても見つけづらかったのでメモ。

結論

STRING_AGGが使えます。

STRING_AGG([DISTINCT] expression [, delimiter] [ORDER BY key [{ASC|DESC}] [, ... ]] [LIMIT n])
[OVER (...)]

標準 SQL の式、関数、演算子  |  BigQuery  |  Google Cloud

DISTINCTで重複除けるし、ORDER BYもここでできちゃうので、ID順とかで結合したいときこれだけでできてしまって超便利

こんなデータの場合、

WITH testData AS (
  SELECT 1 AS id, '赤身' as type,  'ブリ' AS name UNION ALL
  SELECT 2, '赤身', 'いわし' UNION ALL
  SELECT 3, '赤身', 'アジ' UNION ALL
  SELECT 4, '赤身', 'マグロ' UNION ALL
  SELECT 5, '赤身', 'カツオ' UNION ALL
  SELECT 6, '白身', 'タイ' UNION ALL
  SELECT 7, '赤身', 'サバ' UNION ALL
  SELECT 8, '白身', 'タラ' UNION ALL
  SELECT 9, '白身', 'フグ' UNION ALL
  SELECT 10, '白身', 'サケ' UNION ALL
  SELECT 11, '白身', 'サケ'
)
SELECT  * FROM testData;
1 赤身 ブリ
2 赤身 いわし
3 赤身 アジ
4 赤身 マグロ
5 赤身 カツオ
6 白身 タイ
7 赤身 サバ
8 白身 タラ
9 白身 フグ
10 白身 サケ
11 白身 サケ
SELECT  type, STRING_AGG(name)  FROM testData GROUP BY type ;

1 赤身 ブリ,いわし,アジ,マグロ,カツオ,サバ
2 白身 タイ,タラ,フグ,サケ,サケ

サケが重複してるのでDISTINCTつけると

SELECT  type, STRING_AGG(DISTINCT name)  FROM testData GROUP BY type ;
1 赤身 ブリ,いわし,アジ,マグロ,カツオ,サバ
2 白身 タイ,タラ,フグ,サケ

サケ消える。
DISTINCTとODER BYを同時に使うときは同じ項目でしかできない

SELECT  type, STRING_AGG(DISTINCT name ORDER BY name asc )  FROM testData GROUP BY type ;
1 赤身 いわし,アジ,カツオ,サバ,ブリ,マグロ
2 白身 サケ,タイ,タラ,フグ

区切り文字の指定はちょっと癖がある感じ

SELECT  type, STRING_AGG(DISTINCT name ,  'と'  ORDER BY name asc)  FROM testData GROUP BY type ;
1 赤身 いわしとアジとカツオとサバとブリとマグロ
2 白身 サケとタイとタラとフグ

あと今回はウィンドウ使ってないけどOVERで指定したり、LIMITも書けるので大抵のことはできそう。

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

業務で年末調整処理の一部、源泉徴収の給与所得控除後の給与等の計算を実装したけど
いろいろつらかったことをメモする。主に行政資料への不満。

従業員として出すだけでも面倒な年末調整ですが、もちろんその背後で行われている処理はもっと面倒です。

www.nta.go.jp


資料だけでこんだけ数も有り、
f:id:uyamazak:20201204174745p:plain

一括ダウンロードするとPDFで30MB超え。

でも今回、業務で必要だったのは下記の1枚だけでした。


Ⅵ 電子計算機等による年末調整
https://www.nta.go.jp/publication/pamph/gensen/nencho2020/pdf/82-83.pdf

でも、この一つだけでも結構ストレスフルでした。

コピペすると数字が全角でつらい

桁数が多いので、手打ちは避けたいのでコピペすると思うんですが、こうなります。全角です。

1,618,999円まで

電子計算機で全角数字使うのかと・・・。
コピペしたあとVSCodeの拡張で半角に変換して使いました・・・。

カラム構造がネ申エクセルのそれ

ここもコピペしたいのですが、コピペすると
f:id:uyamazak:20201204175448p:plain

こうなります。行ごとに整形しなおす必要があります。

1円から
551,000 〃 
1,619,000 〃 
1,620,000 〃 
1,622,000 〃 
1,624,000 〃 
1,628,000 〃 
1,800,000 〃 
3,600,000 〃 
6,600,000 〃 
8,500,000 〃 
550,999円まで
1,618,999 〃 
1,619,999 〃 
1,621,999 〃 
1,623,999 〃 
1,627,999 〃 
1,799,999 〃 
3,599,999 〃 
6,599,999 〃 
8,499,999 〃 
20,000,000 〃 
0円
A-550,000円
A×60%+97,600円
A×60%+98,000円
A×60%+98,800円
A×60%+99,600円
A×60%+100,000円
A×70%-80,000円
A×80%-440,000円
A×90%-1,100,00

推測ですが、エクセルでこの3カラムをつくり、行を使わずセル内部で改行してる作ってると思われます。
f:id:uyamazak:20201204175630p:plain

先日出た改善案どおりに作ってくれればこんな面倒なことしなくて済んだのに・・・。
お役所「Excel」の改善案が公開 ~あかんヤツ→ええヤツの例がわかりやすく、一般市民にも結構参考になる - やじうまの杜 - 窓の杜

来年この資料が直ってなかったらしかるべきところに届け出たいと思います。

計算の意図がよくわからなくて、むかつく

まあ法律でそうなってるんでしょうが、
1,618,999円から1,623,999円の狭い範囲だけ、
なんでこんな処理が必要なんでしょうか。もっとシンプルにしようって人は誰もいなかったんでしょうか。

f:id:uyamazak:20201204180059p:plain

さすがに実装して動かすと、あーこの表↓みたいな段階的な数字にしてるのかーって何となく分かったけど初見はつらい。
1000円未満切り捨てみたいのは会計でよくみるし、全部それでいいじゃんって思ってしまう・・・。
https://www.nta.go.jp/publication/pamph/gensen/nencho2020/pdf/84-92.pdf

電気計算機で実際に動くコード置いとけよ!

こんなネ申エクセルを元にしたPDF資料じゃなくて、プログラミング言語のサンプルコード置いといてくれよ!
と思ったので今回PHPで書いたコードを雑にTypeScript化、変数名に日本語を試してみたかったのもあり、Gistに置いておきました。

日本語でもVSCodeも問題なくnodeでも普通に動いた。

こういう国特有の法律用語って絶対正確な英語にはできないので、日本語のままが楽ちんだなぁと思うけど、いろいろ問題もあるので実際の現場では使えることはなさそう。

問題起きてももちろん責任は取れません。

tscして自分のPCのnode(v14.14.0)で実行するとこんなの風に出ました。

給与所得控除後の給与等の金額 { '給与': 551000, '給与所得控除後の給与等の金額': 1000 }
給与所得控除後の給与等の金額 { '給与': 1872000, '給与所得控除後の給与等の金額': 1230400 }
給与所得控除後の給与等の金額 { '給与': 2612001, '給与所得控除後の給与等の金額': 1748400 }
給与所得控除後の給与等の金額 { '給与': 4272000, '給与所得控除後の給与等の金額': 2977600 }
給与所得控除後の給与等の金額 { '給与': 9800000, '給与所得控除後の給与等の金額': 7850000 }
給与所得控除後の給与等の金額 { '給与': 20000000, '給与所得控除後の給与等の金額': 18050000 }

ちなみに来年には外部のサービスと連携してるつもりなので、こういうコードはもう二度と書かない予定です。
経理の皆様、こういうソフト作ってる皆様お疲れさまです。


プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

  • 作者:Boris Cherny
  • 発売日: 2020/03/16
  • メディア: 単行本(ソフトカバー)