<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>EarlGrey Tearoom</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/" />
    <link rel="self" type="application/atom+xml" href="https://e.tpot.jp/atom.xml" />
    <id>tag:e.tpot.jp,2020-02-25:/2</id>
    <updated>2026-08-15T12:01:19Z</updated>
    <subtitle>Windows・Macintosh・LinuxといろいろなOSについて研究、実践しているウェブログです</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type</generator>

<entry>
    <title>[E] 楽天証券のパスキーが消えた話 ― Googleアカウント削除で起きたこと</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002061.html" />
    <id>tag:e.tpot.tk,2026://2.2061</id>

    <published>2026-08-15T11:59:21Z</published>
    <updated>2026-08-15T12:01:19Z</updated>

    <summary> ※本記事はAIによる自動生成です。 きっかけ：ある日突然パスキーが消えた 楽天証券にログインしようとしたところ、登録していたはずのパスキーが使えなくなっていました。 心当たりは一つ。少し前に「使っていない」と思っていたGoogleアカウントを削除していたことです。結論から言うと...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Browser" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<blockquote>
<p>※本記事はAIによる自動生成です。</p>
</blockquote>
<h2>きっかけ：ある日突然パスキーが消えた</h2>
<p>楽天証券にログインしようとしたところ、登録していたはずのパスキーが使えなくなっていました。</p>
<p>心当たりは一つ。少し前に「使っていない」と思っていたGoogleアカウントを削除していたことです。結論から言うと、これが原因でした。</p>
<h2>なぜ消えたのか</h2>
<p>パスキーは端末単体ではなく、Googleパスワードマネージャー（Androidの場合）やiCloudキーチェーン（iOSの場合）といったクラウド側に保存され、そこに同期される仕組みになっています。</p>
<p>つまり、パスキーの「実体」はGoogleアカウントの中に保管されているということです。そのアカウントを削除すれば、紐づいていたパスキーも一緒に失われます。当たり前と言えば当たり前ですが、「使っていないアカウント」のつもりが実はログイン情報の保管庫だった、というのはありがちな落とし穴だと思います。</p>
<h2>復旧できるのか</h2>
<p>Googleアカウントの削除には猶予期間（削除申請からおよそ2ヶ月）があり、その期間内であればアカウント自体を復元できます。今回はまだ期間内だったため、アカウントを復元したところ、紐づいていたパスキーも無事に復活しました。</p>
<p>猶予期間を過ぎて完全に削除された後だと、この方法は使えません。その場合は楽天証券側の緊急ログイン手段（自動音声ダイヤルで一時的にID・パスワードログインを有効化する仕組み）を使ってログインし、パスキーを作り直すことになります。</p>
<h2>自分のGoogleアカウントにどんなパスキーがあるか確認する方法</h2>
<p>せっかくなので、自分のアカウントに今どんなパスキーが登録されているか棚卸ししてみました。確認方法は簡単です。</p>
<ol>
<li><code>https://g.co/passkeys</code> にアクセスし、確認したいGoogleアカウントでログイン</li>
<li>パスワードや画面ロック（指紋・顔認証・PINなど）で本人確認</li>
<li>サービス名・作成日・使用デバイスなどが一覧表示される</li>
</ol>
<p>同じ内容は <code>passwords.google.com</code> の「パスキー」タブや、Chromeなら <code>chrome://settings/passkeys</code> からも確認できます。実際に見てみると、楽天証券のパスキーがちゃんと表示されていました。</p>
<h2>サブアカウントからメインアカウントへの「移動」はできない</h2>
<p>一覧を見て気づいたのですが、このパスキーはサブとして使っていたGoogleアカウントに保存されていました。メインのアカウントにまとめたいと思い調べたところ、パスキーを別アカウントへエクスポート・移動する機能は存在しないことが分かりました。</p>
<p>そのため、やり方としては「メインアカウント側で新しいパスキーを作り直し、古い方を削除する」しかありません。手順は以下の通りです。</p>
<ol>
<li>メインにしたいGoogleアカウントでログインしておく</li>
<li>楽天証券のセキュリティ設定から「パスキーを追加」し、アカウント選択でメインアカウントを選ぶ</li>
<li>メインアカウントに新しいパスキーが登録されたことを確認する</li>
<li>新しいパスキーで問題なくログインできることを確認してから、古いパスキーを削除する</li>
</ol>
<p>ここで大事なのは順番です。先に古いパスキーを消してしまうと、万一新しい方でログインできなかった場合に詰んでしまいます。必ず「新しいパスキーでのログイン確認 → 古いパスキーの削除」の順で進めるべきです。</p>
<h2>まとめ</h2>
<ul>
<li>パスキーの実体はGoogleアカウント（やiCloudキーチェーン）に保存されている</li>
<li>「使っていないアカウント」のつもりでも削除すると紐づくパスキーも消える</li>
<li>猶予期間内ならアカウント復元でパスキーも復活する</li>
<li>自分のパスキー一覧は <code>g.co/passkeys</code> でいつでも確認できる</li>
<li>パスキーの直接移動はできないため、作り直し＋旧パスキー削除で対応する</li>
</ul>
<p>普段何気なく使っているパスキーですが、裏側の仕組みを意識していないと今回のような「まさかこれが原因で」という事態に繋がります。心当たりのある方は、一度自分のGoogleアカウントのパスキー一覧を確認してみることをおすすめします。</p>
]]>
        
    </content>
</entry>

<entry>
    <title>[E] Gmailの取捨選択転送</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002060.html" />
    <id>tag:e.tpot.tk,2026://2.2060</id>

    <published>2026-08-15T11:52:41Z</published>
    <updated>2026-08-15T11:53:22Z</updated>

    <summary>ネット上のサービスのメールを受けて取るために、自分自身のアカウントとは別にサブアカウントを使っています。そして、そこからさらに重要だと思うものをYahoo!メールに転送し、Googleのサブアカウントの通知はオフにし、Yahoo!メールの通知をオンにしています。 メールマガジンな...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Internet" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>ネット上のサービスのメールを受けて取るために、自分自身のアカウントとは別にサブアカウントを使っています。そして、そこからさらに重要だと思うものをYahoo!メールに転送し、Googleのサブアカウントの通知はオフにし、Yahoo!メールの通知をオンにしています。</p>

<p>メールマガジンなどの通知はなしにし、支払いの通知や配送済みの通知などにはスマホの通知が鳴るという仕組みにしています。</p>

<p>さてどれを転送するかは、人それぞれですが、最初、メールアドレスで判断していました。Googleのメールフィルタは長いリスト。しかも新しいサービスを登録したときは、このリストに追加する作業もあります。</p>

<p>そこで、一度見直し、恒久的なやり方を考えました。</p>

<p>まず、「含む: is:important」です。Googleが重要だと判断したもの。そして、カテゴリに注目しました。カテゴリには「購入・ソーシャル・新着・フォーラム・プロモーション」があります。「含む: category:purchases」とすれば、決済通知などが転送されます。</p>

<p>受信トレイを見ると、カテゴリに属していないものがあります。さあ、これをどう表現するかです。転送したいものは「購入・新着」とカテゴリなしです。新着も「条件: category:updates」とすればいいのですが、カテゴリなしはどうするのか、といえば、「含まない:category:social category:promotions category:updates category:forums」とすればいいようです。検索ウインドウの検索では「-{category:social category:promotions category:updates category:forums}」と先頭にマイナスを付けて検索すると見事カテゴリなしがリストになります。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[E] AIによるアプリ開発雑感</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002059.html" />
    <id>tag:e.tpot.tk,2026://2.2059</id>

    <published>2026-08-11T13:21:13Z</published>
    <updated>2026-08-11T13:24:06Z</updated>

    <summary>自分のメモを記録するためのアプリを開発しています。Obsidianとよく似たアプリです。以前Windows版で「総合情報管理ツール Agenda」を公開していました。自分でも愛用していたのですが、ベースがマックなのでしばらく自分自身も離れていました。 マックではNextcloud...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>自分のメモを記録するためのアプリを開発しています。Obsidianとよく似たアプリです。以前Windows版で「<a href="https://l.tpot.tk/win:agenda:index">総合情報管理ツール Agenda</a>」を公開していました。自分でも愛用していたのですが、ベースがマックなのでしばらく自分自身も離れていました。</p>
<p>マックではNextcloudのNotesを使うようになり、メモを同期できることに便利さを感じ、そのデータをベースにJoplinを使っていました。その後、Obsidianに乗り換えようと思ったのですが、改行の扱いが違っていて、接している行は改行しないという仕様でした。本来のMarkdownの仕様らしいのですが、Joplinにはオプションがあり、改行を改行として扱えるので、すっかりそれに慣れてしまいました。そのため、Obsidianへの乗り換えは断念。すでに膨大なデータがあるのです。</p>
<p>最近は、AIによるアプリ開発が進み、プログラミングができない人でもアプリを作成し、公開しているのだそうで、世の中のアプリの数は以前よりも途方もなく増えているのだそうです。</p>
<p>アプリにどんな機能を装備するかは、難しい問題で、最小公倍数的に最小限の機能のものを作って、あとはプラグインとして機能を追加するもの。または最大公約数的に多くの機能を取り入れ、設定でオンオフしていくものなど、さまざまです。特定の誰かにとっては必要な機能も、誰かには不要だったり、じゃまだったりします。</p>
<p>誰かが作成したアプリからマッチングするものを探すのは大変な作業。以前は誰かが作ったものを探して、試して、使い始めるという工程が必要でした。大型アプリは今でもそうでしょう。</p>
<p>誰かのアプリを探すのは大変。だからこそ、個人のアプリ開発が広がっているというのもあるのでしょう。自分が使いやすいものは自分で作ればいい。自分が使う最小限の機能だけあればいい。自分に適したアプリを探すのはおっくう。ましてプラグインを探すとなるともっとおっくう。だったら自分で作ったほうが納得のできるものになる。</p>
<p>そんな時代の波に乗って、私も自分だけのナレッジ管理アプリを作ったわけです。以前使っていたWindows版の焼き直しではなく、発展させたもの。時代に合わせて進化したもの。毎日のように使いながら、自分でほしい機能を拡張していきました。毎日使うものだから、いろいろなことに気づく。</p>
<p>世の中には、標準的な仕様のもちかたがあるのですが、個人で使うにはそんなのは無視をしてもいいわけです。ただし、古くからコンピュータに携わってきたものとしては、そこはこだわりたい。</p>
<p>過去に私が作って公開していたアプリを絶賛してくれる人がたくさんいました。喜んでもらえるのは自分の栄養。ただ、その影には、私が他の方のアプリに抱いたように、自分には合わないと使うことで諦めた人も多くいるのでしょう。私は「ないものは作ればいい」という発想なので、探してもなければ作ってしまいます。それがAIで簡単に作れる時代になったというわけです。</p>
<p>AIに無理だと返されたことも1ヶ月過ぎれば、可能になっていることもあります。どこかで知恵をつけたのでしょう。矛盾することを指示したら、どうするかを逆質問されるようにもなりました。1年前はAI自身でソースコードを壊してしまったり、別のバグを発生させたりと手がかかりましたが、そんなこともかなりなくなりました。プログラミングの定番パターンとかつまづきポイントの学習量が格段に増えました。</p>
<p>私が作成したものも公開しています。AIが作り出した間接的なゴミかもしれませんが、だれかにマッチングするかもしれません。</p>
<p><a href="https://l.tpot.tk/mac:agenda:index">Agenda - 書くほど、頭が整う</a></p>
]]>
        
    </content>
