<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/styles.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>富田真光 (Tomita Masamitsu) | 神戸のソフトウェアエンジニア</title><description>神戸を拠点に活動するソフトウェアエンジニア、富田真光（Tomita Masamitsu）の個人サイト・技術ブログ。プロフィール・実績・技術記事を公開しています。</description><link>https://tomy-dev.com/</link><language>ja</language><atom:link href="https://tomy-dev.com/rss.xml" rel="self" type="application/rss+xml"/><item><title>シドニーひとり旅の記事をnoteに書きました</title><link>https://tomy-dev.com/blog/sydney-solo-trip-note/</link><guid isPermaLink="true">https://tomy-dev.com/blog/sydney-solo-trip-note/</guid><description>初めての海外一人旅でシドニーに行ってきました。旅の記録はnoteに書きました、シドニーのフラットホワイトは最強でした</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;シドニーのフラットホワイトは最強&quot;&gt;シドニーのフラットホワイトは最強&lt;/h2&gt;
&lt;p&gt;ぜひ日本でもフラットホワイトを飲みたい！&lt;/p&gt;
&lt;h2 id=&quot;note-の記事はこちら&quot;&gt;note の記事はこちら&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://note.com/dax_sasayaki/n/n93a4546408ea&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;シドニーひとり旅に行ってきました&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>『システム開発と「具体と抽象」』を読んで、要件定義の見方が変わった話</title><link>https://tomy-dev.com/blog/system-development-concrete-abstract/</link><guid isPermaLink="true">https://tomy-dev.com/blog/system-development-concrete-abstract/</guid><description>細谷功さんの『システム開発と「具体と抽象」』の読書感想。問題発見と問題解決では搭載しているOSが違う。Excelをそのまま画面に置き換えるデジタル千円札を、自分も作っていたと気づいた話を書きます。</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;いま入っている案件で、基幹システムの要件定義と基本設計をやっている。顧客からの要望が毎週のように積み上がっていくタイミングで、細谷功さんの &lt;a href=&quot;https://www.amazon.co.jp/dp/429715790X&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;システム開発と「具体と抽象」&lt;/a&gt; を読んだ。&lt;/p&gt;
&lt;p&gt;これが今の自分に刺さりまくった。一番残ったのは、問題発見と問題解決では、そもそも搭載しているOSが違うということ。そして自分は、顧客の要望という「具体」を捌くことに追われて、その奥にあるWhyを問えていなかったということ。刺さったところを、自分の現場に引きつけて書いていく。&lt;/p&gt;
&lt;h2 id=&quot;提案ができないのは構造の問題だと思っていた&quot;&gt;提案ができないのは構造の問題だと思っていた&lt;/h2&gt;
&lt;p&gt;この本、いきなりSI業界への耳の痛い話から始まる。決められた仕様の通りには作れるが、それ以上のことはできない（やらない）。&lt;/p&gt;
&lt;p&gt;正直、最初は「いやいや」と思った。受託開発って決められたこと以外はむしろやっちゃいけない世界だし、言われた通りに作っていれば売上も利益も上がる契約構造なんだから、提案するインセンティブが弱いのは当たり前で。個人の能力っていうより、構造の問題じゃないの？と。&lt;/p&gt;
&lt;p&gt;ただ読み進めると、その構造ごと問われてるのが分かってくる。AI中心の最近のDXは、業務のやり方を新しい技術に合わせて最適化するっていう逆の発想が要る。で、ITとAIの知識を持ってる人材は開発側に多いんだから、開発側から業務のやり方ごと提案していくしかない。構造のせいにして終われる話じゃなかった。&lt;/p&gt;
&lt;p&gt;長年受け身でやってきた人にいきなり提案しろって言うのは「高校までメイク禁止だったのに、社会人になったらメイクは必須と言われるようなもの」っていう例えがあって、これが妙に刺さった。姿勢の問題じゃなくて、思考回路そのものを切り替える必要があるということ。&lt;/p&gt;
&lt;h2 id=&quot;問題発見と問題解決では搭載しているosが違う&quot;&gt;問題発見と問題解決では搭載しているOSが違う&lt;/h2&gt;
&lt;p&gt;この本の中心はここだと思う。川上の仕事は問題発見で、アウトプットは「問い」になる。川下の仕事は問題解決で、アウトプットは「答え」になる。問題発見は具体から抽象へ、問題解決は抽象から具体へ。問題が定義された瞬間に、ベクトルが反転する。&lt;/p&gt;
&lt;svg viewBox=&quot;0 0 640 380&quot; width=&quot;640&quot; style=&quot;max-width:100%;height:auto&quot; role=&quot;img&quot; aria-label=&quot;問題発見は具体から抽象へ上り、問題が定義された瞬間に反転して、問題解決は抽象から具体へ下る図&quot;&gt;
  &lt;title&gt;問題発見と問題解決のベクトル反転&lt;/title&gt;
  &lt;defs&gt;
    &lt;marker id=&quot;ah-b&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;8&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;#3b82f6&quot;/&gt;&lt;/marker&gt;
    &lt;marker id=&quot;ah-o&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;8&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;#d97706&quot;/&gt;&lt;/marker&gt;
    &lt;marker id=&quot;ah-n&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;8&quot; refY=&quot;5&quot; markerWidth=&quot;6&quot; markerHeight=&quot;6&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;currentColor&quot; opacity=&quot;0.45&quot;/&gt;&lt;/marker&gt;
  &lt;/defs&gt;
  &lt;line x1=&quot;40&quot; y1=&quot;44&quot; x2=&quot;40&quot; y2=&quot;322&quot; stroke=&quot;currentColor&quot; opacity=&quot;0.3&quot; marker-start=&quot;url(#ah-n)&quot; marker-end=&quot;url(#ah-n)&quot;/&gt;
  &lt;text x=&quot;40&quot; y=&quot;28&quot; text-anchor=&quot;middle&quot; font-size=&quot;12&quot; fill=&quot;currentColor&quot; opacity=&quot;0.55&quot;&gt;抽象&lt;/text&gt;
  &lt;text x=&quot;40&quot; y=&quot;344&quot; text-anchor=&quot;middle&quot; font-size=&quot;12&quot; fill=&quot;currentColor&quot; opacity=&quot;0.55&quot;&gt;具体&lt;/text&gt;
  &lt;line x1=&quot;60&quot; y1=&quot;330&quot; x2=&quot;600&quot; y2=&quot;330&quot; stroke=&quot;currentColor&quot; opacity=&quot;0.3&quot; marker-end=&quot;url(#ah-n)&quot;/&gt;
  &lt;text x=&quot;330&quot; y=&quot;366&quot; text-anchor=&quot;middle&quot; font-size=&quot;12&quot; fill=&quot;currentColor&quot; opacity=&quot;0.55&quot;&gt;川上（問題発見） → 川下（問題解決）&lt;/text&gt;
  &lt;rect x=&quot;240&quot; y=&quot;46&quot; width=&quot;160&quot; height=&quot;36&quot; rx=&quot;8&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; opacity=&quot;0.5&quot;/&gt;
  &lt;text x=&quot;320&quot; y=&quot;69&quot; text-anchor=&quot;middle&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;currentColor&quot;&gt;問題が定義される&lt;/text&gt;
  &lt;text x=&quot;320&quot; y=&quot;126&quot; text-anchor=&quot;middle&quot; font-size=&quot;12&quot; fill=&quot;currentColor&quot; opacity=&quot;0.55&quot;&gt;ここでベクトルが反転する&lt;/text&gt;
  &lt;line x1=&quot;130&quot; y1=&quot;298&quot; x2=&quot;246&quot; y2=&quot;96&quot; stroke=&quot;#3b82f6&quot; stroke-width=&quot;3&quot; stroke-linecap=&quot;round&quot; marker-end=&quot;url(#ah-b)&quot;/&gt;
  &lt;circle cx=&quot;130&quot; cy=&quot;298&quot; r=&quot;4.5&quot; fill=&quot;#3b82f6&quot;/&gt;
  &lt;text x=&quot;130&quot; y=&quot;322&quot; text-anchor=&quot;middle&quot; font-size=&quot;13&quot; fill=&quot;currentColor&quot;&gt;顧客の要望・現場の事実&lt;/text&gt;
  &lt;rect x=&quot;50&quot; y=&quot;108&quot; width=&quot;10&quot; height=&quot;10&quot; rx=&quot;2&quot; fill=&quot;#3b82f6&quot;/&gt;
  &lt;text x=&quot;66&quot; y=&quot;118&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;currentColor&quot;&gt;問題発見&lt;/text&gt;
  &lt;text x=&quot;50&quot; y=&quot;140&quot; font-size=&quot;12&quot; fill=&quot;currentColor&quot; opacity=&quot;0.55&quot;&gt;具体 → 抽象&lt;/text&gt;
  &lt;text x=&quot;50&quot; y=&quot;160&quot; font-size=&quot;12&quot; fill=&quot;currentColor&quot; opacity=&quot;0.55&quot;&gt;アウトプットは「問い」&lt;/text&gt;
  &lt;line x1=&quot;394&quot; y1=&quot;96&quot; x2=&quot;505&quot; y2=&quot;290&quot; stroke=&quot;#d97706&quot; stroke-width=&quot;3&quot; stroke-linecap=&quot;round&quot; marker-end=&quot;url(#ah-o)&quot;/&gt;
  &lt;text x=&quot;510&quot; y=&quot;322&quot; text-anchor=&quot;middle&quot; font-size=&quot;13&quot; fill=&quot;currentColor&quot;&gt;仕様・実装（具体の答え）&lt;/text&gt;
  &lt;rect x=&quot;518&quot; y=&quot;108&quot; width=&quot;10&quot; height=&quot;10&quot; rx=&quot;2&quot; fill=&quot;#d97706&quot;/&gt;
  &lt;text x=&quot;590&quot; y=&quot;118&quot; text-anchor=&quot;end&quot; font-size=&quot;14&quot; font-weight=&quot;600&quot; fill=&quot;currentColor&quot;&gt;問題解決&lt;/text&gt;
  &lt;text x=&quot;590&quot; y=&quot;140&quot; text-anchor=&quot;end&quot; font-size=&quot;12&quot; fill=&quot;currentColor&quot; opacity=&quot;0.55&quot;&gt;抽象 → 具体&lt;/text&gt;
  &lt;text x=&quot;590&quot; y=&quot;160&quot; text-anchor=&quot;end&quot; font-size=&quot;12&quot; fill=&quot;currentColor&quot; opacity=&quot;0.55&quot;&gt;アウトプットは「答え」&lt;/text&gt;
&lt;/svg&gt;
&lt;p&gt;問題にも2種類ある。顕在的問題は顧客も認知してて、依頼として降ってくるもので、正解がある。潜在的問題は顧客自身が言語化できてなくて、仮説を立てて能動的に提案するしかない。「AIで何かやりたい」みたいなふんわりした要望は、潜在的問題を引き出す絶好のチャンスらしい。今までは「ふんわりしてて困る」としか思ってなかった。&lt;/p&gt;
&lt;p&gt;自分に当てはめると、問題解決のOSはそれなりに動いてる気がするけど、問題発見のOSは全然スペックが足りてない。十分な情報が揃ってから動くっていう発想が染み付いてると、不十分な情報のまま仮説を膨らませることに抵抗を感じてしまう。この抵抗感がOSの違いなんだと思う。&lt;/p&gt;
&lt;h2 id=&quot;デジタル千円札を自分も作っていた&quot;&gt;デジタル千円札を自分も作っていた&lt;/h2&gt;
&lt;p&gt;この本で一番効いたのがこの例。お金を具体レベルでデジタル化すると、千円札がデジタル千円札に変わるだけっていう滑稽な産物が生まれる。「人々の共通の価値を交換するもの」って抽象化してからデジタル化するから、PayPayみたいなサービスが生まれる。具体から具体への置き換えは、トランスフォーメーションでも何でもないということ。&lt;/p&gt;
&lt;p&gt;で、自分の過去を振り返ってみると、Excelをそのまま画面に置き換えるっていう同じことをやってしまった気がする。顧客が口にする要望をそのまま作るのは一見顧客志向っぽいけど、なぜやりたいのか、何を達成したいのかに踏み込まない限り、出来上がるのは個別最適の局所解にとどまる。耳が痛い。&lt;/p&gt;
&lt;p&gt;Whyには過去向きと未来向きがあるっていう話も良かった。なぜ障害が起こったのかっていう過去向きのWhyは、エンジニアには馴染みがある。でも、それで何を達成したいのかっていう未来向きのWhyは、意識しないと問えない。要件定義で問うべきなのは後者なんですよね。&lt;/p&gt;
&lt;h2 id=&quot;xでレスバが起こる理由も具体と抽象で説明できる&quot;&gt;Xでレスバが起こる理由も具体と抽象で説明できる&lt;/h2&gt;
&lt;p&gt;この本では、具体をレーザーポインター、抽象を懐中電灯に例えている。具体派は狭いけど濃い世界を見ていて、抽象派は薄いけど広い世界を見ている。だから具体派からは抽象派が「薄っぺらくて何も分かってない」ように見えるし、抽象派からは具体派が「視野が狭い」ように見える。現場の人とマネージャーや経営層のすれ違いも、だいたいこの構図で説明がつく。&lt;/p&gt;
&lt;p&gt;これを読んで思ったのが、Xでレスバが起こる構造ってまさにこれなんじゃないかということ。広く浅く60点を取りに来ている発言に対して、自分が絶対に勝てるほんの一部の狭い土俵で勝負を挑んで、勝った気になって冷笑する。でも抽象で見てる側からすれば、ほんの一部の話だから痛くも痒くもないし、仕掛けた側はそのことに気づいていない。&lt;/p&gt;
&lt;p&gt;大事なのは、自分を具体派か抽象派かのどっちかに二極化することじゃなくて、いま自分はどっちのモードで見てるのかをメタ認知すること。これができてないと、不毛な争いに巻き込まれるだけになってしまう。&lt;/p&gt;
&lt;h2 id=&quot;ai時代に消えるのは職種ではない&quot;&gt;AI時代に消えるのは職種ではない&lt;/h2&gt;
&lt;p&gt;この職種は安泰だ、この職種は危ない、って議論には半分しか意味がないらしいが、確かにそう思った、そもそもXの文字数制限の中での発言なら、抽象的だったり一部を全部と捉える人もいるからなおさらだと思う。どんな仕事にも、AIに置き換わりやすいタスクと、AIで価値が高まるタスクが同居してる。消えるのは職種じゃなくて、考えてるつもりで実は与えられた具体を処理してるだけの部分らしい。この本で一番怖い一文だった。&lt;/p&gt;
&lt;p&gt;問題解決をAIが担えるようになってきたからこそ、人間の仕事の重心は問題を見つけて定義する側に移っていく。前に &lt;a href=&quot;https://tomy-dev.com/blog/ai-era-fundamentals/&quot;&gt;AI時代だからこそ基礎力が大事だと思った話&lt;/a&gt; を書いたけど、基礎力が問題を「解く」力だとすると、具体と抽象は「問いを立てる」力で、両方揃ってはじめてAIに正確に委譲できるんだと思う。&lt;/p&gt;
&lt;h2 id=&quot;目の前の要望の山を一段抽象化してみる&quot;&gt;目の前の要望の山を一段抽象化してみる&lt;/h2&gt;
&lt;p&gt;というわけで、まずやることは決めた。積み上がってる顧客要望のリストを一件ずつ潰す前に、一段抽象化して「結局この顧客は何を達成したいのか」を仮説として言語化してから、次の定例に持っていく。答えを聞くんじゃなくて、仮説をぶつけて、その反応から潜在的問題を探る。&lt;/p&gt;
&lt;p&gt;言われた通りに作る力は、これからも捨てるつもりはない。それは受託の強みそのものだから。その上で、場面に応じて問題発見のOSに切り替えられるようになりたい。具体と抽象の往復を、まずは目の前の要望の山からやってみる！&lt;/p&gt;
</content:encoded><category>AI</category></item><item><title>AI時代だからこそ基礎力が大事だと思った話</title><link>https://tomy-dev.com/blog/ai-era-fundamentals/</link><guid isPermaLink="true">https://tomy-dev.com/blog/ai-era-fundamentals/</guid><description>Codexを使うと画面が一瞬で完成してしまう。それでもDB設計だけは自分の頭で考えないと詰むと感じた話。要件定義の現場で気づいた、AIに正確に委譲するために必要な自力について書きます。</description><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;いま入っている案件で、要件定義と基本設計をやっている。&lt;/p&gt;
&lt;p&gt;進め方としては、ユーザーに画面のモックを見せて、それをベースに話をしながら仕様を確定させていくというもの。そのためにTypeScriptとReactでフロントエンドを書いているのだが、ここで最近強く感じたことがある。&lt;/p&gt;
&lt;p&gt;AI時代だからこそ、結局は基礎力が何よりも大事だということ。&lt;/p&gt;
&lt;h2 id=&quot;codexを使うと画面が一瞬で完成してしまう&quot;&gt;Codexを使うと画面が一瞬で完成してしまう&lt;/h2&gt;
&lt;p&gt;まず、実装が本当に速い。&lt;/p&gt;
&lt;p&gt;Codexを使うと、画面が一瞬でできあがってしまう。モックデータについても、MSW（Mock Service Worker）を使えばリアルなデータをそのまま注入できる。ユーザーから見れば、ほぼ本番と変わらない画面で議論ができる状態だ。&lt;/p&gt;
&lt;p&gt;正直、実装のスピードという意味では、もう人間が手を動かす理由はほとんどないということを心の底から実感している。&lt;/p&gt;
&lt;h2 id=&quot;それでもdb設計は自分の頭で考えないと詰む&quot;&gt;それでもDB設計は自分の頭で考えないと詰む&lt;/h2&gt;
&lt;p&gt;一方で、これはAIに丸投げできないと痛感したのがDB設計だった。&lt;/p&gt;
&lt;p&gt;ユーザーと話していると、こんな場面がよくある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;このテーブルのスキーマ、どうなってたっけ？&lt;/li&gt;
&lt;li&gt;ユーザーが言っているこの要望、受け入れてしまっていいのか？&lt;/li&gt;
&lt;li&gt;受け入れたとして、全体で破綻しないか？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここで自分が設計を理解していないと、かなりきつい。何が分かっていないのかも分からない状態になるので、AIに聞いてると遅いし、回答を待っている暇もない。
もちろんやるやらないは持ち帰って検討するにしても、技術的にできるかできないかくらいは伝える必要がある。&lt;/p&gt;
&lt;p&gt;画面は後から作り直せる。でもデータ構造の破綻は、後になるほど効いてくる。だからここだけは自分の頭で考えて、理解した状態で設計しておく必要がある。&lt;/p&gt;
&lt;h2 id=&quot;基礎があるからこそaiに正確に委譲できる&quot;&gt;基礎があるからこそ、AIに正確に委譲できる&lt;/h2&gt;
&lt;p&gt;基礎があるから応用ができる。そして基礎があるからこそ、自分の仕事を正確にAIに委譲できる。&lt;/p&gt;
&lt;p&gt;AIに全部考えてもらうのではなく、自分で考えた上でAIを使う。この違いは大きくて、前者だと出てきたものが正しいかどうかを判断できないが、後者なら意図した通りに実装させて、違っていたら指摘することができる。&lt;/p&gt;
&lt;p&gt;そもそもの順番として、業務が先でAIは後。ここは変わらないと思っている。&lt;/p&gt;
&lt;p&gt;そして結局は、AIを使いこなす自分のレベルが低いままだと、いいアウトプットもアウトカムも出せない。委譲するには、委譲する内容を自分が分かっている必要があるし、AIが賢くなればなるほどこの前提が効いてくる。&lt;/p&gt;
&lt;p&gt;結局は基礎力だし、自力は必要ということ。&lt;/p&gt;
&lt;h2 id=&quot;徹底的に基礎を理解して詳細をaiに委譲する&quot;&gt;徹底的に基礎を理解して、詳細をAIに委譲する&lt;/h2&gt;
&lt;p&gt;というわけで、いまは &lt;a href=&quot;https://www.amazon.co.jp/dp/4798186627&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;達人に学ぶDB設計徹底指南書&lt;/a&gt; を読んでいる。
徹底的に基礎を理解して、詳細をAIに委譲する。どこまで行っても基礎が大事！&lt;/p&gt;
</content:encoded><category>AI</category><category>Database</category><category>TypeScript</category><category>React</category></item><item><title>WordPressをやめて、AstroとCloudflareでサイトをリニューアルしました。</title><link>https://tomy-dev.com/blog/renewed-with-astro/</link><guid isPermaLink="true">https://tomy-dev.com/blog/renewed-with-astro/</guid><description>WordPressで運用していたポートフォリオサイトを、Astro + Cloudflareの構成で作り直しました。移行の理由と新しい構成について書きます。</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;このサイトは、もともとWordPressのオリジナルテーマで作ったポートフォリオサイトでした。今回それをやめて、Astroで作り直しました。この記事はそのリニューアル後の1本目です。&lt;/p&gt;
&lt;h2 id=&quot;なぜwordpressをやめたのか&quot;&gt;なぜWordPressをやめたのか&lt;/h2&gt;
&lt;p&gt;理由はシンプルで、&lt;strong&gt;運用のシンプル化と爆速化&lt;/strong&gt;です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;本体・プラグインの脆弱性対応に追われる&lt;/li&gt;
&lt;li&gt;サーバーやDBの管理が必要&lt;/li&gt;
&lt;li&gt;サイトの表示速度を上げるにも限界がある&lt;/li&gt;
&lt;li&gt;そもそもWordPressである必要がない&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;個人のサイトに管理画面もDBも必要ないと気づき、静的サイトに全振りすることにしました。
当初はNext.jsも検討していたのですが、軽量さと手軽さからAstroにしました。&lt;/p&gt;
&lt;h2 id=&quot;新しい構成&quot;&gt;新しい構成&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;フレームワーク&lt;/strong&gt;: &lt;a href=&quot;https://astro.build/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Astro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS&lt;/strong&gt;: Tailwind CSS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ホスティング&lt;/strong&gt;: Cloudflare&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;コンテンツ管理&lt;/strong&gt;: Markdown（Gitで管理）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Astroはデフォルトで&lt;strong&gt;JavaScriptをほぼ配信しない&lt;/strong&gt;フレームワークです。このサイトで動いているJSは、ダークモード切替の数行だけに厳選しました。
あとはビルド時に生成された静的なHTMLとCSSだけで動いているので表示速度が爆速です。&lt;/p&gt;
&lt;p&gt;あとは記事の管理の作成・管理をマークダウンでしたかったというのも大きいです。
CMSを別で用意することなく、VS Codeで記事を書いて、mainにマージされれば自動的に配信されるという快適さも得ることができました。&lt;/p&gt;
&lt;p&gt;また、ホスティングに&lt;strong&gt;Cloudflare Pages&lt;/strong&gt;を選んだのは、&lt;strong&gt;世界中のエッジサーバーから高速に配信でき、Githubと連携したCI/CDまで無料で完結する&lt;/strong&gt;ためです。
今の構成でかかってくるコストはドメイン代だけになりました。&lt;/p&gt;
&lt;p&gt;シンプルにプロダクトとしてCloudflareが好きだからというのもあります。&lt;/p&gt;
&lt;h2 id=&quot;こだわったところ&quot;&gt;こだわったところ&lt;/h2&gt;
&lt;h3 id=&quot;とにかく速く&quot;&gt;とにかく速く&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Webフォントを使わず、OS標準フォントで表示&lt;/li&gt;
&lt;li&gt;画像はビルド時に最適化&lt;/li&gt;
&lt;li&gt;静的ファイルをCloudflareのエッジから配信&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;これからのこと&quot;&gt;これからのこと&lt;/h2&gt;
&lt;p&gt;このブログでは、技術のこと・作ったもの・気になっていること・日々の活動について書いていく予定です。よろしくお願いします。&lt;/p&gt;
</content:encoded><category>Astro</category><category>Tailwind CSS</category><category>Cloudflare</category></item></channel></rss>