なんでもノート

なんでも書くノートみたいなブログ

依存パッケージを更新することなくpackage.jsonとpackage-lock.jsonのversionを上げる

依存パッケージを更新することなくpackage.jsonとpackage-lock.jsonのversionを上げる方法をまとめる。

$ npm version patch

このコマンドでセマンティックバージョニングのパッチバージョンを上げることができる。versionが 1.0.0 だった場合、1.0.1 になる。1.0.1 というメッセージでgitのコミットが作成され、v1.0.1 というgitのタグが作成される。マイナーバージョンを上げたい場合はpatchをminorに、メジャーバージョンを上げたい場合はpatchをmajorにすればよい。コミットメッセージを指定したい場合は -m もしくは --message オプションをつければよい。

$ npm version patch -m "Upgrade to %s"

%s は該当バージョンに置き換えられる。

gitのタグを打ちたくない場合は、以下のように --no-git-tag-version をつける。

$ npm --no-git-tag-version patch

もしくは npm config コマンドでgit-tag-versionをfalseに設定して、npm version コマンドを実行する。

$ npm config set git-tag-version false

$ npm version patch

いずれの場合もpackage.jsonファイルとpackage-lock.jsonファイルのversionは変更されるが、コミットとタグは作成されない。

参考リンク:https://docs.npmjs.com/cli/v8/commands/npm-version

GitHub ActionsでNotionの日記ページを毎日作成する

タイトルにある通り、1日1ページNotionに日記を書いている。「YYYY/MM/DD(ddd)」というタイトルをつけているのだが、この入力が地味にめんどくさかった。「きょう」→変換→ 「(」→「つき」→変換→「)」という手順で入力していた。Notion APIを使ってみた - なんでもノート でNotion APIの使い方がわかったので、このページ作成を自動化することにした。

要件

  • 毎日NotionのDiaryデータベースにページを自動で作成する
  • タイトルは「YYYY/MM/DD(ddd)」
  • ページが既に作成済みであれば作成しない
    • 自分が翌日分を手動で作成することもあるため

開発

定期実行に今回はGitHub Actionsを利用することにした。リポジトリこちら

やったこと

感想

  • 自動化便利
  • Notion APIは前回以上のことをしていないのでコメントなし
  • GitHub Actionsは環境ごとにシークレットを作成できて便利
  • ワークフローのファイル名とnameをどんな風につければいいかまだわかってない

Notion APIを使ってみた

Notionでネットの記事の積読を管理している。積読の数が1000を超え、ノイズになっていたので一度全て断捨離することにした。

状況・やりたかったこと

  • Articleというデータベースで積読を管理
  • Read StatusというSelectカラムでステータス管理
    • 未設定:積読
    • Read:読んだ
    • Trash:やっぱ読むのをやめた、読まない
  • → Read Statusが未設定のページのRead StatusをTrashにする

1000以上のページを手動で変更するのはできなくはなかったが、せっかくなのでNotion APIを使ってみた。

developers.notion.com

やったこと

バッチ処理スクリプトの詳細

実行結果

以下、試しに2件更新してみたときのRTT。

Update took 684.6306619644165ms.
Update took 283.28467202186584ms.

以下、全件更新結果。

$ npm run start

> notion-article-batch@1.0.0 start
> node -r dotenv/config index.js

Sun Aug 14 2022 hh:mm:ss GMT+0900 (日本標準時) Update started.
Sun Aug 14 2022 hh:mm:ss GMT+0900 (日本標準時) 1055 pages updated. Update took 694149.2413560152ms.

特にエラーが出ることなく無事に全件更新された。

所感

  • ドキュメントが充実していてスムーズに開発できた
  • 深く考えていないが、ドキュメント、SDKAPIのI/F、API利用体験がよかったので好印象
  • もう1個Notion APIを使ったコードを書いたのでブログを書く

.gitconfigを整備した

git config --global コマンドで各種設定値を設定できる ~/.gitconfig ファイルを整備した。整備した .gitconfig ファイルは https://github.com/azujuuuuuun/dotfiles/blob/master/.gitconfig にpushした。変更前のファイルをコミットしていなかったので差分をこのブログに記録する。

変更前はuser, core, alias, credential, merge, pullを設定していた。mergeとpullはよく理解せずにその場しのぎで設定していた。

今回、Git - git-config Documentation を参照しつつ、設定を追加した。量が膨大だったのでよく使うコマンドを検索して、目についたものを設定した。fetchのpruneオプションが綺麗になったのがお気に入り。