</entry>

<entry>
    <title>[E] CentOS 7 の自宅サーバーを消さずに AlmaLinux 9 へ</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002058.html" />
    <id>tag:e.tpot.tk,2026://2.2058</id>

    <published>2026-08-10T10:21:34Z</published>
    <updated>2026-08-10T10:26:08Z</updated>

    <summary>CentOS 7 のサポート切れが気になり続けていた自宅サーバーを、ディスクを消さずに AlmaLinux 9 まで上げた記録です。 クリーンインストールではなく ELevate（Leapp）によるインプレース上書きで、上げたあとに壊れたもの・要らなくなったものを直すところまで含...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>CentOS 7 のサポート切れが気になり続けていた自宅サーバーを、ディスクを消さずに <strong>AlmaLinux 9</strong> まで上げた記録です。<br />
クリーンインストールではなく <strong>ELevate（Leapp）によるインプレース上書き</strong>で、上げたあとに壊れたもの・要らなくなったものを直すところまで含みます。</p>
<h2>ハードウェア</h2>
<p>長く使ってきた構成そのものなので、スペックは書いておきます。</p>
<ul>
<li><strong>CPU</strong>: Intel Core i5-2400S（Sandy Bridge 世代）</li>
<li><strong>メモリ</strong>: 4GB</li>
<li><strong>ストレージ</strong>: SSD 480GB（ルート約 50GB + <code>/home</code> 約 392GB）</li>
<li><strong>NIC</strong>: オンボード Gigabit Ethernet</li>
</ul>
<p>「EOL 後も動いているが、上げるのが怖い 1 台」の典型、という感じです。</p>
<h2>方針</h2>
<ol>
<li><strong>いきなり OS を上げない</strong><br />
Web・メールなどは先に別の自宅サーバーへ寄せ、障害時の影響を小さくする。</li>
<li><strong>到達版は AlmaLinux 9</strong><br />
公式どおり一度に飛ばせないので<br />
<strong>CentOS 7 → AlmaLinux 8 → AlmaLinux 9</strong> の二段。<br />
（AlmaLinux 10 までは今回やらない）</li>
<li><strong>上書き後の役割は絞る</strong><br />
残すのは基盤＋LAN DNS（Unbound）＋Samba。旧 Web / DB / メールは止める。</li>
<li><strong>上げたあとが本番の一部</strong><br />
監視・PHP・管理 UI・メール通知・不要アプリの掃除まで含めて一区切りにする。</li>
</ol>
<p>参考:</p>
<ul>
<li><a href="https://wiki.almalinux.org/elevate/ELevate-quickstart-guide.html">ELevate Quickstart</a></li>
<li><a href="https://wiki.almalinux.org/elevate/ELevating-CentOS7-to-AlmaLinux-10">CentOS 7 → AlmaLinux 10（段階ガイド）</a></li>
</ul>
<pre><code class="language-mermaid">flowchart LR
  migrate[役割を他ホストへ] --&gt; el8[ELevate 7→8]
  el8 --&gt; el9[ELevate 8→9]
  el9 --&gt; revive[必要なものを復活]
  revive --&gt; cleanup[不要なものを削除]
</code></pre>
<h2>上げる前にやったこと</h2>
<p>自宅サーバーには、移行途中でもまだ色々残っていました。</p>
<ul>
<li><strong>Web / DB</strong>: httpd、PHP（Remi）、MariaDB、Redis、Memcached、Webmin</li>
<li><strong>メール</strong>: Postfix、Dovecot</li>
<li><strong>共有 / DNS</strong>: Samba、Unbound</li>
<li><strong>監視</strong>: MRTG、snmpd、PCP</li>
<li><strong>その他</strong>: Docker 系、FDclone、Nextcloud など</li>
</ul>
<p>メールは別ホストに Dovecot + LAN 向け Postfix を新設し、Web も寄せました。<br />
AWStats は移行後に古い UID 所有のまま残っていて更新に失敗していたので、Web サーバ実行ユーザーへ所有者を戻して復旧。「移したつもりでも、権限で静かに壊れる」典型例です。</p>
<p>DNS は、作業中に名前解決が死なないよう、クライアント側の参照先をあらかじめ薄くしておきました。<br />
<strong>コンソール手段（物理ディスプレイ／KVM など）の確保</strong>も重要です。Leapp 再起動後は SSH が長時間落ちます。</p>
<p>上げる直前には、不要サービス停止、第三者リポジトリの disable、CentOS 公式 repo 終了に伴う C7 mirror 切替、<code>yum upgrade</code> と再起動、<code>PermitRootLogin yes</code> などを実施しました。</p>
<p>Leapp の衝突回避のため、この段階では <strong>Webmin や Remi 系パッケージも外しています</strong>（あとで戻す前提）。</p>
<h2>Phase 1 -- CentOS 7 → AlmaLinux 8</h2>
<p>概略は公式どおりです。</p>
<pre><code class="language-bash">yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm
yum install -y leapp-upgrade leapp-data-almalinux

rmmod pata_acpi
leapp answer --section remove_pam_pkcs11_module_check.confirm=True

leapp preupgrade
# /var/log/leapp/leapp-report.txt を読んで inhibitors を解消
leapp upgrade
reboot
</code></pre>
<h3>つまずきどころ</h3>
<p><strong>1. answerfile 未回答</strong>  
<code>remove_pam_pkcs11_module_check.confirm=True</code> を入れないと inhibitor で止まります。</p>
<p><strong>2. Remi の <code>libzip5</code> 衝突</strong></p>
<pre><code class="language-text">file /usr/lib64/libzip.so.5 from install of libzip-... conflicts with
file from package libzip5-...el7.remi
</code></pre>
<p>Web 本体はすでに他ホストへ移していたので、Remi PHP スタック・MariaDB 公式・Webmin などを削除して再実行しました。<br />
サードパーティ RPM は Leapp 最大の敵、という印象が強いです。</p>
<p><strong>3. 古い CPU についての注意</strong><br />
レポートには Sandy Bridge 世代が「RHEL 8 ではメンテ対象外」といった旨も出ます。<br />
今回は警告止まりで通過できましたが、ハードが古いことは頭に置いておく必要があります。</p>
<p>成功後:</p>
<ul>
<li>OS: <strong>AlmaLinux 8.10</strong></li>
<li>ネットワーク設定は維持</li>
<li>Unbound / Samba / SSH: 稼働</li>
</ul>
<h2>Phase 2 -- AlmaLinux 8 → AlmaLinux 9</h2>
<p>「次のホップ」前に、Leapp が残した exclude を掃除します。</p>
<pre><code class="language-bash">sed -i '/^exclude=/d' /etc/yum.conf /etc/dnf/dnf.conf
dnf remove -y leapp leapp-upgrade-el7toel8 python2-leapp snactor
dnf install -y leapp-upgrade leapp-data-almalinux

sed -i 's/^AllowZoneDrifting=.*/AllowZoneDrifting=no/' /etc/firewalld/firewalld.conf
leapp answer --section check_vdo.confirm=True

