Kotaro.log をまるごとリニューアルしました!ターミナル × iPhone の新デザイン

はじめに
こんにちは、Kotaro です。
このたび、ポートフォリオ兼ブログの「Kotaro.log」のデザインを、まるごと作り直しました!🎉
去年 WordPress から自作のサイトに引っ越したときは、とにかく「動くもの」を作るのが目標でした。今回は、旧デザインのコンセプト(ターミナル風のページ遷移アニメーションなど)を引き継ぎつつ、Claude Design と壁打ちしながらデザインをアップデートしました。そうしてできたデザインをもとに、トップページから 404 ページまで、全ページを新しいデザインにしています。
しかも今回は、実装の大部分を AI エージェントのチーム(Claude Code)に任せてみました。僕は計画とレビューの方針を決めて、確認する役です。その進め方もおもしろかったので、記事の後半で紹介します。
Before / After
まずは見比べてみてください。

▲ 左が旧デザイン、右が新デザイン(PC)

▲ スマホのトップページ。左が旧デザイン、右が新デザイン
旧デザインも「ターミナル」がモチーフでした。ただ、ターミナルの画面がひとつ置いてあるだけで、ほかの部分はふつうのサイトでした。新しいデザインでは、サイト全体がターミナルになっています。
コンセプトは「ターミナル × iPhone」
新しいデザインのテーマは、「ターミナル($ コマンド と、その出力)」と「iPhone のホーム画面」の組み合わせです。
- PC:ターミナルを操作しているような画面です。作品の一覧は
ls -la works/、最新の記事はtail -n 3 blog.log、スキルはskills --barのように、各セクションが「コマンドと、その出力」になっています - スマホ:iPhone のホーム画面のような見た目です。プロフィールや Now Playing、スキルがウィジェットとして並び、下には Dock があります。最新の記事は、Dynamic Island 風の通知で知らせます
- タブレット:PC のレイアウトを 1 カラムに落としています
もうひとつの目玉は、ライト / ダークの切り替えです。右上のボタン(スマホはスイッチ)で切り替えられて、選んだテーマは次に開いたときも保たれます。最初は端末の設定(OS のダークモード)に合わせます。

▲ ダーク(左)とライト(右)。配色は緑系のニュートラルで統一しています

▲ スマホのトップ。まんなかは、Dynamic Island の通知とプロフィールを開いたところ
ページごとの見どころ
Works:Quick Look で、さっと見られる
作品の一覧は、タイルを並べたギャラリーになりました。タイルを押すと、macOS の Quick Look のように、その場で作品の概要が開きます(スマホでは下から出てくるシートです)。

▲ Quick Look。PC はウィンドウ、スマホは下からのシートで開きます
作品にストーリー(つくった経緯や画像、Q&A)を書くと、専用の作品ページもできるようにしました。今後、作品ページも書いていく予定です!
Blog と記事ページ
Blog の一覧は、おすすめの記事(featured)を大きく出して、その下にタグで絞り込める一覧を置いています。記事ページには、目次・コードのコピーボタン・前後の記事へのリンク・シェアボタンを付けました。

▲ Blog の一覧(左)と記事ページ(右・ライト)。右側の目次は、読んでいる位置に合わせて動きます
404 ページも、ターミナル風に
存在しないページを開くと、cd: no such file or directory と怒られます(笑)。打ち間違いっぽい URL なら、「もしかして」で正しいページを提案します。たとえば /blgo を開くと、/blog を提案してくれます。

▲ /blgo を開いたところ。「もしかして: /blog」と提案しています
こだわった小ネタ
⌘K(Ctrl+K)でコマンドパレット
PC では、ヘッダーのコマンドバーが本当に入力できるようになっています。⌘K(Windows は Ctrl+K)を押すと候補が開いて、ページの移動やテーマの切り替えができます。Blog のページでは、記事のタイトルの検索もできます。

▲ Blog のページで「n8n」と入力すると、記事が候補に出ます
ページを移動するときの「ターミナル演出」
サイト内のリンクを押すと、一瞬だけターミナルが出てきて、移動先のコマンドがカタカタ打たれます。Blog に行くなら ls ~/blog、About なら whoami、ホームなら cd ~ です。

▲ Blog に移動するときの演出。0.4〜0.7 秒ほどで終わります
演出のあいだもページの読み込みは裏で進めているので、待ち時間は増えません。Esc キーでスキップできます。OS の「動きを減らす」設定(iPhone の「視差効果を減らす」など)をオンにしている人には出しません。
SNS でシェアしたときの画像も自動で
X などでリンクをシェアしたときに出る画像(OG 画像)も、デザインに合わせて自動で作るようにしました。記事の画像は、タイトルと公開日から作られます。

▲ 左がサイト共通、右が記事用の OG 画像。記事を公開すると自動で作られます
「ホーム」ボタン:コマンドに詳しくない人にも
公開してから気づいたのですが、スマホでは、サブページからトップに戻る手段がありませんでした。そこで、右上に「ホーム」ボタンを足しました。
ターミナルの雰囲気は残しつつ、コマンドを知らない人にも分かるように、主役はふつうの言葉の「ホーム」にして、cd ~ は小さく添えるだけにしています。押すと演出で cd ~ と打たれるので、「cd ~ はホームに戻るコマンドなんだ」と、なんとなく伝わる……はずです。

