これは何?
今年の自分はQiitaを始めとする発信に力を入れたいと思っている。
4月なので,目標を立てるにあたり,身近なライバルであるOrganizationsのメンバーのデータが取得したいと思い,スクリプトを書いた。
同じような用途に使いたい人の参考になれば幸いである。
半分はDenoを初めて触った人間の感想文なので注意。
できること
Organizationsを指定して実行し,フォローワーの多い順に並べて出力する。
GitHubのリポジトリで公開している。
docker compose run deno_app nri
Total members in nri organization: 140
Users ranked by follower count:
1. User: hoge, Followers: 1000
2. User: fuga, Followers: 900
3. User: hogehoge, Followers: 800
4. User: piyo, Followers: 700
5. User: fugafuga, Followers: 600
...
本当はContributionを取得したかったが,Qiita API v2がContributionの取得をサポートしていなかったのでフォロワー数を一旦取得してみた。
環境
Deno(TypeScript)を使ってみたかったので,選択した。
スクリプトの流れ
- 実行時の引数からorganizationを取得
- organizationからユーザ名のリストを作成
- Qiita APIを使い,各ユーザのフォロワー数を取得
- フォロワー順に並び替えて出力
詰まったところとか
Qiita API v2がOrganizationsのユーザを取得するAPIを持っていなかったので以下を参考に取得した。
Denoを使ってみての感想
- 現状
--allow-net
をつけないと外部ネットワークへ通信が飛ばせないみたいなDeno特有のセキュリティ機能はあまり使いみちが思いついていない。APIの向き先を.envなどで管理していて,localhostのつもりで外部に飛ばしてしまうみたいな事故は防げるとか? -
deno compile main.ts
するだけで依存関係が解決してコンパイルが終わるのめちゃくちゃ便利。これはdeno run
にもいえることだが,Dockerfileがめちゃくちゃすっきりする。FROM mcr.microsoft.com/devcontainers/base:bookworm AS devcontainers WORKDIR /app # install deno RUN curl -fsSL https://deno.land/install.sh | sudo DENO_INSTALL=/usr/local sh FROM devcontainers AS compile COPY . . WORKDIR /app/org_ranker RUN deno compile --allow-net --allow-env --allow-read --output main main.ts FROM gcr.io/distroless/cc-debian12:latest AS run COPY --from=compile /app/org_ranker/main /app/main ENTRYPOINT ["/app/main"]
-
deno fmt
でフォーマットできるとかdeno check
で型チェックできるのとか地味に嬉しい。自分は通常のVS CodeとVS Code Insider,Windsurfを使っていて,それぞれのIDEをちゃんと設定するのは面倒なのでコマンドラインでなんでもできると普通に助かる。 - taskは使いこなせていないが,普通に便利そうではある。長いコマンド覚えられないし。
- node.jsと大きく書き方が違うわけではないと感じたので,一旦Denoやってみようかなと思った。書籍とかサンプルは圧倒的にnode.jsの方が多いのでnode.jsでinputしてDenoでアウトプットしたい。
最後に
Deno試した日記みたいになってしまったが,あとから見返すには良いかなと思っている。
Denoをもう少し使い込んだらまとめて記事にしたい。