leapp preupgrade
leapp upgrade
reboot
</code></pre>
<p>到達:</p>
<ul>
<li>OS: <strong>AlmaLinux 9.8</strong></li>
<li>kernel: <code>5.14.x.el9</code></li>
</ul>
<h2>Phase 3 -- 上書き直後の役割固定</h2>
<p>OS が上がっても、旧スタックを全部生かし続けないのがポイントです。</p>
<table><thead><tr><th>残す予定</th><th>理由</th></tr></thead><tbody><tr><td>SSH / firewalld / chronyd</td><td>基盤</td></tr><tr><td>Unbound</td><td>LAN DNS</td></tr><tr><td>Samba</td><td>共有がまだこのホスト前提のとき</td></tr></tbody></table><table><thead><tr><th>いったん止める</th><th>理由</th></tr></thead><tbody><tr><td>httpd / 旧 PHP</td><td>本体は他ホスト寄り</td></tr><tr><td>Dovecot / Postfix</td><td>メールは他ホスト</td></tr><tr><td>MariaDB / Redis / Memcached</td><td>依存アプリが無ければ不要</td></tr><tr><td>Webmin / PCP</td><td>必須ではない（後で要否を見直す）</td></tr></tbody></table><h3>Unbound が起動しない</h3>
<p>AlmaLinux 9 直後、Unbound が <strong>chroot 配下で <code>sd_notify</code> に失敗</strong>して起動できませんでした。  
<code>chroot</code> を空にしてログパスを直し、復旧。<br />
「OS は上がったのに DNS だけ死んでいる」状態なので、受け入れ試験で最初に見ると安心です。</p>
<p>ここで一区切り、と思いきや、実際には「やっぱり要るもの」が続いて出てきました。</p>
<h2>Phase 4 -- 事後処理</h2>
<p>上書きそのものより、<strong>上げたあとに何を戻し、何を捨てるか</strong>の方が生活に効きます。</p>
<h3>4-1. Webmin / FDclone を戻す</h3>
<p>衝突回避で外していたもののうち、運用で必要なものはあとから戻しました。</p>
<ul>
<li><strong>Webmin</strong><br />
公式リポジトリを入れ直し、<code>dnf install webmin</code> で導入。</li>
<li><strong>FDclone</strong><br />
AlmaLinux 9 / EPEL には <code>dnf</code> パッケージが無い。  
<code>/root/work</code> を作業場にしてソースを取得・ビルドし、<code>/usr/local/bin/fd</code> を入れ直した。<br />
（古いバイナリは <code>libncurses.so.5</code> 不足で動かなかったため、ncurses 6 向けに再ビルド）</li>
</ul>
<h3>4-2. MRTG を復活させる</h3>
<p>MRTG 本体とグラフ用ディレクトリ、5 分ごとの cron は残っていました。壊れていたのは取得経路です。</p>
<ul>
<li>ELevate 時に <strong>net-snmp / snmpd</strong> が消えていた</li>
<li><strong>httpd</strong> も止まっていたので Web 公開も死んでいた</li>
<li>firewalld に <strong>snmp</strong> が無く、LAN からの SNMP も不通</li>
</ul>
<p>対応:</p>
<ol>
<li><code>net-snmp</code> 再導入、旧 <code>snmpd.conf</code> を復元</li>
<li>firewalld に <code>snmp</code> を追加</li>
<li><code>httpd</code> を再有効化（MRTG 用 vhost）</li>
<li><code>mrtg</code> を手動実行してグラフ更新を確認</li>
</ol>
<p>これで NIC / CPU / メモリ / ディスク / 温度 / Unbound / speedtest 系のページが再び見えるようになりました。</p>
<h3>4-3. PHP が動かない</h3>
<p>Remi PHP を消したまま、AlmaLinux 9 側に PHP が入っていませんでした。<br />
httpd は <code>mpm_event</code> + <code>proxy_fcgi</code> なので、mod_php ではなく <strong>php-fpm</strong> が本筋です。</p>
<pre><code class="language-bash">dnf module enable php:8.2
dnf install php php-cli php-fpm php-mbstring php-xml php-gd php-mysqlnd ...
systemctl enable --now php-fpm
systemctl reload httpd
</code></pre>
<p>PukiWiki など既存の PHP サイトが、再び <code>X-Powered-By: PHP/8.2.x</code> で応答するようになりました。</p>
<h3>4-4. logwatch は動いていたが、届いていなかった</h3>
<p><code>cron.daily</code> の logwatch 自体は動いていました。<br />
ただし Postfix が消えていたため、<strong>メールが送れない</strong>状態でした。</p>
<p>対応:</p>
<ul>
<li>Postfix を再導入</li>
<li><code>relayhost</code> を別ホストのメール受信側へ（IPv4 固定）</li>
<li>宛先は従来どおり運用用アドレス</li>
<li>テスト送信と logwatch 手動実行で <code>status=sent</code> を確認</li>
</ul>
<h3>4-5. 自動アップデートを入れる</h3>
<p>AlmaLinux 9 では <code>dnf-automatic</code> が使えます。</p>
<table><thead><tr><th>項目</th><th>設定</th></tr></thead><tbody><tr><td>タイマー</td><td><code>dnf-automatic-install.timer</code></td></tr><tr><td>適用</td><td><code>apply_updates = yes</code></td></tr><tr><td>通知</td><td>メール</td></tr></tbody></table><p>毎日早朝帯（ランダム遅延つき）に更新が入る想定です。<br />
「上げたはいいが、その後のパッチ運用が口伝」になりがちなのを防ぐ意味が大きいです。</p>
<h3>4-6. <code>crontab -e</code> が壊れる（vim-minimal 問題）</h3>
<p><code>crontab -e</code> が <code>/usr/bin/vi</code>（vim-minimal）を開き、フル Vim 用の runtime（<code>vim82</code>）を読んで E319 連発、という状態になりました。</p>
<p><code>vim-enhanced</code> は入っているので、既定エディタを <code>vim</code> にすれば解消します。</p>
<pre><code class="language-bash">export EDITOR=vim
export VISUAL=vim
crontab -e
</code></pre>
<p><code>EDITOR</code> は crontab 専用設定ではなく、エディタを開くツール全般向けの環境変数です。</p>
<h3>4-7. 使っていないものを削る</h3>
<p>上げたあと「止めたまま」「残骸のまま」を棚卸ししました。</p>
<p>削除したものの例:</p>
<ul>
<li><strong>PCP</strong> 一式（無効化したまま残っていた）</li>
<li><strong>memcached</strong></li>
<li><strong>ELevate / Leapp 残骸</strong></li>
<li><strong>httpd-devel</strong> / <strong>php-ldap</strong>（導入時のおまけ・開発用）</li>
</ul>
<p>補足: PCP 依存で <strong>sysstat</strong> も一緒に消えました。<code>sar</code> が必要なら別途戻します。</p>
<h3>4-8. Nextcloud 残骸の撤去</h3>
<p>昔運用していた Nextcloud の残骸が、かなり残っていました。</p>
<p>削除したもの:</p>
<ul>
<li>アプリ本体（DocumentRoot 配下）</li>
<li>MySQL データディレクトリのうち Nextcloud スキーマだけ</li>
<li>Apache の cloud 用 vhost / 古い Alias 設定</li>
<li>ownCloud リポジトリ残骸</li>
<li>当該ホスト名の Let's Encrypt 証明書</li>
<li>古い ownCloud バックアップディレクトリ</li>
</ul>
<p><code>movabletype</code> や他スキーマの MySQL データ、phpMyAdmin 本体などは、まだ触っていません。<br />
「OS を上げる」と「アプリを捨てる」は別作業ですが、上げた直後に棚卸しすると決断しやすいです。</p>
<h2>実際の所要時間（ログから）</h2>
<p>作業ログと Leapp / journal の差分から復元した <strong>経過時間</strong>です。<br />
マシンは上記の i5-2400S / 4GB / SSD です。</p>
<h3>CentOS 7 → AlmaLinux 8</h3>
<table><thead><tr><th>工程</th><th>経過時間</th></tr></thead><tbody><tr><td><code>leapp preupgrade</code>（回答修正後の成功回）</td><td>約 4 分</td></tr><tr><td>衝突パッケージ削除後の <code>preupgrade</code> 再実行</td><td>約 8 分</td></tr><tr><td>1 回目の <code>leapp upgrade</code>（<code>libzip5</code> 衝突で失敗）</td><td>約 15 分</td></tr><tr><td>Remi / MariaDB 公式などの削除</td><td>約 1 分</td></tr><tr><td>2 回目の <code>leapp upgrade</code>（再起動前まで成功）</td><td>約 10 分</td></tr><tr><td>再起動〜AlmaLinux 8 で SSH 復帰</td><td>約 15 分</td></tr></tbody></table><p>失敗込みで、ELevate 着手〜Alma 8 復帰までだいたい <strong>70 分前後</strong>。<br />
うまくいったパスだけなら、成功した <code>upgrade</code> + 再起動で <strong>約 25 分</strong>、その前のきれいな <code>preupgrade</code> を足しても <strong>30〜40 分</strong>程度です。</p>
<h3>AlmaLinux 8 → AlmaLinux 9</h3>
<table><thead><tr><th>工程</th><th>経過時間</th></tr></thead><tbody><tr><td><code>leapp preupgrade</code></td><td>約 3 分</td></tr><tr><td><code>leapp upgrade</code>（再起動前まで）</td><td>約 12 分</td></tr><tr><td>再起動〜AlmaLinux 9 で SSH 復帰</td><td>約 14 分</td></tr></tbody></table><p>8→9 は阻害が少なく、着手〜SSH 復帰までだいたい <strong>35 分</strong>でした。</p>
<h3>事後処理</h3>
<p>こちらは阻害要因というより「棚卸しと復元」なので、実作業としてはだいたい <strong>1〜2 時間</strong>見ておくと安心です。</p>
<table><thead><tr><th>見方</th><th>経過時間</th></tr></thead><tbody><tr><td>成功パスだけ（7→8 + 8→9 の upgrade/再起動中心）</td><td>約 1 時間</td></tr><tr><td>7→8 の失敗リトライ込み</td><td>約 1 時間 45 分前後</td></tr><tr><td>当日の ELevate 作業の壁時計（待ち時間含む）</td><td>約 3 時間 40 分</td></tr><tr><td>その後の復活・掃除まで含めた体感</td><td><strong>半日枠</strong></td></tr></tbody></table><p>壁時計が長い理由は、7→8 の衝突リトライに加え、Alma 8 到達から 8→9 着手までに空きがあったためです。マシンがずっとパッケージ変換していたわけではありません。</p>
<h2>いまの姿</h2>
<table><thead><tr><th>項目</th><th>状態</th></tr></thead><tbody><tr><td>OS</td><td>AlmaLinux 9.8</td></tr><tr><td>ハード</td><td>i5-2400S / 4GB / SSD 480GB のまま</td></tr><tr><td>基盤</td><td>SSH / firewalld / chronyd</td></tr><tr><td>DNS / 共有</td><td>Unbound / Samba</td></tr><tr><td>監視</td><td>MRTG + snmpd + httpd</td></tr><tr><td>PHP</td><td>8.2 + php-fpm</td></tr><tr><td>管理</td><td>Webmin / FDclone</td></tr><tr><td>通知</td><td>Postfix（リレー）+ logwatch + dnf-automatic</td></tr><tr><td>捨てたもの</td><td>PCP、memcached、Leapp 残骸、Nextcloud 一式など</td></tr></tbody></table><p>役割は「何でも屋」から、「共有・DNS・監視・必要最小の Web」へ寄った形です。</p>
<h2>学び</h2>
<ol>
<li><strong>上書きの成否は、サードパーティ RPM でほぼ決まる</strong><br />
Remi / 独自 MariaDB / Webmin は先に外すか、依存を切っておく。必要ならあとで戻す。</li>
<li><strong>Leapp は <code>preupgrade</code> のレポートが本番</strong><br />
inhibitor を残したまま <code>upgrade</code> しても無駄撃ちになりやすい。</li>
<li><strong>DNS とコンソールは保険</strong><br />
SSH だけだと、再起動後の長い沈黙で焦る。</li>
<li><strong>先に役割を移すと、削除が怖くなくなる</strong><br />
Web/メールを他へ寄せてから Remi/MariaDB を消したので、衝突解消が現実的だった。</li>
<li><strong>上がったあとが本番の一部</strong><br />
Unbound、MRTG、PHP、logwatch、自動更新、不要アプリの撤去まで含めて一仕事。</li>
<li><strong>「止めた」と「消した」は違う</strong><br />
サービスを止めてもパッケージやデータ、vhost、証明書が残る。Nextcloud がその典型だった。</li>
<li><strong>FDclone のような手元ツールは dnf に無いことがある</strong><br />
EL9 ではソースビルド前提で、作業ディレクトリを決めておくと楽。</li>
<li><strong>vim-minimal と vim-enhanced の罠</strong>  
<code>crontab -e</code> が <code>vi</code> を掴むと、上がった直後の小さなストレスになる。</li>
</ol>
<h2>まとめ</h2>
<p>古い 1 台を捨てずに AlmaLinux 9 へ延命できました。<br />
ただし成功の実感は、<code>cat /etc/os-release</code> が Alma になった瞬間ではなく、</p>
<ul>
<li>グラフが見える</li>
<li>PHP が動く</li>
<li>ログメールが届く</li>
<li>自動更新が回る</li>
<li>使っていない雲の残骸が消える</li>
</ul>
<p>あたりまで来てからでした。</p>
<p>同じ構成の人は、第三者リポジトリの棚卸しと、<strong>上げた翌日の事後処理リスト</strong>だけは、どうか手を抜かないでください。</p>
<hr />
<h3>参考リンク</h3>
<ul>
<li><a href="https://wiki.almalinux.org/elevate/ELevate-quickstart-guide.html">AlmaLinux ELevate Quickstart</a></li>
<li><a href="https://wiki.almalinux.org/elevate/ELevating-CentOS7-to-AlmaLinux-10">ELevating CentOS 7 to AlmaLinux 10</a></li>
</ul>
]]>
        
    </content>
