clapを使って、Subcommandをネストする

やりたいこと

こういう感じで、hoge <subcommand> <sub-subcommand>なCLIを作りたかった。

hoge fuga piyo

こうすれば行けた

clapのCookbookを読めば解決した。

docs.rs

最小構成はこうなった。

use clap::{Args, Parser, Subcommand};

#[derive(Parser, Debug)]
#[command(name = "hoge")]
struct Cli {
    #[command(subcommand)]
    command: HogeCommands,
}

#[derive(Debug, Subcommand)]
enum HogeCommands {
    Fuga(FugaArgs),
}

#[derive(Debug, Args)]
struct FugaArgs {
    #[command(subcommand)]
    command: FugaCommands,
}

#[derive(Debug, Subcommand)]
enum FugaCommands {
    Piyo,
}

fn main() {
    let args = Cli::parse();

    match args.command {
        HogeCommands::Fuga(fuga_args) => match fuga_args.command {
            FugaCommands::Piyo => {
                println!("piyo");
            }
        },
    }
}

helpコマンドを実行してみる

./target/debug/hoge
Usage: hoge <COMMAND>

Commands:
  fuga
  help  Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help
./target/debug/hoge fuga
Usage: hoge fuga <COMMAND>

Commands:
  piyo
  help  Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help
./target/debug/hoge fuga piyo --help
Usage: hoge fuga piyo

Options:
  -h, --help  Print help

Learn Next.jsをやる - Chapter1 Getting Started

やること

nextjs.org

プロジェクトの初期化

npx create-next-app@latest nextjs-dashboard --use-npm --example "https://github.com/vercel/next-learn/tree/main/dashboard/starter-example"

Voltaでnodenpmのバージョンを固定する

ローカルのNode.jsはVoltaでバージョン管理をしているので、volta pinを使ってNode.jsとNpmのバージョンを固定する。

volta pin node && volta pin npm

さよならESLint、さよならPrettier、こんにちはBiome

最近ESLintとPrettierを卒業してBiomeの傘下に下ったので、

  1. ESLintとPrettierをアンインストール
  2. 代わりにBiomeをインストール
npm uninstall eslint eslint-config-next eslint-config-prettier prettier prettier-plugin-tailwindcss
npm install -D @biomejs/biome

そしてbiome.jsonを作る

npx biome init

具体的なbiome.jsonの設定はこれを使わせてもらう。

github.com

初期化後のディレクトリ構造を読む。

  • とりあえず、ビジネスロジックやらUIやら、アプリケーションに含まれるものは/appに入れればいいみたい。
  • 画像とかの静的アセットは/publicに入れるらしい。
  • DBのシードとかは/scriptsに入れてる(これはこのプロジェクト限定かな?)

Placeholder data

DBのデータがまだ用意できてない時に、固定データを用意する話。

mockAPIというサービスが紹介されているが、他にはどんな手段あるんだろう?

TypeScript

まぁ...勉強する...

Running the development server

こういうのはプロジェクト初期化後に一度チェックしておかないと、ローカル環境がイカれてるのか自分の独自設定がイカれてるのかわからなくなるよね。

[Rust] Arc

勉強した内容

Arc

doc.rust-lang.org

  • スレッドセーフに使えるリファレンスカウンタ。
  • ヒープに確保したデータを、スレッド間で共有できる様になる。
  • std::sync::Arc::clone()Arcのインスタンスを作ると、カウントが1増える。
  • カウントがゼロになると、ヒープに格納したデータを破棄してメモリを解放する。
  • Arcを単独で使って共有できるのはあくまで不変参照なので、可変参照が必要ならMutexRwLockAtomicを使う。
  • Rcよりもメモリアクセスのコストがデカいので、あえてArcを使いたい意図がない場合はRcを使ったほうがいいらしい。

[新人研修系]後で読みたい記事まとめ(随時更新)

これ何

Twitterやブラウザで自分がブックマークした記事のまとめ

企業が公開している新人研修系の記事が中心

記事貼ってく

speakerdeck.com

blog.recruit.co.jp

github.com

qiita.com

speakerdeck.com

t.co

speakerdeck.com

qiita.com

speakerdeck.com

[フロントエンド全般]後で読みたい記事まとめ(随時更新)

これ何

Twitterやブラウザで自分がブックマークした記事のまとめ

フロントエンド全般が中心

記事を貼っていく

General

