
こんにちは。やもともりです。
最近は「AI革命が来た!」と言われるほど、AIの進化が世間を驚かせていますね。
やもともり
AI大好き人間の私は、毎日ワクワクしたり感心したりしています。
ChatGPTやGeminiやClaudeは、スマホのアプリでも気軽に使えますし、ある程度までなら無料で使えるので、活用している人も多いのではないでしょうか。
どのAIが何を得意としているかは日々変わりますが、私は今のところ以下のように使い分けています。
- 基本的にはChatGPTに相談(賢くて、長文の読み取り力が高い)
- 画像生成ならChatGPTかGemini
- 図解やスライド、マニュアルの作成はChatGPT
- プログラムのコードを書くときはClaudeやChatGPT
質問や指示が長くなる時は「音声入力」がおすすめ。ChatGPTは音声を認識する能力がとても高いので、「ChatGPTの音声入力で文字おこしをして、おかしい箇所があれば修正し、それをGeminiやClaudeにコピペする」といった方法も使っています。
ChatGPTが世の中に出たときにも本当に驚きましたが、今回の記事ではChatGPTなどのチャット型AIではなく【AIエージェント】について書きます。Claude Code(クロード コード)やCodex(コーデックス)などのAIエージェントは、人間がパソコンでおこなう作業のほぼ全てを、代わりにおこなってくれます。普段からパソコンを使っている方には、ぜひ一度試していただきたいです。
と思われるかもしれませんが、AIエージェントはパソコンのローカルフォルダやブラウザを直接操作してくれます。エクセルやGoogleスプレッドシートの操作もしてくれます。やり方を教えてくれるだけでなく、実際に作業を代行してくれるところが強みです。
例えばAIエージェントは、100個のファイルの中身を読み取って分類したり、データ集計したりができます。エラーが出た時も原因を特定し、修正もしくは別の方法を試してテストまでおこなってくれるので、とても頼りになります。
私は無料枠でも試せるCodexアプリを使って、自分用にちょっとしたツールやアプリを作ってみました。(Codexアプリは、Codexをデスクトップで手軽に利用できるアプリです。MacパソコンでもWindowsパソコンでも使えます♪)
この記事では私がCodexアプリで作成したツールやアプリについても簡単に触れますが、一番伝えたいことはその作り方ではなく、「AIエージェントを使うとすごく楽しいよ!」ということです。
読んでくださった方が、「私もAIエージェントを一度試してみようかな。」、「こんなことができるなら、いつものあの作業も効率化できるかも。」なんて思ってくださると幸いです。
記事の内容は2026年5月時点の情報なので、今後は無料枠の廃止や料金の値上げ、利用制限の強化などの可能性があります。興味がある方は今のうちにAIエージェントを実際に試し、便利なツールをいくつか作ってみることをおすすめします。
スポンサーリンク
AIエージェントに感動
最近、AIエージェントが話題になっているけど、どれくらい便利なのかなぁ?
そんな好奇心から、CodexというAIエージェントが使える【Codexアプリ】を、パソコンにインストールしました。ChatGPTのアカウントがあれば、課金しなくてもすぐに始められます。インストールする際は、ターミナル操作が必要なCLI版ではなく、デスクトップアプリ版を選んでください。
最初は「人間だけでおこなう場合」と「AIエージェントに頼む場合」と、どちらが早くて楽かを比較しました。おこなったのは「Cloudflare Pagesで無料ブログを開設する作業」です。
私が手順を一つ一つ調べながら作業すると、ブログ開設までに2時間かかりました。同じことをAIエージェントに頼むと、20分で終わりました。しかも親切に手順書(README.mdファイル)まで作ってくれていてビックリ!
ブラウザ上で自動的にファイルが作られ、どんどん作業が進んでいくところを目にしたとき、「おおぉぉぉっ!!」と声が漏れるほど感動しました。透明人間が操作しているような感覚でした。
私のWeb制作の仕事も、文章を書く仕事も、もう全部AIエージェントに取って代わられてしまう...。
なんだか悔しくて嫉妬や焦りのような気持ちもありました。でもそれ以上に、自分が生きている時代にこんなすごいことが実現されたことに感動しました。
パソコンでできるほぼ全ての作業を、AIが代わりにできるようになりました。自分のパソコン内のローカルフォルダもAIエージェントが自動で操作してくれるだなんて、本当に革命的です。
AIエージェントが手順だけを教えてくれることがありますが、その場合、「その作業をあなたがやってください。」とお願いすれば進めてくれることが多いです。(※権限の都合上、どうしても私がやらなくてはいけない手続きもあります)
こんなツールやアプリを作りました
Codexアプリに手伝ってもらい、自分が困っていることを解決するツールやアプリを作ってみようと思いました。2つご紹介します。
①天気予報を2サイトから取得し、必要な情報だけを毎朝LINEで通知するツール
私は「Yahoo!天気」と「ウェザーニュース」の天気情報を毎朝確認しています。
天気や降水確率だけでなく、最高気温、風の強さ、熱中症警戒レベル、おすすめの服装、紫外線や花粉情報まで見るのは、地味にめんどうでした。
そこで、この確認作業を自動化し、毎朝LINEに天気情報が届くようにしました。

Codexアプリに相談し、以下のような仕組みで実現できました。(※ウェザーニュースについては、利用規約の中でスクレイピングが禁止されていたので、現在は別のサイトにおきかえて利用しています。)