</entry>

<entry>
    <title>[E] AIのトークン消費量</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002054.html" />
    <id>tag:e.tpot.tk,2026://2.2054</id>

    <published>2026-06-07T14:58:59Z</published>
    <updated>2026-06-07T15:01:49Z</updated>

    <summary>AIエディタのCursorに課金するようになって1年が過ぎました。20ドルコースでずっとやってきたのですが、5月からそれでは足りなくなってきて、60ドルコースに変更。 AIコーディングが進化し、同時進行で処理するようになり、トークンの消費が速いような感じです。 さらに、Windo...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="General" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>AIエディタのCursorに課金するようになって1年が過ぎました。20ドルコースでずっとやってきたのですが、5月からそれでは足りなくなってきて、60ドルコースに変更。</p>

<p>AIコーディングが進化し、同時進行で処理するようになり、トークンの消費が速いような感じです。</p>

<p>さらに、Windows環境での開発でのトークン消費は、特に速く感じます。</p>

<p>macOS環境は、割と開発の本筋に専念できるのですが、Windows環境は、文字コードの問題やシステムの不安定さがあり、AIがファイルを壊すことがあります。間違った文字コードで上書きされると、それを修正・修復するのにトークンを消費するような状態で、なにか納得のいかないトークン消費が含まれています。</p>

<p>DelphiのPascalは、XcodeのSwiftに比べると、扱いづらそうでです。コードを生成しても文法エラーがよくでます。AIが扱いにくい言語仕様なのか、Pascalの知識の蓄積が少ないのか、よく間違えます。</p>

<p>今後、AIが進化して、トークンをより多く消費するようになったら、60ドルコースでも足りなくなるのでしょう。課金のシステム自体を考えてもらわないとダメかも知れません。</p>

<p>本屋大賞を受賞した「イン・ザ・メガチャーチ」で、推しに課金していくシステムの描写がありますが、AIの課金も何か推しの沼にハマっていくような気がするのは、私だけでしょうか。中毒性のようなものを感じます。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[E] Linuxの設定にAIを</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002053.html" />
    <id>tag:e.tpot.tk,2026://2.2053</id>

    <published>2026-05-05T03:17:10Z</published>
    <updated>2026-05-05T03:17:46Z</updated>

    <summary>UTMというmacOSのバーチャルマシン環境にUbuntuを導入。Linux導入でありがちなメッセージに日本語変換のトラブルがあります。   IBus は Wayland におけるデスクトップセッションから呼ばれるべきです。KDE では、&apos;systemsettings5&apos; を起動...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>UTMというmacOSのバーチャルマシン環境にUbuntuを導入。Linux導入でありがちなメッセージに日本語変換のトラブルがあります。</p>

<blockquote>
  <p>IBus は Wayland におけるデスクトップセッションから呼ばれるべきです。KDE では、'systemsettings5' を起動し、「入力デバイス」->「仮想キーボード」セクションにいき、「IBus Wayland」アイコンを選択し「適用」ボタンをクリックすることで、Wayland における IBus を構成することが可能です。他のデスクトップセッションでは、org.freedesktop.IBus.Panel.Wayland.Gtk3.desktop ファイルの中で 'Exec=' の行をセッションの構成ファイルにコピーできます。「Wayland 入力メソッド」構成について、それぞれのドキュメントを参考にしてください。「Wayland 入力メソッド」を構成する前に、デスクトップセッション内で QT<em>IM</em>MODULE と GTK<em>IM</em>MODULE の環境変数は未定義であることを確認してください。 </p>
</blockquote>

<p>どのようにすればいいのかは、ネットで調べれば出てくるのでしょうが、今回はAIに操作させてみることにしました。Cursorに上記のエラーメッセージを投げると、よくあるトラブルですと反応し、ホームディレクトリのファイルを編集し、すぐに解決してくれました。</p>

<p>たぶんGemini CLIなどのエージェントでも可能なのだと思います。ただし、Claudeなどは無料版ではCLIを使えないなどの制限があります。</p>

<p>Linuxには、日本語変換の設定など、WindowsやmacOSとは異なり、初級者には難しいこともあります。それらをAIが解決してくれるということで、敷居が低くなっていると思います。</p>

<p>ターミナルやcursorエディタのフォントも好みのものにし、Linuxにありがちな見た目も解消しました。アプリのインストールもアプリセンターを使うよりも簡単かもしれません。</p>
]]>
        
    </content>
</entry>

<entry>
    <title>[E] ナガオカのデジカメ</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002049.html" />
    <id>tag:e.tpot.tk,2026://2.2049</id>

    <published>2026-03-18T05:46:53Z</published>
    <updated>2026-03-18T05:52:13Z</updated>

    <summary>世間ではコンデジがブームと言われていますが、私自身は最近スマホで写真を撮ることが多くなり、コンデジを使う機会が減っていました。 ただし、ポケットやバッグから取り出してすぐに撮影できるコンデジには、スマホにはない魅力があります。 Panasonic LUMIX DMC-XS1は、薄...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Hardware" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>世間ではコンデジがブームと言われていますが、私自身は最近スマホで写真を撮ることが多くなり、コンデジを使う機会が減っていました。</p>

<p>ただし、ポケットやバッグから取り出してすぐに撮影できるコンデジには、スマホにはない魅力があります。</p>

<p>Panasonic LUMIX DMC-XS1は、薄くて軽く、持ち運びに便利です。しかしながら沈胴式レンズであるため、電源を入れてから撮影できるまでに少し時間がかかります。また、隙間からホコリが入ってしまうと写真にゴミが映り込んでしまいます。掃除機で吸ってもダメなときは、分解して清掃したこともあります。</p>

<p>それでも、かれこれ10年以上DMC-XS1を使ってきました。しばらくコンデジ市場が下火になっていたこともあり、もうDMC-XS1の一歩先を行くものが登場することはないのだろうと諦めていました。</p>

<p>スマホが小さなレンズで高画質な写真撮影を可能にしているのだから、まるでスマートフォンから通信機能などを外し、カメラ機能だけを残したようなデジカメがあってもいいのではないかと思っていました。ポケットにすっぽり入る小さなボディで、電源を入れてすぐに撮影できるような代物です。</p>

<p>その延長線上で、トイカメラというものにも興味がありました。小さくて安価で、キーホルダーのように持ち運べば「カメラを取り出す」という動作すら不要になります。しかし、トイカメラはどうしても写真が意図的なレトロ調になってしまうのがネックでした。</p>

<p>今回登場した「ナガオカ MOVIO MSL600」は、まさに「なんとなくこんなものがあったらいいのに」と思っていた理想に近いカメラでした。スマホのレンズのような構造なので、沈胴式ではありません。薄く、ポケットに入れやすいサイズ感です。</p>

<p>今まで使ってきたDMC-XS1とMSL600を比較すると、厚みはMSL600のほうが薄いのですが、縦横のサイズはMSL600のほうが少し大きいです。一方で重さは103g（DMC-XS1）に対して79g（MSL600）と、MSL600のほうが軽量に仕上がっています。</p>

<p>MSL600の画質については、一般的なコンデジには及ばないように感じます。一世代前のスマホの画質程度と言えるでしょう。レトロエフェクトなどの機能をオフにしても、写真にはどことなくレトロ感が漂います。<br />
<img data-mt-asset-id="426" src="https://e.tpot.tk/img/03/OPN_20260317_094517.jpg" width="540" height="666" alt="" class="asset asset-image mt-image-center" style="display: block; margin-left: auto; margin-right: auto;"/></p>

<p><img data-mt-asset-id="425" src="https://e.tpot.tk/img/03/OPN_20260317_094231.jpg" width="540" height="191" alt="" class="asset asset-image mt-image-center" style="display: block; margin-left: auto; margin-right: auto;"/></p>

<p><img data-mt-asset-id="424" src="https://e.tpot.tk/img/03/OPN_20260317_094214.jpg" width="540" height="326" alt="" class="asset asset-image mt-image-center" style="display: block; margin-left: auto; margin-right: auto;"/></p>

<p><img data-mt-asset-id="423" src="https://e.tpot.tk/img/03/OPN_20260317_094204.jpg" width="540" height="625" alt="" class="asset asset-image mt-image-center" style="display: block; margin-left: auto; margin-right: auto;"/></p>]]>
        
    </content>
</entry>

