カテゴリー: Uncategorized

  • Ubuntu 24.04 + Gemini APIでブログ自動投稿システムを構築する方法(AI生成)

    本記事はGeminiとの議論などをもとに、内容をAIが書いています。

    AIを活用して「記事生成 → WordPress下書き保存 → LINE通知」までを自動化し、効率的に収益化を目指すための構築ガイドです。

    1. システム構成の概要

    本システムは、以下のフローで動作します。

    1. 記事生成: Ubuntu上のプログラムがGemini APIを使用。
    2. 投稿管理: WordPress REST API経由で「下書き」として保存。
    3. 承認フロー: LINE Messaging APIで編集URLをスマホに通知。
    4. 最終公開: 人間が内容を確認・修正して公開(SEO・品質担保)。

    2. サーバー環境のセットアップ (Ubuntu 24.04)

    まずはSSHでサーバーにログインし、必要なパッケージと仮想環境を構築します。

    Bash

    # パッケージの更新
    sudo apt update && sudo apt upgrade -y
    
    # Python環境の構築
    sudo apt install -y python3-pip python3-venv git
    
    # プロジェクトディレクトリの作成と移動
    cd ~
    git clone https://github.com/openclaw/openclaw.git
    cd openclaw
    
    # 仮想環境の作成(わかりやすい名前で)
    python3 -m venv openclaw-env
    source openclaw-env/bin/activate
    
    # 依存ライブラリのインストール
    pip install requests python-dotenv google-generativeai
    

    3. 環境設定 (.envファイル)

    プロジェクトの直下に .env ファイルを作成し、各種APIキーと設定情報を集約します。

    Plaintext

    # Gemini API
    GOOGLE_API_KEY=あなたのGemini_APIキー
    MODEL_NAME=gemini-1.5-flash
    
    # WordPress (ailab.yutofublog.com)
    WP_URL=あなたのURL
    WP_USER=あなたのユーザー名
    WP_APP_PASS=24文字のアプリケーションパスワード
    
    # LINE Messaging API
    LINE_CHANNEL_ACCESS_TOKEN=あなたのアクセストークン
    LINE_USER_ID=あなたのユーザーID (Uから始まるもの)
    

    4. 自動連携スクリプト (bridge.py)

    生成された記事をWordPressへ送り、LINEへ通知を飛ばす心臓部のコードです。

    Python

    import os
    import requests
    from requests.auth import HTTPBasicAuth
    from dotenv import load_dotenv
    
    load_dotenv()
    
    def post_to_wp_and_notify(title, content):
        # 1. WordPressへ下書き投稿
        wp_payload = {
            "title": title,
            "content": content,
            "status": "draft"
        }
        res = requests.post(
            os.getenv("WP_URL"),
            auth=HTTPBasicAuth(os.getenv("WP_USER"), os.getenv("WP_APP_PASS")),
            json=wp_payload
        )
    
        # 2. 成功時にLINEへ編集URLを通知
        if res.status_code == 201:
            post_id = res.json()['id']
            edit_url = f"https://ailab.yutofublog.com/wp-admin/post.php?post={post_id}&action=edit"
            
            line_payload = {
                "to": os.getenv("LINE_USER_ID"),
                "messages": [{"type": "text", "text": f"📢 記事が作成されました!\n確認・公開してください:\n{edit_url}"}]
            }
            requests.post(
                "https://api.line.me/v2/bot/message/push",
                headers={"Authorization": f"Bearer {os.getenv('LINE_CHANNEL_ACCESS_TOKEN')}"},
                json=line_payload
            )
            print("Successfully posted to WP and notified via LINE.")
    
    if __name__ == "__main__":
        # ここに生成ロジックからの出力を渡す
        post_to_wp_and_notify("テストタイトル", "テスト本文内容...")
    

    5. 運用と自動化 (Cron)

    毎日決まった時間に実行されるよう、cron に登録します。

    Bash

    crontab -e
    

    以下の行を末尾に追加(毎日午前10時に実行する場合):

    コード スニペット

    0 10 * * * /home/yumikawa/openclaw/run_claw.sh
    

    💡 アドバイザーからの「収益化」ポイント

    • Human-in-the-Loop: 完全に自動公開せず、一度LINEで自分の目に触れさせることで、低品質なAI記事が量産されるのを防ぎます。
    • スマホファースト: LINEに直接編集URLを送ることで、移動中などの隙間時間に「確認→公開」ができる機動力を確保しています。
    • コスト最適化: 有料のOpenAIではなく、無料枠の大きいGemini APIを採用することで、ランニングコストを抑えた運営が可能です。
  • 【CatKey】鍵をかけると猫が飛び出す?スライダ・クランクとマジックハンドの融合

    本記事は叩き台をスケッチ案からGeminiによって生成してもらいました。

    最近、ある人の投稿を見かけ、かわいくアレンジして作ってみようと思い立ちました。

    ターゲットにしたのは「鍵をかける」という動作。 鍵を尻尾にかけた瞬間に、可愛い猫がメッセージを頭に載せてひょこっと顔を出し、手を差し出してくれる。そんな「からくり箱」のような機構を考えています。

    今回は、その心臓部となるメカニズムの構想を少し書いてみようと思います。


    1. 二つの機構を組み合わせる

    今回のギミックには、性質の異なる2つの機構を組み込む予定です。

    スライダ・クランク機構(猫の手を担当)

    猫の「手」を出す動きには、スライダ・クランク機構を採用します。 円運動を直線運動に変えるこの仕組みを使うことで、鍵を回す力を利用して、スッと手が伸びてくる動きを再現します。

    マジックハンド機構(猫の頭・メッセージを担当)

    猫の「頭」と、その上に掲げるメッセージボードを大きく持ち上げるのは、マジックハンド(パンタグラフ)機構です。 限られたスペース(筒の中)から、大きく高さを出して飛び出させるために、この伸縮自在な構造が最適だと判断しました。

    ここら辺の機構については、それぞれ「からくりすと」さんがとても頼りになります。


    2. デザインとサイズ感の設計

    ケース(筒)のサイズ感についても具体的に詰めています。

    • 本体サイズ: 上部直径 ϕ100 / 下部直径 ϕ60 の円錐台形状(高さ 100 mm)
    • メッセージボード: 一般的な名刺サイズ(91 mm × 55 mm)がちょうど収まる設計

    猫の頭の上に名刺サイズのプレートが乗る形にして、そこに「外出中」や「Welcome」といったメッセージを置けるようにする予定です。


    3. 実現に向けた課題:鍵との連動

    今回の最大の難所は、「鍵をかける」をいかにしてこれら2つの機構にスムーズに伝えるかという点です。

    • 鍵をかける動作をスライダ・クランクとマジックハンドの起点をどうリンクさせるか?
    • 限られた ϕ100 のスペースの中に、すべてのリンク棒を干渉させずに配置できるか?

    スケッチの段階では「いけそう」ですが、実際に3Dデータに起こしたり試作をしたりすると、問題が出てきそうです。


    次のステップ

    まずは、手書きの機構図をもとに、簡単なモックアップを作成して動きの検証を行いたいと思います。

    「鍵をかける」という行為が、鍵をなくすことの予防だけでなく「ちょっとした楽しみ」に変わる瞬間を目指して。 進捗があればまたこちらで報告します!

  • 【技術備忘録】マンション共有回線の二重NATと旧型QNAPにVPNへの挑戦

    2026/01/22:Geminiによって叩き台を作成

    マンション共有インターネット、古いOSのNAS、そして二重ルーター。リモートアクセス構築における「三重苦」の環境下で、いかにして安全な通信経路を確保するか。試行錯誤のプロセスと、論理的な到達点を技術ログとして残す。

    1. ネットワーク環境の現状分析

    まず、ターゲットとなるデバイスとネットワーク構成を特定した。

    • デバイス: QNAP NAS (TSシリーズ)
    • CPU: Intel Atom D525 (x86_64アーキテクチャ)
    • IPアドレス: aaa.bbb.c.ddd (ローカル固定済)
    • ルーター: TP-Link AX1800
    • 外部環境: マンション共有インターネット (Carrier-Grade NAT / 二重ルーター)

    ターミナルによるスキャン結果

    Bash

    # ARPテーブルからNASを特定
    arp -a
    # ? (aaa.bbb.c.ddd) at e:f:g:h:i:j on en0 ifscope [ethernet]
    

    2. 失敗の記録:Tailscale直接インストールの限界

    当初、最もスマートな解決策としてTailscaleのNAS直接導入を試みたが、OSの世代差という物理的障壁に衝突した。

    実施した手順と結果

    1. パッケージ選定: 公式配布ページより Tailscale_x.x.x_x86_64.qpkg を取得。
    2. App Centerからの手動インストール:
      • エラー発生: Installation package is incompatible. Use the correct package.
      • ログ解析: Upgrade QTS to 5.0.0 or a newer compatible version.

    分析

    Intel Atom D525搭載機はレガシー環境であり、QTS 5.0以上へのアップグレードパスが存在しない。最新のTailscaleバイナリはQTS 5.x(モダンなLinuxカーネル)を要求するため、NAS本体での終端は論理的に不可能であると結論づけた。


    3. 失敗の記録:OpenVPNとマンション回線の壁

    次に、境界ルーター(TP-Link AX1800)によるVPNサーバー構築を検証。

    事象

    書き出した .ovpn プロファイルで接続を試みるも、ハンドシェイクが成立せずタイムアウト。

    原因の特定

    OpenVPN設定ファイル内の接続先を確認したところ、IPアドレスが aaa.bb.c.dd となっていた。これはマンション共有回線の内部ネットワークが割り振ったプライベートIPである。

    結論: 典型的な 「二重ルーター (Double NAT)」 状態。外部インターネットからこのIPにパケットを投げても、マンション側の基幹ルーターで全て破棄される。ポート開放の権限がない以上、この経路でのアクセスは不可能である。


    4. 最終戦略:Tailscale Subnet Routerによるオーバーレイ構築

    本体が拒絶し、入り口(ルーター)が閉ざされている現状、残された唯一の勝機は**「内側から外側へトンネルを掘る」**ことにある。

    Subnet Router戦略の概要

    LAN内に存在する、別のモダンなOS(macOS / Windows / Linux)を「中継点」として利用し、TailscaleのネットワークをLAN全体に広報する。

    実装コマンド(Macを暫定中継機とする場合)

    Bash

    # 自宅のサブネットをTailscaleネットワークに広報
    tailscale up --advertise-routes=aaa.bbb.c.d/24
    

    論理的メリット

    1. NAT貫通: TailscaleのSTUNプロトコルにより、マンション回線のNATを無効化。
    2. プロトコル透過性: VPN接続後、外出先から ssh admin@aaa.bbb.c.ddd を叩くだけで、あたかも自宅にいるかのような透過的アクセスが可能。
    3. レガシーの救済: 古いNASを一切改造せず、セキュアなVPN経路に乗せることができる。

    5. 結論と次なるステップ

    今回の検証により、「マンション共有回線 × レガシーNAS」環境における外部アクセスの正解は、サブネットルーターの構築であることが確定した。

    今後のタスク

    • 常時稼働環境の構築: メイン機(Mac)を持ち出すため、Apple TV (第2世代4K以降) または Raspberry Pi をサブネットルーター専用機として導入。
    • 運用フロー: 外出先でTailscaleをONにするだけで、SMB共有・SSH管理をシームレスに行う環境へ移行。
  • Hello world!

    Welcome to WordPress. This is your first post. Edit or delete it, then start writing!