お天気通知アプリの概要
Google Apps Script(GAS)の時間トリガー
毎朝決まった時間帯にGitHub Actionsを起動します。
天気情報の取得
Yahoo!天気などの天気情報サイトから必要な情報を取得します。
必要な情報だけに整理
取得した情報をGeminiが整理し、読みやすい形にまとめます。
LINEに通知
LINE Messaging APIを使い、自分のLINEに朝の天気メモとして送ります。
- 天気情報サイトの仕様が変わると、情報が正しく取得できなくなる可能性があります。
- 通知時間は、多少ずれることがあります。(GASの時間トリガーだけでなくGitHub Actionsのscheduleも念のため設定していますが、どちらも必ず決まった時間に届くという保証はありません。)
- 「GASは一定時間以上の作業はできない」などの決まりがあるので、GASを使うときは公式サイトの確認が必要です
コードを修正すれば、天気以外の情報の自動取得にも応用できます。
※今回紹介したような情報取得ツールを作る際は、利用するサービスの利用規約や利用条件の確認が必要です。サービスによってはスクレイピングや自動アクセスが禁止・制限されている場合があります。
天気通知ツールの詳細(タップで開閉)
# Daily Weather LINE
〇〇県△△市の天気を毎朝LINEへ送る仕組みです。
現在の構成では、Google Apps Script(GAS)が毎朝の起動係になり、GitHub ActionsがPythonの天気通知プログラムを実行します。
```text
GASの時間主導トリガー
↓
GitHub Actionsの workflow_dispatch を呼び出す
↓
GitHub Actions上で weather_line_bot.py を実行
↓
Yahoo天気・ウェザーニュースを取得
↓
Gemini APIで比較・要約
↓
LINE Messaging APIでLINEへ送信
```
## 役割分担
- `weather_line_bot.py`
- メインのPythonプログラムです。
- Yahoo天気とウェザーニュースを取得します。
- HTMLを可視テキスト化し、必要に応じて天気関連キーワード周辺に圧縮します。
- Gemini APIへ渡して、指定フォーマットで天気をまとめます。
- LINE Messaging APIで通知します。
- `.github/workflows/daily-weather-line.yml`
- GitHub Actionsの設定です。
- `workflow_dispatch` に対応しているため、GASやGitHub画面から手動起動できます。
- Pythonをセットアップし、`requirements.txt` をインストールして `weather_line_bot.py` を実行します。
- `schedule` も残している場合は、GitHub Actions側の予備起動として動きます。
- `requirements.txt`
- GitHub Actions上で必要なPythonライブラリ一覧です。
- `.env.example`
- 必要な環境変数の見本です。
- 実際の秘密情報はGitHub Secretsに保存します。
- 動作には必須ではありませんが、設定メモとして残しています。
## GitHub Secrets
このリポジトリの `Settings > Secrets and variables > Actions` に以下を登録します。
```text
GEMINI_API_KEY
LINE_CHANNEL_ACCESS_TOKEN
LINE_TO
```
`GEMINI_MODEL` は任意です。未設定なら `gemini-2.5-flash` を使います。
## GAS側の設定
GASはGitHub Actionsを起動するだけです。LINEトークンやGemini APIキーはGASには入れません。
GASのScript Propertiesには以下を登録します。
```text
GITHUB_TOKEN
```
このGitHub tokenはFine-grained tokenで作成し、権限を最小限にします。
```text
Repository access:
Only select repositories
yourname/daily-weather-line
Repository permissions:
Actions: Read and write
Metadata: Read-only
```
GASに貼るコード:
```javascript
const OWNER = "yourname";
const REPO = "daily-weather-line";
const WORKFLOW_ID = "daily-weather-line.yml";
const REF = "main";
function triggerWeatherWorkflow() {
const token = PropertiesService.getScriptProperties().getProperty("GITHUB_TOKEN");
if (!token) {
throw new Error("GITHUB_TOKEN が未設定です。");
}
const url = `https://api.github.com/repos/${OWNER}/${REPO}/actions/workflows/${WORKFLOW_ID}/dispatches`;
const response = UrlFetchApp.fetch(url, {
method: "post",
contentType: "application/json",
headers: {
Authorization: `Bearer ${token}`,
Accept: "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28",
},
payload: JSON.stringify({
ref: REF,
}),
muteHttpExceptions: true,
});
const status = response.getResponseCode();
const body = response.getContentText();
if (status < 200 || status >= 300) {
throw new Error(`GitHub workflow_dispatch failed: ${status} ${body}`);
}
console.log(`GitHub workflow dispatched: ${status}`);
}
function installDailyTrigger() {
ScriptApp.getProjectTriggers()
.filter(trigger => trigger.getHandlerFunction() === "triggerWeatherWorkflow")
.forEach(trigger => ScriptApp.deleteTrigger(trigger));
ScriptApp.newTrigger("triggerWeatherWorkflow")
.timeBased()
.atHour(6)
.nearMinute(55)
.everyDays(1)
.inTimezone("Asia/Tokyo")
.create();
}
```
補足: `installDailyTrigger()` は1回だけ手動実行します。その後はGASが毎朝6:55ごろに `triggerWeatherWorkflow()` を実行します。
## LINE送信
LINE Messaging APIのPush messageを使います。
Geminiの出力に `🎀最終回答はこちら` が含まれる場合、LINE送信時に以下のように分割します。
```text
1通目: ウェザーニュース・Yahoo天気の比較
2通目: 🎀最終回答はこちら 以降
```
LINEの文字数上限を超える場合は、さらに複数通へ分割します。
## GitHub Actions scheduleについて
GitHub Actionsの `schedule` はUTC基準です。
日本時間6:55にしたい場合は以下です。
```yaml
cron: "55 21 * * *"
```
ただし、GitHub Actionsのscheduleは遅延や未実行が起きることがあります。そのため、現在はGASを毎朝の主な起動係として使います。
GitHub Actions側の `schedule` は予備として残しても構いません。GAS運用が安定したら、`daily-weather-line.yml` から `schedule` だけ削除し、`workflow_dispatch` のみ残す運用もできます。
## ローカルフォルダ
このローカルフォルダは、今後の修正作業用です。
```text
C:\Users\yourname\Documents\Codex\2026-05-14\gemini-6-55-gemini-yahoo-line
```
ローカルで変更した場合は、GitでコミットしてGitHubへpushします。
```powershell
git add .
git commit -m "Update weather bot"
git push
```
## 注意
- 天気サイトの利用規約、アクセス頻度、robots.txt等は運用前に確認してください。
- この仕組みは1日1回程度の個人利用を想定しています。
- APIキーやトークンはコードに直接書かず、GitHub SecretsやGAS Script Propertiesに保存します。
②AIが自分の分身となって文章を作成してくれるアプリ
私は言葉にこだわりを持っているので、AIに文章作成を丸投げすることには抵抗を感じていました。
しかし、AIが私の文体や価値観を反映して文章を整えてくれるのであればとても便利です。
私の体験談や感想やアイデアをAIにたくさん渡して、AIが読みやすくまとめてくれて、最後に私が確認と訂正をして仕上げる。この方法なら、自分らしさや情熱は保ちつつ、今までよりもスムーズに文章が書けます。
そこで、「AIが自分の分身となって文章を作成してくれるアプリ」を作ってみました。AIが私の情報を参考にしたうえで、ブログ記事作成や、メール返信案を考えてくれるというものです。LINEの返信やSNS投稿の内容を考えるときにも役に立ちます。
スマホでも気軽に使えるように、Webアプリにしました。

Googleにログインしているブラウザで、自分だけが使える設定にしています。

文章作成アプリの概要
過去の文章を分析
私の過去の文章を大量に集めたものをCodexアプリが読み取り、文体や価値観の特徴を「プロファイル」ファイルにまとめます。
プロファイルを保存
「プロファイル」ファイルをGoogle Driveに保存します。
入力内容を受け取る
GASのWebアプリ画面で、書きたいテーマや伝えたい内容を入力します。アプリ画面は、パソコンやスマホのブラウザで開けます。
文章案を作成
入力内容とプロファイルをもとに、Geminiが私らしい文章案を作成します。
私の過去の文章は、「はてなブログの公開記事」、「ビジネスメールの送信内容」、「LINEでの過去の発言」、「Xの過去の投稿」からそれぞれ準備しました。
はてなブログ公開記事については、はてなブログの「管理画面>設定>詳細設定」の中から「バックアップ用テキストファイル」をダウンロードしました。(公開済みの文章と下書き文章を分ける作業はAIにお願いしました。)
ビジネスメールの送信内容については、過去に私がお客様に送ったメールをいくつかピックアップし、個人情報を伏せた状態でまとめました。
LINEでの過去の発言は、仲の良い友達とのトークを開き、トーク履歴をテキスト形式で取得し、個人情報を伏せた状態でまとめました。
Xの過去の投稿については、Xの設定からデータアーカイブをリクエストし、Zipファイルの形で取得しました。(Zipファイルをダウンロードする準備には時間がかかります。準備が完了すると、Xから通知が届きます。今回は24時間くらいで通知が届きました。)
※NotionやObsidianにデータをたくさん集めている方は、そのデータを利用すると便利です。
たとえば、ブログ記事作成なら、テーマ、想定読者、入れたい内容、自分の体験談などをアプリ画面に入力すると、AIが文章案を作成してくれます。
ビジネス返信なら、相手から届いたメールの内容をアプリ画面にコピペして個人情報を伏字にし、これまでの経緯やこちらの意図などを入力します。すると、AIが返信案を作成してくれます。
この仕組みを応用すれば、「自分の仕事の手順や注意点」をまとめたデータをAIに読み取ってもらい、代わりに作業してもらうこともできますね。
文章生成アプリの詳細(タップで開閉)
# 私の分身AI 要件定義
## 目的
自分の過去文章を分析し、用途別の文体プロファイルとテンプレートを作る。
そのプロファイルを使って、スマホから自分らしい文章案を作れるようにする。
基本の流れ。
```text
バックアップを分析
↓
文体プロファイル化
↓
用途別テンプレート化
↓
必要に応じて過去文参照
↓
スマホから文章生成
```
最初の実装対象は、はてなブログ記事作成とする。
## 対象ユーザー
- 主利用者は自分。
- 主端末は iPhone。
- ただし Android でも使える方式を前提にする。
- PCのCodexアプリは、分析、要件定義、プロファイル作成、実装のために使う。
- 日常利用では、Codexアプリを開かずにスマホから使える状態を目指す。
## 対象ユースケース
### Phase 1: はてなブログ記事作成
スマホからテーマや入れたい内容を入力し、HTML込みの完成下書きを生成する。
出力に含めたいもの。
- タイトル案
- 導入文
- 見出し構成
- 本文HTML
- よく使う囲み、吹き出し、装飾
### Phase 2: ビジネス返信
ココナラやメール問い合わせへの返信案を作る。
入力に含めたいもの。
- 相手の文面
- これまでの経緯
- こちらの意図
- 丁寧度
- 返信先の種類
- 言ってはいけないこと
出力は、スマホですぐコピーできる返信案を複数出す。
### Phase 3: LINE返信
直近のやりとりと自分の意図を入力し、LINEで返しやすい短めの返信案を作る。
入力に含めたいもの。
- 直近のやりとり
- 相手との関係性
- 今回どう返したいか
- 短め、あたたかめ、距離を置く、断るなどのトーン
- LINE外で起きた重要な文脈
出力は、スマホでそのままコピーしやすい形にする。
### Phase 4: X投稿
Xのアカウントデータから投稿本文を取り出し、X投稿用プロファイルを作る。
そのプロファイルを使って、短いメモ、ブログ記事、近況からX投稿案を作る。
出力は複数案にし、過去のX投稿の温度感に寄せる。
## データ収集方針
自分の過去発言データは、媒体ごとに分けて集める。
### LINE
LINEの該当トークを開き、トーク履歴をテキスト形式で保存する。
相手の発言と自分の発言が混ざるため、分析時は自分の発言を中心に扱う。
### はてなブログ
はてなブログの詳細設定からバックアップ用テキストファイルを取得する。
取得したバックアップ用テキストファイルは、`STATUS: Publish` の公開記事と、`STATUS: Draft` の下書き記事に分けて保管する。
公開記事は `01_writing_sources/hatena/` に置き、「実際に外へ出した文章」として、文体、構成、語り口、装飾、価値観、考え方の主要な参考として扱う。
`STATUS: Draft` の記事は `02_reference_profiles/` に置き、公開文体そのものの参考にはしない。
Draftには大事な価値観、考え方、関心テーマ、判断基準が含まれているため、これらを抽出する参考資料として扱う。
ただし、Draftの文体、荒いメモの書き方、未整理な言葉づかい、見せる用に整えていない表現は、AI生成文章にそのまま反映しなくてよい。
はてなブログ用には、文体プロファイルとは別に記事装飾プロファイルを作る。
記事装飾プロファイルでは、以下を扱う。
- 囲み
- 吹き出し
- 見出し
- 太字やマーカー
- HTMLタグ
- class名
- class付きHTMLの構造
- 装飾の使いどころ
初期版ではCSS本体は必須ではない。
過去記事HTML内のclass付き装飾サンプルを使う。
必要になった場合のみ、はてなブログ側に設定されているCSS本体も確認する。
### ビジネスメール、ココナラ
ココナラなどの過去メッセージをいくつかコピーし、ココナラ用テキストファイルにまとめる。
場面別に集めると分析しやすい。
- 初回問い合わせ
- 見積もり
- 納期調整
- お礼
- 納品
- 断り
- トラブル対応
### SNS、X
Xの設定からデータアーカイブをリクエストして取得する。
流れ。
```text
設定とプライバシー
↓
アカウント
↓
データのアーカイブをダウンロード
↓
アーカイブをリクエスト
```
アーカイブ取得には24時間以上かかることがある。
取得後、AIに渡して投稿本文だけを抜き出したテキストファイルを作る。
DM、個人情報、投稿本文以外の不要データはプロファイルに使わない。
## 初期プロファイルに必要な量感
最初のプロファイルなら、以下くらいでかなり傾向が見える。
- LINE: 自分発言100件くらい
- ビジネス返信: 20〜50件
- ブログ: 公開記事10〜30本
- X: 50〜200投稿
その後、使いながら更新する。
## データ整理方針
文章生成の材料、参考資料、プロファイル、テンプレート、アプリ設定、手動保存出力、GASコードを分ける。
```text
00_requirements/
01_writing_sources/
02_reference_profiles/
03_profiles/
04_templates/
05_app_config/
06_gas_code/
```
`01_writing_sources/` は、AIに文体や温度感の材料として使う文章データを置く。
多少加工してあってもよいが、媒体ごとに分け、何の文章か分かる名前にする。
`02_reference_profiles/` は、価値観、判断基準、関心テーマ、補助情報を参照するためのフォルダとする。
ここに置いた文章や資料の文体、未整理な言葉づかい、一般説明文の言い回しは、AI生成文章にそのまま反映しなくてよい。
通常生成では、`03_profiles/` にある圧縮済みプロファイルと `04_templates/` にあるテンプレートを中心に使う。
## 用語定義
### プロファイル
プロファイルは、過去文章を分析して抽象化したルール集。
例。
- よく使う言葉
- 文の長さ
- 改行の癖
- 敬語の使い方
- 感情の出し方
- 話の進め方
- 避けたい表現
- 使うCSS装飾と使いどころ
### サンプル
サンプルは、実際に過去に書いた文章や、参考にしたい具体的な実例。
プロファイルが「どう書くかのルール」だとすると、サンプルは「実際にはこのくらいの温度感で書いている」という実物の例。
通常はプロファイルを中心に使い、必要に応じて代表的なサンプルを添える。
AIが書いた文章、引用文、相手の発言は、自分の文体サンプルとして混ぜない。
古い文章と最近の文章は、必要に応じて分ける。
初期版では自動保存しないが、ユーザーが手動で保存した生成結果は、後でプロファイル更新の材料にできる。
## プロファイル作成方針
AIが過去文章を分析し、以下を抽出する。
- 文体
- 言葉づかい
- 考え方
- 改行
- 敬語
- 感情の出し方
- 話の進め方
- よく使う表現
- 避けたい表現
- 言ってはいけないこと
- 用途別の温度感
分析結果は、用途別に分けてまとめる。
- LINE返信用
- ビジネスメール返信用
- ブログ記事作成用
- はてなブログ装飾用
- X投稿用
通常の文章生成では、生データを毎回すべて読ませない。
以下の形で使う。
```text
生データを分析
↓
用途別プロファイルと代表例に圧縮
↓
通常生成ではプロファイル中心に使う
↓
必要なときだけ過去文参照
```
ここでいう「過去文参照」とは、プロファイルに載せきれない具体例を補うために、元データの中でキーワードが含まれている箇所を検索し、過去文章の実例を見ること。
初期版では、過去文参照は実装しない。
必要なときに、ユーザーが過去文を手動で探して貼り付ける運用にする。
将来的には、GAS側で元データに対してキーワード検索やタグ検索を行い、関連する過去文を自動で候補表示することも検討する。
## 使い方の基本
毎回ただ「私っぽくして」と頼まない。
依頼時には以下を指定する。
- どのプロファイルを使うか
- 誰に向けた文章か
- 何の目的か
- どれくらい丁寧、またはくだけるか
- 何案ほしいか
- そのまま送る用か、たたき台か
- 言ってはいけないこと
- 本文外で起きた重要なこと
最終的には、用途別の固定テンプレートを作る。
- LINE返信テンプレ
- ココナラ返信テンプレ
- はてな記事テンプレ
- X投稿テンプレ
## 返信系の限界と安全設計
AIは、プロファイル化されていない情報や、渡されていないやりとりには対応できない。
つまり、AIは知らない文脈までは察せない。
LINE返信やビジネスメール返信では、以下が不足すると的外れな文章になる可能性がある。
- 相手との今までのやりとり
- 電話や口頭で話した内容
- LINE外で起きた出来事
- 相手や自分の最新状況
- 触れてはいけない話題
- 本当は返信しないほうがいい事情
重要な文脈がある場合は、作成画面で注釈を入れる。
例。
```text
最近、電話で口論になりました。
相手はかなり怒っています。
理由を問いたださず、短く謝意だけ伝えたいです。
```
返信系では自動送信しない。
AIは下書きまで作り、送信前に必ず人間が確認する。
## LINEスクショの扱い
LINEのテキストコピーだけでは、どちらの発言か分かりにくい。
LINE返信そのものは将来フェーズの対象に含める。
ただし、今回作るPhase 1のGAS Webアプリには、LINEスクショを添付して画像解析する機能は入れない。
今の時点では、スクショを直接GASで処理する実装は重い。
そのため、まずは以下の手動運用を想定する。
```text
LINEのスクショを撮る
↓
別途AIに、左の吹き出しを相手、右の吹き出しを私としてテキスト化してもらう
↓
相手/私の会話として整えたテキストを貼る
↓
返信案を作る
```
スクショには、相手名、アイコン、個人情報が写る可能性があるため、必要に応じてトリミングや伏せ字を使う。
## プライバシー要件
本名、電話番号、住所、メールアドレスなどの個人情報は、最終的なmdプロファイルに入れない。
相手の個人情報、子どもの情報、学校名、取引金額、契約条件なども必要最小限にする。
保存したくない入力や生成結果は永続保存しない。
保存する場合は、明示的に保存する操作を用意する。
## 実装方式
Phase 1は、GAS HTML ServiceによるWebアプリを第一候補にする。
Googleフォームではなく、GAS Webアプリを優先する。
理由。
- 入力画面と結果画面を同じページにできる。
- スマホ画面に結果を表示できる。
- コピーボタンを置ける。
- Gemini APIを呼びやすい。
- Google Drive上のプロファイルmdを読み込める。
- 結果を保存する、しないを自分で設計できる。
- iPhone / Android の両方で使える。
- Webアプリとしてホーム画面に置ける。
## GAS Webアプリの想定フロー
```text
スマホのブラウザ
↓
GASのWebアプリ画面
↓
Google Drive上のプロファイルmdを読む
↓
Gemini APIを呼ぶ
↓
結果を画面に表示
↓
コピーボタンでコピー
```
## Phase 1の画面要件
### 入力
- テーマ
- 読者
- 入れたい内容
- 自分の体験談
- 装飾あり/なし
- 記事の長さ
- 追加したい注意点
- 生成モデル
記事の長さは以下から選ぶ。
- 短め: 1000〜1500字
- 標準: 2000〜3000字
- 長め: 4000〜5000字
長めには注意書きを出す。
```text
長めは生成に時間がかかり、失敗することがあります。
```
### 出力
- タイトル案
- 本文HTML
- X投稿案
- 補足メモ
### 操作
- Geminiで作成
- 本文HTMLをコピー
- タイトルをコピー
- X投稿案をコピー
初期版では、OpenAI比較は入れない。
## Phase 1〜4共通の画面要件
Phase 1〜4を同じGAS Webアプリ内に置く。
画面上部には、各機能へすぐ移動できるリンクを置く。
- はてな記事作成
- ビジネス返信
- LINE返信
- SNS投稿
各機能は、見分けやすいように色を少し変える。
- はてな記事作成: はてなブログらしい落ち着いたグレー
- ビジネス返信: 上品な紺
- LINE返信: やわらかい緑
- SNS投稿: 明るいピンク寄り
生成が完了したら、該当する結果欄へ自動スクロールする。
そのとき、結果欄の背景や枠を短くふわっと光らせ、生成完了が分かるようにする。
生成完了時には、小さい「ピコーン」音を鳴らす。
ただし、音は補助的な演出とする。
iPhoneの消音モード、ブラウザ設定、音量設定、自動再生制限などで鳴らない場合があっても、生成機能には影響しない。
各機能には、`入力内容をすべてクリア` ボタンを置く。
このボタンを押した場合、すぐには消さず、以下の確認ポップを出す。
```text
すべての入力内容をクリアしますか?
```
OKを押した場合のみ、その機能の入力欄、選択肢、モデル欄をデフォルト状態に戻す。
同時に、その機能の結果欄も非表示にする。
生成結果の自動保存はしない。
Google Drive、スプレッドシート、GAS側の永続領域には、生成結果を自動保存しない。
## Phase 1〜4共通の結果表示要件
結果が複数案ある機能では、最初に `おすすめ案` を表示する。
その下に、`その他の案` として候補一覧を表示する。
対象。
- ビジネス返信
- LINE返信
- SNS投稿
各候補には個別のコピーボタンを付ける。
`すべてコピー` を前提にせず、気に入った案だけをすぐコピーできるようにする。
コピーが成功した場合は、その機能の近くに以下を表示する。
```text
コピーしました。
```
コピーに失敗した場合は、その機能の近くに以下を表示する。
```text
コピーに失敗しました。手動で選択してコピーしてください。
```
## Phase 1のスコープ外
Phase 1では、はてなブログ記事作成に集中する。
以下は初期版には入れない。
- LINEスクショの画像解析
- LINE返信画面
- ビジネス返信画面
- X投稿作成画面
- Gmail連携
- OpenAI API連携
- 生成結果の自動保存
- 過去文の自動検索、候補表示
ただし、LINE返信、ビジネス返信、X投稿、過去文参照はプロジェクト全体の対象外ではない。
必要に応じて、後続フェーズで追加する。
## AI API方針
### 初期標準
初期版では Gemini API Free Tier のみを使う。
理由。
- 無料枠中心で始めたい。
- たまに使う予定なので、まず無料枠で試しやすい。
- GASやGoogle Driveとの相性がよい。
### OpenAI API
初期版ではOpenAI APIを使わない。
ChatGPTの月額課金とは別会計のため、無料前提にはしない。
ただし将来OpenAI APIへ切り替えられるよう、AI呼び出し部分は独立させて設計する。
初期実装では、以下のように役割を分ける。
- 画面
- プロファイル読み込み
- プロンプト作成
- AI呼び出し
- 結果整形
- 画面表示
将来OpenAI APIを使う場合は、AI呼び出し部分だけを差し替える。
出力形式は、将来モデルを切り替えても画面側を大きく変えずに済むよう、できるだけ固定する。
## GASの注意点
### タイムアウト
Google Apps Scriptは、1回の処理時間に上限がある。
Geminiだけでも、以下の条件だと危なくなる。
- 8000〜10000字の記事を一発生成
- プロファイルが長すぎる
- 過去記事サンプルを大量に毎回入れる
- HTML装飾や吹き出しをかなり細かく指定する
- 生成後に校正、リライト、X投稿案作成まで同時にやる
- エラー時に自動リトライを何度もする
初期版では、以下に絞る。
- Geminiのみ
- 標準2000〜3000字
- 文体プロファイルと装飾プロファイルを使う
- 過去記事全文は毎回読ませない
- X投稿案やリライトは必要なら別ボタンにする
### APIエラー時の表示
APIエラーやタイムアウトが起きた場合は、スマホ画面に以下のメッセージを表示する。
```text
生成に失敗しました。入力を短くするか、時間を置いて再試行してください。
```
### APIキー管理
APIキーは画面側に出さない。
GAS側のスクリプトプロパティなどに保存する。
### 公開設定
GAS WebアプリのURLを知っている人が使える設定にすると危ない。
まずは自分のGoogleアカウントだけで使う前提にする。
### 保存設計
初期版では、生成結果を自動保存しない。
結果はGAS Webアプリ画面に表示し、必要な部分をユーザーがコピーして使う。
保存したい場合、ユーザーが手動で保存した生成結果をプロファイル更新に使う。
既存スプレッドシートに生成結果を残し続けない。
## Google Driveに置く想定フォルダ
```text
personal-writing-ai/
00_requirements/
01_方式比較.md
02_要件定義.md
01_writing_sources/
hatena/
hatena_public_articles_20260522.txt
line/
coconala/
x/
02_reference_profiles/
hatena_draft_articles_20260522.txt
03_profiles/
hatena_blog_style_profile.md
hatena_blog_decoration_profile.md
business_reply_profile.md
line_home_profile.md
x_profile.md
04_templates/
hatena_article_prompt.md
business_reply_prompt.md
line_reply_prompt.md
x_post_prompt.md
05_app_config/
app_settings.json
06_gas_code/
```
`01_writing_sources/hatena/hatena_public_articles_20260522.txt` は、はてなバックアップから `STATUS: Publish` の記事を分けたもの。
`02_reference_profiles/hatena_draft_articles_20260522.txt` は、はてなバックアップから `STATUS: Draft` の記事を分けたもの。
Draftは価値観や判断基準を抽出するために参照するが、Draftの文体や未整理な言葉づかいはAI生成文章にそのまま反映しない。
## 現時点の結論
最初に作るものは、GAS Webアプリ版の「はてなブログ記事作成ツール」。
初期版はGemini API無料枠のみを使い、HTML込みの完成下書きをスマホ画面に表示してコピーできる形にする。
OpenAI APIは初期版では使わない。ただし将来切り替えられるよう、AI呼び出し部分は独立させて作る。
返信系は、文脈不足による事故を避けるため、まずは手動で文脈を補足する運用にする。
LINE返信は将来フェーズに含めるが、スクショから会話をテキスト化する運用を先に試し、GASでの画像入力対応は後のフェーズにする。
## 次に決めること
- Gemini APIキーを取得し、GASのスクリプトプロパティに `GEMINI_API_KEY` として保存する。
- Google Drive上のプロファイルmd、テンプレートmdをファイルID指定で読む。
- `05_app_config/` に、GASで使うファイルIDや設定値の控えを置く。
- `06_gas_code/` に、GAS Webアプリのコード控えを置く。
- Phase 1の画面項目を、はてなブログ記事作成に必要な最小構成に絞る。
- HTML出力は本文HTML中心で固定し、はてなブログに貼りやすい形にする。
- 生成結果の自動保存機能は初期版では入れない。
## 参考公式情報
- Google Apps Script Quotas: https://developers.google.com/apps-script/guides/services/quotas
- Google Apps Script HTML Service: https://developers.google.com/apps-script/guides/html
- Google Apps Script Properties Service: https://developers.google.com/apps-script/guides/properties
- Gemini API Billing: https://ai.google.dev/gemini-api/docs/billing
- Gemini Models: https://ai.google.dev/gemini-api/docs/models/gemini-v2
- OpenAI API Pricing: https://openai.com/api/pricing/
- OpenAI Text generation: https://platform.openai.com/docs/guides/text?api-mode=responses
なぜ仕組みの中でGemini APIを使ったのか
①のツールと②のアプリ、どちらも仕組みの中でGeminiを利用しています。GeminiではなくChatGPTなど他の生成AIを使ってもいいのですが、今回は「無料枠で使えること」を優先してGemini APIを採用しました。(Gemini APIには無料で試せるモデルがあります。)
AIエージェントを使わなくても作れるけれど
正直なところ、今回作ったツールやアプリは無料枠の範囲内で作った簡易版であり、すごく高性能なものでも真新しいものでもありません。時間をかけて調べたり、チャット型AIを活用したりすれば、AIエージェントを使わなくても作れるものです。
たとえば天気通知ツールなんてなくても毎朝チャット型AIに同じ質問をコピペすれば回答がもらえます。AIによる文章生成も、自分の文体や価値観をまとめたファイルをチャット型AIに渡せば私らしい文章を作ってくれます。
重要なことは、「AIエージェントの力を借りれば、システムエンジニアではない私でも圧倒的に早く作れた」という事実です。
今までの私だったら、知識がないことに挑戦するときにはまず人に聞いたり、ネットで調べたり、チャット型AIにやり方を教えてもらったりしていました。その時点で、「知らない用語ばかり...。自分には難しそう。時間がかかりそう。」と感じると、諦めてしまうことがありました。なんとか途中までは自分で進めたとしても、エラーなどの壁にぶつかり、断念することもありました。
でも今は、AIエージェントが概要を説明した上で一から作ってくれるので、挑戦の幅が広がったように感じます。
Codexアプリを使って感じた注意点
「AIエージェントがあれば、誰でも簡単にアプリが作れる」などと言われていますが、実際に使ってみていくつか注意点に気づいたので、ここにまとめます。
APIキーの取扱いには細心の注意が必要
便利なアプリが作れたとしても、頻繁な利用や第三者による不正利用などが原因で、思わぬトラブルにつながる可能性があります。APIを利用する仕組みでは、利用上限額を設定していない場合、高額な請求が発生することがあります。特に、画像や動画の解析・生成機能は利用料金が高くなりやすいため注意が必要です。
やもともり
AIが作ったプログラムが想定外の動きをして、処理が繰り返し実行され、高額な料金が発生する可能性もあります。
APIを利用する仕組みを使うのであれば、無料枠の範囲内で試すか利用上限額を設定し、APIキーが外部に漏れないよう厳重に管理しましょう。
無料枠で使うときの注意点
この記事では、AIエージェントを気軽に試せるように無料枠で使えるものをいくつかご紹介しました。しかし、無料枠で利用する際にはいくつか注意しておきたい点があります。
- API利用制限:Gemini APIなどは、一部の機能を無料枠で使えますが、利用制限(リクエスト数やトークン数など)には注意しましょう。たとえば短期間に大量の文章を生成しようとすると制限に引っ掛かり、一定期間は利用できなくなります。
- GASの実行制限:Google Apps Scriptには、1日に実行できる時間や回数に制限があります。あまり複雑な処理をさせすぎたり、頻繁に利用し過ぎたりすると、制限に達してしまい動かないことがあります。
- セキュリティ設定:GASでWebアプリを公開する際には、不特定多数の人がアクセスできてしまわないよう、認証設定をしっかり行うことが重要です。誤って公開設定にしてしまうと、意図しないアクセスを許してしまう可能性があります。
あくまで「無料枠はお試し用」ということを念頭に置いて利用することをおすすめします。本格的に利用する場合は、有料プランへの移行を検討しましょう。
全部を理解しなくても、大まかな把握は必要
AIエージェントを使うと、コードを全部自分で書けなくてもアプリを作れることがあります。
これは本当にすごいことです。
ただ、まったく何も分からないまま使うのは少し不安もあります。
専門家のように細かいコードを全部理解する必要はないと思います。
でも、「ここに何があって、これがこういう働きをして動いている」という大まかな地図は持っておいた方がいいです。
例えば今回作成した文章生成アプリで言うと...
Google Driveには、プロファイルやテンプレートを置く。
GASには、Webアプリとして動かすコードを置く。
Gemini APIでGeminiを呼び出して文章案を生成する。
GASのスクリプトプロパティには、外部に公開したくない情報(APIキーやファイルID)を置く。
もし分からないところがあれば、AIに「小学生にも分かるように説明して」「何かに例えて教えて」と聞けば、かなりかみ砕いて教えてくれます。
少しずつ覚えていくと、日常の中でふと、「これはアプリにできるかも」「これは自動化できるかも」「これはテンプレート化できるかも」と考えられるようになり、AIがますます身近な存在になってきます。
また、AIを実際に自分で使っていくうちにAI関連のニュースへの理解度も上がり、「あっ!その言葉、聞いたことがある♪」が増えてきます。
AIに全部任せるのではなく、一緒に考える
「よく分からないけれど、全部AIエージェントの言う通りにすれば大丈夫。」という考え方は危険です。
特に、ファイルを変更する、外部ツールを使う、APIキーや権限に関わる操作をするときには要注意。
- これは何のための操作なのか
- どのファイルやサービスに影響するのか
- APIキーや個人情報が外に出ないか
- 失敗したときに元に戻せるのか
- 自動で送信や公開がされないか
AIエージェントから「〇〇していいですか?」と毎回聞かれると、その度に内容を確認して「承認」ボタンを押すのは面倒ですが、よく分からずに承認して困ったことにならないように、分からなければ承認する前に「それはどういう意味ですか?承認することでどんなリスクが考えられますか。」などとAIに確認したほうが安心です。
複雑なツールを作るときは、作り始める前に必要な機能や条件を明確にしておく
AIエージェントはとても便利です。よく分からないまま「~がしたい。~が作りたい。」と伝えるだけで簡単に実現できることがあります。
ただ、複雑なツールを作り始める前には、必要な機能や条件を明確にしておいた方がいいと思います。AIに相談すれば、事前に何を決めておいた方がいいか教えてくれます♪
- 何に困っているのか
- そのアプリで何ができれば助かるのか
- スマホでも使いたいのか、パソコンだけで使えればよいのか
- どれくらいの頻度で使うのか(毎日?一日に何回くらい?)
- どのデータを読み込ませるのか
- 自動で保存や送信をするのか
- 人間が必ず確認する部分はどこか
- 無料枠で試すのか、有料利用も考えるのか
こういうことを決めておかないと、あとから「もっといい方法があった...」「この仕組みではこういう場合に困る」と気づくことがあるのです。
譲れないことと妥協できることをしっかり決めておく。使うシーンを想像し、現時点で一番自分に合った方法で作る。時間と手間は増えますが、長い目で見たら最適解への近道になります。
AIエージェントをローカルパソコンで動かすときはメモリ(RAM)不足に注意
CodexやClaude CodeなどのAIエージェントをローカルパソコンで利用すると、アプリ本体や関連するソフトウェアが多くのメモリ(RAM)を使用することがあります。
ストレージ(SSD)の空き容量が十分にあっても、メモリ(RAM)が不足するとパソコンでは動作が重くなったり、画面が固まったりすることがあるのです。
私の場合、AIエージェントにChromeブラウザを操作してもらうときなどに、メモリ不足で処理が止まってしまうことがありました。Google Chromeは比較的多くのメモリを消費するブラウザとして知られています。Chromeで複数のタブを開いた状態でAIエージェントを利用すると、メモリ使用量が増え、パソコン全体の動作が重くなる場合があります。
Chromeの「設定」→「パフォーマンス」→「メモリ」から「メモリセーバー」を有効にしておくと、使用していないタブのメモリ使用量を抑えられるため、AIエージェント利用時の負荷軽減につながる場合があります。
一般的には、16GB以上のメモリを搭載したパソコンであれば快適に利用しやすいとされています。一方で、8GB以下のメモリを搭載したパソコンでは、同時に開いているアプリやブラウザのタブ数によってはメモリ不足になることがあります。そのため、AIエージェントを利用する際は、使っていないアプリやタブを閉じておくと安心です。
一つのチャットで長い会話や雑多な話題が続くと、AIの回答の精度が落ちることがある
AIチャットは過去の会話内容を参考にしながら回答を生成します。そのため、一つのチャットで長い会話を続けたり、さまざまな話題を混ぜてやり取りしたりすると、AIが必要な情報を見つけにくくなることがあります。
その結果、以前に伝えた内容を忘れたような回答をしたり、指示とは異なる内容を返したりすることがあります。特に、プログラミングや文章作成などの複雑な作業では、回答の精度が低下する場合があります。
AIを効率よく利用するためには、話題ごとに新しいチャットを作成するのがおすすめです。例えば、旅行の相談とブログ記事の作成を同じチャットで進めるのではなく、それぞれ別のチャットに分けるとAIが状況を理解しやすくなります。
また、会話が長くなってきた場合は、一度AIにこれまでの内容をまとめてもらい、その要約を新しいチャットに貼り付けて作業を続ける方法も効果的です。
おわりに
AIエージェントを実際に使ってみて心の底から感動したので、今回の記事を書きました。「興味はあるけれどまだ使ったことがない」という方は、自分用の小さなツールを1つ、AIエージェントと一緒に作ってみるのはどうでしょうか。この記事で書いた要点や注意点だけおさえたら、まずはよく分からなくても作ってみて、困ったときに都度AIに質問するという進め方で大丈夫です。
ブログ記事やYouTube動画で、何か便利なツールの使い方や作り方を紹介していたら、その情報をまるっとAIにコピペして、「こういうツールを作ってください。〇〇のところは△△できるよう工夫してください。」などと頼むこともできます。
子どもの行事予定のプリントを写真に撮り、AIエージェントに読み取ってもらい、「Googleカレンダーに反映してください。」と頼むこともできます。チャット型AIが「やり方を教えてくれる先生」だとしたら、AIエージェントは「実際に手を動かしてくれるアシスタント」です。
やもともり
一度では上手くいかないこともあります。そんなときはAIと一緒に試行錯誤しましょう。
また、AIをより使いやすくするためには、「自分に関係する情報をたくさんデータとしてまとめておくこと」が大切です。自分の価値観、仕事の内容や手順、関係する人の情報などをまとめておき、必要に応じてAIに渡します。(※個人情報は伏せて。)情報が多く具体的であるほど、AIの回答や制作物の質が上がります。情報を自分の頭の中だけ留めておくのではなく、文字データにして保存しておけばささっとAIに渡せます。入力が面倒であれば、音声入力すればAIが文字おこししてくれます。紙のメモは画像にすればAIが読み取ってくれます。
今は、教育や介護の分野でAIをどう活用していけるのかを考え中です。AIが日本の人手不足に一役買ってくれる存在であればいいなと思っています。
この記事を読んでくださった方が、自分なりのAI活用のヒントを見つけてくださると嬉しいです。