▲ 右上の「cd ~ ホーム」。トップページでは出しません
microCMS とのつきあい方
このサイトの記事や作品は、ヘッドレス CMS の microCMS で管理しています。今の microCMS のプランでは API(コンテンツの種類)を 5 つまでしか作れず、すでに 5 つ使い切っていました。
そこで、API は増やさず、既存の API に「任意の」フィールドを足すだけにしました。たとえば、こんなフィールドです。
API | 足したフィールド | 使い道 |
|---|---|---|
サイト設定 | キャッチコピー、スキルのレベル、Now Playing の曲名 など | トップページのヘッダーやウィジェット |
記事 | 抜粋(description) | 一覧やスマホの Activity に出す紹介文 |
タグ | 色 | タグごとの色分け |
作品 | 短い説明、担当、タイルの大きさ、ストーリー | ギャラリーと作品ページ |
ポイントは、フィールドが空でもデザインどおりに表示されることです。値が未設定のときは、デザインの文言を既定値として出します。なので、microCMS の設定を変える前にサイトを公開しても、表示は崩れません。
作り方:AI エージェントのチームで開発してみた
ここからは裏側の話です。今回は、AI のコーディングツールの Claude Code に、役割の違う AI エージェントのチームを組んでもらって作りました。

▲ 開発の流れ。レビューで必須の指摘(🔴)がゼロになるまで、実装担当に差し戻します
- 計画(Opus):作業をフェーズに分けて、だれがどのファイルを担当するかを決めます
- 実装(Sonnet):割り当てられたファイルだけを編集します。何人かで同時に進めるときは、担当ファイルが重ならないように分けて、ビルドする場所(git worktree)も分けました
- レビュー(Opus):差分を読むだけでなく、実際にブラウザ(Playwright)で開いて確かめます。指摘は 🔴 必須 / 🟡 推奨 / 🟢 任意 に分けます
- テスト:本物の microCMS の API キーは使わず、microCMS のモック(本物の代わりに決まったデータを返すもの)でサイトを動かして確かめます
- 公開:GitHub に PR を作り、CI(lint・型チェック・ビルド)が通ったら main にマージします。Vercel が本番に公開します
レビューで見つかった、気づきにくい問題たち
AI 同士のレビューが、思ったより優秀でした。人が見ているだけでは気づきにくいものも、たくさん見つけてくれました。
- 存在しない記事を開いたとき、少したつとタイトルが「404」からサイト名に戻ってしまう:サーバーが返す最初の HTML では正しく、ブラウザで JavaScript が動いたあとにだけ起きる問題でした
- 画面幅 1024px くらいで、ヘッダーのナビのボタンが入りきらなくなる:ホームボタンを足したときに、7 つの画面幅 × ダーク / ライトで測って見つけてくれました
- 画像の取得で、リダイレクト先まで追いかけてしまう:OG 画像を作るときに CMS の画像を取りに行く処理を、microCMS の画像サーバーだけに絞って、リダイレクトを追わないようにし、サイズにも上限を付けました
テストは、常に回せるように
一度きりの確認で終わらせずに、何度でも回せるテストとして残しました。
- ページを開いてエラーが出ないかを、PC とスマホで確かめるテスト(15 の URL × 2 画面)と、OG 画像の確認
- ページ遷移の演出のテスト(154 項目)
- CMS の HTML を安全にする処理(サニタイザ)のテスト(ランダムな入力 20 万件を含む)
情報セキュリティの人としては、このあたりがいちばん安心できたポイントです。CMS から来る HTML は必ず無害化してから表示する、外部から読み込めるものを CSP で絞る、なども引き続き守っています。
やってみて分かったこと
- AI に任せるほど、「指示書」が大事:背景・やること・触っていいファイル・確かめ方を、毎回きちんと文章にして渡すと、ブレずに進みます
- レビュー担当を別にすると、品質が上がる:作った本人(AI)とは別の目で見ると、思い込みに気づけます
- それでも最後に決めるのは自分:どこまで直すか、デザインと使いやすさのどちらを取るか、といった判断は、こちらでする必要がありました
数字で見るリニューアル
- 変更したファイル:146 個(コードの追加は約 1.2 万行)
- 新しく作ったページの種類:トップ(PC / スマホ)、About、Works(ギャラリー・Quick Look・作品ページ)、Blog、記事、Contact、404、エラー
- 確認した画面幅:375px〜1440px の 7 種類 × ダーク / ライト
これからやりたいこと
- 作品ページ(ストーリー)を書く
- お問い合わせフォームから、そのまま送信できるようにする(今は、送信を押すとメールアプリが開く仕組みです)
- スマホで、横にスワイプしてページを移動できるようにする
などなど!
おわりに
デザインを一新して、「見てもらいたいもの」を見せやすいサイトになりました。AI エージェントのチームでの開発も、うまく役割を分ければ、かなり頼れる相棒になると実感しました。
ぜひ、PC とスマホの両方で触ってみてください。右上のボタンで、ライト / ダークの切り替えもできます!
サイト作成にご興味がある方は、Contact からお気軽にご連絡ください!