サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Wikipedia
blog.ojisan.io
Next.jsを初心者向けツールとして捉えている自分が、実践 Next.js を読んでみて2024-03-28 この記事は 実践 Next.js の書評です。 見本誌を頂いた上での記事です。(PR記事?) tl;dr App Router のメリットを理解しつつも、学習コストに割り合わないと思っている人にオススメ!ドキュメントを読めるようになるし、学習コストが下がる。 はじめに 自分はどちらかというと今の Next.js に対しては否定的な感情の割合の方が高く、仕事で困らない程度の最低限の知識しか持っていない。 しかし、なんだかんだ勉強の必要性に駆られていて、そのキャッチアップとして同書の発売を楽しみにしていた。 そんな折に @takepepe さんから見本誌をいただいたことで、この週末に読んだので書評を書きたい。 俺は今のNext.jsが好きではない 書評を書く前にポエム書かせてくれ!
定期的に DDD やクリーンアーキテクチャなどを題材にした記事が盛り上がっているのを見ていると、いま長年の疑問を書けば誰か答えてくれるのではと思って書いてみる。 何に困っているかというと、 いわゆるレポジトリ層が持つ create/update 関数の引数は Entity で待ち受けるべきか、プレーンなオブジェクトで待ち受けるべきか分からない ユーザーから POST Body されたデータにはビジネスルールを適用させるべきか(= 一度 Entity を作るべきか)分からない だ。 Entity を作らない場合、いわゆるトランザクションスクリプトと呼ばれているものに近づく。 そしてトランザクションスクリプトには結構否定的な意見も見られる。 しかし、自分は Entity を作ることが必ず正解とは思えず、レイヤードな設計とトランザクションスクリプトを組み合わせる設計の余地もあると思っていて、トラ
新規開発の設計支援や古いコードベースを甦らせて欲しいという相談をもらったときに、最初にちょろっとコードだけお手本的なコードを書いてから引き渡しているのだが、そのときに必ず結合テストを書くようにしている。 3, 4年前から僕と付き合いがある人からすると、 「「「あの sadnessOjisan がテストを書くだと!!!」」」 という感じだと思うのだが、最近はテストに思うところもあってちゃんと書いている。 そしてそのテストコードだが、基本的にはアプリケーションから分離して書いている。その話をしたい。 OGP OGP は野方ホープで海苔が分離されて出てきた時の画像だ。 アプリケーションから分離したテストとはどういうことか 最終的にはテスト対象のサーバーを Docker コンテナで固めて、そのコンテナに対して HTTP リクエストを投げてその結果や DB の中身を検証するコンテナを docker
どうも、仕事を納めてしまうと、何も予定がない人になってしまった人です... てなわけで、公式ドキュメント、リリースノート、信頼できる情報源全部読んじゃうぞという計画を立てました。計画倒れしないようにちゃんと読むことをブログで宣言します! 何をするのか マジでやること何もないので、日頃サボったプログラミングの勉強を一気にしようと思っている。「勉強していない」なんていうと「嘘つけ」と言われそうだが、いつも必要になったことをその都度調べて誤魔化しているだけであり、読むのは本や記事といった誰かの二次三次情報なので、実は一次情報には触れていない。なので以下に挙げるドキュメントは実はちゃんと読んだことがない。全て雰囲気で使っている。 そのため自分は歳の割には未知になっている範囲がとても多く(この構文ってフリーレンぽくてなんかかっこいいよね)、未知の未知にとても弱いため、わかっている人から見るとおかしな
fastify で 0 -> 1 することが年に何回かあるのだけど、その都度やり方を忘れて調べているのでメモしておく。 OGPはFastifyをコントロールしている人のイラスト by DALLEだ。 Routing をプラグインで表現する root ファイルで fastify.get("/users/:id", (req, res) => { res.status(200).send(""); }); のようにしてもいいけど、機能毎にモジュール化しておいた方があとでスケーリング効くので、ルーティングはモジュールとして定義したい。 そのためには FastifyPluginAsync を定義すればよく、 export const userFindRouter: FastifyPluginAsync = async (f, opts) => { f.get("/:id", {}, async (
転職ドラフトからオライリーの本たくさんもらったので欲しかったやつとりあえず全部読んでみた。 <pr> 紹介コード RVSC を使うとお互いにもらえるので気になる人は是非。 https://job-draft.jp/sign_up?utm_term=RVSC </pr> オブザーバビリティ・エンジニアリング 良い本。トレーシングやOpenTelemetryの本と思って買っていたが、実際はオブザーバビリティを確保するための色々な手法を紹介している。そのような手法が発達するまでの歴史の流れの解説も面白かった。従来のメトリクスとモニタリングだけでは現代の分散システムのデバッグが困難ということで、 オブザーバビリティ・エンジニアリングを導入する上での説得に使えそうな文言がたくさん散りばめられている。その手法の一つが、そもそも問題が起きてからデバッグのためにデバッガを挟み込んでデプロイしたくないという
宣伝 10/21 に rust.tokyo でカニさんタワーバトルという発表をする。その事前資料として axum の内部実装の解説を書いているのだが、その解説を読むためには axum の Router は tower の Service ということを知っておく必要があるので、そもそも Service とは何かという tower の導入記事を書く。 tl;dr Webサーバーはルーティング、認証、レートリミット、ロギングなどのmiddleware関数が積み重なったものと見做せる これらのmiddleware関数は Fn: (req: Request) -> Future<Response> と見做せ、そのmiddleware関数の中が別の関数を呼ぶことで積み重ねられる 関数の中にmiddleware関数をハードコートすると再利用性に乏しくスケーリングさせにくいので、Fn: (req: Req
ひょんとしたことから PHP をやることになったのですが、Laravel を コンテナでホスティングするのが難しすぎて困っています。とりあえず今できていることをメモです。こうした方が良いよ的なアドバイスがあったら教えて欲しいです。 ちなみに本当は昨日公開予定のブログでしたが、Xが急遽OGPに対する仕様を変えたのでそれを踏まえた新しいOGイメージでお送りします。 注意 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この文章は PHP + Laravel歴 1週間ちょっとのペーペーによって書かれたものです。apache も fastcgi も初見です。書かれている内容を間に受けないでください。 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ tl;dr Docker で動かす最小構成がわからないのですが、とりあえずこう書けば動きはします。 FROM php:8.2-f
はじめに とても前になるが、コグニカル というサイトが盛り上がっていた。 これは知識を体系的に記述されていて、分からない概念があればその概念の理解に必要な概念を逆引けるサイトだ。コンピュータ以外にも数学や理工学全般を学べる。 コメントを見ると、インターネットを使った学習で、自分の分からなかったことを辿れる学習や体系だっていることに対して価値を感じているようだ。「誰が何のためにどうやって作ったのか情報がぜんぜんなくて怖い」というコメントがあるが、同感だ。怖い。そして教育工学を専攻していた身としては地に足ついたアウトプットが人の役に立っていて羨ましくも思うし、尊敬する。 実はこのような教授手法は古くから研究されている。それは知識をネットワークで表現するだけでなく、個々人の学習履歴や成績を元に次に学ぶものを提案する方法も提案されている。コグニカルを知った時にその技術についてのブログを書こうと思っ
tl;dr 今ある選択肢で十分にHTTPサーバーを書ける 言語組み込みの機能のみでHTTPサーバーを書けるように、デザインされた言語はないと思う サーバー開発に特化した言語があってもいいのではとふと思った はじめに 最近いくつか新規開発をする機会があって言語の選定に頭を悩ませた。要件や状況やチームに応じて言語選択の正解は変わるとは思うので、現実に合わせて妥協するしかないのだが、選択に際してそもそも HTTP サーバーを書くことを意識して設計された言語がないような気がした。いま自分達がHTTPサーバーを作れているのは、汎用プログラミング言語とエコシステムの力、そして開発者の取捨選択と創意工夫のおかげだと思う。それで十分に間に合っていると思う。 なのにどうしてHTTPサーバー用の言語があるかどうかを気にするかと言うと、サードパーティのエコシステムに頼りたくないからだ。それは長期的なメンテナンス
飲み会で「お前、次の転職どうするよ?」的な話をするときはいつも これまでは自分が一番下手くそなバンドメンバーになれる職場を意図的に探していたし、今の職場もその基準で選んだが、そろそろ俺の音楽をやりたい プログラミングそのものをドメインとした仕事をしたい ドキュメントやチュートリアルの整備をしたい。あわよくば今 blog.ojisan.io を書いていること自体が仕事になるようなことをしたい 的なことを言っている(はず、アルコールが入っているので記憶が定かでない)。 で、この最後の 「ドキュメントやチュートリアルの整備をしたい」というのはここ1年くらい言っている気がするのだが、そろそろ本当に動き出そうと思って最近ふわふわ考えていることを書いてみようと思う。そういう仕事をしている人の目に止まってくれると嬉しい。 どうしてドキュメントを書くような仕事をしたいのか いまこういったブログを運営してい
クソコードを読ませない💩 https://uit.connpass.com/event/291443/ 免責事項 「クソコードという言葉を使うな」と思った人、いると思います。 攻撃的で、解像度も荒くて、建設的でない言葉だと私は思っています。 一方で、目にすることも多い言葉であり、具体例に関してはふわりとした共通認識が持たれているのと、そういったコードに対するダメージコントロールの話なので、便宜上クソコードという言葉を使います。とあるソースコードに対してクソコードと呼ぶのはよくないですが、クソコードという概念そのものについて話すことに対しては有益だと思います。 自己紹介 sadnessOjisan JS/TS, Rust, 最近 Go, PHP マイブーム: 優光というラーメン屋 クソコードとは何か クソコードとは何でしょうか? 知りません。 インターネットミーム? https://tog
コンテナでサーバーを動かして、それに対するリクエストをするE2Eテストを GitHub Actions 上で動かすことに苦労したので書く。 成果物repo: https://github.com/sadnessOjisan/e2e-gha お題となるサーバー コンテナに固めるから別に何言語でも良いので、まずはちょっとしたエコーサーバーを書いてみよう。 import Fastify from "fastify"; const fastify = Fastify({ logger: true, }); fastify.get("/", async function handler(req, res) { const q = req.query["q"]; res .status(200) .headers({ "content-type": "application/json", }) .se
「private 関数にはテストを書かない」というのが多数派だと思う。だが昨日、仕事で In-source testing を書いていたらふと private 関数にテストを書きたくなった。そこで、In-source testingができる環境下でもprivate 関数にテストを書くべきかを X で聞いてみたら何か盛り上がっていた。 (In-source Testing: https://vitest.dev/guide/in-source.html) 反応を見る限り、やはり「private 関数にはテストを書かない」の方が主流だった。Kent Beck先生の http://shoulditestprivatemethods.com を紹介するツイートにもそういった反応が寄せられていた。(ぶんぶんさん、教えてくれてありがとうございます。) (このサイト面白すぎますよね・・・) 自分の立場を
axum を始め、tower 系列でサーバーを作っているといくらでも例が出てきそうな話ではあるが、「ちょっと君、明日からRust でトレーシングしたまえ」って言われた時に欲しいまとまった情報は意外とない気がしたので書く。 基本的に tower 系列や、tower に準ずる様な Service トレイトを持つ様なFWであれば同じ様な話であり、tracing crate 自体は Agnostic なものなので、ここでは axum を例にあげて書く。 axum と tracing subscriber まず、簡単に HTML を返すサーバーを作る。 use axum::{response::Html, Router}; use std::net::SocketAddr; #[tokio::main] async fn main() { let app = Router::new().route(
Rust でWebサーバーを書く時の技術選定をするときに調べていると hyper に必ず出会うと思う。これは黎明期から存在しているライブラリで、Webサーバーにしては珍しく version 1 まで到達している老舗だ(1に到達してたら安心って考え方が正しいかはさておき...)。このライブラリは actix-web や axum のような他のライブラリとは毛色が違い、かなり primitive だ。そのため axum のベースに使われてもいて、hyper はそのまま使わないライブラリなのかもしれない。 サンプルコードから存在意義がわかりにくい さて、そんな hyper だが公式の example はこのようになっている。 #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>>
OGPは白川郷だ。石川県に住んでいたときよく白山白川郷ホワイトロードをドライブして遊びに行っていた。早くに閉まるから帰りは富山側に出て日本海側で美味しい魚を食べて石川に戻っていた。あのときは楽しかったなぁ。 今年、ISUCONに挑戦するつもりの夏休みの過ごし方をしているので Go の勉強を始めた。自分には既にNode.js とRustが Main/Sub weaponになっているので、別にISUCON向けに勉強しなくていいと思っていたが、どうも上位勢は軒並みGoっていうのと、彼らの解法ブログを読み解くためにはGoをやっていた方がよさそうだったのでGoの勉強を始めた。 ちなみにGoは生涯で3行しか書いたことがない(うち2行はHTMLテンプレート)生粋の素人だ。いや正確には遥か昔に勉強に挑戦したことがあって本を一冊買った覚えはあるが、A Tour of Go の冒頭で「ほぇ〜大文字でexpor
一昨日くらいに 「DIP してもどうせ辛くなるよね」的なことを適当にツイートしたら引用 RT や RT 後言及やエアリプで言及された上に「こいつは設計を何も理解しとらん」みたいなことを言われた。「俺は本当に何も理解していないのか?」と不安になったので、自分の考えをちゃんと書いておこうと思った。先に自分の立場を言うと、なんたらアーキテクチャとか SOLID 原則は有用だし自分も使うが、それを厳守しようとは思っていないと言う立場だ。 DIP とはなんだったか DIP(依存性逆転の原則)は SOLID 原則の一つで、一言で言うと「抽象に依存させると依存関係が逆転する」といったものだ。何のことやらという風になるので例だけ挙げると、UserRepository と UserService があってこのように定義すると class UserRepository { get() { return dat
この前ポジショントークしたらそれなりに反響があったので書いてみる。 これまでの人生を振り返ると毎年ラジオや電話や配信サービスを作っている気がするし、なんかそういう仕事が回ってくることが多い気がする。 最近自分なりに答えが出たかなと思ったことがあるので言語化してみようと思う。 OGP は Flux ぽい画像だ。 注意・免責事項 ここにあるソースコードは不完全です。これは私が元々手元で実験していたボイラープレートであるとはいえ、いろんな仕事で培ったノウハウ的なものも含まれているので、念には念を入れて意図的に要件が透けそうな箇所は削除しています。 その結果元々のボイラープレートと乖離してしまい、動作しないコードになっています。ただ概念を伝えるには十分なコードになっているはずなので、脳内補完してください。質問は Twitter のメンション、もしくは Issue でのみ受け付けます。 (完全版を書
先日 フロントエンドの Monorepo をやめてリポジトリ分割したワケ というブログがバズっていた。そのおかげか、Twitter でもモノレポに関する言及がちょこちょこあった。一家言あるドメインなので書きたい。ただの一家言(a.k.a お気持ち)なのでぜひ皆さんの意見も聞いてみたい。 tl;dr 別に自分はどっち派とかではなく、どっちも選ぶ。強いて言うならリポジトリ分割派で、依存更新がしんどくなったら monorepo 派。 免責 モノレポに対する一家言を書きたいだけであって、内容自体はフロントエンドの Monorepo をやめてリポジトリ分割したワケ と全く関係なく、そのブログで述べられている施策については何も言及しません。ただ一つ言及するとしたら肉の部位がコードネームに採用されているのは良いと思いました。🍖🍖🍖 モノレポにしたくなる状態の前提にあるもの 前提は元記事と同じように
次のページ
このページを最初にブックマークしてみませんか?
『blog.ojisan.io』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く