変更前

[alias]
  fe = fetch -p

変更後

[alias]
  fe = fetch
[fetch]
  prune = true

GitHubでメールアドレスをプライベートにする

これでGitHubからマージや編集などのGitの操作をしたときのメールアドレスが ID+username@users.noreply.github.com になる。ローカルでしたコミットに紐づくメールアドレスも他のユーザーからわからないようにするために ID+username@users.noreply.github.com に変更する。

$ git config --global user.email "ID+username@users.noreply.github.com"

$ git config --global user.email
ID+username@users.noreply.github.com

参照:コミットメールアドレスを設定する - GitHub Docs

Node.jsのバージョン管理をVoltaに移行してみた

Nodeのバージョン管理にnodenvを利用していた。Voltaは良いと聞いていたが、面倒くさくて触ってこなかった。今更ながら重い腰を上げて移行してみた。

やったこと

nodenvのアンインストール

https://github.com/nodenv/nodenv#uninstalling-nodenv に書いてあることをした。アンインストール手順まで書いてあって親切。.zshrcにあった以下の行を削除。

eval "$(nodenv init -)"

以下のコマンドを実行。

$ rm -rf `nodenv root`
$ brew uninstall nodenv

無事にアンインストールが完了した。

Voltaのインストール

https://docs.volta.sh/guide/getting-started 通りにコマンドを実行した。

$ curl https://get.volta.sh | bash

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12319  100 12319    0     0  12221      0  0:00:01  0:00:01 --:--:-- 12233
  Installing latest version of Volta (1.0.8)
    Checking for existing Volta installation
    Fetching archive for macOS, version 1.0.8
######################################################################## 100.0%
    Creating directory layout
  Extracting Volta binaries and launchers
    Finished installation. Updating user profile settings.
Updating your Volta directory. This may take a few moments...
success: Setup complete. Open a new terminal to start using Volta!

以下の2つのexportコマンドが.zshrcに書き込まれた。

export VOLTA_HOME="$HOME/.volta"
export PATH="$VOLTA_HOME/bin:$PATH"

Nodeをインストール

$ volta install node@16
success: installed and set node@16.16.0 (with npm@8.11.0) as default

$ node -v
v16.16.0

$ which node
~/.volta/bin/node

最初のコマンドで2022/08/11現在、LTS版の16.16.0がインストールされた。インストールが速いと聞いていたが、確かに速かった。

Nodeのバージョンを固定

pinコマンドでNodeのバージョンを固定するらしい。

$ volta pin node
success: pinned node@16.16.0 (with npm@8.11.0) in package.json

$ git diff
diff --git a/package.json b/package.json
index d49efda..a026ba0 100644
--- a/package.json
+++ b/package.json
@@ -21,5 +21,8 @@
     "eslint": "8.21.0",
     "eslint-config-next": "12.2.4",
     "typescript": "4.7.4"
+  },
+  "volta": {
+    "node": "16.16.0"
   }
 }

package.jsonのvoltaフィールドにNodeのバージョンが書き込まれた。これでVoltaを利用していれば他のプロジェクトメンバーも同じNodeのバージョンで開発することができる。

ZodをNext.jsで使ってみた

最近、Zodという名前をTwitterでよく見かける。

github.com

TypeScriptファーストなスキーマベースのバリデーションライブラリらしい。試しにNext.jsのクエリパラメーターのバリデーションで使ってみた。

github.com

架空の検索結果ページのクエリパラメーターをバリデーションする想定で書いてみた。

パス

/search

クエリパラメーター

key名 必須 デフォルト値 取りうる値 対応するスキーマ
q 検索文字列 string 1文字以上の文字列 https://github.com/azujuuuuuun/try-zod-in-next/blob/main/src/model/search/search-query.ts
page ページ番号 number 1 正の整数 https://github.com/azujuuuuuun/try-zod-in-next/blob/main/src/model/search/page.ts
sort ソート順 string "recommend" "new", "recommend" https://github.com/azujuuuuuun/try-zod-in-next/blob/main/src/model/search/sort.ts

感想

  • 今回使ったスキーマは少ないが、他にも沢山のスキーマがあり表現力が豊か
  • バリデーションから型が推論されるので、バリデーション結果の型が信頼できる
  • メソッドチェーンのバリデーションでわかりやすい
  • サーバーサイドのパラメーターのバリデーションには十分使える