<entry>
    <title>[E] GraphPaper - 画面いっぱいの方眼紙を表示 - AIでアプリ開発</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002048.html" />
    <id>tag:e.tpot.tk,2026://2.2048</id>

    <published>2026-03-13T12:12:38Z</published>
    <updated>2026-03-13T12:13:32Z</updated>

    <summary>【CursorエディタとAndroid Studioでアプリ開発】 「ディスプレイサイズやピクセル数を考慮して、画面いっぱいの方眼紙を表示するAndroidアプリを作りたい。ダークモード対応もしてください。」という指示で、作ってもらったのですが、目盛りの長さが違う。 どうやらAn...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>【CursorエディタとAndroid Studioでアプリ開発】<br />
「ディスプレイサイズやピクセル数を考慮して、画面いっぱいの方眼紙を表示するAndroidアプリを作りたい。ダークモード対応もしてください。」という指示で、作ってもらったのですが、目盛りの長さが違う。</p>

<p>どうやらAndroidの場合は、物理的なディスプレイサイズの取得ができないことがあるらしく、キャリブレーションという名の下、定規を当てて補正する仕様となってしまいました。</p>

<p>長さを測りたいとき、普段は、巻き尺、定規、ノギスなどを使い分けて長さを測るわけですが、出先などで測定するものがないときに簡単に測れるものを、と思って作りました。ディスプレイの上に測りたいものを載せるだけ。<br />
<img data-mt-asset-id="422" src="https://e.tpot.tk/img/03/Screenshot_20260313-205640.png" width="338" height="540" alt="" class="asset asset-image mt-image-center" style="display: block; margin-left: auto; margin-right: auto;"/></p>]]>
        
    </content>
</entry>

<entry>
    <title>[E] PDF結合アプリ - AIでアプリ開発</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002046.html" />
    <id>tag:e.tpot.tk,2026://2.2046</id>

    <published>2026-01-30T23:09:24Z</published>
    <updated>2026-01-30T23:10:13Z</updated>

    <summary>Windows用のPDF結合アプリを作りました。最初はVisual Studioを使ったのですが、大量にdllを必要としてサイズも大きくなるので、Delphiにしました。ただし、Delphiでもpdfcpu.exeというものを呼び出して使うものとなりました。自分のアプリだけではP...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>Windows用のPDF結合アプリを作りました。最初はVisual Studioを使ったのですが、大量にdllを必要としてサイズも大きくなるので、Delphiにしました。ただし、Delphiでもpdfcpu.exeというものを呼び出して使うものとなりました。自分のアプリだけではPDFの操作は複雑になるというのです。なにか使えそうなライブラリが見つかったら、再度やってみようと思います。<br />
<img data-mt-asset-id="421" src="https://e.tpot.tk/img/03/screenshot_2026-01-31%20004028.png" width="580" height="541" alt="" class="asset asset-image mt-image-center" style="display: block; margin-left: auto; margin-right: auto;"/></p>

<p><br />
とりあえず、複数のPDFを結合するアプリは完成しました。さらにページの右上に青い文字でページ番号を入れ、結合前の先頭のページにジャンプできるようにしおりを入れる機能も入れました。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[E] もう手動で頑張らない！cronとハードリンクで実現する究極の安全自動バックアップ</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002043.html" />
    <id>tag:e.tpot.tk,2025://2.2043</id>

    <published>2025-12-10T11:33:15Z</published>
    <updated>2025-12-10T11:37:47Z</updated>

    <summary>【Cursorエディタでシェルスクリプト開発】 ウェブサイトのデータ保全は、ブログ運営者にとって避けて通れない課題です。手動でのFTP転送は時間がかかり、サーバー障害や誤操作、ランサムウェアのリスクに対して脆弱です。 この記事では、自宅のLinuxサーバーを司令塔とし、複数のレン...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>【Cursorエディタでシェルスクリプト開発】</p>

<p>ウェブサイトのデータ保全は、ブログ運営者にとって避けて通れない課題です。手動でのFTP転送は時間がかかり、サーバー障害や誤操作、<strong>ランサムウェア</strong>のリスクに対して脆弱です。</p>

<p>この記事では、<strong>自宅のLinuxサーバー</strong>を司令塔とし、複数の<strong>レンタルサーバー</strong>（XREA/CoreServerなど）からデータを安全かつ<strong>最も効率的に</strong>引き出す、<strong>実運用に耐えうるバックアップシステム</strong>の構築方法を、技術的な仕組みと合わせて解説します。</p>

<hr />

<h2>????️ こんな課題を抱えていませんか？</h2>

<ul>
<li>毎週の手動FTP転送が面倒で、ついサボってしまう。</li>
<li>バックアップファイルの容量が<strong>世代が増えるたびに膨大</strong>になり、HDDを圧迫している。</li>
<li>パスワード認証で自動実行することにセキュリティ上の懸念がある。</li>
</ul>

<h2>???? 実現する技術的ソリューション</h2>

<p>このシステムは、Linuxの強力なツール（<code>rsync</code>, <code>lftp</code>, <code>cron</code>）を組み合わせて構築され、以下の高度な機能を実現します。</p>

<h3>1. ゼロコストの世代管理：Copy-on-Writeの仕組み</h3>

<p>従来のバックアップと決定的に異なるのは、バックアップの世代が増えても<strong>ディスク容量がほぼ増えない</strong>点です。</p>

<ul>
<li><strong>仕組み:</strong> ダウンロードする前に、前回世代のディレクトリを<strong>ハードリンク</strong>（iノード共有）を使って新しい世代ディレクトリに丸ごと複製します。その後、<code>lftp</code>や<code>rsync</code>でリモートからデータをダウンロードし、<strong>変更があったファイルだけを上書き</strong>します。</li>
<li><strong>メリット:</strong> 変更のないファイルはハードリンクのまま残り、容量は消費されません。ディスク消費は<strong>変更差分のみ</strong>に抑えられます。</li>
</ul>

<h3>2. 暗号化と自動実行の両立</h3>

<ul>
<li><strong>安全な通信経路:</strong> パスワードやデータが平文で流れるFTPを避け、<strong>FTP over TLS (FTPS)</strong> や<strong>SSHトンネル</strong>（rsync）による暗号化通信を採用します。</li>
<li><strong>Cronによる完全自動化:</strong> パスワードを引数で渡す汎用シェルスクリプト設計により、<strong>cronが毎日静かに実行してくれる</strong>安定した日次バックアップを実現します。</li>
</ul>

<h3>3. 堅牢なファイルハンドリング</h3>

<ul>
<li><strong>マルチサーバー対応:</strong> 共通スクリプト設計により、複数のレンタルサーバー設定を一つのスクリプトで一元管理できます。</li>
<li><strong>シンボリックリンク無視:</strong> <code>lftp</code>の <code>--no-symlinks</code> オプションを適用し、レンタルサーバー上のリンク（例: ログへのリンク）を誤って辿り、余計なデータをダウンロードしたり、意図せずカレントディレクトリに書き込んだりする事故を防ぎます。</li>
</ul>

<p>この記事を読んで、<strong>cronが毎日自動で</strong>、<strong>容量を気にせず</strong>、<strong>安全に</strong>データを守ってくれる「賢いバックアップ」の体制を整えましょう！</p>
]]>
        
    </content>
</entry>

<entry>
    <title>[E] 個人用ポータルサイトを作成しました - 天気・カレンダー・予定を1画面で管理</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002042.html" />
    <id>tag:e.tpot.tk,2025://2.2042</id>

    <published>2025-12-10T11:21:23Z</published>
    <updated>2025-12-10T11:24:14Z</updated>

    <summary>【Cursorエディタでウェブアプリ開発】 日々の情報を1画面で確認できる個人用ポータルサイトを作成しました。天気情報、カレンダー、予定、検索、AI、クイックリンクを統合した、シンプルで使いやすいデザインになっています。 主な機能 1. 天気情報 現在の天気: 現在の気温、天気、...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>【Cursorエディタでウェブアプリ開発】</p>

<p>日々の情報を1画面で確認できる個人用ポータルサイトを作成しました。天気情報、カレンダー、予定、検索、AI、クイックリンクを統合した、シンプルで使いやすいデザインになっています。
<img data-mt-asset-id="420" src="https://e.tpot.tk/img/03/screenshot_m223.png" width="540" height="364" alt="" class="asset asset-image mt-image-center" style="display: block; margin-left: auto; margin-right: auto;"/></p>

<h2>主な機能</h2>

<h3>1. 天気情報</h3>

<ul>
<li><strong>現在の天気</strong>: 現在の気温、天気、湿度、風速、降水量を表示</li>
<li><strong>今後の予報</strong>: 24時間分の時間別予報（3時間ごと）
<ul>
<li>時刻、アイコン、説明、気温、降水量、風速を2行レイアウトで見やすく表示</li>
</ul></li>
<li><strong>明日以降の予報</strong>: 最大7日分の日別予報
<ul>
<li>日付、アイコン、説明、最高/最低気温、降水量、風速を2行レイアウトで表示</li>
</ul></li>
</ul>

<h3>2. 3か月カレンダー</h3>

<ul>
<li>3か月分のカレンダーを一度に表示</li>
<li>祝日を自動表示</li>
<li>予定がある日を強調表示</li>
</ul>

<h3>3. 行事予定</h3>

<ul>
<li>ICSファイルから予定を取得</li>
<li>近日の予定を一覧表示</li>
<li>土日祝を色分けして表示</li>
</ul>

<h3>4. 検索機能</h3>

<ul>
<li>複数の検索エンジンに対応
<ul>
<li>Google</li>
<li>Bing</li>
<li>DuckDuckGo</li>
<li>Yahoo! Japan</li>
</ul></li>
</ul>

<h3>5. AI機能</h3>

<ul>
<li>複数のAIサービスに対応
<ul>
<li>Gemini</li>
<li>ChatGPT</li>
<li>Claude</li>
<li>Perplexity</li>
<li>Microsoft Copilot</li>
</ul></li>
</ul>

<h3>6. クイックリンク</h3>

<ul>
<li>よく使うサイトを登録</li>
<li>ドラッグ&amp;ドロップで並び替え可能</li>
<li>追加・編集・削除が簡単</li>
</ul>

<h2>技術的な特徴</h2>

<h3>セキュリティ</h3>

<ul>
<li>APIキーはサーバー側（<code>.env</code>ファイル）で管理し、クライアント側には露出しない</li>
<li>PHPプロキシ経由でAPIを呼び出すため、セキュア</li>
</ul>

<h3>パフォーマンス</h3>

