おはようございます、マイクです。
時刻は朝7時、1月5日、月曜日の朝ですね。ここからの時間は「zenncast」、今日もZennで話題になっているトレンド記事を、ゆるっと楽しくご紹介していきます。
今日はお便り紹介はお休みということで、そのぶんたっぷりと記事を掘り下げていきたいと思います。
さて本日は、全部で5本の記事をご紹介していきます。ブラウザ自作のお話から、Claude Codeの活用テク、次世代Python環境、そしてAIを使った学習ライブラリまで、かなり tech 濃度高めのラインナップです。
まず1本目。「ブラウザのレイアウトエンジンを自作してみた」という記事です。
これ、タイトルからしてロマンしかないんですが、筆者の方が「自作ブラウザを作りたい!」という長年の憧れの一環として、CSSのレイアウトエンジンをスクラッチ実装した、というお話です。Moonbitという言語を使って、ボックスモデル、Flex、Grid の「座標計算」部分を自作していて、Yoga や Rust 製の taffy、Stylo、Blitz なんかを参考にしつつも、あくまで互換ライブラリではなく「学習目的の自作」として設計されています。面白いのは、最初に taffy のテストを丸ごと移植して、BlockとFlexで9割以上テストを通したうえで、逆に「この挙動、taffyの方が仕様違反では?」というケースを見つけて報告までしているところ。学習目的がいつのまにかコミュニティ貢献にもなっているんですね。それから WPT というウェブ標準のテスト群を使って、flex / grid / overflow / position などを実装していきつつ、「縦書き」とか「display: table」みたいな難しいところは割り切って、実用的な範囲をカバーしています。パフォーマンス面でも、レンダーツリーを全部計算しなおさずに済むように Double Dirty Bit とキャッシュを使って、再レイアウトを7〜20倍ぐらい高速化したり、「外因サイズ」「内因サイズ」や CSS contain の理解を深めながらベンチマーク検証したりと、かなり本気の作り込みです。完成したエンジンは gzip 後で JS が80KB、WASMが130KB程度とコンパクトで、TUIフレームワークのレイアウトや、AI向けのアクセシビリティ強化、さらにCSS以外のフォーマットからレンダーツリーを起こすといった応用まで視野に入っているとのこと。ブラウザの中身に興味がある方には、「あ、最適化の裏側ってこうなってるんだ」という気づきがすごく得られる記事になっていますし、最後は「ブラウザ自作、やってみませんか?」と背中を押してくれる、読んでいてワクワクする内容でしたね。
。。。。
続いて2本目。「Claude Code の6つの拡張機能、結局どう使い分ければいいの?」という記事です。
Claude Codeを触っている方なら、「CLAUDE.md と .claude/rules と Skills と Sub-agents と MCP とカスタムコマンド……多くない?」って一度は思ったことがあると思います。この記事では、そのモヤモヤを「いつ読み込まれるか」と「誰が動くか」という2つの軸で、きれいに整理してくれています。まず CLAUDE.md は「常に効いている基本ルール」。プロジェクト全体のスタイルや方針はまずここに書くのがよさそうですね。 .claude/rules/ は「特定のパスや操作にだけ効く条件付きルール」。あるディレクトリ配下だけ別ルールにしたいときに使うポジションです。Skills は「Claudeが必要と判断したときに読み込む知識」。ライブラリのリファレンスや社内ドキュメントなど、ある程度まとまりのある知識を渡しておいて、必要になったら参照してもらう感じ。そして Sub-agents は「別コンテキストで動く専門家」的な存在で、重い処理や、別人格のエージェントを使い分けたいときにいい。MCP は外部サービス連携、データベースやIssueトラッカーとつなぐのが得意領域。最後にカスタムコマンドは「自分で手動実行するショートカット」で、定型作業をワンフレーズにまとめておくイメージです。迷ったときの判断フローも分かりやすくて、「外部サービスが必要ならMCP」「別コンテキストで動かしたいならSub-agent」「そうじゃなければClaude本体の知識やルールをどう拡張するかを考える」という順番で整理してくれています。最初から全部を使いこなそうとするのではなく、まずは CLAUDE.md から始めて、必要に応じて他を足していくのがオススメ、という現実的なアドバイスもありがたいですね。
。。。。
3本目。「uv, ruff, ty, marimoで作る!次世代のPython研究開発環境」という記事をご紹介します。
Pythonで研究開発している方、特にデータ分析や機械学習をやっている人には刺さる内容です。従来の pip + venv + black + flake8 + mypy + Jupyter Notebook という構成って、「動くんだけど、遅いし、設定も複雑だし、再現性も微妙…」という悩みがどうしても出てきますよね。この記事では、Rust製の高速ツール群と marimo という新しめのノートブック環境を組み合わせて、「速くて・きれいで・再現できる」研究開発環境を作ろうという提案がされています。まず uv は、仮想環境と依存解決を一元管理してくれるツールで、pyproject.toml と uv.lock ファイルを使うことで、他の人が環境を再現しやすくなるのがポイント。ruff は lint と format を兼ねた高速ツール、ty は型チェック担当で、VS Code と組み合わせると保存時に自動整形したり、リアルタイムでエラー表示をしてくれます。そしてJupyterの代わりに出てくる marimo。これがなかなかユニークで、ノートをひとつの .py ファイルとして保存できるのでそのまま Git 管理しやすく、セル同士の依存関係を見て、必要なセルだけ自動で再実行してくれる「リアクティブ実行」が特徴です。これによって、「さっきこのセルだけ書き換えたけど、下の結果が実は古いままだった…」みたいな、ノートブックあるあるの事故をかなり減らせる。さらに uvx と marimo の sandbox 機能を組み合わせることで、「この分析だけ使い捨て環境でサクッと試したい」とか、「実験ノートを共有したい」といったケースにも対応できます。研究者や学生の方が、先行研究の環境を再現しやすくなる、というのも大きなメリットとして語られていて、「Python環境、そろそろ一度棚卸ししたいな」という人にはとても参考になる構成になっています。
。。。。
4本目は、再びClaude Code関連。「Claude CodeのSkillsを確実に発動させる方法を色々試してみた」という記事です。
Claude CodeのSkillsって、本来は `.claude/skills/` 以下に定義しておけば、Claudeがいい感じに自律的に使ってくれる、という触れ込みなんですが、実際に使ってみると「思ったほど発動しない……?」という経験をされた方も多いんじゃないでしょうか。この記事の筆者も同じ疑問を持って検証していて、権限設定などを整えても、体感の発動率は25%ぐらいだったといいます。そこで登場するのが、UserPromptSubmit というフックを使った「強制評価」スクリプト。プロンプトをClaudeに送る前に、「必ずSkillを評価して、必要なら呼び出してね」という指示を挟むことで、発動率が大体84%ぐらいまで上がったという結果が紹介されています。とはいえ、それでもまだ確率的なブレが残る。一方で、プロジェクトルールを CLAUDE.md に直接「TDDで開発する」「必ずテストから書く」といった形で明示すると、そのワークフローはほぼ100%守られる、という対比が面白いところです。筆者は、Skillsの本来の価値を「チームで共有可能な、ちょっと複雑なワークフローの定義」に見出しています。たとえばTDDの各フェーズを、別々のサブエージェントに分担させる、みたいな高度な仕組みですね。ただし現状の自律発動にはまだ頼りきれないため、「確実にやってほしい基本ルールは CLAUDE.md に直書き」「チームで共有したい高度なフローは Skills + Forced Eval Hook を併用」という、現実解が提示されています。Claude Codeをチームでガチ運用したい人には、かなり実践的なナレッジが詰まった記事になっていました。
。。。。
そして5本目、最後は「NotebookLMで基本情報技術者試験の学習コンテンツを自動生成したら、YouTubeライクなライブラリができた話」という記事です。
これはAIと学習体験の掛け合わせとして、とてもワクワクする事例です。筆者の方は、通勤中に基本情報技術者試験の勉強ができるようにしたくて、Google NotebookLM を使って解説音声や動画を自動生成し、それを「YouTube風の学習ライブラリ」にまとめ上げています。フロントエンドは React と TypeScript、バックエンドは FastAPI、全体を Docker で動かす構成になっていて、所定のディレクトリに音声・動画ファイルとトランスクリプト、インフォグラフィックをポンと置くだけで、watchdog がそれを検知し、データベースへの登録、動画や画像サムネイルの生成、Podcast用のRSSへの追加、そしてWebライブラリへの表示まで全部自動でやってくれる仕掛けです。UIもちゃんと作り込まれていて、カードグリッドで一覧表示、検索機能、スマホでも使いやすいレスポンシブ対応。さらに、トランスクリプトと再生位置を同期させて、自動スクロールでハイライトしてくれるので、「ながら視聴」「ながら聞き」でも理解が追いつきやすい設計になっています。パフォーマンス面では、画像圧縮や動画サムネイル抽出で軽量化を図っていて、学習サービスとしての使い勝手もしっかり意識されていますね。また、NotebookLMで生成したコンテンツの著作権や、元記事の取り扱いなど、ライセンス面への配慮も丁寧に書かれていて、今後はカテゴリやタグ、プレイリスト機能、学習進捗の管理なども追加していきたいとのこと。AIを「一緒に勉強する相棒」として活用したい人には、実装アイデアの宝庫のような記事でした。
というわけで、今日は5本の記事をご紹介しました。
ブラウザのレイアウトエンジンを自作した話から、Claude Codeの拡張機能の整理とSkills活用の工夫、Rust製ツールとmarimoで作る次世代Python環境、そしてNotebookLMで作るYouTubeライクな学習ライブラリまで、幅広く、でもどれも「開発体験を一段上げる」ヒントにあふれた内容だったと思います。
気になった記事があれば、詳しいリンクやキーワードはショーノートにまとめてありますので、ぜひそちらから原文もチェックしてみてください。そしてこの番組「zenncast」へのご感想や、「こんなテーマを取り上げてほしい!」といったリクエストも、いつでもお待ちしています。
それでは、そろそろお別れの時間です。
今日も良い一日をお過ごしください。お相手はマイクでした。次回の「zenncast」でまたお会いしましょう。