blog.cybozu.io

github.com

zenn.dev

note.com

speakerdeck.com

www.patterns.dev

www.estie.jp

colorandcontrast.com

React

www.joshwcomeau.com

www.joshwcomeau.com

dev.to

eh-career.com

https://mafs.dev

dackdive.hateblo.jp

tech-blog.rakus.co.jp

enakai00.hatenablog.com

hello.shelfy.co.jp

zenn.dev

alexsidorenko.com

react.dev

zenn.dev

github.com

github.com

github.com

speakerdeck.com

zenn.dev

qiita.com

blog.uhy.ooo

zenn.dev

zenn.dev

zenn.dev

Next.js

zenn.dev

pixelpoint.io

github.com

inside.pixiv.blog

speakerdeck.com

Vue.js

speakerdeck.com

Bundler

speakerdeck.com

zenn.dev

Testing

blog.cybozu.io

speakerdeck.com

speakerdeck.com

blog.cybozu.io

qiita.com

speakerdeck.com

https://t.co/ZF2d62z6pn

developers.prtimes.jp

blog.hatena.ne.jp

goyoki.hatenablog.com

zenn.dev

speakerdeck.com

storybook.js.org

speakerdeck.com

Figma

note.com

Security

tech.basicinc.jp

zenn.dev

www.itmedia.co.jp

blog.ojisan.io

securityzines.com

speakerdeck.com

tech.basicinc.jp

www.ietf.org

www.docswell.com

UI/UX

note.com

ui.shadcn.com

https://t.co/84mjJ2Le7q

landings.dev

t.co

t.co

medium.com

qiita.com

coliss.com

note.com

learn.microsoft.com

bootcamp.uxdesign.cc

www.freecodecamp.org

Caching

techblog.yahoo.co.jp

zenn.dev

Performance

engineering.linecorp.com

coliss.com

qiita.com

upwrite.jp

ics.media

Accessibility

www.digital.go.jp

zenn.dev

zenn.dev

sustain-growth.d-zero.co.jp

Design System

thedesignsystem.guide

https://design.gs.com/

pixiv.github.io

www.digital.go.jp

note.com

note.com

www.figma.com

smarthr.design

[Rust]後で読みたい記事まとめ(随時更新)

これ何

Twitterやブラウザで自分がブックマークした記事のまとめ

Rust周りが中心

記事貼ってく

github.com

github.com

blog.cardina1.red

flakm.github.io

litchipi.github.io

qnighy.hatenablog.com

app.gitbook.com

www.bioerrorlog.work

github.com

zenn.dev

caddi.tech

eh-career.com

google.github.io

marabos.nl

rauljordan.com

techblog.paild.co.jp

techblog.paild.co.jp

[アルゴリズム系] 後で読みたい記事まとめ(随時更新)

これ何

Twitterやブラウザで自分がブックマークした記事のまとめ

アルゴリズム周りが中心

記事貼ってく

noshi91.github.io

atcoder.jp

みんなのデータ構造www.lambdanote.com

[HTML/CSS]後で読みたい記事まとめ(随時更新)

これ何

Twitterやブラウザで自分がブックマークした記事のまとめ

HTMLやCSSなどが中心

記事を貼っていく

yamanoku.net

ics.media

baigie.me

coliss.com

coliss.com

coliss.com

developer.mozilla.org

zenn.dev

web.dev

speakerdeck.com

goodpatch.com

coliss.com

itokoba.com

sociomedia.co.jp

gist.github.com

gihyo.jp

sustain-growth.d-zero.co.jp

buildstd.com

javascript.plainenglish.io

moderncss.dev

developer.chrome.com

speakerdeck.com

www.smashingmagazine.com

azukiazusa.dev

medium.com

coliss.com

ics.media

web.dev

liginc.co.jp

photoshopvip.net

[DB/SQL]後で読みたい記事まとめ(随時更新)

これ何

Twitterやブラウザで自分がブックマークした記事のまとめ

RDBMSやNoSQL、SQLなどが中心

記事貼ってく

General

speakerdeck.com

hiro-gamo.hatenablog.com

t.co

twitter.com

fauna.com

qiita.com

matsuu.hatenablog.com

zenn.dev

zenn.dev

speakerdeck.com

PostgreSQL

speakerdeck.com

www.prequel.co

postd.cc

SQLite

fly.io

Redis

redis.com

MySQL

stevestedman.com