<ul>
<li>天気情報を10分間キャッシュして、API呼び出しを最小限に</li>
<li>ネットワークエラー時はキャッシュを利用</li>
</ul>

<h3>UI/UX</h3>

<ul>
<li>4列のグリッドレイアウトで情報を整理</li>
<li>レスポンシブデザインでスマートフォンにも対応</li>
<li>美しいグラデーション背景</li>
<li>ホバーエフェクトで操作性を向上</li>
</ul>

<h2>使用技術</h2>

<ul>
<li><strong>フロントエンド</strong>: HTML5, CSS3 (Grid/Flexbox), JavaScript (ES6+)</li>
<li><strong>バックエンド</strong>: PHP (APIプロキシ)</li>
<li><strong>API</strong>: OpenWeatherMap API</li>
<li><strong>データ形式</strong>: ICS (iCalendar), JSON</li>
</ul>

<h2>セットアップ</h2>

<ol start='1'>
<li>OpenWeatherMap APIキーを取得</li>
<li><code>.env</code>ファイルにAPIキーを設定</li>
<li><code>config.js</code>で都市名や緯度・経度を設定</li>
<li>PHPサーバーで起動</li>
</ol>
]]>
        
    </content>
</entry>

<entry>
    <title>[E] AIの種類と特徴</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002040.html" />
    <id>tag:e.tpot.tk,2025://2.2040</id>

    <published>2025-10-09T11:23:13Z</published>
    <updated>2025-10-09T11:23:43Z</updated>

    <summary>AI(人工知能)は、私たちの日常生活や仕事に深く浸透し、さまざまな形で活用されています。しかし、「AI」と一言で言っても、その種類や得意分野は多岐にわたります。主要なAIツールとその特徴を理解することで、それぞれのAIを最適な場面で使い分け、その真価を最大限に引き出すことができる...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="General" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p class="first-paragraph"><font face="Aptos, serif">AI(</font>人工知能<font face="Aptos, serif">)</font>は、私たちの日常生活や仕事に深く浸透し、さまざまな形で活用されています。しかし、「<font face="Aptos, serif">AI</font>」と一言で言っても、その種類や得意分野は多岐にわたります。主要な<font face="Aptos, serif">AI</font>ツールとその特徴を理解することで、それぞれの<font face="Aptos, serif">AI</font>を最適な場面で使い分け、その真価を最大限に引き出すことができるようになります。</p>
<h2 class="cjk"><a name="主要なaiの種類と得意分野"></a>主要な<font face="Aptos Display, serif">AI</font>の種類と得意分野</h2>
<p class="first-paragraph">現在、多くのユーザーに利用されている代表的な<font face="Aptos, serif">AI</font>ツールをいくつかご紹介します。</p>

<h3 class="cjk"><a name="chatgpt-openai"></a><font face="Aptos, serif">1.
ChatGPT (OpenAI)</font></h3>
<ul>
	<li><p class="compact"><b>特徴</b><font face="Aptos, serif">:
	</font>大規模言語モデル<font face="Aptos, serif">(LLM)</font>の先駆けとして広く知られています。自然な会話能力に優れ、テキスト生成、要約、翻訳、プログラミングコードの生成・デバッグ、ブレインストーミングなど、幅広いタスクに対応できます。とくに、創造的な文章作成や複雑な質問への回答、情報整理に強みを発揮します。</p></li>
	<li><p class="compact"><b>得意分野</b><font face="Aptos, serif">:</font></p></li>
</ul>
<ul>
	<ul>
		<li><p class="compact"><b>文章生成</b><font face="Aptos, serif">:
		</font>ブログ記事、メール、企画書、詩、物語など。</p></li>
		<li><p class="compact"><b>情報検索・要約</b><font face="Aptos, serif">:
		</font>特定のトピックに関する情報の収集と整理。</p></li>
		<li><p class="compact"><b>プログラミング支援</b><font face="Aptos, serif">:
		</font>コードの生成、エラー修正、解説。</p></li>
		<li><p class="compact"><b>アイデア出し</b><font face="Aptos, serif">:
		</font>新規事業のアイデア、コンテンツの企画。</p></li>
		<li><p class="compact"><b>学習支援</b><font face="Aptos, serif">:
		</font>複雑な概念の解説、語学学習。</p></li>
	</ul>
</ul>
<ul>
	<li><p class="compact"><b>使い分けのヒント</b><font face="Aptos, serif">:
	</font>ゼロから何かを創造したい時、複雑な情報を分かりやすくまとめたい時、プログラミングの助けが欲しい時に最適です。</p></li>
</ul>
<h3 class="cjk"><a name="gemini-google"></a><font face="Aptos, serif">2.
Gemini (Google)</font></h3>
<ul>
	<li><p class="compact"><b>特徴</b><font face="Aptos, serif">:
	Google</font>が開発したマルチモーダル<font face="Aptos, serif">AI</font>で、テキストだけでなく、画像、音声、動画など、さまざまな形式の情報を理解し、処理できる点が最大の特徴です。<font face="Aptos, serif">Google</font>の広範な情報と連携し、とくに最新の情報に基づいた回答や分析を提供することに優れています。</p></li>
	<li><p class="compact"><b>得意分野</b><font face="Aptos, serif">:</font></p></li>
</ul>
<ul>
	<ul>
		<li><p class="compact"><b>マルチモーダル処理</b><font face="Aptos, serif">:
		</font>画像や動画の内容を分析し、関連するテキストを生成。</p></li>
		<li><p class="compact"><b>最新情報の検索・分析</b><font face="Aptos, serif">:
		Google</font>検索と連携し、リアルタイムに近い情報を提供。</p></li>
		<li><p class="compact"><b>データ分析</b><font face="Aptos, serif">:
		</font>表形式のデータやグラフの解釈。</p></li>
		<li><p class="compact"><b>クリエイティブなコンテンツ生成</b><font face="Aptos, serif">:
		</font>画像とテキストを組み合わせたアイデア出し。</p></li>
	</ul>
</ul>
<ul>
	<li><p class="compact"><b>使い分けのヒント</b><font face="Aptos, serif">:
	</font>最新の情報を基にした分析が必要な時、画像や動画を含む複雑な情報を扱いたい時、<font face="Aptos, serif">Google
	Workspace</font>との連携を重視する際に強力なツールとなります。</p></li>
</ul>
<h3 class="cjk"><a name="copilot-microsoft"></a><font face="Aptos, serif">3.
Copilot (Microsoft)</font></h3>
<ul>
	<li><p class="compact"><b>特徴</b><font face="Aptos, serif">:
	Microsoft</font>が提供する<font face="Aptos, serif">AI</font>アシスタントで、<font face="Aptos, serif">Microsoft
	365</font>アプリケーション<font face="Aptos, serif">(Word,
	Excel, PowerPoint,
	Outlook</font>など<font face="Aptos, serif">)</font>との深い統合が特徴です。これらのアプリケーション内で直接<font face="Aptos, serif">AI</font>の機能を利用でき、作業効率を劇的に向上させます。プログラミング支援ツール「<font face="Aptos, serif">GitHub
	Copilot</font>」も有名です。</p></li>
	<li><p class="compact"><b>得意分野</b><font face="Aptos, serif">:</font></p></li>
</ul>
<ul>
	<ul>
		<li><p class="compact"><font face="Aptos, serif"><b>Microsoft
		</b><b>365</b></font><b>連携</b><font face="Aptos, serif">:
		Word</font>での文章作成支援、<font face="Aptos, serif">Excel</font>でのデータ分析、<font face="Aptos, serif">PowerPoint</font>でのスライド作成、<font face="Aptos, serif">Outlook</font>でのメール作成・要約。</p></li>
		<li><p class="compact"><b>プログラミング支援</b><b>
		</b><font face="Aptos, serif"><b>(GitHub Copilot)</b>:
		</font>コードの自動補完、関数やクラスの生成、テストコードの作成。</p></li>
		<li><p class="compact"><b>会議の要約</b><font face="Aptos, serif">:
		Teams</font>会議の議事録作成や要点抽出。</p></li>
	</ul>
</ul>
<ul>
	<li><p class="compact"><b>使い分けのヒント</b><font face="Aptos, serif">:
	</font>日常的に<font face="Aptos, serif">Microsoft
	365</font>を使用している方にとって、作業効率を向上させる強力なパートナーとなります。プログラマーにとっては、<font face="Aptos, serif">GitHub
	Copilot</font>が開発速度を加速させます。</p></li>
</ul>
<h3 class="cjk"><a name="claude-anthropic"></a><font face="Aptos, serif">4.
Claude (Anthropic)</font></h3>
<ul>
	<li><p class="compact"><b>特徴</b><font face="Aptos, serif">:
	Anthropic</font>が開発した<font face="Aptos, serif">AI</font>で、安全性と倫理に重点を置いている点が特徴です。長文の処理能力に優れ、複雑な指示の理解と実行、そしてハルシネーション<font face="Aptos, serif">(</font>誤情報生成<font face="Aptos, serif">)</font>の抑制に強みを発揮します。特に、<font face="Aptos, serif">Cursor</font>などの<font face="Aptos, serif">AI</font>搭載エディタに組み込まれることで、コード理解とプログラミング支援の分野でも高い性能を発揮します。</p></li>
	<li><p class="compact"><b>得意分野</b><font face="Aptos, serif">:</font></p></li>
</ul>
<ul>
	<ul>
		<li><p class="compact"><b>長文の要約・分析</b><font face="Aptos, serif">:
		</font>論文、契約書、報告書など、大量のテキストデータの処理。</p></li>
		<li><p class="compact"><b>複雑な指示への対応</b><font face="Aptos, serif">:
		</font>複数のステップや制約を含むタスクの実行。</p></li>
		<li><p class="compact"><b>倫理的・安全なコンテンツ生成</b><font face="Aptos, serif">:
		</font>ガイドラインに沿った、信頼性の高い情報提供。</p></li>
		<li><p class="compact"><b>創造的な文章作成</b><font face="Aptos, serif">:
		</font>物語、スクリプト、詩など。</p></li>
		<li><p class="compact"><b>プログラミング支援</b><b>
		</b><font face="Aptos, serif"><b>(Cursor</b></font><b>統合時</b><font face="Aptos, serif"><b>)</b>:
		</font>コードベース全体の理解、文脈を考慮したコード生成、リファクタリング提案。</p></li>
	</ul>
