Code daily. Without assist.
Namaranは、プログラマーがコードを扱う感覚を鈍らせないための、1日数分のコーディングドリルです。
AIコーディングツールで仕事の生産性は上がった一方、自分の頭と手でコードを読み・書き・直す機会は減りつつあります。Namaranはその数分だけ補助を外して、コードに触れる場所です。上達や競争ではなく、維持を目的にしています。
開く → 考える → 答えを見る → 閉じる
毎日、4言語 × 3種別の12問を公開します。
| 言語 | 対象バージョン |
|---|---|
| C | C23 |
| C++ | C++26 |
| Rust | Rust 2024 edition |
| Haskell | Haskell 2010 |
| 種別 | 内容 |
|---|---|
| READ | コードを頭の中で実行する(何が出力されるか、コンパイルできるか) |
| WRITE | 小さな関数や式を自分で書く(答えは参考実装) |
| DEBUG | 壊れたコードの問題を見つけ、最小限直す |
難易度は4段階で、星ではなく動物で示します。
| 動物 | 段階 |
|---|---|
| ハリネズミ | 基礎 |
| 孔雀 | 初級 |
| バイソン | 中級 |
| クジラ | 上級 |
毎日の12問の難易度は、1問ずつ独立に抽選します。過去の傾向は見ないので、12問すべてがクジラの日もあります。過去問は /levels から難易度別にも辿れます。
実行環境・採点・スコア・ランキング・アカウントはありません。意図的に作っていません。過去の問題は日付ごとのアーカイブから読めます。
サイトは HTML と CSS だけの静的サイトです。ブラウザ向けのJavaScript、ビルド、CMS、データベースは使っていません。Cloudflare Pagesで配信し、日付なしのURL(/rust/read など)を最新の公開日のページに解決する部分だけを Pages Functions(functions/_middleware.js)が担っています。
問題はAIが毎日作り、人間の承認なしに公開します。
GitHub Actions(毎日 00:10 JST)
write お題(script/odai.sh)と難易度(script/level.sh)を抽選し、Claude Code が namara-daily Skill で12問を書く
verify Claudeが触っていない別のランナーで、パッチを検査(script/check-patch.sh)し、
コンパイル・実行・静的解析で答えを裏付ける(script/verify.sh)
publish 検査を通ったパッチだけを main に当て、索引と sitemap.xml を作り直して push
→ Cloudflare Pages が自動デプロイ
Claudeが動くジョブは読み取り権限しか持ちません。公開するのは、その出力を検査し直す別のジョブです。
「問題を作る」側はAIを遠慮なく使い、「問題を解く」側だけが補助を外す、という分担です。問題の質は、毎日の人間の判断ではなく、文章として書き出した基準(要件定義・Skill・お題の候補集)と機械的な検証で保ちます。
検証では、ページに載ったコードをそのままコンパイルして確かめます。
| 言語 | ツール |
|---|---|
| C | gcc-14 -std=c23 -Werror -fanalyzer、ASan/UBSan付きで実行 |
| C++ | g++-14 -std=c++26 -Werror、ASan/UBSan付きで実行 |
| Rust | clippy-driver --edition 2024 -D warnings |
| Haskell | ghc -XHaskell2010 -Wall -Werror、hlint |
READの答えの出力は実際の実行結果と照合し、「コンパイルエラーになる」という答えは実際に失敗することを確かめます。DEBUGの問題文が「いまはこう出力される」と書くときは、壊れたプログラムを実際に動かしてその出力と照合します。
index.html, style.css, 404.html, _headers サイト本体
level/*.svg 難易度の動物(手描きのSVG)。style.css がマスクとして使う
{c,cpp,rust,haskell}/{read,write,debug}/
YYYY-MM-DD.html 日付ごとの問題ページ(公開後は編集しない。ハイライトの付け直しだけは例外)
archive.html その言語・種別の過去問一覧(日付とお題)
topics.html, tag/ 生成物。お題から過去問を辿る索引
levels.html, level/*.html 生成物。難易度から過去問を辿る索引
functions/_middleware.js 日付なしURLの解決・未来日の404
script/content.sh 問題ページの雛形生成とアーカイブへの追記
script/verify.sh 問題ページと検証用ソースの検証
script/highlight.sh コードのシンタックスハイライト
script/odai.sh お題の抽選
script/level.sh 難易度の抽選
script/check-patch.sh 公開前のパッチ検査
script/topics.sh アーカイブの見出しと topics.html / tag/ / levels.html / level/ の生成
script/tags.tsv タグ語彙(URL用のslugと、画面に出る日本語名)
script/sitemap.sh sitemap.xml の生成
sitemap.xml, robots.txt 生成物と、その場所を示す1行
.claude/skills/namara-daily/ 問題作成の手順(SKILL.md)とお題の候補集(odai.txt)
.github/workflows/ 定期実行ワークフローと生成物の追随
doc/ 要件定義・基本設計
/namara-daily 今日の12問を抽選お題で作る
/namara-daily 2026-09-20 rust/debug 所有権の移動 言語・種別・テーマを指定する
Skillを使わずに手で書く場合は、次の順です。
./script/content.sh new 2026-09-20 rust/debug # 雛形を作り、archive.html に1行追加
# rust/debug/2026-09-20.html の TODO を埋め、検証用ソースを用意する
./script/highlight.sh rust/debug/2026-09-20.html # コードを直したら再実行
./script/verify.sh 2026-09-20 /path/to/verify-dir rust/debug検証用ソースの置き方(NAME.ok.rs / NAME.ng.rs / NAME.bug.rs / NAME.stdout)は script/verify.sh の冒頭にあります。検証には上の表のツールが必要です。
sitemap.xml と索引(topics.html・tag/・levels.html・level/・各 archive.html の見出し)は公開と同じ手順の中で作られます。手元で作り直すときは ./script/topics.sh と ./script/sitemap.sh、最新かどうかだけ見るときは --check を付けます。いま使われているタグの一覧(slugと日本語名)は ./script/topics.sh --tags で出ます。
- Claude Pro/Max/Team/Enterprise のアカウントで、手元で
claude setup-tokenを実行する - 表示されたトークンを、リポジトリの Settings → Secrets and variables → Actions に
CLAUDE_CODE_OAUTH_TOKENとして登録する - Actions → Namaran daily → Run workflow で試す(日付を指定して過去日の分を作ることもできる)
実行はサブスクリプションの利用枠を使います。使うモデルはワークフロー冒頭の CLAUDE_MODEL で変えられます。検証を通らなかった日は何も公開されず、サイトは前回の問題を表示し続けます。
- doc/requirements.md — 要件定義。Namaranが何をして、何をしないか。良い問題・面白い問題の基準
- doc/basic-design.md — 基本設計。URL設計、HTML規約、運用フロー、自動公開の設計判断
- .claude/skills/namara-daily/SKILL.md — 問題作成の手順
- CLAUDE.md — 対象言語のバージョンと言語仕様リファレンス