ikarigata
shihashi200.bsky.social
ikarigata
@shihashi200.bsky.social
エンジニアです
振り返り用に学習の過程を残していきます
impl from for T
と書くとき、UかTのどちらかが同じクレートにいればいいのか…!
なんでそういうルールなのかまでは理解しきれてないが、一旦これが合法というのは理解したぞ

chatgpt.com/share/6766a2...
ChatGPT - Rustのimplブロック拡張方法
Shared via ChatGPT
chatgpt.com
December 21, 2024 at 11:14 AM
5.2.7節でやってるapi層でリクエストをマッピングしたモデルからkernel層用のモデルへの変換、kernel層で定義されたstructに対して別のクレートから実装追加だけしてるように見えて『?』となっている
そんなことできるのか
chatgpt曰く孤立型ルールに抵触するからダメと
よく分からない。。
December 21, 2024 at 10:52 AM
2章でMakefile.tomlの理解でめちゃくちゃ躓いてた自分に教えてやりたい、5章の頭でだいぶ強めの補足があるぞ
December 21, 2024 at 9:09 AM
4章内容をdevにマージしようとしたら
githubactionsの未使用の依存関係チェックで怒られた
adapterレイヤーのanyhowの依存、確かに足したけど使ってないな

章単位でブランチ切って各章終わったらdevにマージしていくという進め方をしていたけど、そもそもそんなこと想定されていない気がするしこれで詰まるのもしょうもないな…
December 21, 2024 at 5:07 AM
4章の内容を一通り写経してcargo checkしたらまたバージョン違い系のエラーだ
これはrustcのバージョンを上げずに再現するには毎回書籍のリポジトリからcargo.lockをこぴってこないといけないのか…?
December 21, 2024 at 3:55 AM
#rustによるwebアプリケーション開発
4章の写経をしていたらp.88でadapter(リポジトリ)がkernel(サービス)に依存しだして『レイヤードアーキテクチャは上位⇒下位の依存なんじゃないの…?』となったが、サービスまでは上位から下位でリポジトリとの関係はDIPで下から上の依存、みたいなのが一般的、という学びを得た
December 21, 2024 at 2:21 AM
スマホからでも開発したい、がgithub codespaceのvscode表示はスマホではキツイ、ということでtermuxでgithubcli使ってsshでcodespace環境を操作する方法を習得した
November 27, 2024 at 12:10 PM
生成されたcargo.lockファイルに差分がありまくりだったのて著者が公開してるリポジトリの内容に揃えたらビルドエラー治った….!
rustのバージョンは揃えてた気がするけどなんでなんだろう
が一旦解決したので今度こそ4章にすすむ
#rustによるWebアプリケーション開発
November 25, 2024 at 2:36 PM
著者の人がgithubに上げてくれるソースと比べて差分一つずつ潰してくみたいなやつやるか…
それでも解決できなかったら一旦全リセットかな
November 24, 2024 at 7:06 AM
第3章の終わり=デプロイパイプラインの構築まですすんだ
cargo make でめちゃくちゃ設定しておいたことによってgithub actionsのワークフローのyamlの記載もシンプル&何やってるか分かり易くて嬉しいな

とか思いながら3章分のブランチ⇒devへのプルリクエスト発行したら
さっきローカルで起きたのと同じエラーだ…
November 24, 2024 at 6:40 AM
idnaのunstableなfeatureを使おうとしてる云々が一生で続けるので
rustcのバージョンを最新のnightlyにしてtargetも全消ししてビルドし直したらなぜか治った…なに
調べても特に同じところで詰まってる人はいなかったから環境構築周りでそもそも何かミスってる可能性もあるが一旦解決したのです進む。。
November 24, 2024 at 5:51 AM
『RustによるWebアプリケーション開発』、p.59のDB接続のユニットテストを追加した瞬間に謎のエラーですすめなくなった…

vscodeでプロシージャルマクロが云々で怒られるから
settings.jsonに以下追加して赤線は消したが、結局ビルドは通らずだ

"rust-analyzer.procMacro.enable": true

idnaってなんだ……
November 24, 2024 at 2:25 AM
だから↓みたいなアプリ上で長く保持しておきたい設定データをまとめるような構造体ではStringでもたせると。。

let mut database_config = DatabaseConfig {
host: "localhost".into(),
port: 5432,
username: "user".into(),
password: "pass".into(),
database: "app".into(),
};

chatgpt.com/share/67409c...
ChatGPT
A conversational AI system that listens, learns, and challenges
chatgpt.com
November 22, 2024 at 2:59 PM
Stringと&strの使い分け、なんとなくわかってきたぞ…
文字列リテラルのままだと所有権は借りてるだけだから
リテラルのスコープが切れたら使えなくなっちゃうと
だから一回into()でString変換して自分で所有権を持たせてあげると
November 22, 2024 at 2:57 PM
rust、メソッドの引数でも型で縛りつつ分割代入みたいなことができるのとても便利っぽいな…

rustを推す時によく使われる「強力なパターンマッチ」というフレーズよく分かってなかったけど、こういうところもか
November 22, 2024 at 7:37 AM
axumのwith_stateでハンドラ間でコネクションプールを共有できる、という記述を見て『ルーターの定義全部にそれ書くの面倒では?』と思って訊いたら
当然のように回答があった

親ルーターに一度だけ定義してそれ以外はその子ルーターとする、と。。

chatgpt.com/share/67400b...
ChatGPT
A conversational AI system that listens, learns, and challenges
chatgpt.com
November 22, 2024 at 4:44 AM
port以外のPgConnectOptionsのhostメソッドとかは引数が文字列スライスだからか
Stringがヒープに置かれた文字列の実体で&strがその参照、と。。
戻り値で新しい文字列を生成したときはStringで所有権ごと返して
引数で受け取る時はリテラル文字列もStringの参照も扱える&strが多いと。。
リテラル文字列の実体は& 'static str である、と。。
November 22, 2024 at 4:38 AM
この&ついたりつかなかったりするのなんだ…?????
portだけu16フィールドだから?

fn from(cfg: DatabaseConfig) -> Self {
Self::new()
.host(&cfg.host)
.port(cfg.port)
.username(&cfg.username)
.password(&cfg.password)
.database(&cfg.database)
}
November 22, 2024 at 4:22 AM
Fromトレイト、最初はその書き方なんやねんと思ったけど
モデルの変換ロジックは変換先の都合にそもそも依存しやすいから、変換先側に対して実装するのは自然なことなのかも、という理解をした

into()で実際にどう変換されるかは文脈で判断してくれるのもよい
November 22, 2024 at 4:21 AM
ユニットテストコードを描いてみよう、まですすんだ
知らないことが多すぎてどうしても牛歩になるなぁ

git運用とかブランチ操作にも慣れたいので章単位でブランチ切って日々はそこにコミット+都度都度devにマージという形にしてみる
November 22, 2024 at 3:54 AM
rustも初心者なので戻り値の型にResult<()>とあるのなに、となった
・エラー処理を簡潔に行うために?演算子を使いたい
・?演算子で早期リターンするためには戻り値の型をResult型にしておく必要がある
・ただ実際に戻り値を使いたいわけではない
・成功時の型を空のタプルにすることで何も返さないことを明示
ということなんだ
November 22, 2024 at 3:28 AM