</ul>
<ul>
	<li><p class="compact"><b>使い分けのヒント</b><font face="Aptos, serif">:
	</font>長い文書を深く分析したい時、複雑なタスクを安全かつ正確に実行したい時、倫理的な配慮が求められるコンテンツを生成したい時に適しています。プログラミング分野では、<font face="Aptos, serif">Cursor</font>エディタと組み合わせることで、コード全体の文脈を理解した高品質な開発支援を受けることができます。</p></li>
</ul>
<h2 class="cjk"><a name="aiの賢い使い分け方"></a><font face="Aptos Display, serif">AI</font>の賢い使い分け方</h2>
<p class="first-paragraph">これらの<font face="Aptos, serif">AI</font>はそれぞれ異なる強みを持っているため、目的に応じて使い分けることが重要です。</p>
<ul>
	<li><p class="compact"><b>情報収集と要約</b><font face="Aptos, serif">:
	</font>最新情報が必要なら<font face="Aptos, serif"><b>Gemini</b></font>、一般的な知識や概念の深掘りなら<font face="Aptos, serif"><b>ChatGPT</b></font>、長文の深い分析なら<font face="Aptos, serif"><b>Claude</b></font>。</p></li>
	<li><p class="compact"><b>文章作成</b><font face="Aptos, serif">:
	</font>創造的な文章や長文なら<font face="Aptos, serif"><b>ChatGPT</b></font>や<font face="Aptos, serif"><b>Claude</b></font>、<font face="Aptos, serif">Microsoft
	Office</font>での作業効率化なら<font face="Aptos, serif"><b>Copilot</b></font>。</p></li>
	<li><p class="compact"><b>プログラミング</b><font face="Aptos, serif">:
	</font>コードの生成やデバッグなら<font face="Aptos, serif"><b>ChatGPT</b></font>、開発環境でのリアルタイムな補完なら<font face="Aptos, serif"><b>Copilot
	(GitHub Copilot)</b></font>、<font face="Aptos, serif">AI</font>搭載エディタでの包括的な開発支援なら<font face="Aptos, serif"><b>Cursor</b></font>。</p></li>
	<li><p class="compact"><b>マルチメディア分析</b><font face="Aptos, serif">:
	</font>画像や動画を含む情報処理なら<font face="Aptos, serif"><b>Gemini</b></font>。</p></li>
	<li><p class="compact"><b>ビジネス文書作成</b><font face="Aptos, serif">:
	Word</font>や<font face="Aptos, serif">PowerPoint</font>での資料作成なら<font face="Aptos, serif"><b>Copilot</b></font>、契約書や報告書の分析なら<font face="Aptos, serif"><b>Claude</b></font>。</p></li>
	<li><p class="compact"><b>複雑なタスク・安全性</b><font face="Aptos, serif">:
	</font>複数のステップを含む複雑な指示や、倫理的・安全なコンテンツ生成なら<font face="Aptos, serif"><b>Claude</b></font>。</p></li>
</ul>
<p class="first-paragraph">複数の<font face="Aptos, serif">AI</font>を組み合わせることで、それぞれの弱点を補い、より高度なタスクをこなすことも可能です。たとえば、<font face="Aptos, serif">Gemini</font>で最新情報を収集し、その情報を基に<font face="Aptos, serif">ChatGPT</font>でブログ記事の草稿を作成し、<font face="Aptos, serif">Copilot</font>で<font face="Aptos, serif">Word</font>に整形するといった連携も考えられます。</p>
<p>プログラミングにおいても、<font face="Aptos, serif">Cursor</font>のようなエディタと他の<font face="Aptos, serif">AI</font>を組み合わせる使い方が効果的です。<font face="Aptos, serif">Cursor</font>でコード全体の構造を把握しながら開発を進め、特定の技術的な質問や複雑なアルゴリズムの相談は<font face="Aptos, serif">ChatGPT</font>で深掘りし、最終的な品質チェックや最適化を<font face="Aptos, serif">Cursor</font>で行うといった流れで、開発効率を大幅に向上させることができます。</p>
<p><font face="Aptos, serif">AI</font>は単なるツールではなく、私たちの生産性や創造性を高める強力なパートナーです。それぞれの<font face="Aptos, serif">AI</font>の特性を理解し、目的に合わせて賢く使いこなすことで、日々の業務や学習、創作活動をより豊かにしていきましょう。</p>
</body>]]>
        
    </content>
</entry>

<entry>
    <title>[E] Android向けスタートメニュー風のホームアプリ - AIでアプリ開発</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002038.html" />
    <id>tag:e.tpot.tk,2025://2.2038</id>

    <published>2025-09-22T23:04:27Z</published>
    <updated>2026-04-18T04:04:10Z</updated>

    <summary> 【CursorエディタとAndroid Studioでアプリ開発】     先日、マック用にスタートメニュー風のランチャーを作り、日々便利に使っています。ふとスマホやタブレットも同様のランチャーになれば使いやすいのではないかと、ホームアプリ作成に挑戦してみました。     アプ...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[ <p>【CursorエディタとAndroid Studioでアプリ開発】</p>

    <p>先日、マック用にスタートメニュー風のランチャーを作り、日々便利に使っています。ふとスマホやタブレットも同様のランチャーになれば使いやすいのではないかと、ホームアプリ作成に挑戦してみました。</p>

    <p>アプリのアイコンは、自分で選択したカテゴリに振り分け、使うときは、カテゴリからアプリを選択できるようにしています。</p>

    <p>よく使うアプリは、起動回数を記録したものに基づきソートしているので、よく使うものが上位に表示されています。カウントは今月と先月のカウントからランキングしています。ゆるやかに新しい傾向のよく使うアプリが表示されるように工夫しています。</p>

    <p>最近使ったアプリは、使うたびに一番最初に上がってきます。使うときは繰り返し使うことがあるので、これも便利です。こちらのランキングは、2週間使わないとランキングから消えていきます。</p>

    <p>画面の上部には、アプリで用意したウィジェットを配置しようと思ったのですが、アプリのウィジェットを配置するのは難易度が高そうなので、自作のウィジェットを用意しました。バッテリー消費軽減にも良い影響をしていることでしょう。</p>

    <p>時刻の下にあるのは、システム稼働時間です。スマホも時々再起動したほうがいいので、その目安になるようにしました。</p>

    <p>日付には、和暦も入れました。仕事で和暦も使うので、すぐに確認できるのは便利です。</p>

    <p>2段目の左は、歩数です。Androidのヘルスコネクトと連携しています。中央はタップすると画面消灯します。これも便利です。そして、右にはバッテリ残量表示なのですが、ここに温度も表示しています。</p>

    <p>一番下の段には、よく使うアプリのアイコンを配置しました。カテゴリ別のよく使うアプリの内容とかぶっているのですが、とりあえずこのままで。ピン留めしたアプリを配置するのもいいですね。</p>
<img alt="Screenshot_20250923-064258.png" src="https://e.tpot.tk/img/02/Screenshot_20250923-064258.png" width="400" height="886" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" />
    <h2>StartMenu</h2>
    <p>あなたのAndroidデバイスをパーソナライズするカスタムホームランチャーアプリ</p>
    
    <h3>アプリの概要</h3>
    <p><strong>StartMenu</strong>は、Androidデバイスをより便利で効率的に使えるようにするカスタムホームランチャーアプリです。従来のホーム画面を置き換え、リアルタイム情報と便利な機能を統合した、モダンで使いやすいインターフェイスを提供します。</p>
    
    <h3>主要機能</h3>
    
    <h5>カスタムホームランチャー</h5>
    <ul>
        <li>デフォルトホームアプリとして設定可能</li>
        <li>カテゴリ別アプリ管理</li>
        <li>よく使うアプリの自動記録</li>
        <li>使用頻度に基づくアプリソート</li>
    </ul>
    
    <h5>リアルタイムウィジェット</h5>
    <ul>
        <li>デジタル時計とカレンダー表示</li>
        <li>歩数計（Google Fit連携）</li>
        <li>バッテリー残量表示</li>
    </ul>
    
    <h5>歩数計機能</h5>
    <ul>
        <li>Google Fit API統合</li>
        <li>Health Connect API対応</li>
        <li>日々の歩数をリアルタイム表示</li>
        <li>シンプルで分かりやすい歩数表示</li>
    </ul>
    
    <h5>システム機能</h5>
    <ul>
        <li>ワンタップ画面消灯</li>
        <li>アクセシビリティサービス連携</li>
        <li>システムロック機能</li>
        <li>セキュアな権限管理</li>
    </ul>
    
    <h3>ウィジェット詳細</h3>
    
    <h5>時計ウィジェット</h5>
    <p>リアルタイムで現在時刻を表示。縦横画面対応のレスポンシブデザイン。</p>
    
    <h5>日付ウィジェット</h5>
    <p>今日の日付と曜日を美しく表示。日本語対応。</p>
    
    <h5>歩数ウィジェット</h5>
    <p>Google FitとHealth Connectの両方に対応。日々の歩数を一目で確認。</p>
    
    <h5>バッテリーウィジェット</h5>
    <p>デバイスのバッテリー残量をパーセンテージで表示。</p>
    
    <h5>システムロック</h5>
    <p>ワンタップで画面を消灯。アクセシビリティサービスを活用。</p>
    
    <h3>技術仕様</h3>
    
    <h4>開発環境・技術スタック</h4>
    <p><strong>言語:</strong> Kotlin</p>
    <p><strong>UI フレームワーク:</strong> Jetpack Compose</p>
    <p><strong>アーキテクチャ:</strong> MVVM + Repository</p>
    <p><strong>非同期処理:</strong> Kotlin Coroutines</p>
    <p><strong>最小SDK:</strong> API 31 (Android 12)</p>
    
    <h3>必要な権限</h3>
    
    <h4>プライバシー保護への配慮</h4>
    <p>このアプリは以下の権限を使用しますが、すべて機能に必要な最小限の権限です：</p>
    <ul>
        <li><strong>身体センサー</strong> - 歩数データの取得のため</li>
        <li><strong>アクティビティ認識</strong> - Google Fit連携のため</li>
        <li><strong>アクセシビリティサービス</strong> - 画面消灯機能のため</li>
    </ul>
    <p><em>※ 個人情報の収集・送信は行いません。すべてのデータはデバイス内で処理されます。</em></p>
    
    <h3>主な特徴</h3>
    
    <h5>レスポンシブデザイン</h5>
    <p>縦画面・横画面の両方に対応した柔軟なレイアウト。画面サイズに応じてウィジェットが自動調整されます。</p>
    
    <h5>リアルタイム更新</h5>
    <p>歩数データは定期的に自動更新。常に最新の情報を表示します。</p>
    
    <h5>モダンUI</h5>
    <p>Material Design 3に準拠した美しいインターフェイス。時間帯に応じた背景色の変化もサポート。</p>
    
    <h5>高性能</h5>
    <p>Kotlin Coroutinesによる非同期処理で、スムーズな動作を実現。バッテリー消費も最適化されています。</p>
    
]]>
        
    </content>
