初めに
これまでnoteの方で書いていた記事を自サイトの方にも書く形にしました。内容自体はnoteの方にある同じタイトルのものと同一です。
本記事について
試行錯誤しながらマクロを作成、本記事を執筆しておりますのでわかりにくい点や改善できる点などもあるかと思いますが何卒温かい目で閲覧いただけますと幸いです。なお、金銭が絡む場合もありますので自分でも内容をよく読み、理解の上で行ってください、経済的損失が発生した場合でも筆者は責任を負いません
筆者の環境
Google Pixel 7(Android16)
macrodroid(v5.54.9)
gemini(’25/06/21時点)
環境構築
UI等も初回記事より大幅に変化しておりましたので新規に書き直させていただきます。すでにmacrodroidの準備及びGoogle CloudプロジェクトのAPIを取得済みの方は飛ばしていただいて問題ありません。(過去記事で設定済みの方など)
Macrodroid
macrodroidはストアからダウンロードできます。最初の7日間は無料体験可能ですが以降は買い切り900円の解禁が必要となります。無料体験期間中に動作確認可能なことを確認した後に課金することをおすすめします。
gemini API(Google Cloud プロジェクト)
以下のリンクからサイトに飛び、Googleアカウントにログインしてください。

ログインできた場合、以下のような画面が表示されていると思います。下側の青いボタン「Get API Key」を押してください。なお、この画面が表示されていない場合は右上に「Dashboard」と表示されていますのでそちらを押すと同様にAPIの取得画面に飛ぶことができます。

その後、規約への同意やメールのオプトアウトに関するチェックボックスが表示されると思います。内容をよく読み、必要な項目に☑を入れて同意するを押してください。次のような画面が表示されていると思います。右上の「APIキーを作成」を押してください。その後APIキーが作成され、表示されます。「コピー」ボタンがあると思いますので必ずコピーをし、他人の目に触れない場所にメモしておいてください。

なお、この時点では課金が有効になっている可能性もあるため、以下のリンクからログインし、クイックアクセスの「課金」の項目を開き、「このプロジェクトには請求先アカウントがありません」と表示されていることを確認してください。なっていない場合、使用料によっては自動で課金される場合があります。
マクロ
充電開始時用のマクロ
まずは、説明のために私が作成した充電開始時に通知するものと、天気予報を通知するものを紹介します。
上のファイルをダウンロードしたら、macrodroidのホームから「インポート/エクスポート」を選択し、インポートから先ほどダウンロードしたファイルを選択してインポートしてください。
続いて変数を設定します。アクションブロックから「gemini2.5(配布用)」を開き下部の「作業用の変数」から「gemini-api-key」をタップし、事前にメモしていたgeminiのAPIキーを入力してください。
設定が完了すれば、この時点で動作させることが可能になっていると思います。「01_充電(配布用)」を開き、右上の三点リーダからアクションを試すを押せば、通知が届くと思います。
天気予報通知用のマクロ
以下は充電開始時に通知するマクロのインポート用ファイルです。(上部にある「gemini2.5(配布用)」もこちらのマクロに必須ですので設定してください。)
まず、APIを叩く際に現在住んでいるところの天気予報を与える必要があります。そのため、今回は気象庁の情報を下に自動で天気予報を取得するようにしています。以下のリンクから現在住んでいる地域のurlを確認してください。
「http://weather.livedoor.com/forecasts/rss/area/130010.xml」のようになっていると思います。この最後についている6桁の数字を
「https://weather.tsukumijima.net/api/forecast/city/」
の後ろに付けてください。
例:https://weather.tsukumijima.net/api/forecast/city/130010
「gemini-api-key」と同様に、アクションブロックから「weather(配布用)」を開き、「weather-page」の変数の値に設定してください。
以上で、天気予報を取得し、キャラクターに通知させることができるようになったと思います。「06_今日の天気予報」を開き、「アクションを試す」から試してみてください。
エラーが出る場合
返答及び通知内容が「{lv=answer_temp}{lv=tmpJsonResult[entries][{lv=json_num}][candidates][0][content][parts][0][text]}」などとなる場合は処理中にエラーが発生しています。
以下のリンクから「Gemini API バックエンド サービスのエラーコード」を読み、エラーの内容に合わせて修正してください。

なお、上記リンクに記載のない「HARM_CATEGORY_SEXUALLY_EXPLICIT」というエラーが出る場合もあります。
この場合、「safety settings」に引っかかっています。
その場合はAPI用のgeminIのキャラクタープロンプトを開き、右上の歯車を押してAdvanced settingsのEdit safety settingsより4つの項目を「Block none」に設定してください。
それでも何回試してもエラーが出る場合、geminiを動かしているサーバーに問題が発生している可能性もあります。後日試してみてください。
その他のエラー情報が出る場合もありますが、apiの応答に時間がかかりタイムアウトしてしまっている場合やapiサーバが落ちている場合もあります。そのため、時間をおいて試していただくことも一つの手です。
自作や改修を行いたい場合
私が使用しているテンプレートは上のファイルです。
通知の送信条件は「トリガー」,「条件」にブロックを追加してください。
「トリガー」はマクロの起動条件を、「条件」は起動後の判定を行います。
通知してほしい内容の変更をする際は「tmpQuestion」の文字列を変更してください。
文字列の入力の際右側の三点リーダからスマホのバッテリー残量などを自動入力させる事ができます。
自作したい場合、基本的な機能に関しては上のファイルを元に変更をするだけで実行することができると思います。
改修等は制限しませんのでご自由に。
Q.結局これって何してるの?
A.「gemini」というアクションブロックでまとめてgeminiのapiを叩く処理をしています。
また、apiから返ってきたデータをJSONというデータ形式に変換し、キャラクターからの返答に該当する部分だけを抜き出す処理も行っています。その際、分割されてメッセージが返答された際に結合する処理も行っています。
その他、事前処理及び後処理を各マクロで行っている形です。
各マクロに於いてはapiに渡すための送信テキストの設定と受け渡し、apiから返されたキャラクターの返答を通知表示用のブロックに受け渡し、通知を送信する。
という形です。中身を見て、仕組みについて考えてみていただけるとより良い仕組みを作ることもできると思います。
最後に
ここまでご覧いただきありがとう御座いました。稚拙な文章ではありますが、この記事が誰かの助けになっていればいいなと思い投稿させていただいております。
今後はnoteとこちらの両方で記事の更新を行う予定です。geminiの更新状況に合わせて改修を行ってまいりますので、必要に合わせてご覧いただけますと幸いです。