2022年振り返り
どうもてぃです。
はてぶを始めて初の振り返りです。
今年も頑張りました。早速振り返っていきます。
※多少愚痴が含まれます。苦手な人はブラウザバックお願いシャス。
1月
12/24に息子が生まれたため、1か月育休でした。
新居の引き渡しが2月で引っ越しに向けて荷造りと、子育てと、大忙しであっという間にすぎましたね。 嫁氏も息子も里帰りせず戻ってきたので、子供2人を見ながら引っ越し準備は死ぬほど大変でした。
最高の家に住むためとにかく家のことを頑張りました。よく頑張ったぞ自分。
2月
徐々に仕事再開。
と、新居引き渡しで引っ越し完了!新しい家は最高です。大満足。
やることは山積みで、片づけながら荷解きしたり、デスク環境作ったり、娘の攻撃を受けながら仕事をしたり…
何をやってもうまくいかず大変だった記憶しかない。あまり仕事できなかったですね。
あと、歩道側にブロックがなく土が歩道に流れたりしてたので外構屋さんに先に歩道側の外構をやってもらいました。家のことばっかりですね。
2/9結婚記念日、何もできず、来年は頑張ろう。
個人的にイラっとした出来事 vol.1
業務委託先のMTGで…
もてぃ「引っ越しでネット回線が通ってないのと、働く環境が全然整ってないのであまり稼働できないです。できそうなところがあれば振ってもらいたいです。」
某氏「んー仕事は別にネット通ってなくてもできるので…。そのうえで、もてぃさんは何をやるんですか?」
何をやるんですかぁ?!?!?!wwwwwwwwwwwwwwwwwww
できねぇっていってんじゃんWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
エンジニアの仕事でネット回線がないのは致命的なんですけど…。そして今このMTGで貴重なテザリング通信量使い切りそうなのに、どうやってドキュメント確認するんですか?
という言葉を飲み込んで
もてぃ「そうですね、API定義のところからできればやりたいと思います(くそぼけが)」
このMTGを機に稼働するのをやめて、残タスクだけやりきることにしました。
ほんと、相手の状況も考えずに仕事を振る人っているんですねー(棒読み)。というかMTGの他メンバーフォローしてくれよ…。
文章で見てみると割と普通に感じますが、面と向かって言われたらくsssssっそイラっとしました。すんません。イラっとしたわ。すんません。
3月
前の家で使っていたdmm光を復活させてやっとまともに仕事ができるように。そして娘も「テレビみたぃぃいいいいいいいいいい」ってごねることがなくなりました(最近は見ないんですけどね)。
この月は主に家の初期不具合を直してもらいました。
ダンベルを変に落として傷のついたフローリングもタダで直してくれたのでマジでよかったです。新居で筋トレする予定の人はちゃんとトレーニングマットの上でやりましょう。
あと、忙しい中滑り込みで確定申告をしました。予定納税で20万ほど先に払っていたので、確定申告では10万ほど払っておしまい。所得税高すぎですわ…。
個人的にイラっとした出来事 vol.2
某slackで「子供たちの寝かしつけで稼働遅れます」と投稿したところ、某方に「(もっと稼働)がんばってよぉ~」と言われました。
その方は最近結婚して子供ができたようです。
…たぶん奥さん大変だろうな~と思います。
がんばってください…嫌味ではないです(笑)
4月
新居の2か月点検、 娘の幼稚園入園、息子のお宮参り!
とうとう娘が幼稚園に入りました。あの小さかった娘がねぇー人間になりましたね。よく幼稚園に行き始めると、朝駄々こねて行きたがらない…みたいなことが起きがちなようですが、うちの子は幸い全くなく喜んで行ってました。さすが俺の子だ。
そして、月末に一条工務店のお家見学会が入ったので、嫁さんと全力で荷解きして全て片付けました(一部片づけられなかったものはクローゼットにぶちこんだ)。お家見学会のメリットは一条工務店から広告料的なものが1組あたり5000円もらえるところと、人を呼ぶため部屋が圧倒的にきれいになるところですね。嫁さんが片づけるの苦手なので大変助かります。
部屋が片付いてデスク環境も出来上がったのでガッツリ仕事に集中し始めた月でした。
あ、あと個人開発で住宅ブログを作ったりdmm光からnuro光に乗り換えた月でしたね。住宅ブログ最初の投稿をやってまだ一回も記事書いてない…やばい。
5月
会社のメンツとか呼んで初の新居庭BBQ!
めちゃくちゃ楽しかった。BBQは安い肉でもおいしく感じるから不思議ですね。また来年もやりたい。
先月は住宅ブログを開発してましたが、5月はshopを作ってました。いらないもの売る個人サイト的な。これも住宅ブログ同様、作って満足して全然投稿してないけど。
あと、新しい業務委託を見つけるためいろいろ面談したり、会社のマネジメント合宿があったり、息子の半年記念写真撮りに行ったりといろいろありました。
息子と娘がかわいすぎる。
6月
娘の誕生日月!
3歳になりました。本人曰くお姉さんになったそうで、大きくなったらプリキュアになりたいそうです(笑)超かわいいw 最近はマイメロちゃんとクロミちゃんになりたいといってますがwww
この月は謎にモンハン2ndG配信者に感化されてPSPを大量にヤフオクで落としたりPCパーツを買い集めたりしてました。ちなみにPCパーツ全てそろったのですがまだ作ってないです。ケースだけ机の上に乗ってます(謎)
また、先月面談した会社で業務委託先が決まったので個人開発はいったんストップし、仕事に没頭する日々が始まりました。本業と同じ技術スタックなので楽しみながらやってましたね(なう)。
7月
念願のボッシュ食洗器の導入。
今年買ったのものランキング上位に入る最強家電です。
住宅と同じく高い買い物でしたが、今となっては必須アイテム。なければ生きていけない。
使い方は簡単。使った食器をいれるだけ。大容量なので何も気にせずぶち込んでもちゃーんと洗ってくれる。最強。神。もしかしたら、もう少し大きくなった娘が「大きくなったらボッシュの食洗器になりたい」と言い始めるかもしれない。それくらいパない。
Panasonic製の縦型食洗器??やめとけやめとけ。海外製の食洗器にしとけよ。ボッシュはお買い得だぞ。ミーレやガゲナウよりも安いしな。新居作る人、ぜひボッシュの食洗器導入を考えてくれたまへ。
…と食洗器の話ばかりでしたが、娘と川に遊びに行ったり、娘がけんけんスクーターに乗れるようになったり、保育参観にいったりしました。食洗器の設置時に床をえげつないくらいけずってて嫁氏激おこぷんぷん丸な出来事もありましたが、それはまた住宅ブログにでもかこうかな。
8月
ご近所さんと大分へハーモニーランド旅行にいきやした。
嫁さんの福利厚生でハーモニーランドがタダだったのとご近所さんの福利厚生でホテルがほぼタダだったので、1泊2日を1万前後で旅行できました。最強すぎる。
これも嫁さんの謎コミュ力のおかげです。嫁さん様様。ついでに掃除もしっかりしてくれたまへ。
あと、またモンハン配信者に感化されてPS2を購入し頑張ってモニターに映し出す…みたいな奇行に走ってました。何?ゲームはやったかって?聞くな。
9月
娘の七五三撮影にいってきました。
可愛い、天使、神。
月初にグループ会社の総会にいったんですが、まじで知らない人増えすぎててコミュ症発揮してました。気づいたら今の会社に入って割と古株になってるっぽく、いろんな人に玄人扱いされて困りましたね。人生は誰だってアマチュアなのよ、ワトスン君。
あと、もう住んで半年経つのに外構が全然進んでなく草が半端ないことなってきたので、いったん全体的に掘ってもらって砂利しけるところは敷いてもらいました。
記事を書いてる今の段階でやっとレイアウト終わったので年始からやっとちゃんとした作業に入ってもらえそう。楽しみでやんす~。
10月
なんと、エンジニアになって6年が経過してしまいました。中堅エンジニアじゃん。
子供ができて成長速度が急激に落ちてその葛藤に悩まされ早3年。正直今入ってきてる新人たちにすぐ抜かされそうです。パパエンジニアに助けてもらいたい(精神的に)。
そして少ない勉強時間をかき集め、応用情報技術者試験を受けてきました。
自己採点の結果、午前試験で落ちてた\(^o^)/オワタ
午後の自己採点は余裕で受かってたんですが…午前試験に監査問題多すぎでしたね。計算問題あんまでなくて点数稼げなかった。つらい。
勉強時間の取り方を考えさせられる試験でしたねぇ…次は受かりそうな予感してる(フラグ)ので来年頑張ります。
また、半ばにご近所さんたち(3家)とBBQしました。子供が多すぎて全然集中してご飯食べられなかったですがwww
月末には娘の運動会!まだまだ小さいので午前だけで終わりました。走り回って動画撮った、圧倒的パパしてきました。
最後に家族でコスモスを見に行きました。水巻町っつー割と治安がよくないんですが、最近都市開発されてるっぽいとこで見てきました。
ひたすら娘がかわゆい。水巻はコスモスおおいわー。
11月
会社の全力新規サービス開発合宿!
めっちゃ楽しかったが、新卒との温度感があんまあってなかったなぁと個人的に感じた合宿だった。温度感高いときはもっと全力で開発してくれ!そういう体で合宿来てるだろ!とか思ったりね。
合宿で出来上がるはずだったものが出来上がらないのは歯がゆかった。おのおのやること分担してたけども、やっぱり優先順位をやる前にある程度つけるべきだなと思ったのと、各個人に任せすぎてたってのが素直な感想。人力でできるところはあとでやって、主要なところ先に実装すべきだった。次開発合宿があるなら生かしたい。
フリー素材、新卒たち(ベンチプレス130kg筋肉エンジニアと数独&NBA大好きつよつよエンジニア)
半ばに娘のマラソン大会があったり、宮地嶽神社に七五三行ったり、家のデザインルーバーにスズメがめちゃくちゃ💩するからおもちゃの蛇設置したり、家族でサーカス見に行ったり、雑草を駆除するため除草剤をまいたりした11月でした。
12月
またまた保育参観!娘が体操してるところを初めて見ました。意外と運動神経いいし、3歳児って逆立ちできるんですね。マジですごい、さすが俺の娘。たぶんもう少し大きくなったら「体操選手になりたい」とか言い出したりしてね。
会社では2回目のマネジメント合宿。新卒が入って半年後の会社のことを2日かけて考える合宿です。1回目と違っていろいろ意見が出たり、今後やることがより明確になって、全員が向かっていく方向性を合わせられたのがすげぇよかったです。開発合宿の振り返りもしたかったわなぁー。
あとまたお高い買い物をしました。この子。
ソニーのα7cです。ヨドバシカメラ20thとかいうやつで店頭で買いました。ソニーでもキャッシュバックしていてかなりお買い得だったのと、スマホで運動会や保育参観を撮るのに限界を感じていたので、キャッシュバックキャンペーンに乗っかって買ってしまいました。
嫁さんの友達どうしの写真撮影会でも使ったり、息子の1歳誕生日会でも使ったりと早速活躍してくれてます。まじで買ってよかった。google photoが圧迫されなくて助かる。
息子の1歳誕生日はぐちゃぐちゃw
あんなにちっさかったのに今では軽々アンパンマンのジャングルジムに上るし、気づいたら階段・椅子・ソファーに上ってるし、冷蔵庫も勝手にあけるw めっちゃヤンチャ小僧ですw
怪我しないように在宅マンなので細心の注意を払いながらこれからも大事に育てていきたいですねぇ。私のように大きくなってくれたまへ。
1年を振り返って
思っていた以上に家族マンだったし、割と真面目に仕事もしてたし、コードもあの忙しさの中では書いてた方かなと思いました。
仕事やエンジニア目線のことを書くと、もっと成長できるはずだーっと思いこんで悩んで不安になって頑張ってた一年だった気がします。ただ、この点は前年よりも明らかに改善していて、あと集中力をより高めていけば満足する最低レベルまでは持っていけそうだなと感じました。来年はyoutubeとtwitterの時間を極力減らして、他のインプット・アウトプットにつなげて行きたい。
正直6年たったそこら辺のエンジニアに比べると💩レベルだと思うので、うんちは💩なりにもっとあがいてレベルを上げていきたいです。自分の状況を言い訳に使わないように時間を有効に使って来年は頑張っていきます。
会社の売り上げも全盛期に比べると全然よくない、むしろやばいくらいなので、もっと売り上げに敏感に、最悪自分が時間外受託して会社に売上計上することも視野に入れながら、でもそんなことにならないよう今あるサービスを全力で全員で伸ばしていこうと思います。
6月までに単月黒字にならなければグループ会社に統合…みたいな話が出てるのでそんなことにならないようまじで頑張る。
家族サービスも今まで通りやってたくさん思い出作っていきたいっすね。
以上、今年の振り返りでした。
次は新年の目標記事でお会いしましょう。
では、よいお年を。さらだばー。
【Ubuntu】apt upgradeでdpkg : breaks: libapt-pkg5.0 (< 1.7~b)が発生したときの対処記録
原因の推察
ubuntu 18.04でnodeのlatestが動かせず、ubuntu 20.04LTSベースのLinux Mint 20 Ulyanaにアップグレードしたのが原因だと思われる…。
nodeがうごかないでもがき苦しんでたTLが以下。
Linux mintでGLIBC 2.28がまだ使えないからnode v18入れられない問題。
— もてぃ💪Engineer (@nil_motty93) 2022年8月30日
これは私もmacを買うしかないのか。
エラー内容
% sudo apt upgrade パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 アップグレードパッケージを検出しています... 完了 インストールすることができないパッケージがありました。おそらく、あり得 ない状況を要求したか、(不安定版ディストリビューションを使用しているの であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移 動されていないことが考えられます。 以下の情報がこの問題を解決するために役立つかもしれません: 以下のパッケージには満たせない依存関係があります: dpkg : 破壊: libapt-pkg5.0 (< 1.7~b) しかし、1.6.14 はインストールされようとしています E: 壊れたパッケージ
試したこと1
質問者と同じく上手くいかなかった
試したこと2
ほぼ同じエラー内容。ただupgrade listを確認すると…
% apt list --upgradable 一覧表示... 完了 brave-browser/stable 1.44.112 amd64 [1.44.105 からアップグレード可] firefox-locale-en/tricia 105.0.3+linuxmint1+tricia amd64 [105.0.1+linuxmint1+tricia からアップグレード可] firefox-locale-ja/tricia 105.0.3+linuxmint1+tricia amd64 [105.0.1+linuxmint1+tricia からアップグレード可] firefox/tricia 105.0.3+linuxmint1+tricia amd64 [105.0.1+linuxmint1+tricia からアップグレード可] linux-generic-hwe-18.04/bionic-updates,bionic-security 5.4.0.128.144~18.04.107 amd64 [5.4.0.126.142~18.04.106 からアップグレード可] linux-headers-generic-hwe-18.04/bionic-updates,bionic-security 5.4.0.128.144~18.04.107 amd64 [5.4.0.126.142~18.04.106 からアップグレード可] linux-image-generic-hwe-18.04/bionic-updates,bionic-security 5.4.0.128.144~18.04.107 amd64 [5.4.0.126.142~18.04.106 からアップグレード可] ubuntu-advantage-tools/bionic-updates 27.11.2~18.04.1 amd64 [27.10.1~20.04.1 からアップグレード可]
アップグレード待ちが結構あるんですよね…
とりあえず、記事と同じようにubuntu-advantage-tools
だけ消してみる。
% sudo apt remove ubuntu-advantage-tools パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下のパッケージが自動でインストールされましたが、もう必要とされていません: distro-info python3-debconf python3-distro-info python3-distupgrade python3-update-manager ubuntu-release-upgrader-core これを削除するには 'sudo apt autoremove' を利用してください。 以下のパッケージは「削除」されます: ttf-mscorefonts-installer ubuntu-advantage-tools update-manager-core update-notifier-common アップグレード: 0 個、新規インストール: 0 個、削除: 4 個、保留: 8 個。 この操作後に 2,199 kB のディスク容量が解放されます。 続行しますか? [Y/n] Y (データベースを読み込んでいます ... 現在 562108 個のファイルとディレクトリがインストールされています。) ttf-mscorefonts-installer (3.7ubuntu6) を削除しています ... Removing the downloaded fonts... update-notifier-common (3.192.30.11) を削除しています ... update-manager-core (1:20.04.10.10) を削除しています ... dpkg: 警告: update-manager-core の削除中、ディレクトリ '/var/lib/update-manager' が空でないため削除できませんでした ubuntu-advantage-tools (27.10.1~20.04.1) を削除しています ... man-db (2.9.1-1) のトリガを処理しています ... ~ % sudo apt autoremove パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下のパッケージは「削除」されます: distro-info python3-debconf python3-distro-info python3-distupgrade python3-update-manager ubuntu-release-upgrader-core アップグレード: 0 個、新規インストール: 0 個、削除: 6 個、保留: 8 個。 この操作後に 1,378 kB のディスク容量が解放されます。 続行しますか? [Y/n] Y (データベースを読み込んでいます ... 現在 561857 個のファイルとディレクトリがインストールされています。) distro-info (0.23ubuntu1) を削除しています ... python3-debconf (1.5.73) を削除しています ... ubuntu-release-upgrader-core (1:20.04.39) を削除しています ... python3-distupgrade (1:20.04.39) を削除しています ... python3-update-manager (1:20.04.10.10) を削除しています ... python3-distro-info (0.23ubuntu1) を削除しています ... man-db (2.9.1-1) のトリガを処理しています ...
apt remove時になんか警告出てるが…とりあえず無視したまへ。
満を持してupgrade
% sudo apt upgrade . . . なんかめっちゃアプグレされてる . . .
成功!!!!!!!!!
最後に
問題なく apt update
も成功しました。
【Ubuntu】heroku cliでGPGエラー
どうもてぃ。
今回のエラーはいつも出るのでさすがに記事にしてあとで見返そうと思い書くことにしました。
毎回調べるのに疲れた…。
エラー内容
% sudo apt update ヒット:1 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic InRelease ヒット:2 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic-updates InRelease ヒット:3 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic-backports InRelease ヒット:4 https://cli.github.com/packages stable InRelease ヒット:5 http://packages.microsoft.com/repos/code stable InRelease 無視:6 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages tricia InRelease ヒット:7 https://repo.steampowered.com/steam stable InRelease ヒット:8 http://dl.google.com/linux/chrome/deb stable InRelease ヒット:9 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages tricia Release ヒット:10 https://repo.nordvpn.com/deb/nordvpn/debian stable InRelease 取得:12 https://packages.cloud.google.com/apt cloud-sdk InRelease [6,751 B] ヒット:13 http://apt.postgresql.org/pub/repos/apt bionic-pgdg InRelease 取得:14 https://packages.stripe.dev/stripe-cli-debian-local stable InRelease [3,427 B] ヒット:15 http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu bionic InRelease ヒット:17 http://archive.canonical.com/ubuntu bionic InRelease 取得:16 https://cli-assets.heroku.com/branches/stable/apt ./ InRelease [2,550 B] エラー:16 https://cli-assets.heroku.com/branches/stable/apt ./ InRelease 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 536F8F1DE80F6A35 ヒット:19 http://ppa.launchpad.net/chrdevs/figma/ubuntu bionic InRelease 取得:20 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB] ヒット:21 http://ppa.launchpad.net/ethereum/ethereum/ubuntu bionic InRelease ヒット:18 https://packagecloud.io/github/git-lfs/linuxmint tricia InRelease ヒット:23 http://ppa.launchpad.net/linuxuprising/java/ubuntu bionic InRelease ヒット:22 https://packagecloud.io/slacktechnologies/slack/debian jessie InRelease ヒット:24 http://ppa.launchpad.net/obsproject/obs-studio/ubuntu bionic InRelease ヒット:25 http://ppa.launchpad.net/peek-developers/stable/ubuntu bionic InRelease 取得:26 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1,224 kB] ヒット:27 http://ppa.launchpad.net/xuzhen666/ppsspp/ubuntu bionic InRelease 取得:28 http://security.ubuntu.com/ubuntu bionic-security/universe i386 Packages [1,034 kB] 取得:29 http://security.ubuntu.com/ubuntu bionic-security/universe Translation-en [282 kB] 2,641 kB を 8秒 で取得しました (327 kB/s) パッケージリストを読み込んでいます... 完了 W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://cli-assets.heroku.com/branches/stable/apt ./ InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 536F8F1DE80F6A35 W: https://cli-assets.heroku.com/branches/stable/apt/./InRelease の取得に失敗しました 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 536F8F1DE80F6A35 W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。
NO_PUBKEY 536F8F1DE80F6A35
これ。システム側にGPGエラーで出てきたキーがないとのこと。なので追加してあげます。
解決方法
% sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 536F8F1DE80F6A35 Executing: /tmp/apt-key-gpghome.a9Y6s4DyNb/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 536F8F1DE80F6A35 gpg: 鍵536F8F1DE80F6A35: 公開鍵"Heroku Inc. <support@heroku.com>"をインポートしました gpg: 処理数の合計: 1 gpg: インポート: 1
問題なくシステム側にpublic keyがインポートできました。
終わり
% sudo apt update ヒット:1 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic InRelease ヒット:2 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic-updates InRelease ヒット:3 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic-backports InRelease 無視:4 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages tricia InRelease ヒット:5 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages tricia Release ヒット:6 https://cli.github.com/packages stable InRelease 取得:7 https://cli-assets.heroku.com/branches/stable/apt ./ InRelease [2,550 B] ヒット:8 http://dl.google.com/linux/chrome/deb stable InRelease ヒット:9 https://repo.nordvpn.com/deb/nordvpn/debian stable InRelease ヒット:10 https://packages.cloud.google.com/apt cloud-sdk InRelease ヒット:12 https://repo.steampowered.com/steam stable InRelease ヒット:13 http://security.ubuntu.com/ubuntu bionic-security InRelease 取得:14 https://cli-assets.heroku.com/branches/stable/apt ./ Packages [608 B] ヒット:16 http://archive.canonical.com/ubuntu bionic InRelease ヒット:17 http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu bionic InRelease ヒット:18 http://packages.microsoft.com/repos/code stable InRelease ヒット:19 http://apt.postgresql.org/pub/repos/apt bionic-pgdg InRelease ヒット:15 https://packagecloud.io/github/git-lfs/linuxmint tricia InRelease ヒット:21 http://ppa.launchpad.net/chrdevs/figma/ubuntu bionic InRelease ヒット:20 https://packagecloud.io/slacktechnologies/slack/debian jessie InRelease ヒット:22 http://ppa.launchpad.net/ethereum/ethereum/ubuntu bionic InRelease 取得:23 https://packages.stripe.dev/stripe-cli-debian-local stable InRelease [3,427 B] ヒット:24 http://ppa.launchpad.net/linuxuprising/java/ubuntu bionic InRelease ヒット:25 http://ppa.launchpad.net/obsproject/obs-studio/ubuntu bionic InRelease ヒット:26 http://ppa.launchpad.net/peek-developers/stable/ubuntu bionic InRelease ヒット:27 http://ppa.launchpad.net/xuzhen666/ppsspp/ubuntu bionic InRelease 6,585 B を 6秒 で取得しました (1,058 B/s) パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 パッケージはすべて最新です。
よいUbuntuライフを。
【Prisma】upsertがうまく動かないときに確認すること
おひさしどうもてぃです。
最近は個人開発で自分のshopだったりhomeブログだったり作っていて、あまり記事をアウトプットできてなかったので書きます。
いつも通り解決シリーズです。
環境
- NestJS 8.0.0
- Prisma client 4.0.0
NestJS × Prisma × GraphQLの構成です。
問題
Prismaのupsertで要求されるwhereの型にidしか表示されず、他の条件(たとえばemailとか)を入れたとしてもエラーを返されていました。
該当のコードはこちら。
import { Injectable } from '@nestjs/common' import { Prisma, User } from '@prisma/client' import { PrismaService } from '~/prisma/prisma.service' @Injectable() export class UsersService { constructor(private readonly prisma: PrismaService) {} // auth validateで使用 async findOrCreateBy(email: string): Promise<User> { return await this.prisma.user.upsert({ where: { email: email }, update: { email: email }, create: { email: email, name: 'test user' }, }) } }
ちな、Prisma公式を参考にしました。
上のままだと型のエラーが出ていたのでupsertの定義元の型を確認してみました。
すると…
/** * User upsert */ export type UserUpsertArgs = { /** * Select specific fields to fetch from the User * **/ select?: UserSelect | null /** * Choose, which related nodes to fetch as well. * **/ include?: UserInclude | null /** * The filter to search for the User to update in case it exists. * **/ where: UserWhereUniqueInput /** * In case the User found by the `where` argument doesn't exist, create a new User with this data. * **/ create: XOR<UserCreateInput, UserUncheckedCreateInput> /** * In case the User was found with the provided `where` argument, update it with this data. * **/ update: XOR<UserUpdateInput, UserUncheckedUpdateInput> } . . . export type UserWhereUniqueInput = { id?: string }
upsertのwhereに使われているのは UserWhereUniqueInput
で、この子を確認してみるとidしか型にない…
どういうこと!?
公式をもっとちゃんと見ましょう
そういうこと。
Upsertのところをもっとちゃんと見てみましょう。
↑のwhereのところに注目。
Wraps all unique fields of a model so that individual records can be selected
unique field
、これだわ。
もっとわかりやっすく書いてほしい…(切実)、せめて大文字とか。
解決
ということで、prisma.schemaにunique制約をかけて…
// User(ユーザー) model User { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid email String? @unique() @default("") phoneNumber String? @unique() @default("") @map("phone_number") companyName String? @default("") @map("company_name") address String? @default("") createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6) updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(6) }
マイグレーションをかければ
$ npx prisma migrate dev --name add_unique --skip-seed
UserWhereUniqueInput
がこんな感じになりました。
export type UserWhereUniqueInput = { id?: string email?: string phoneNumber?: string }
ちゃんとUnique制約つけたカラムが追加されてました。
【docker】dockerコマンドにサブコマンドのcomposeを導入する
どうもてぃ。
もてぃ家に新たに家族が増えました。可愛らしい男の子です。
そして新居も引き渡され、やっと落ち着いてきた次第。
環境
% cat /etc/os-release NAME="Linux Mint" VERSION="19.3 (Tricia)" ID=linuxmint ID_LIKE=ubuntu PRETTY_NAME="Linux Mint 19.3" VERSION_ID="19.3" HOME_URL="https://www.linuxmint.com/" SUPPORT_URL="https://forums.linuxmint.com/" BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/" PRIVACY_POLICY_URL="https://www.linuxmint.com/" VERSION_CODENAME=tricia UBUNTU_CODENAME=bionic % docker -v Docker version 20.10.7, build 20.10.7-0ubuntu5~18.04.3
github公式のインストールコマンドを実行
こちらを参考。
ま、結論から言えば失敗です。
% docker compose version docker: 'compose' is not a docker command. See 'docker --help'
docker V2公式ドキュメントを見る
自分はubuntuを使っているので、ここを参照。
まんまここに書いてる通りで上手く行きました。公式 is best.
% docker compose version Docker Compose version v2.2.3
【docker】コンテナの再起動を通知したい
どうもてぃです。
Herokuのようにインスタンスを定期的に再起動したい。そんなことを思ったことはありませんか?僕だけですか?
自社サービスをコンテナで動かしているのですが、原因不明でVMにアクセスできなくなり、VMを再起動しコンテナも同じく再起動する…といったかなり良くない運用方法で進めていたので、コンテナを定期的に再起動して対応してみました(主な原因としては、workerのコンテナでredisと突然接続できなくなるものでした)。
環境
slack-dockerを使用する
当初はcronでコンテナを再起動したあと、slack通知用にスクリプトを組もうと考えていて、cron実行ユーザー用に環境を作ろうか…と思いましたがめんどくさくなり、
「え、これもコンテナでよくね?なんかimageあるやろ」
と思いしらべたらすぐに見つかりました。
slack-dockerコンテナにホスト側のdockerプロセスを同期し、更に通知したいwebhook urlを渡してあげるだけで通知が完了します。
slackのincoming webhookのURLは↓
https://my.slack.com/services/new/incoming-webhook
URLが出てきたら以下のコマンドを実行する。
$ docker run -d -e webhook="上で作ったincoming webhook url" -h "$(hostname)" -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/int128/slack-docker
設定がうまくいくとchannelに通知が行きます
すばらしい...
IaaSでdockerを使う場合はこれを採用すると幸せになりますね(IaaSでコンテナ立てるのは微妙なんですがね)
【aws】vpcネットワークを作っていくメモ
VPCネットワーク
デフォルトVPC
設定名 | 設定内容 | 設定の割当最小単位 |
---|---|---|
VPC | デフォルトVPC全体のネットワークアドレス。範囲 172.31.0.0/16 | リージョン |
サブネット | 各AZに1つずつ設置。 [/20]のネットワークアドレスが割り当てられる。 | AZ |
ルートテーブル | VPCネットワークアドレス範囲内の通信はVPC内部へルーティング。それ以外はインターネットに向けたルーティング。 | サブネット |
インターネットゲートウェイ | インターネットへの接続用ゲートウェイが作成され、ルートテーブルに割り当てられている。 | VPC |
ネットワークACL | インバウンド・アウトバウンドともに全ての通信を許可 | サブネット |
セキュリティグループ | インバウンドは全ての通信を拒否、アウトバウンドは全ての通信を許可 | インスタンス |
- VPCネットワークアドレスは一度設定すると後から変更できないので注意
カスタムVPC
VPC → VPCを作成
で新規に作成する。
- テナンシーを専用にすると利用料が割高に
- 新規作成時、自動でルートテーブル・ネットワークACL・セキュリティグループが作成される
- EC2インスタンスでパブリックDNSを使用する場合は、DNSホスト名を有効化する
aws cli経由で作成
$ aws ec2 create-vpc --cidr-block 10.0.0.0/16 # Nameをつけたい場合 *******はVPC ID $ aws ec2 create-tags --resources vpc-*********** --tags Key=Name,Value=awscli # hostname 有効化 aws ec2 modify-vpc-attribute --vpc-id vpc-********* --enable-dns-hostnames
サブネット
大きなネットワークを複数の小さなネットワークに分割して管理する際の管理単位となるネットワークのこと。
VPC -> サブネット -> サブネット作成
で新規に作成する。
- ELBを作成する予定があるサブネットは余裕をもって
/24
以上のネットワーク範囲で作成すること
aws cli経由で作成
$ aws ec2 create-subnet --vpc-id vpc-*********** --availability-zone ap-northeast-1a --cidr-block 10.0.0.0/24 # tag Name作成(resource idは上記実行時に返ってくるsubnet-***********) $ aws ec2 create-tags --resources subnet-************ --tags Key=Name,Value=awscli
ルートテーブル
サブネット単位で設定することが出来る、サブネット内で稼働するEC2インスタンスのネットワークルーティングを制御する。
VPCネットワークを作成すると、自動的にルートテーブルも作成される。
VPC -> ルートテーブル -> ルートテーブルの作成
で新規に作成する。
aws cli経由で作成
$ aws ec2 create-route-table --vpc-id vpc-**************** # tag name $ aws ec2 create-tags --resources rtb-************* --tags Key=Name,Value=awscli
作成したサブネットとルートテーブルの関連付け
ルートテーブル -> 作成したルートテーブルを選択 -> サブネットの関連付け -> 編集 -> サブネットにチェック
でおk
作成したサブネットはVPC内の1つのルートテーブルに関連付ける必要がある。
- メインルートテーブルに自動的に関連付けされたサブネットはそのままにせず、明示的にルートテーブルと関連付けるようにする。
- メインルートテーブルを他のルートテーブルに変更した場合、明示的に関連付けていないサブネットは新たに設定したメインルートテーブルに関連付けられてしまい、それまで出来ていた通信ができなくなったり不要な通信が出来るようになったりする等の問題が発生するため。
- メインルートテーブルはできるだけ必要最低限のルーティング設定にしておく、VPCの内部通信のみ可能な設定から変更しないようにする
aws cli経由で作成
$ aws ec2 associate-route-table --route-table-id rtb-***************** --subnet-id subnet-******************
インターネットゲートウェイ
VPC内で稼働するEC2インスタンスがインターネットを通じて外部と通信する際に必要。EC2以外のリソースも同様で通信する際に必要。VPCごとに1つだけ紐付けが可能。
ルートテーブルのターゲットとして使用する。
VPC -> インターネットゲートウェイ -> インターネットゲートウェイの作成
で新規に作成する。
VPCと関連付ける
アクション -> VPCにアタッチ
で作成したVPCと関連付けられる。
aws cli経由で作成
$ aws ec2 create-internet-gateway # tag name(igw-******は上記実行時に取得) $ aws ec2 create-tags --resources igw-************ --tags Key=Name,Value=awscli-gateway # VPCへアタッチ $ aws ec2 attach-internet-gateway --internet-gateway-id igw-*********** --vpc-id vpc-**********
インターネットゲートウェイをルーティング先に指定する
aws cli経由で作成
# igw-*******/rtb-*********は先程作成したもの $ aws ec2 create-route --route-table-id rtb-*************** --destination-cidr-block 0.0.0.0/0 --gateway-id igw-***************** ````