📖 このテキストについて
プログラミング未経験の方が、今回作ったシステムの「中身」を理解するための読み物です。
会計のお仕事にたとえながら、専門用語を一つずつ解説します。所要 約25〜35分。
通勤の電車で、上から順にどうぞ(途中でやめてもOK)。
1システムって何? 全体像をつかむ
最初に、いちばん大事な「全体像」をつかみます。ここが分かると、後の細かい話が一気にラクになります。
用語:システム
いくつかの部品(プログラム・データ・外部サービス)が連携して、ひとつの仕事をやり遂げる仕組み全体のこと。
会計の世界に「会計システム」がありますよね。仕訳入力・元帳・試算表・帳票出力…と、別々の機能が連携して
「経理」という1つの仕事をこなします。今回作ったものも同じで、複数の部品が連携して「旅行プランを作って届ける」
という1つの仕事をします。
登場する部品(これだけ覚えればOK)
| 部品 | 役割 | 会計でいうと |
| LINEボット | 注文を受けて結果を返す「窓口」 | 受付担当 |
| Claude(AI) | 行き先を選び文章を書く「執筆者」 | 外注ライター |
| HTML/CSS | きれいな成果物(ページ) | 清書した報告書 |
| Netlify | ネットに公開しURLを発行する「棚」 | 提出先サーバー |
| JSON | 家族情報・訪問履歴などの「記録」 | マスタ台帳 |
仕事の流れ(5ステップ)
① データを読む(誰の・どんな条件か)
↓
② Claudeが行き先を選び、文章を書く
↓
③ それをHTML(きれいなページ)にする
↓
④ Netlifyに公開してURLを作る
↓
⑤ LINEでそのURLを届ける
このあとの章は、この5ステップに出てくる部品を1つずつ、ていねいに見ていきます。
「今どの部品の話か」を意識すると迷子になりません。
↑ もくじへ
2インターネットとWebの基礎
Webページがスマホに表示されるとき、裏で何が起きているのか。ここは全ての土台です。
「お願いする側」と「応える側」
用語:クライアントとサーバー
クライアント=お願いする側(あなたのスマホ・ブラウザ)。
サーバー=お願いに応えて返す側(ページを持っているコンピュータ)。
あなたがブラウザでURLを開く=「このページください」とサーバーにお願い(リクエスト)し、
サーバーが「どうぞ」と返事(レスポンス)でページを返す。この往復がWebの基本動作です。
たとえると
レストランの注文と同じ。あなた(客=クライアント)が「カレーを」と注文(リクエスト)し、
厨房(サーバー)が作って提供(レスポンス)する。
住所のしくみ:URL
用語:URL
インターネット上の「住所」。例:
https://sss-family-trips.netlify.app/seiha.html
分解すると――
・https:// … 通信の方式(sは「暗号化=安全」の印)
・sss-family-trips.netlify.app … どのサーバーか(ドメイン名=建物の名前)
・/seiha.html … その中のどのページか(部屋番号)
結果は数字で返る:HTTPステータス
用語:HTTPステータスコード
お願いの結果を表す3桁の数字。
200=成功、
403=拒否(権限なし)、
404=見つからない、
500=サーバー側の故障。
今回のLINE設定中、「403」が出ました。これは「鍵が合わず受け付けを拒否」という意味。
鍵を正しく直したら「200(成功)」に変わり、設定完了が確認できました。
数字の意味を知っていると、トラブルの原因がすぐ絞れます。
↑ もくじへ
3ページの作り方(HTML・CSS)
旅行プランの「雑誌みたいなページ」は、HTMLとCSSという2つの言葉でできています。役割がはっきり分かれています。
HTML=中身と構造
用語:HTML
ページの「中身」と「構造」を書く言葉。見出し・段落・画像・リンクなどを
タグで囲んで表します。
<h1>箱根の旅</h1> ← 大見出し
<p>涼しい高原へ。</p> ← 段落
<img src="写真URL"> ← 画像
<h1>のように、タグで要素の種類を示します。開始タグと終了タグ(</h1>)で挟むのが基本です。
CSS=見た目(デザイン)
用語:CSS
色・余白・文字サイズ・配置などの「見た目」を整える言葉。HTMLが「内容」、CSSが「体裁」。
h1 { color: green; font-size: 30px; }
↑どの要素に ↑何を ↑どうする
たとえると
会計報告書で、HTML=「数字と文章そのもの」、CSS=「フォント・罫線・レイアウトの体裁」。
中身と体裁を分けておくと、体裁だけ後から一括変更できて便利、という発想です。
このプロジェクトでは
あなたが「左右が詰まって読みにくい」と指摘した不具合は、まさにCSSの
余白(padding)の設定ミスでした。
中身(HTML)はそのままに、CSSの余白を直すだけで読みやすくなりました。
スマホ対応=レスポンシブ
用語:レスポンシブデザイン
画面の幅に応じて、レイアウトが自動で最適化される作り。PCでは横3列、スマホでは縦1列、のように。
このページ自体もレスポンシブです。文字幅を読みやすい幅に抑え、スマホで自然に縦に流れるようにしています。
↑ もくじへ
4ネットに公開するしくみ(Netlify)
作ったHTMLは、そのままでは自分のPCの中だけ。みんなが見るには「公開」が必要です。
用語:ホスティング
作ったページを、誰でもアクセスできる場所に「置く」こと。場所を貸す業者を
ホスティングサービスという。
用語:Netlify(ネットリファイ)
HTMLを置くと、自動でURLを発行して公開してくれるサービス。今回は無料枠で利用。
たとえると
自分のPCの報告書=自分の引き出しの中(自分しか見られない)。
Netlifyに置く=全社共有フォルダに置く(URLを知る人は誰でも見られる)。
用語:デプロイ
作ったものを公開環境に「配置・反映」する作業のこと。「デプロイする」=「公開する」と思ってOK。
今回は publish.py というプログラムが、できたHTMLを全部まとめてNetlifyへデプロイし、
https://...netlify.app という固定URL(毎回同じ住所)を保ちます。
だから、一度妻に送ったURLは、中身が新しくなってもそのまま使えます。
↑ もくじへ
5データの持ち方(JSONという台帳)
「誰の・どこに行った・予算は」という情報は、JSONという形式のファイルに記録しています。
用語:JSON(ジェイソン)
プログラムが読み書きしやすい形で情報を書いた、ただの文字ファイル。メモ帳で開けます。
たとえば訪問記録 visited.json はこんな形です:
{
"prefectures": ["東京都", "福岡県", "石川県"],
"countries": ["シンガポール", "グアム"]
}
読み方のルール(これだけ)
{ } = ひとまとまりの情報(オブジェクト)。会計でいう「1件のマスタ」
[ ] = 並んだ一覧(配列・リスト)。「明細行の並び」
"名前": 値 = 項目名と中身のペア。「勘定科目:金額」
- カンマ
, で区切る。引用符 " で文字を囲む
このプロジェクトでは
あなたが旅行に行ったら
visited.json の一覧に地名を足すだけ。
すると次の公開時に
制覇マップが自動で塗られ、その場所は今後の提案から
自動で除外されます。
データを1か所で管理し、複数の機能がそれを参照する――会計の「マスタ一元管理」と同じ考え方です。
なぜデータベースでなくJSON?
本格的なシステムは「データベース」を使いますが、家族用の小さな記録なら、メモ帳で開けて中身が見えるJSONの方が
シンプルで安心。規模に合った道具を選ぶ、という判断です。
↑ もくじへ
6プログラムを動かす(Python)
「自動でやってくれる手順書」を書く言葉が、プログラミング言語です。今回はPythonを使いました。
用語:Python(パイソン)
読みやすく人気の言語。自動処理・データ処理・AI連携が得意。
用語:スクリプト
「これをこの順でやって」と書いた自動実行の手順書ファイル(
.py)。
たとえると
Excelのマクロ(VBA)に近いです。手作業の繰り返しを書いておき、一発で実行させる。
例:
publish.py=「HTMLを集めてNetlifyへ送る手順書」。
専用の道具箱:仮想環境
用語:仮想環境(venv)
このプロジェクト専用の「道具箱」。必要な追加部品をここにだけ入れ、PC全体を汚さない。
用語:ライブラリ/pip
ライブラリ=よく使う機能をまとめた「既製部品」。
pip=それを取り寄せるツール(通販の注文係)。
今回は requests(ネット通信)、python-dotenv(鍵の読み込み)、Pillow(画像作成)などを
道具箱(.venv)に取り寄せて使いました。ゼロから作らず既製部品を組み合わせるのが、現代の開発の基本です。
↑ もくじへ
7AIに作らせる(Claude・サブスク)
行き先を選び、文章を書き、HTMLまで作る「執筆者」がAI(Claude)です。ここで重要なコスト判断もしました。
用語:Claude(クロード)
文章や画像を理解・生成するAI。今回は行き先選定とページ作成を担当。
用語:プロンプト
AIへの「指示書・依頼文」。良いプロンプト=良い成果物。
auto/gen_prompt.md などがそれ。
プロンプトには「子は2歳」「未訪問から選ぶ」「写真は実在のものを」「夫婦の年齢は書かない」など、
細かい条件を全部書いてあります。AIはこの指示書に従って毎回ゼロから作るので、指示書の質がそのまま品質になります。
いちばん大事な判断:サブスク vs API
用語:API
プログラム同士が会話する「窓口」。AIをAPIで使うと、1回呼ぶごとに料金がかかる(従量課金)のが一般的。
用語:サブスク(定額制)
月額を払えば範囲内は使い放題。今回は claude.ai のサブスクを使い、使うたび課金を避けた。
たとえると
外注を「1件いくら(API)」で頼むか、「月額顧問契約(サブスク)」で頼むか。
たくさん使うなら顧問契約の方が安心――今回はそれを選び、コストを月額で固定しました。
用語:ヘッドレス実行
画面を出さず、裏でプログラムが自動でAIを呼んで仕事させること。定期配信・LINE依頼はこれで動きます。
実際にあったトラブル
古いAPIの鍵が設定に残っていて、サブスクで動かすべき所に間違って渡り「鍵が無効」で失敗しました。
「正しい鍵を、正しい窓口へ」――鍵の取り違えは初心者がよくやるミスです(第11章で詳述)。
↑ もくじへ
8LINEと連携する(ボットの心臓部)
「LINEで地名を送ると返ってくる」――この自動応答のしくみを、順を追って。
用語:Messaging API
LINE公式アカウントを、プログラムから操作するための窓口。これで送受信します。
3つの「送り方」
| 送り方 | 意味 | 使いどころ |
| ブロードキャスト | 友だち全員へ一斉 | 定期配信 |
| プッシュ | 特定の人へ | 依頼への返信 |
| リプライ | 受信直後の即返信 | 「作成中です🧳」 |
依頼の流れはこうです:地名を受信 → すぐリプライで「作成中」→(裏でAIが数分かけて生成)→
完成したらプッシュでURLを送る。生成に時間がかかるため、即レスと完成連絡を分けているのがポイントです。
受信のしくみ:Webhook
用語:Webhook(ウェブフック)
「相手が、こちらの決めたURLへ自動で通知してくる」しくみ。
LINEは「ユーザーがメッセージを送った」を、こちらの公開URLに知らせてきます。
大事な気づき
LINEの受信は、こちらから「取りに行く」のではなく「向こうから来る」。
だから
受け取るための公開URLが必要になり、これが第9章「トンネル」の話につながります。
本物か確かめる:署名チェック
用語:チャネルシークレット/署名チェック
シークレット=照合用の鍵。届いた通知が「本当にLINEから来た本物か」を、この鍵で計算して確認すること。
たとえると
会計の「印影照合」。届いた書類のハンコ(署名)が、登録印(シークレット)と一致するか確かめ、偽物を弾く。
今回の「403拒否」は、この照合に失敗していた(鍵が設定漏れだった)ためでした。
用語:リッチメニュー
LINEトーク画面の下に常駐するタップメニュー(今回の「制覇マップ/旅プラン一覧」)。
画像と「どこを押したら何が起きるか」をAPIで登録します。
無料枠の注意
LINEの無料プランは送信が
月200通まで(配信+返信の合計)。家族利用なら十分ですが、上限がある点は意識を。
↑ もくじへ
9自宅PCを世界とつなぐ(サーバー・トンネル)
第8章で「受け取る公開URLが要る」と分かりました。でも、家のPCは普通インターネットから直接見えません。その解決策です。
用語:サーバー
「来た要求に応えて結果を返す」プログラム(やそれを動かすPC)。今回は
line_server.py が受付サーバー。
用語:ポート
1台のPCの中で、サーバーがどの「窓口番号」で待つかの番号。今回は
8788番。
なぜ直接つながらないのか
家庭のPCは、いわば「大きなビルの中の一室」。ビルには代表住所(プロバイダ)はありますが、
個々の部屋(PC)には外から届く表札がありません。だから外(LINE)から直接ノックできないのです。
用語:トンネル(ngrok/エングロック)
あなたのPC内のサーバーに、インターネットからアクセスできる「臨時の公開URL」を作ってくれる道具。
LINE → ngrokの公開URL → あなたのPCのサーバー、と橋渡しします。
たとえると
社内の内線電話(PC内サーバー)に、外線番号(公開URL)を一時的に割り当てるイメージ。
外から外線にかければ、ちゃんとその内線につながる。
実際にあったトラブル
ngrokの無料プランは「自分に割り当てられた住所」しか使えません。勝手な名前を指定して「ERR_313(有料プラン専用)」エラーに。
正しい割り当て住所(
...ngrok-free.dev)を使って解決しました。サービスごとの「無料の範囲」を知るのも大切です。
↑ もくじへ
10自動で動かす(スケジューラ・常駐)
「何もしなくても月・木の12時に届く」――この自動運転のしくみです。
用語:常時起動/バックグラウンド
プログラムを画面に出さず、ずっと裏で動かし続けること。受付サーバーは常に待機している必要があります。
用語:スケジューラ
「毎週 月・木の12時になったら、これを実行」と予約しておくしくみ。
今回は受付サーバーの中に「時計を1分ごとに見る」処理を組み込み、
月・木の12時になったら自動で配信を始めます。別々の仕組みを増やさず、すでに常駐しているサーバーに役割を持たせた形です。
用語:スタートアップ
Windowsに「ログインしたら、これを自動起動して」と登録する場所。
ここにボット起動を登録したので、PCを立ち上げるたびに受付+定期配信が自動で動き出します。
用語:二重実行の防止
同じ配信を1日に2回出さないよう、「今日はもう出した」という印(
last_auto.txt)を残して確認する工夫。
用語:ログ
プログラムが「いつ・何をしたか」を記録したファイル(
auto/logs/)。
うまく動かない時は、まずここを見れば原因の手がかりが分かります。
たとえると
会計の「仕訳の証跡(エビデンス)」。後から「何が起きたか」を追えるように記録を残す、という同じ習慣です。
↑ もくじへ
11つまずき大全(今回ハマった話)
初心者がよく出会う「あるある」を、今回の実例で深掘りします。ここを読むと“なぜ”が腹落ちします。
① 日本語が「萓・」に化ける(文字コード)
用語:文字コード
文字をPCが保存するときの「符号の規格」。同じ文字でも規格が違うと別の数値で保存される。
コンピュータは文字を「数値(バイト)」で記録します。「あ」を何番にするかの取り決めが文字コード。
代表がUTF-8(世界標準)と、Windows日本語の古いcp932(Shift-JIS系)。
書いた時と読む時で規格がズレると、数値の解釈が食い違い、文字化けします。
今回の実例
設定ファイルをUTF-8で保存したのに、Windowsの古い仕組みがcp932として読み、日本語コメントが化けてエラーに。
対策は3つ:(1)UTF-8で統一 (2)ファイル先頭に「これはUTF-8です」の目印(
BOM)を付ける (3)コメントを英語にする。
今回は状況に応じてこれらを使い分けました。
② 鍵の取り違え
「サブスクで動かすべき所」に「古いAPIの鍵」が渡ってしまい失敗(第7章)。
鍵は種類と用途があり、正しい鍵を正しい窓口へ渡すのが鉄則です。
③ ポートのバッティング
同じ窓口番号(8788)で2つのサーバーを起動しようとして衝突。「1つの窓口に受付は1人」。
古い方を止めてから起動して解決しました。
④ 順番の罠
LINE設定で「Webhookを有効化」しようとしたら「先にURLを登録して」と言われ、
逆に「URL登録」には「先に有効化」が要りそう…という“鶏と卵”に。
正解は「固定URLを先に決めておけば、URL登録 → 有効化 の順で進める」でした。
手順の前後関係を見抜くのも実務スキルです。
↑ もくじへ
12セキュリティの基本
いちばん大事な話。鍵の管理を間違えると、他人にサービスを悪用されます。
用語:トークン/シークレット(=鍵)
サービスを操作する権利の「パスワード」。漏れると悪用される。
- 鍵はすべて
.env という1ファイルに集約し、人に見せない・チャットに貼らない・SNSに載せない。
.gitignore に .env を登録し、うっかり公開を防止。
用語:.gitignore
「このファイルは共有・公開の対象にしない」と指定するリスト。
- 万一漏れたら、各サービスの管理画面で鍵を作り直す(再発行)。番号を変えれば古い鍵は無効になります。
たとえると
会計の「機密書類は施錠棚へ、持ち出し禁止」「印鑑は厳重管理、紛失したら改印」。まったく同じ感覚です。
↑ もくじへ
13用語ミニ辞典
| 用語 | ひとことで |
| システム | 部品が連携して1つの仕事をする全体 |
| クライアント/サーバー | お願いする側/応える側 |
| リクエスト/レスポンス | お願い/返事 |
| URL | ネット上の住所 |
| HTTP 200/403/404 | 成功/拒否/見つからない |
| HTML / CSS | ページの中身/見た目 |
| レスポンシブ | 画面幅に合わせて最適化 |
| ホスティング/Netlify | 公開する場所/今回の公開サービス |
| デプロイ | 公開環境に反映する作業 |
| JSON | プログラム用の台帳ファイル |
| Python/スクリプト | 言語/自動実行の手順書 |
| 仮想環境(venv)/ライブラリ/pip | 専用道具箱/既製部品/取り寄せツール |
| Claude/プロンプト | AI/AIへの指示文 |
| API/サブスク | 従量課金の窓口/定額使い放題 |
| ヘッドレス | 画面なしで裏で自動実行 |
| Messaging API | LINEをプログラムで操作する窓口 |
| Webhook | 相手から自分のURLへ来る自動通知 |
| ブロードキャスト/プッシュ/リプライ | 全員/特定/即時 の送り方 |
| シークレット/署名チェック | 照合用の鍵/本物か確認すること |
| リッチメニュー | LINE下部の常駐タップメニュー |
| サーバー/ポート | 応えるプログラム/その窓口番号 |
| トンネル(ngrok) | PCに臨時の公開URLを作る道具 |
| スケジューラ/スタートアップ | 時刻予約実行/ログイン時自動起動 |
| ログ | 動作の記録ファイル |
| 文字コード(UTF-8/cp932/BOM) | 文字の保存規格/その目印 |
| トークン/.gitignore | 操作用の鍵/公開対象から外す指定 |
最後に
全部を一度に覚える必要はありません。「こういう部品が、こう連携している」という地図さえ頭にあれば、
細かい用語は必要なときに辞典で引けば十分です。今回あなたは、その地図をもう手に入れました。おつかれさまでした。
↑ もくじへ