見出し画像

院長先生、2025-2026 年末年始の自由研究にいかが?8️⃣「音声で自動日記④ 日記とTODOをAPI KEY無しで」


先日は7️⃣の記事を書きました

先日はスマホでの稼働を確認しました



朝のROUTINE


私の朝のROUTINEは電車の駅に行くまでの間に
日記:過去の振り返り
TODO:未来の予定

を音声入力で行うということをオートメモ(ソースネクスト社)&ZAPIERの連携で行ってきました

オートメモに入力する際に
「日記です日記です」と入れると文字起こしされた日記がgoogleカレンダーに、それ以外がSlackとGoogle Taskに入るようにしていました。

しかし、オートメモの仕様設定変更で最近は手入力になっておりました。

私の趣味は


僕には趣味が無いのですが唯一の趣味がTODOを消すことなんです

最近もChromeの拡張機能で簡単にGoogle TaskにTODOを入れることができるものを作りました

しかし、この機能はPCのChromeでしか使えないのです・

スマホで朝にまとめて過去の振り返りとみたいの創造を


日記:過去の振り返り(音声>Google Calendar)
TODO:未来の予定(音声>Google Task)
をGASでつくってもらいましょう

ここまでで皆さん出来ていると思うのでシンプルバージョンで書かせていただきます

【準備】このアプリの仕組み

料理に例えるとこんな感じです。
食材: 先生の声
お皿A(日記用): Googleカレンダー
お皿B(TODO用): Google Tasks ←今回はここが新挑戦!

今回はAIは使わないことにしました。アプリを作るコード作成にはAI使いましたが シンプルに動くもので十分なのとAPIの取得が難しいと言われましたので




1️⃣Google DriveからGoogle Apps Script

2️⃣プロジェクトの名前を変える

3️⃣画面左側のメニューにある 「サービス」 の隣の 「+」 ボタン
リストが出てくるので、下の方にある 「Google Tasks API」 を探してクリック。下の 「追加」 ボタンを押します。左側の「サービス」の下に Tasks と表示されたら成功です!


4️⃣裏側のプログラムを書く(コード.gs)

元あるものを消して 以下をコピペ

// ==================================================
// 【シンプル版】AIなし!日記は「昨日」の日付になります
// ==================================================

function doGet() {
  return HtmlService.createHtmlOutputFromFile('index')
    .addMetaTag('viewport', 'width=device-width, initial-scale=1')
    .setTitle('最強の音声秘書(シンプル版)');
}

function processText(userText, mode) {
  if (!userText || userText.trim() === "") {
    return "まずは何か入力してください!";
  }

  try {
    if (mode === "diary") {
      // ■ 日記モード
      saveToCalendar(userText);
      return "【日記】昨日のカレンダーに記録しました!";
    } else {
      // ■ TODOモード
      saveToGoogleTasks(userText);
      return "【TODO】タスクに追加しました!";
    }
  } catch (e) {
    return "🚨 エラー発生:\n" + e.message;
  }
}

// カレンダーに保存する関数
function saveToCalendar(text) {
  const date = new Date(); // 今の時間を持ってきて...
  
  // ★ここを追加しました!
  // 日付を「マイナス1日(昨日)」に設定変更します
  date.setDate(date.getDate() - 1); 
  
  // タイトルを作る(最初の15文字)
  let title = text;
  if (text.length > 15) {
    title = text.substring(0, 15) + "...";
  }
  
  // 昨日の日付でカレンダーに登録
  CalendarApp.getDefaultCalendar().createAllDayEvent("【日記】" + title, date, { description: text });
}

// Google Tasksに保存する関数
function saveToGoogleTasks(text) {
  try {
    const taskLists = Tasks.Tasklists.list();
    if (taskLists.items && taskLists.items.length > 0) {
      const taskListId = taskLists.items[0].id;
      
      Tasks.Tasks.insert({ 
        title: "【TODO】" + text, 
        notes: "アプリから追加" 
      }, taskListId);
      
    } else {
      throw new Error("ToDoリストが見つかりません。");
    }
  } catch (e) {
    if (e.message && e.message.includes("Tasks is not defined")) {
      throw new Error("左側の「サービス」から「Google Tasks API」を追加してください!");
    }
    throw e;
  }
}

5️⃣ステップ4:見た目を作る(index.html)
左側の「ファイル」の隣の 「+」 を押し、「HTML」 を選びます。
・名前を index と入力してEnter。
・中身を以下のコードに書き換えます。(ボタンを2つにしました!)

