はじめに
この記事は2026年2月時点の情報に基づいている。
Claude Codeで最初に作ったのは、ゲームじゃなかった。スケジュールアプリだった。
名前は「ゆるスケ」。LINEみたいなチャット画面に予定を打ち込むと、時系列順に整理して表示してくれるだけのアプリ。テストプレイのつもりで作った。
驚いたのは、ユーザーが自然言語で入力した予定をアプリが理解する部分だ。当然LLMのAPIを叩くんだろうと思っていた。OpenAIなりAnthropicなりのAPIキーが必要になるだろうと。
:::details 初心者向け: LLM APIとは
LLM(大規模言語モデル)はChatGPTやClaudeの頭脳にあたる部分。APIはその頭脳を外部から使うための窓口。レストランに例えると、LLMがシェフ、APIが出前サービスのようなもの。自分のアプリからAPIを通じて「この文章を理解して」と頼むと、シェフ(LLM)が解析結果を返してくれる。ただし使うたびに料金がかかる。この記事のアプリは「シェフを雇わなくても、マニュアル(パターンマッチング)だけで十分だった」という話。
:::
ところがClaude Codeが生成したコードを見ると、LLM APIは一切使っていなかった。パターンマッチングだけで自然言語を処理していた。
これが非常に面白かった。
やったこと
Claude Codeに伝えたのはこれだけだ。
LINEみたいなチャット方式で完結するスケジュールアプリを作りたい
するとClaude Codeから質問が返ってきた。「どんな感じにする?」と。画面のレイアウト、入力方式、表示形式。聞かれたことに答えていったら、どんどん形になっていった。
途中で「ここ気に食わない」と言えば直った。技術的な指示は一切していない。自然言語でフィードバックするだけで、ほぼ理想通りのアプリになった。
ターミナルでのやり取りはこんな雰囲気だ。
$ claude
> LINEみたいなチャット方式で完結するスケジュールアプリを作りたい
Claude: どんな機能が欲しいですか?例えば...
- 予定の追加・削除
- 日付の自動認識
- 時系列での表示
> 全部欲しい。あと見た目はLINEっぽくしてほしい
Claude: index.html を作成します...
(PWA対応のチャットUI、入力パーサー、予定管理ロジックを一括生成)
> いい感じ。でもここ気に食わない、日付が今日だけ太字になってない
Claude: 修正します...
自分が書いたコードは0行。全部Claude Codeが書いた。
LLMなしで自然言語を処理する仕組み
ここが一番面白いところだ。
「明日の14時に歯医者」と入力されたら、アプリはこれを予定として認識しなきゃいけない。普通に考えたらLLMに投げる案件だろう。
Claude Codeが採ったアプローチは違った。正規表現とパターンマッチングの組み合わせだった。
:::details 初心者向け: 正規表現・パターンマッチングとは
正規表現は「テキストの中から特定のパターンを見つけ出す検索ルール」のこと。例えば「数字が2つ並んで、その後に『月』という文字が来る」というパターンを定義すると、「3月」「12月」を自動で見つけられる。パターンマッチングは、この仕組みを使って「このテキストはどのパターンに当てはまるか」を判定する処理のこと。LLMのように文章の意味を理解するのではなく、文字の並び方のルールで機械的に判別する。
:::
// 日付パターンの認識(Claude Codeが生成したコードのイメージ)
const datePatterns = [
/(\d{1,2})月(\d{1,2})日/, // 「3月15日」
/(今日|明日|明後日|来週)/, // 相対日付
/(\d{1,2})[\/\-](\d{1,2})/, // 「3/15」「3-15」
];
// 時刻パターンの認識
const timePatterns = [
/(\d{1,2})時(\d{1,2})?分?/, // 「14時」「14時30分」
/(\d{1,2}):(\d{2})/, // 「14:30」
/(朝|昼|夕方|夜|午前|午後)/, // あいまい時刻
];
日本語の日付・時刻表現をパターンとして定義し、マッチした部分を抽出する。残った部分が予定の内容になる。「明日の14時に歯医者」なら、「明日」「14時」を抜き取って、残りの「歯医者」がイベント名。
LLMを使うまでもなかった。日常的なスケジュール入力のバリエーションは、実はそこまで多くない。パターンで十分カバーできた。
Claude Codeは「LLMが必要」とは一度も言わなかった。 最適な手段を自分で判断して、パターンマッチングを選んだ。APIキーの設定もサーバーも不要。ブラウザだけで完結するPWAアプリとして出来上がった。
:::details 初心者向け: PWAとは
PWA(Progressive Web App)は、Webサイトなのにスマホアプリのように使える技術のこと。アプリストアからインストールしなくても、ブラウザで開いてホーム画面に追加するだけで、普通のアプリと同じように使える。オフラインでも動作する場合が多く、サーバー代もかからないのが利点。
:::
なぜこれが重要か
2つの意味で重要だと思った。
1つ目。AIコーディングツールは「言われたことをやる」だけじゃない。
「自然言語を理解するアプリを作りたい」と言ったとき、安易にLLM APIを組み込む実装もあり得た。でもClaude Codeはパターンマッチングで十分だと判断した。ランニングコストゼロ、外部依存ゼロ、オフライン動作可能。技術選定まで含めて最適解を出してきた。
2つ目。非エンジニアでも「技術的に正しい判断」の恩恵を受けられる。
自分はパターンマッチングとLLM APIの使い分けなんて知らなかった。でもClaude Codeがその判断をしてくれたおかげで、シンプルで軽いアプリが出来上がった。技術的な知識がなくても、AIが補完してくれる。
その後どうなったか
ゆるスケの成功体験に味をしめて、本命のゲーム開発に進んだ。
結果は散々だった。3回作り直した。ゾンビサバイバル系を作ろうとして失敗。別のアプローチで失敗。また失敗。
4回目にしてようやく「DUNG: Azure Flame」というローグライクRPGが完成した。Python + Pygameで15,000行超。itch.ioで$2で販売中。
最初の成功がスケジュールアプリだったからこそ、ゲームで3回コケても「Claude Codeならいける」という確信があった。ゆるスケがなかったら途中で諦めていたかもしれない。
ちなみに、この開発過程で学んだ「AIが同じミスを繰り返す問題」の解決策は、shared-brainというCLIツール(pip install shared-brain)にまとめた。教訓をYAMLで管理して、Claude CodeのHook機能で自動ブロックする仕組みだ。
まとめ
- Claude Codeに「LINEみたいなスケジュールアプリ作りたい」と言ったら、本当にできた
- 自然言語理解にLLM APIが必要だと思い込んでいたが、パターンマッチングで十分だった
- AIコーディングツールは技術選定まで含めて判断してくれる。非エンジニアにとってはここが一番ありがたい
- 最初の成功体験が小さくても、次に進む燃料になる。ゆるスケがなければAzure Flameは生まれなかった
「自然言語を理解するアプリにはLLMが必要」。そう思い込んでいた自分の想定を、Claude Codeがあっさり覆した。賢いのは使い手じゃない。道具のほうだった。
関連ツール
- cc-safe-setup — LLM活用をより安全にするフック集(本番運用10種 + テンプレート5種)。
「AIに任せて大丈夫なのか」という不安を持ったまま800時間使い続けた記録は非エンジニアがClaude Codeを800時間走らせた——失敗と学びの全記録(¥800・第2章まで無料)に書いた。
Claude Codeの能力をもっと引き出したい方へ
Anthropic公式ガイドにない事故防止——Claude Code 800+時間で19点→85点にした全記録では、CLAUDE.mdの設計、Skills、Hooksの実装パターンまで体系的に解説しています。
関連記事
- Anthropic公式「Skills完全ガイド」を読んだら、トークン消費を40%減らせた — SKILL.mdの設計パターン
- PreToolUseフックで危険な操作を自動ブロックする — hookの具体的な実装
- 108時間無人で走らせて起きた全事故と安全装置 — 長時間運用の実事故
📖 トークン消費に困っているなら → Claude Codeのトークン消費を半分にする——800時間の運用データから見つけた実践テクニック(¥2,500・はじめに+第1章 無料)
⚠ Opus 4.7緊急情報(2026年4月)
auto modeの安全分類器がOpus 4.6にハードコードされており、Opus 4.7では正常に機能しない(#49618)。hookはモデル非依存で動作するため、分類器の故障に関係なく防御が機能する。→ Opus 4.7 Survival Guide / Safety Scanner