diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index 954bfdf..f9a2634 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -64,7 +64,9 @@ export default async function BlogPostPage({

{frontmatter.title}

-

{frontmatter.description}

+

+ {frontmatter.description} +

{frontmatter.tags?.length ? ( diff --git a/app/blog/page.tsx b/app/blog/page.tsx index 31e93c3..36bd3b7 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -15,7 +15,7 @@ export default async function BlogIndexPage() {

Blog

-

+

Thoughts, notes, and experiments.

@@ -31,7 +31,7 @@ export default async function BlogIndexPage() {

{post.frontmatter.title}

-

+

{post.frontmatter.description}

diff --git a/app/globals.css b/app/globals.css index fe1aeda..505ace3 100644 --- a/app/globals.css +++ b/app/globals.css @@ -36,33 +36,33 @@ } .dark { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; + --background: 222 20% 11%; + --foreground: 210 20% 92%; - --card: 222.2 84% 4.9%; - --card-foreground: 210 40% 98%; + --card: 222 20% 13%; + --card-foreground: 210 20% 92%; - --popover: 222.2 84% 4.9%; - --popover-foreground: 210 40% 98%; + --popover: 222 20% 13%; + --popover-foreground: 210 20% 92%; - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 11.2%; + --primary: 210 30% 90%; + --primary-foreground: 222 20% 16%; - --secondary: 217.2 32.6% 17.5%; - --secondary-foreground: 210 40% 98%; + --secondary: 220 18% 20%; + --secondary-foreground: 210 20% 90%; - --muted: 217.2 32.6% 17.5%; - --muted-foreground: 215 20.2% 65.1%; + --muted: 220 16% 18%; + --muted-foreground: 215 14% 72%; - --accent: 217.2 32.6% 17.5%; - --accent-foreground: 210 40% 98%; + --accent: 220 18% 22%; + --accent-foreground: 210 20% 90%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 210 40% 98%; + --destructive: 0 58% 38%; + --destructive-foreground: 210 20% 92%; - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; - --ring: 212.7 26.8% 83.9%; + --border: 220 15% 24%; + --input: 220 15% 24%; + --ring: 215 18% 70%; } } @@ -74,3 +74,27 @@ @apply bg-background text-foreground; } } + +@layer components { + section[data-footnotes] { + font-size: 0.875rem; + line-height: 1.6; + } + + section[data-footnotes] ol { + list-style: decimal; + padding-left: 1.5rem; + } + + section[data-footnotes] li { + margin-top: 0.5rem; + } + + section[data-footnotes] li::marker { + color: hsl(var(--muted-foreground)); + } + + section[data-footnotes] p { + display: inline; + } +} diff --git a/content/blog/2025-review.mdx b/content/blog/2025-review.mdx new file mode 100644 index 0000000..02b21fe --- /dev/null +++ b/content/blog/2025-review.mdx @@ -0,0 +1,45 @@ +--- +title: "2025年の振り返り" +description: "社会人2年目" +date: "2026-02-11" +tags: ["2025", "振り返り"] +status: "published" +--- + +年末年始ドタバタしていたのもあり、 +書けていなかったのでこのタイミングだが2025年を振り返る。 + +# 仕事 +新卒2年目の年。あっという間なもので、2022年の冬に今の会社でインターンを始めてから、気がつけば3年が経つ。 +年の頭から明確にチームを率いるポジションにアサインされ、四苦八苦しながらも進めてきた。メンバーにも恵まれて感謝の日々である。 + +上半期には社内で[RubyKaigi 2025](https://rubykaigi.org/2025/)に向けたBootcampを主催した。登壇者を社内で募りながら企画を行い、自分はCRubyそのものの全体像の話と、YARVの話だったりYJITの話をした。「Rubykaigi参加する前にこれなかったらやばかったですよ」と、参加者からも比較的好評だったようで、改めてやって良かったなと思う。(今年も下の代が引き継いでBootcampを開催するようで、とても楽しみである。)[^1] + +自身の担当領域的なところでいくと、ここ2年くらいはWebだけでなくモバイルアプリの開発にも携わっている。お世話になった前任の方が退職されたので(この方には入社時から本当にお世話になり、感謝してもしきれない)、年の半ばごろからはモバイルアプリチームのリードもすることになった。元々持っていたWeb側のチームと合わせて実質2チームを引っ張る形だったので、ハードではあったが大きなトラブルもなく進められたのはよかった。 + +年末には育休を取得してお休みをいただいた。幸いなことに社内のサポートも手厚く、初めてで不慣れな中でも相談に乗ってくれた社長やマネージャー陣・バックオフィスの方々には感謝しかない。チームメンバーにも不在の間迷惑をかけたと思う。改めてサポートしていただいたみなさん、本当にありがとうございました。 + + +# 私生活 +## 子育て +秋に子供が生まれた。まず何よりも、辛い妊娠期間や出産を乗り越えてくれた奥さんには頭が上がらない。本当にありがとう。幸いなことに出産の場に立ち会えて、我が子の誕生をこの目で見られたのはグッとくるものがあった(妻によるとしっかり泣いていたらしい)。 + + +ドタバタした生活ではあるが、仕事もしばらくはフルリモートにしてちょっとずつルーティーンが固まってきてはいる。毎日の沐浴だったりミルク・おむつ替えなどを通じて子供の成長を見られるのが、日々の生き甲斐であり楽しみでもある。 +結婚した時も感じたことではあるが、守るべきかけがえのない存在がいるということを改めて実感しながら、過ぎ去る時間もこれからの時間も大切に生きてきたい。 + +## OSS +業務に関連するものではあるが、[Flutter](https://flutter.dev/)公式ルーティングパッケージである[go_router](https://pub.dev/packages/go_router)のディープリンクまわりでトラブルを引いたので、パッチを送ったところ、スッと取り込んでもらえた。Androidのコールドスタート時にのみ起こるニッチなものの、直せたのは良かった。 + + +[[go_router] Fix Android Cold Start deep link with empty path losing scheme and authority.](https://github.com/flutter/packages/pull/9868) + +ルーティングのデファクト的な立ち位置でもあり、そこそこ利用者の多いパッケージではあるので、自分の修正が[リリースノート](https://pub.dev/packages/go_router/changelog)に載った時は流石に嬉しかった。 + +# 2026年にむけて +3年目も引き続き精進する。子育ても全力で頑張る。OSSも頑張りたい。 + + +--- + +[^1]: RubyKaigiも落ち着いたらまた参加したい diff --git a/mdx-components.tsx b/mdx-components.tsx index ca5c48a..14a5185 100644 --- a/mdx-components.tsx +++ b/mdx-components.tsx @@ -6,7 +6,7 @@ export function useMDXComponents(components: MDXComponents): MDXComponents { a: ({ className, ...props }) => ( =16'} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + mdast-util-from-markdown@2.0.2: resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} mdast-util-frontmatter@2.0.1: resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + mdast-util-mdx-expression@2.0.1: resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} @@ -1362,6 +1389,27 @@ packages: micromark-extension-frontmatter@2.0.0: resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + micromark-extension-mdx-expression@3.0.1: resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} @@ -1656,6 +1704,9 @@ packages: remark-frontmatter@5.0.0: resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + remark-mdx-frontmatter@5.2.0: resolution: {integrity: sha512-U/hjUYTkQqNjjMRYyilJgLXSPF65qbLPdoESOkXyrwz2tVyhAnm4GUKhfXqOOS9W34M3545xEMq+aMpHgVjEeQ==} @@ -1668,6 +1719,9 @@ packages: remark-rehype@11.1.2: resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + resolve@1.22.11: resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} @@ -2638,8 +2692,7 @@ snapshots: caniuse-lite@1.0.30001766: {} - ccount@2.0.1: - optional: true + ccount@2.0.1: {} character-entities-html4@2.1.0: optional: true @@ -2974,6 +3027,15 @@ snapshots: markdown-extensions@2.0.0: optional: true + markdown-table@3.0.4: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + mdast-util-from-markdown@2.0.2: dependencies: '@types/mdast': 4.0.4 @@ -3002,6 +3064,63 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-expression@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 @@ -3117,6 +3236,64 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + micromark-extension-mdx-expression@3.0.1: dependencies: '@types/estree': 1.0.8 @@ -3545,6 +3722,17 @@ snapshots: transitivePeerDependencies: - supports-color + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + remark-mdx-frontmatter@5.2.0: dependencies: '@types/mdast': 4.0.4 @@ -3570,7 +3758,6 @@ snapshots: unified: 11.0.5 transitivePeerDependencies: - supports-color - optional: true remark-rehype@11.1.2: dependencies: @@ -3581,6 +3768,12 @@ snapshots: vfile: 6.0.3 optional: true + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + resolve@1.22.11: dependencies: is-core-module: 2.16.1 diff --git a/tailwind.config.ts b/tailwind.config.ts index 3625ca4..e2b5037 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -7,6 +7,8 @@ const config = { "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}", + "./content/**/*.{md,mdx}", + "./mdx-components.tsx", ], prefix: "", theme: {