<!DOCTYPE html>
<html>
<head>
  <base target="_top">
  <style>
    /* 全体のデザイン:清潔感のある白 */
    body { 
      font-family: -apple-system, sans-serif; 
      text-align: center; 
      padding: 20px; 
      background-color: #f8f9fa; 
      color: #333;
    }
    
    h2 { color: #555; margin-bottom: 20px; font-weight: normal; }

    /* 入力エリア(ここに話しかける) */
    textarea {
      width: 100%;
      box-sizing: border-box; /* 画面からはみ出さないように */
      height: 180px;
      padding: 15px;
      font-size: 18px;
      border: 2px solid #ccc;
      border-radius: 15px;
      margin-bottom: 30px;
      resize: none; /* サイズ変更禁止 */
      background-color: white;
    }
    textarea:focus { outline: none; border-color: #4285F4; }

    /* ボタンエリア */
    .button-container { 
      display: flex; 
      justify-content: center; 
      gap: 20px; 
    }
    
    /* ボタンの共通デザイン */
    .btn {
      width: 140px;
      height: 100px;
      border: none;
      border-radius: 20px;
      color: white;
      font-size: 20px;
      font-weight: bold;
      cursor: pointer;
      box-shadow: 0 4px 8px rgba(0,0,0,0.15);
      
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
    }
    .btn:active { transform: scale(0.95); box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
    
    /* 色分け */
    #btn-diary { background: linear-gradient(135deg, #4285F4, #3367D6); }
    #btn-todo { background: linear-gradient(135deg, #EA4335, #C5221F); }

    /* ステータス表示 */
    #status { margin-top: 20px; color: #666; height: 1.5em; }
  </style>
</head>
<body>

  <h2>音声秘書 (AIなし版)</h2>

  <textarea id="userInput" placeholder="ここをタップして、キーボードのマイクボタンを押して話してください..."></textarea>

  <div class="button-container">
    <button id="btn-diary" class="btn" onclick="send('diary')">
      <span style="font-size:30px; margin-bottom:5px;">📘</span>
      日記
    </button>
    <button id="btn-todo" class="btn" onclick="send('todo')">
      <span style="font-size:30px; margin-bottom:5px;">✅</span>
      TODO
    </button>
  </div>

  <div id="status"></div>

  <script>
    function send(mode) {
      const text = document.getElementById("userInput").value;
      if (!text) {
        alert("何も入力されていません!");
        return;
      }

      // ボタンを押した時の表示
      const statusEl = document.getElementById("status");
      statusEl.innerText = "送信中...";
      statusEl.style.color = "blue";
      
      // GASに送る
      google.script.run
        .withSuccessHandler(showResult)
        .withFailureHandler(showError)
        .processText(text, mode);
    }

    // 成功したとき
    function showResult(response) {
      document.getElementById("status").innerText = "完了!";
      document.getElementById("status").style.color = "green";
      alert(response);
      document.getElementById("userInput").value = ""; // 入力欄をクリア
    }

    // エラーが出たとき
    function showError(e) {
      document.getElementById("status").innerText = "エラー発生";
      document.getElementById("status").style.color = "red";
      alert("エラー: " + e.message);
    }
  </script>
</body>
</html>


6️⃣ステップ5:運命のデプロイ(公開)
例の**「罠」**に気をつけてください!

  1. 右上の 「デプロイ」「新しいデプロイ」

  2. 左の歯車アイコンから 「ウェブアプリ」 を選択。

  3. 説明:ver1 など適当に。

  4. 次のユーザーとして実行:「自分(メールアドレス)」

  5. アクセスできるユーザー:「全員」(←自分専用なら「自分のみ」でもOKですが、スマホのログインエラーが面倒なら「全員」推奨)

  6. 「デプロイ」 をクリック。

  7. 「アクセスを承認」 という画面が出たら、許可していきます。(「安全ではないページ」と出たら、左下の「詳細」→「(プロジェクト名)に移動」を押します)



PCで使ってみよう



スマホで使ってみよう


・スマホでの使い方スマホで送ったURLを開きます。
毎回URLを開くのは面倒なので、ブラウザのメニューから 「ホーム画面に追加」 をしましょう。これでアプリのアイコンができます。(<これ大切)
おーーーっ、しっかり水曜日の日記に(本日は木曜日)



今日はここまで


皆さんのGoogle CalendarやGoogleTaskに入ったと思います。
これで皆さんの朝が充実しますね


いいなと思ったら応援しよう!

teyede1972 よろしければサポートお願いします。 NYAUWの活動は現在マネタイズを考えずに意義のみを追求するフェーズです。 ニッチな分野のやせ我慢プロジェクトですので お気持ちだけでも嬉しいです。