</entry>

<entry>
    <title>[E] YTSummary - YouTube動画を自動要約するmacOSアプリ - AIでアプリ開発</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002037.html" />
    <id>tag:e.tpot.tk,2025://2.2037</id>

    <published>2025-09-15T03:55:41Z</published>
    <updated>2025-09-15T04:01:29Z</updated>

    <summary>【CursorエディタとXcodeでアプリ開発】 Diaブラウザでは、AIを使って、表示している動画の中を読み取って要約するという機能があります。とても便利なのですが、有料です。そこで、URLを貼り付けて、同様の機能を実現しようというのが今回のコンセプトです。 YTSummary...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>【CursorエディタとXcodeでアプリ開発】</p>
<p>Diaブラウザでは、AIを使って、表示している動画の中を読み取って要約するという機能があります。とても便利なのですが、有料です。そこで、URLを貼り付けて、同様の機能を実現しようというのが今回のコンセプトです。</p>
<img alt="screenshot_m222.png" src="https://e.tpot.tk/img/02/screenshot_m222.png" width="580" height="437" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" />
<h2>YTSummary - YouTube動画を自動要約するmacOSアプリ</h2>

<p>YouTube動画の内容を素早く把握したい時、長い動画を最後まで見る時間がない時はありませんか？<strong>YTSummary</strong>は、そんな悩みを解決するmacOSアプリケーションです。YouTube動画のURLを入力するだけで、AIが自動的に動画を文字起こしし、重要なポイントを<strong>日本語で要約</strong>してくれます。日本語、英語、中国語、韓国語など、あらゆる言語の動画を日本語で要約できるのが最大の特徴です。</p>

<div class="feature-list">
<h3>主な機能</h3>
<ul>
<li><strong>ワンクリック要約</strong> - YouTubeのURLを入力するだけで自動処理</li>
<li><strong>高精度な文字起こし</strong> - OpenAI Whisperを使用した高品質な音声認識</li>
<li><strong>日本語要約</strong> - あらゆる言語の動画を日本語で要約</li>
<li><strong>AI要約</strong> - Gemini APIを使用した自然な日本語要約</li>
<li><strong>字幕優先</strong> - 利用可能な場合は字幕を優先して処理速度を向上</li>
<li><strong>タグ自動削除</strong> - タイムスタンプや効果音タグを自動でクリーンアップ</li>
<li><strong>多言語対応</strong> - 100以上の言語を自動検出して文字起こし</li>
</ul>
</div>

<h3>使用方法</h3>

<ol>
<li>アプリケーションを起動</li>
<li>YouTube動画のURLを入力フィールドに貼り付け</li>
<li>「要約開始」ボタンをクリック</li>
<li>処理完了まで待機（通常1-3分程度）</li>
<li>生成された要約を確認</li>
</ol>

<h3>使用技術</h3>
<ul>
<li><strong>フレームワーク</strong>: SwiftUI (macOS)</li>
<li><strong>動画ダウンロード</strong>: yt-dlp</li>
<li><strong>音声認識</strong>: OpenAI Whisper</li>
<li><strong>要約生成</strong>: Google Gemini API</li>
<li><strong>動画処理</strong>: FFmpeg</li>
</ul>

<h3>処理フロー</h3>

<p>YTSummaryは以下の手順で動画を処理します：</p>

<ol>
<li><strong>動画ダウンロード</strong> - yt-dlpを使用してYouTube動画をダウンロード</li>
<li><strong>字幕取得</strong> - 利用可能な字幕ファイルを優先的に取得</li>
<li><strong>文字起こし</strong> - 字幕がない場合はWhisperで音声を文字起こし</li>
<li><strong>テキストクリーニング</strong> - タイムスタンプやタグを自動削除</li>
<li><strong>言語検出</strong> - 100以上の言語を自動判定</li>
<li><strong>要約生成</strong> - Gemini APIで重要なポイントを抽出</li>
<li><strong>翻訳</strong> - 必要に応じて日本語に翻訳</li>
</ol>



<p>YTSummaryを使って、YouTube動画の内容を効率的に把握し、時間を有効活用しましょう！</p>

]]>
        
    </content>
</entry>

<entry>
    <title>[E] IconRounder - macOSアプリアイコンを簡単に角丸化する便利ツール - AIでアプリ開発</title>
    <link rel="alternate" type="text/html" href="https://e.tpot.jp/a/002036.html" />
    <id>tag:e.tpot.tk,2025://2.2036</id>

    <published>2025-09-14T19:45:22Z</published>
    <updated>2025-09-14T19:48:00Z</updated>

    <summary>【CursorエディタとXcodeでアプリ開発】 今まで、ChatGPTでアイコンを作ってもらい、画像編集アプリで調整したあと、Xcodeで要求されるサイズの違うアイコンを作成し、Xcodeに貼り付けていました。しかし、アプリアイコンは、微妙な角丸と透明な周囲の余白があり、それを...</summary>
    <author>
        <name>pekoe</name>
        <uri>http://www.tpot.tk/</uri>
    </author>
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://e.tpot.jp/">
        <![CDATA[<p>【CursorエディタとXcodeでアプリ開発】</p>

<p>今まで、ChatGPTでアイコンを作ってもらい、画像編集アプリで調整したあと、Xcodeで要求されるサイズの違うアイコンを作成し、Xcodeに貼り付けていました。しかし、アプリアイコンは、微妙な角丸と透明な周囲の余白があり、それを調整するのは手間でした。それらを一気に自動化するアプリを作成しました。</p>

<p>どこかにありそうなアプリなのですが、ChatGPTが存在しないというので、作成しました。単機能なので非常に簡単に作ってくれました。</p>

<p>いつもAIでアプリを作る流れは、ChatGPTに大まかなことを質問し、アプリ名を決めてから、Xcodeを開きます。プロジェクト名を考えてもらっています。アプリ制作は、Cursorエディタにおまかせ。最近は、ChatGPTである程度会話したあとに、アプリ作成の技術的なプロンプトを作成してもらい、Cursorエディタに投げるということをやってみました。</p>
<img alt="screenshot_m221.png" src="https://e.tpot.tk/img/02/screenshot_m221.png" width="568" height="564" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /><br />
        <h2>IconRounder - macOSアプリアイコンを簡単に角丸化する便利ツール</h2>

        <h3>アプリの概要</h3>
        <p><strong>IconRounder</strong>は、macOSアプリ開発者向けの便利なツールです。通常の画像ファイルを選択するだけで、macOSアプリアイコンに必要な7つのサイズ（16x16から1024x1024まで）を自動生成し、適切な角丸処理を施してくれます。</p>

        <h3>主な機能</h3>
        <div class="feature-list">
            <h4><span class="emoji">⚡</span> ワンクリックでアイコン生成</h4>
            <ul>
                <li>画像を選択するだけで、必要なすべてのサイズのアイコンを自動生成</li>
                <li>macOS標準の角丸率（22%）を適用</li>
                <li>内側の角丸（20%）も自動で調整</li>
            </ul>

            <h4><span class="emoji">????</span> 7つのサイズに対応</h4>
            <ul>
                <li>16x16、32x32、64x64、128x128、256x256、512x512、1024x1024</li>
                <li>XcodeのAppIcon.appiconsetにそのままドラッグ&ドロップ可能</li>
            </ul>

            <h4><span class="emoji">????</span> 直感的なUI</h4>
            <ul>
                <li>シンプルで分かりやすいインターフェース</li>
                <li>画像プレビュー機能付き</li>
                <li>生成状況をリアルタイムで表示</li>
            </ul>

            <h4><span class="emoji">????</span> 簡単な保存機能</h4>
            <ul>
                <li>生成したアイコンをフォルダごと保存</li>
                <li>ファイル名も自動で設定（例：16x16.png、32x32.pngなど）</li>
            </ul>
        </div>

        <h3>使い方</h3>
        <div class="steps">
            <ol>
                <li><strong>画像を選択</strong> - 「画像を選択」ボタンをクリックして、元となる画像ファイルを選択</li>
                <li><strong>アイコン生成</strong> - 「アイコンを生成」ボタンをクリック</li>
                <li><strong>保存</strong> - 「ファイルに保存」ボタンで生成されたアイコンを保存</li>
                <li><strong>Xcodeで使用</strong> - 保存されたフォルダをXcodeのAppIcon.appiconsetにドラッグ&ドロップ</li>
            </ol>
        </div>

        <h3>こんな方におすすめ</h3>
        <div class="target-users">
            <ul>
                <li><strong>macOSアプリ開発者</strong> - アプリアイコンの作成が面倒な方</li>
                <li><strong>デザイナー</strong> - クライアント向けにアイコンセットを提供する方</li>
                <li><strong>個人開発者</strong> - 手軽にプロフェッショナルなアイコンを作成したい方</li>
            </ul>
        </div>

        <h3>技術的な特徴</h3>
        <div class="technical-features">
            <ul>
                <li><strong>SwiftUI</strong>で構築されたモダンなUI</li>
                <li><strong>macOS標準の角丸率</strong>を正確に再現</li>
                <li><strong>非同期処理</strong>でスムーズな操作感</li>
                <li><strong>エラーハンドリング</strong>で安心して使用可能</li>
            </ul>
        </div>

        <div class="highlight">
            <p><strong>IconRounder</strong>を使えば、アプリアイコンの作成がこれまで以上に簡単になります。開発時間の短縮と、プロフェッショナルな見た目のアイコン作成を両立できる、開発者必携のツールです。</p>
        </div>]]>
        
    </content>
</entry>

</feed>
