<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Tarailife</title><description>たらいらいふ</description><link>https://tarailife.com/</link><language>ja</language><item><title>2025年に買って良かったもの・後悔したもの</title><link>https://tarailife.com/posts/2025-best-worst-buy-review/</link><guid isPermaLink="true">https://tarailife.com/posts/2025-best-worst-buy-review/</guid><pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;新年になったので2025年に買ったものの中で良かったもの・後悔したものをレビューしていく。
個人的な主観に基づく評価になるがもし購入される方がいれば参考までに。&lt;/p&gt;
&lt;h2&gt;買って良かったもの&lt;/h2&gt;
&lt;h3&gt;Technics - EAH-AZ100（ワイヤレスイヤホン）&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/2025-best-worst-buy-review/image.png&quot; alt=&quot;EAH-AZ100&quot; /&gt;&lt;/p&gt;
&lt;p&gt;まず2025年のベストバイ。パナソニックの音響機器ブランドTechnicsから発売されたワイヤレスイヤホン「EAH-AZ100」。
もともと使っていたワイヤレスイヤホンが壊れ買い替えのため訪れたe-イヤホンで3時間くらい視聴して聴き比べ購入した製品。&lt;/p&gt;
&lt;p&gt;イヤホンに関しては音の好みもあると思うが、視聴して一発で気に入ったレベルでとにかく音がいい。
ノイキャンに関しては洗濯機の近くや駅のホームに電車が来た際のレベルは聞こえるので完全に外のノイズをシャットアウトできるわけではないが、それ以下の音に関してはかなり抑えられるので普通に使用する分には満足行くと思う。&lt;/p&gt;
&lt;p&gt;接続に関しては満員電車等でも問題なし。
唯一気になるのは高音質接続をONにしてPCとかに接続してハイレゾで聞こうとすると一部屋離れてドアを隔てると若干接続が怪しくなったりする。&lt;/p&gt;
&lt;h2&gt;買って後悔したもの&lt;/h2&gt;
&lt;h3&gt;HyperX SoloCast&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/2025-best-worst-buy-review/image-1.png&quot; alt=&quot;HyperX SoloCast&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ある程度音質の良いマイクが欲しくなり購入。
後悔と書いたもののものが特別悪いわけではなかった。値段の割に音質も悪くない。
では何が後悔した理由かというと、かなり音を拾うのでキーボードの打鍵音からマウスの移動時の音まで拾う。特にFPSなんかしてるとトントンコツコツカタカタ音が入る。
他社のソフト（SteelSeries GG）のノイズ抑制機能で減らすことは出来たが最初からショックマウント付きのマイクを買ったほうが満足できたかなと後悔。&lt;/p&gt;
</content:encoded></item><item><title>PageSpeed Insightsでパフォーマンスが「NO_LCP」エラーで計測できない現象の対処</title><link>https://tarailife.com/posts/pagespeed-insights-no-lcp/</link><guid isPermaLink="true">https://tarailife.com/posts/pagespeed-insights-no-lcp/</guid><description>PageSpeed Insightsでパフォーマンスが「NO_LCP」エラーとなってしまい計測できない場合の対処法</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;現象&lt;/h2&gt;
&lt;p&gt;GoogleのPageSpeed Insightsで「NO_LCP」というエラーが出てしまいPC環境のデータが上手く計測できない事象に遭遇し、改善のために色々と試した為備忘録としてここに残しておく。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/pageSpeed-Insights-no-lcp/image.png&quot; alt=&quot;PageSpeed InsightsでNO_LCPエラーが出ている画像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;なおPC側の計測は上記エラーで計測失敗しているがスマホ側の計測は問題なく成功している。&lt;/p&gt;
&lt;h2&gt;対処法&lt;/h2&gt;
&lt;p&gt;色々と調べてみると、どうもCSSの不透明度が影響しているらしく&lt;/p&gt;
&lt;p&gt;該当しそうなコンテンツの&lt;code&gt;opacity: 0&lt;/code&gt;を&lt;code&gt;opacity: 0.01&lt;/code&gt;に変更すると治る……という情報がいくつか出てくる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/GoogleChrome/lighthouse/issues/10869&quot;&gt;Lighthouse NO_LCP error due to offscreen animation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://renaissance-design.net/2024/fixing-the-no_lcp-error-in-lighthouse/&quot;&gt;Fixing the NO_LCP error in Lighthouse&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ほんとかよ……と思いながらもとりあえず試してみる。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/pageSpeed-Insights-no-lcp/image-1.png&quot; alt=&quot;opacityを0から0.01に変更している画像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;LCP（Largest Contentful Paint）は通常ビューポートに含まれるコンテンツのうち最も大きい画像もしくはテキストブロック等が当てはまる。&lt;/p&gt;
&lt;p&gt;あ、ビューポートは画面に現在表示されている箇所で、LCPにおいてはページを開いた直後に表示されている領域。&lt;/p&gt;
&lt;p&gt;このブログだとLCPは明らかにバナー画像で、各コンポーネントに設定しているコンポーネント読み込み時のフェードインアニメーションのために不透明度を設定しているがここにも適応されている。&lt;/p&gt;
&lt;p&gt;半信半疑で0.01に変更してみると……。&lt;/p&gt;
&lt;h2&gt;結果&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;治った&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/pageSpeed-Insights-no-lcp/image-2.png&quot; alt=&quot;エラーが改善した画像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;まじかよ&lt;/p&gt;
</content:encoded></item><item><title>Astroで作った静的ブログにCloudflare D1を利用してサーバレスでコメント機能を実装する！</title><link>https://tarailife.com/posts/add-astro-blog-comments-feature/</link><guid isPermaLink="true">https://tarailife.com/posts/add-astro-blog-comments-feature/</guid><description>Astroで作成した静的ブログにCloudflare D1をデータベースとして使用しコメント機能を実装する方法</description><pubDate>Sun, 29 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;astroで作った静的ブログにコメント機能をつけたい！！！！！！！&lt;/h2&gt;
&lt;p&gt;当ブログはAstroで作成した静的サイトである。githubのリポジトリにあるmd資産を元に静的なhtmlを生成しているのでサイトの動きはサクサクでとてもよい。
が、静的サイトなので当然コメント機能などの動的機能は存在しない。実装するには外部のコメントサービスを利用するか、自分で実装するしかない。&lt;/p&gt;
&lt;p&gt;「Astro コメント機能」などと検索すればいくつか参考になりそうなサービスは出てくるものの、githubのDiscussion機能を利用したGiscus（コメントにgithubログインが必要で一般的ではない）や広告の表示されるものなどがメイン。実装が簡単であるのは大きいが、コメントを残すためにgithubログインが必要だとただでさえ低いコメントされる可能性が更に低くなることが容易に想像できたのでGiscusは無し。広告も表示したくない。&lt;/p&gt;
&lt;p&gt;また、コメントが投稿されるたびにデプロイを行いサイトをビルドし直してコメントを静的なサイトとして取り込む案も検討したが、どうせならリアルタイムでコメント更新されてほしいのでこの案も見送る。&lt;/p&gt;
&lt;p&gt;ということでつい最近提供されはじめたらしいCloudflare D1をDBとして用いて自前のコメント機能を実装していくことに。
&lt;s&gt;果たして実装完了まで漕ぎ着ける事はできるのか……。&lt;/s&gt;　実装完了しました。&lt;/p&gt;
&lt;h2&gt;構成&lt;/h2&gt;
&lt;p&gt;資産：Githubリポジトリで管理&lt;/p&gt;
&lt;p&gt;デプロイ：Cloudflare Pages&lt;/p&gt;
&lt;p&gt;DB：Cloudflare D1&lt;/p&gt;
&lt;p&gt;フレームワーク：Astro&lt;/p&gt;
&lt;p&gt;Astroテンプレート：huwari&lt;/p&gt;
&lt;h2&gt;手順&lt;/h2&gt;
&lt;p&gt;すでにAstroブログの初期設定は完了している前提です。&lt;/p&gt;
&lt;h3&gt;Cloudeflare Adapteのインストール&lt;/h3&gt;
&lt;p&gt;AstroでSSRを利用するためには各デプロイ先サービスのアダプターが必要なため、今回はCloudeflare Adapteをインストール。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm astro add cloudflare
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;yでインストール&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm astro add cloudflare
✔ Resolving packages...

  Astro will run the following command:
  If you skip this step, you can always run it yourself later

 ╭───────────────────────────────────────╮
 │ pnpm add @astrojs/cloudflare@^12.6.0  │
 ╰───────────────────────────────────────╯

? Continue? » (Y/n)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;インストール完了すると&lt;code&gt;astro.config.mjs&lt;/code&gt;に下記のように追記される。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  adapter: cloudflare(),
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Wranglerのインストール&lt;/h3&gt;
&lt;p&gt;Cloudflareを操作するために利用するCLIツールのWranglerのインストールを行う。Cloudflareの開発サーバの起動（Astro previewは使えなくなるので開発環境でビルドしてその内容をpreviewの代用として見る必要がある）やデータベースの作成、デプロイ等もranglerコマンドから可能（Github管理なので自動でデプロイされる為今回は使用しないが）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm install wrangler
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;インストールできたらバージョン確認コマンドを打ってみる。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm wrangler --version

 ⛅️ wrangler 4.22.0
───────────────────
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Drizzle ORMのインストール&lt;/h3&gt;
&lt;p&gt;データベースを操作するためにDrizzle ORMに関係するパッケージのインストールを行う。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm install drizzle-orm better-sqlite3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下記でインストールするdrizzle-kitは定義したスキーマファイルを利用してテーブルを作成/更新するために必要なマイグレーションファイルを作成するためのツール。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm install -D drizzle-kit
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Cloudflare D1のデータベース設定&lt;/h3&gt;
&lt;p&gt;下記コマンドでデータベースを作成。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm wrangler d1 create tarailife-post-comments

{
  &quot;d1_databases&quot;: [
    {
      &quot;binding&quot;: &quot;DB&quot;,
      &quot;database_name&quot;: &quot;tarailife-post-comments&quot;,
      &quot;database_id&quot;: &quot;2df89c19-da66-4200-96a5-2ed03756185e&quot;
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;初実行時はブラウザが起動し認証画面が表示される。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/add-astro-blog-comments-feature/2025-06-28%20230445.png&quot; alt=&quot;認証画面が表示されている画像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;認証を終えるとデータベースが作成されていることが確認できる。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/add-astro-blog-comments-feature/image-3.png&quot; alt=&quot;テーブルが登録されていることが分かる画像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;wrangler.tomlをプロジェクトルートに作成&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[d1_databases]]
binding = &quot;DB&quot; # i.e. available in your Worker on env.DB
database_name = &quot;tarailife-post-comments&quot;
database_id = &quot;2df89c19-da66-4200-96a5-2ed03756185e&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Drizzleによる設定&lt;/h3&gt;
&lt;p&gt;データベースのテーブルを作成する際に利用するsql文を作成するためにsrcフォルダの中にdbフォルダを作成しテーブルのスキーマ情報を記述したschema.tsファイルを作成。&lt;/p&gt;
&lt;p&gt;今回は下記のような必要最低限のテーブルを取り敢えず作成。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { text, integer, sqliteTable } from &quot;drizzle-orm/sqlite-core&quot;;

export const comments = sqliteTable(&quot;comments&quot;, {
  id: integer(&quot;id&quot;, { mode: &quot;number&quot; }).primaryKey({ autoIncrement: true }),
  author: text(&quot;author&quot;),
  content: text(&quot;content&quot;),
  post_slug: text(&quot;post_slug&quot;),
  post_date: text(&quot;post_date&quot;),
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;プロジェクトルートにdrizzle.config.tsの作成&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { defineConfig } from &quot;drizzle-kit&quot;;

export default defineConfig({
  schema: &quot;./src/db/schema.ts&quot;,
  out: &quot;./drizzle&quot;,
  driver: &quot;d1-http&quot;, 
  dialect: &quot;sqlite&quot;,
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下記コマンドでマイグレーションファイルを生成。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm drizzle-kit generate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コマンドを実行するとプロジェクトルートに&lt;code&gt;drizzle&lt;/code&gt;フォルダが作成される。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/add-astro-blog-comments-feature/2025-06-29%20114942.png&quot; alt=&quot;drizzleフォルダが作成されたことがわかる画像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;テーブルの生成（.sqlファイルのファイル名は適宜上の手順で生成されたものに変更）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm wrangler d1 execute tarailife-post-comments --file=./drizzle/0000_useful_skreet.sql
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;.wrangler\state\v3\d1\miniflare-D1DatabaseObject\&lt;/code&gt;にファイルが3つ作成されているので確認。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;drizzle.config.ts&lt;/code&gt;を更新（&lt;code&gt;dbCredentials&lt;/code&gt;の&lt;code&gt;url&lt;/code&gt;を先程生成された&lt;code&gt;.sqlite&lt;/code&gt;ファイルのパスに変更）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { defineConfig } from &quot;drizzle-kit&quot;;

export default defineConfig({
  schema: &quot;./src/db/schema.ts&quot;,
  out: &quot;./drizzle&quot;,
  driver: &quot;d1-http&quot;, 
  dialect: &quot;sqlite&quot;,
  dbCredentials: {
    url: &quot;.wrangler\state\v3\d1\miniflare-D1DatabaseObject\a520e4684331132e883183950c13a4f9c830d371f45a1f10dfdf654b438f8857.sqlite&quot;,
  },
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本番環境へテーブル作成（.sqlファイル名は生成されたものに変更）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm wrangler d1 execute tarailife-post-comments --remote --file=./drizzle/0000_useful_skreet.sql

 ⛅️ wrangler 4.22.0
───────────────────
? ⚠️ This process may take some time, during which your D1 database will be unavailable to serve queries.
  Ok to proceed? » (Y/n)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;DB の Binding 設定&lt;/h3&gt;
&lt;p&gt;Pages にアップしたファイルからデータベースへのアクセスを行うためにD1 database bindingsの設定行う。Workers&amp;amp;Pagesのプロジェクト設定画面を開き&lt;code&gt;バインディング&lt;/code&gt;の&lt;code&gt;追加&lt;/code&gt;を選択しD1データベースの情報を追加する。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/add-astro-blog-comments-feature/image.png&quot; alt=&quot;バインディングが追加されている事がわかる画像&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;コメント表示用のコンポーネントを作成&lt;/h3&gt;
&lt;p&gt;AstroではアイランドアーキテクチャでAstroファイル内にReactやSvelteなどの他フレームワークのコンポーネントを使用することができる他ページの一部を動的生成したり出来る。
今回はSSRを行うコメント表示用のコンポーネントをSvelteで作成し、それをページ生成用のAstroコンポーネントで読み込むことで各投稿ページにコメント機能を実装する。
表示している記事に投稿されているコメントだけ拾ってきたいのでリクエストパラメータでslugを渡しAPIを呼び出す。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;src\components\widget\&lt;/code&gt;に&lt;code&gt;CommentBox.svelte&lt;/code&gt;を新規作成。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
export let slug;
let author = &quot;&quot;;
let content = &quot;&quot;;
let comments = [];

const loadComments = async () =&amp;gt; {
	const res = await fetch(`/api/v1/comments/?slug=${slug}`, {
    method: &quot;GET&quot;,
    headers: { &quot;Content-Type&quot;: &quot;application/json&quot; },
  });
	comments = await res.json();
};

const submitComment = async () =&amp;gt; {
	const res = await fetch(&quot;/api/v1/comments/&quot;, {
		method: &quot;POST&quot;,
		body: JSON.stringify({ post_slug: slug, author: author, content: content }),
		headers: { &quot;Content-Type&quot;: &quot;application/json&quot; },
	});
	author = content = &quot;&quot;;
	await loadComments();
};

import { onMount } from &quot;svelte&quot;;
onMount(loadComments);
&amp;lt;/script&amp;gt;

  &amp;lt;div class=&quot;grid grid-cols-1 gap-8&quot;&amp;gt;
  &amp;lt;h3&amp;gt;コメント&amp;lt;/h3&amp;gt;
  {#each comments?.body?.comments as comment, i}
    &amp;lt;div class=&quot;row-span-2 grid grid-rows-subgrid grid-rows-2 grid-cols-1 gap-2&quot;&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;strong&amp;gt;{`${i + 1}: ${comment.author || &quot;no name&quot;}`}&amp;lt;/strong&amp;gt;
        &amp;lt;small&amp;gt;{new Date(comment.post_date).toLocaleString()}&amp;lt;/small&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;p&amp;gt;{comment.content}&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
  {/each}
  &amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;grid grid-cols-1 gap-4 mt-8&quot;&amp;gt;
    &amp;lt;h3&amp;gt;コメントを書く&amp;lt;/h3&amp;gt;
    &amp;lt;form on:submit|preventDefault={submitComment} class=&quot;row-span-4 grid grid-rows-subgrid grid-rows-2 grid-cols-1 gap-4 md:w-4/4&quot;&amp;gt;
      &amp;lt;input bind:value={author} placeholder=&quot;名前&quot; class=&quot;bg-[var(--license-block-bg)] rounded-md&quot;&amp;gt;
      &amp;lt;textarea bind:value={content} placeholder=&quot;コメント内容&quot; required class=&quot;h-24 bg-[var(--license-block-bg)] rounded-md field-sizing-content&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
      &amp;lt;button type=&quot;submit&quot; class=&quot;btn-regular h-8 text-sm px-3 rounded-lg&quot;&amp;gt;投稿&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;作成したコンポーネントをコメント機能を追加したいページのコンポーネントに設置&lt;/h3&gt;
&lt;p&gt;当ブログではAstroのブログテンプレートである&lt;code&gt;Fuwari&lt;/code&gt;を使用しているためブログの各ポストを生成しているファイルは&lt;code&gt;src\pages\posts\[...slug].astro&lt;/code&gt;になる。ここは各自でコメント機能を追加したいファイルに置き換えてコンポーネントを設置してほしい。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import CommentBox from &quot;src/components/widget/CommentBox.svelte&quot;; //先ほど作成したコメント表示コンポーネントをインポート

    //コンポーネントを好きな箇所（といってもおそらくページ下部だと思うが）に設置
    &amp;lt;div id=&quot;comments-container&quot; class:list={[&quot;card-base z-10 px-6 md:px-9 pt-6 pb-4 relative w-full &quot;,{}]}&amp;gt;
        &amp;lt;CommentBox slug={entry.slug} client:load /&amp;gt;
    &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コンポーネントのprops&lt;code&gt;entry.slug&lt;/code&gt;で渡された値でどの記事に投稿されたコメントなのか判別している。&lt;/p&gt;
&lt;h3&gt;API用のページを作成&lt;/h3&gt;
&lt;p&gt;今回はAstroのAPIエンドポイントとして、&lt;code&gt;src\pages\api\v1\comments.ts&lt;/code&gt;のような配置でディレクトリを作成しAPIエンドポイント用のAstroファイルを作成している。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const prerender = false;
import { drizzle } from &quot;drizzle-orm/d1&quot;;
import { like } from &quot;drizzle-orm&quot;
import { comments } from &quot;../../../db/schema&quot;;
import type { Runtime } from &quot;@astrojs/cloudflare&quot;;
import type { D1Database } from &quot;@cloudflare/workers-types&quot;;

export async function GET(context: { request: Request; locals: Runtime }) {
	const { request, locals } = context;
	const envDB = locals.runtime.env.DB as D1Database;
	const db = drizzle(envDB);
	const url = new URL(request.url);
	const slug = url.searchParams.get(&quot;slug&quot;);

let comment = await db.select().from(comments).where(like(comments.post_slug, `${slug}`));

	return new Response(
		JSON.stringify({
			body: {
				comments: comment,
				request: request,
			},
		}),
		{ status: 200 },
	);
}

export async function POST(context: { request: Request; locals: Runtime }) {
	const { request, locals } = context;

	if (!locals.runtime.env.DB) {
		throw new Error(&quot;Database connection is missing&quot;);
	}
	const envDB = locals.runtime.env.DB as D1Database;
	const db = drizzle(envDB);

	const body = await request.json();
	const comment = {
		author: body.author,
		content: body.content,
		post_slug: body.post_slug,
		post_date: new Date().toISOString(),
	};

	await db.insert(comments).values(comment);

	return new Response(
		JSON.stringify({
			body: { request: request },
		}),
		{ status: 200 },
	);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで手順は終了。
下記は構築にあたって参考にさせていただいたサイトになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://reffect.co.jp/astro/cloudflare-astro-drizzle&quot;&gt;REFFECT - AstroのSSRでDrizzle経由でCloudflare D1にアクセスする手順&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://qiita.com/fujino_tech/items/193acfd7a658a0530ad3&quot;&gt;Qiita - データベースCloudflare D1とAstroサイトの連携（前半：ローカル版）&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.astro.build/ja/getting-started/&quot;&gt;Astro Docs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/pages/framework-guides/deploy-an-astro-site/&quot;&gt;Cloudflare Docs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;コメント欄実装完了！&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/add-astro-blog-comments-feature/image-1.png&quot; alt=&quot;コメント欄実装できていることが分かる画像&quot; /&gt;&lt;/p&gt;
&lt;p&gt;これでシンプルだがコメント欄を実装できた。&lt;/p&gt;
&lt;p&gt;コメントの返信機能だったりスパム対策のreCAPTCHA導入とか色々と直したいところもあるので今後も少しずつ改善していきたい。&lt;/p&gt;
</content:encoded></item><item><title>ショートカット一つでディスプレイの解像度・リフレッシュレート・表示サイズを切り替える方法（2025年版）</title><link>https://tarailife.com/posts/fix-change-displayresolution/</link><guid isPermaLink="true">https://tarailife.com/posts/fix-change-displayresolution/</guid><pubDate>Sun, 04 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;たまたま自分のブログの記事の内容について&lt;a href=&quot;https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12308820847&quot;&gt;知恵袋&lt;/a&gt;で質問されている方がいた。
自分の書いた記事を読んでくれている人がいるとは……と感動するとともにバッチが動作しなかったということで申し訳無さも覚えた。&lt;/p&gt;
&lt;p&gt;というわけで&lt;a href=&quot;https://tarailife.com/posts/change-displayresolution/&quot;&gt;以前書いた記事&lt;/a&gt;について、情報が古くなっていたため新しくバッチを作り直した。
主な変更点は下記になります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;廃止になるらしいwmicの使用をやめPowerShellのGet-CimInstanceに変更&lt;/li&gt;
&lt;li&gt;スケールの変更（setDpi）が動作していなかったので修正&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;必要なもの&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.itechtics.com/change-screen-resolution/&quot;&gt;QRes&lt;/a&gt;　- コマンドライン上から解像度やリフレッシュレートの変更が可能になるオープンソースソフトウェア&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/imniko/SetDPI/releases&quot;&gt;SetDPI&lt;/a&gt; - ディスプレイの表示サイズ等を変更できるオープンソースソフトウェア&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記2つを用いて切り替え用のバッチファイルを作成していきます。&lt;br /&gt;
……が、過程とかどうでもいいから出来るようになればいい！　という方のために作成後のバッチファイルと上記の2ファイルを同梱したzipを載せておきます。&lt;/p&gt;
&lt;p&gt;解凍した後出来たフォルダをC直下に配置し、フォルダ内のdisplay_changer.batをダブルクリックすれば解像度を切り替えられます。&lt;/p&gt;
&lt;p&gt;バッチファイル本体であるdisplay_changer.batはどこにおいても大丈夫ですので、デスクトップにおいてダブルクリックで切り替えるのがおすすめ。&lt;/p&gt;
&lt;p&gt;(FHDの場合は4K/60Hz/表示倍率200%に、4Kの場合はFHD/144Hz/表示倍率100%へと切り変わるよう設定しています。そのあたりの数値を変えたい場合は、下の説明を読んでバッチファイルの中身を書き換えてください。難しくはないです。）&lt;/p&gt;
&lt;p&gt;zipファイルのダウンロードは&lt;a href=&quot;https://drive.google.com/file/d/1aKlWsbJqmeGdnDer6k9MSn9S-LnsBrCW/view?usp=sharing&quot;&gt;こちら&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;処理内容&lt;/h2&gt;
&lt;p&gt;下記がdisplay_changer.batの中身になります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@echo off
set HorizontalResolution=
set VerticalResolution=
set QRes_APP_PATH=&quot;C:\display_changer\display_changer\QRes.exe&quot;

::PowerShellで横解像度を取得
for /f &quot;delims=&quot; %%A in (&apos;powershell -command &quot;(Get-CimInstance -ClassName Win32_VideoController).CurrentHorizontalResolution&quot;&apos;) do (
    set &quot;HorizontalResolution=%%A&quot;
)

::PowerShellで縦解像度を取得
for /f &quot;delims=&quot; %%A in (&apos;powershell -command &quot;(Get-CimInstance -ClassName Win32_VideoController).CurrentVerticalResolution&quot;&apos;) do (
    set &quot;VerticalResolution=%%A&quot;
)

set Resolution=%HorizontalResolution%x%VerticalResolution%

if %Resolution%==1920x1080 (
    ::1920x1080の場合
    %QRes_APP_PATH% /X 3840 /Y 2160 /R 60
    ::setDPIのパス スケール ディスプレイID
    C:\display_changer\display_changer\SetDpi.exe 200 1
) else if %Resolution%==3840x2160 (
    ::3840x2160の場合
    %QRes_APP_PATH% /X 1920 /Y 1080 /R 144
    ::setDPIのパス スケール ディスプレイID
    C:\display_changer\display_changer\SetDpi.exe 100 1
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;順を追って説明していきます。まず最初のブロックでは変数の設定を行っています。&lt;br /&gt;
もしCドライブ直下以外の箇所に設置する場合は「QRes_APP_PATH」のあとのダブルクオーテーションで囲まれている部分を設置先のexeファイルのパスに書き換えてください。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@echo off
set HorizontalResolution=
set VerticalResolution=
set QRes_APP_PATH=&quot;C:\display_changer\display_changer\QRes.exe&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次のブロックでは現在の解像度の取得を行っています。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::PowerShellで横解像度を取得
for /f &quot;delims=&quot; %%A in (&apos;powershell -command &quot;(Get-CimInstance -ClassName Win32_VideoController).CurrentHorizontalResolution&quot;&apos;) do (
    set &quot;HorizontalResolution=%%A&quot;
)

::PowerShellで縦解像度を取得
for /f &quot;delims=&quot; %%A in (&apos;powershell -command &quot;(Get-CimInstance -ClassName Win32_VideoController).CurrentVerticalResolution&quot;&apos;) do (
    set &quot;VerticalResolution=%%A&quot;
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;取得した解像度を〇〇×□□形式にして変数Resolutionに格納。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set Resolution=%HorizontalResolution%x%VerticalResolution%
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ディスプレイサイズが1920×1080の際、括弧内の処理が行われます。ここの数値を変更すれば他のディスプレイサイズにも対応可能。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if %Resolution%==1920x1080 (
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;QRas.exeに引数として変更後のディスプレイサイズとリフレッシュレートを渡し起動。リフレッシュレートを変更したくない場合は/R 60の部分を消せばOKです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    &quot;C:\display_changer\QRes.exe&quot; /X 3840 /Y 2160 /R 60
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最後です。表示倍率や適用するディスプレイのIDを引数にSetDpi.exeを呼び出します。&lt;br /&gt;
スケールは4Kでは200FHD100であれば100で設定しています。好きなように調整してください。
マルチディスプレイ環境でメインディスプレイ以外を対象にしたい場合はモニターインデックスを変更してください。モニターインデックスは設定のディスプレイ項目画面にある識別というボタンを押せば確認できます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ::setDPIのパス スケール ディスプレイID
    C:\display_changer\display_changer\SetDpi.exe 200 1
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;これで面倒な切り替えもダブルクリック一発でできるようになりました。快適。&lt;br /&gt;
&lt;s&gt;もし動かないよーとかコードに間違い等指摘あればコメントいただければと思います。&lt;/s&gt;
コメント欄未実装のため&lt;a href=&quot;https://x.com/keizokukun_&quot;&gt;X&lt;/a&gt;または&lt;a href=&quot;mailto:keizokukun@gmail.com&quot;&gt;gmail&lt;/a&gt;に連絡貰えれば解決できるかもしれません。&lt;/p&gt;
</content:encoded></item><item><title>ショートカット一つでディスプレイの解像度・リフレッシュレート・表示サイズを切り替える方法</title><link>https://tarailife.com/posts/change-displayresolution/</link><guid isPermaLink="true">https://tarailife.com/posts/change-displayresolution/</guid><pubDate>Mon, 06 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::note
この記事は旧版になります。最新の記事はこちら
https://tarailife.com/posts/fix-change-displayresolution/
:::&lt;/p&gt;
&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;最近、原神にはまっている。&lt;/p&gt;
&lt;p&gt;プレイの際には仮想解像度で4K画質にしてプレイしているのだが、APEX等の4Kが必要ないゲームをやる場合ディスプレイの設定を戻さなくてはならない。逆に原神は144Hzに対応していないので、APEXプレイ後にそのまま原神を起動しようとするといつまでたっても正常に開始できない。&lt;/p&gt;
&lt;p&gt;いちいち手動でディスプレイ解像度やリフレッシュレートを変更していたのだが、いいかげん面倒くさくなってきたのでショートカットからFHD/144Hz⇔4K/60Hzの切り替えができるようにしてみた。&lt;/p&gt;
&lt;h2&gt;必要なもの&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.itechtics.com/change-screen-resolution/&quot;&gt;QRes&lt;/a&gt;　- コマンドライン上から解像度やリフレッシュレートの変更が可能になるオープンソースソフトウェア&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/imniko/SetDPI/releases&quot;&gt;SetDPI&lt;/a&gt; - ディスプレイの表示サイズ等を変更できるオープンソースソフトウェア&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記2つを用いて切り替え用のバッチファイルを作成していきます。&lt;br /&gt;
……が、過程とかどうでもいいから出来るようになればいい！　という方のために作成後のバッチファイルと上記の2ファイルを同梱したzipを載せておきます。&lt;/p&gt;
&lt;p&gt;解凍した後フォルダをC直下に配置し、フォルダ内のdisplay_changer.batをダブルクリックすれば解像度を切り替えられます。&lt;/p&gt;
&lt;p&gt;バッチファイル本体であるdisplay_changer.batはどこにおいても大丈夫ですので、デスクトップにおいてダブルクリックで切り替えるのがおすすめ。&lt;/p&gt;
&lt;p&gt;(FHDの場合は4K/60Hz/表示倍率200%に、4Kの場合はFHD/144Hz/表示倍率100%へと切り変わるよう設定しています。そのあたりの数値を変えたい場合は、下の説明を読んでバッチファイルの中身を書き換えてください。難しくはないです。）&lt;/p&gt;
&lt;p&gt;zipファイルのダウンロードは&lt;a href=&quot;https://drive.google.com/file/d/1aKlWsbJqmeGdnDer6k9MSn9S-LnsBrCW/view?usp=sharing&quot;&gt;こちら&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;処理内容&lt;/h2&gt;
&lt;p&gt;下記がdisplay_changer.batの中身になります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo off

set HorizontalResolution=
set VerticalResolution=
set SetDpi_APP_PATH=&quot;C:\display_changer\SetDpi.exe&quot;
set QRes_APP_PATH=&quot;C:\display_changer\QRes.exe&quot;
set DISPLAY_ID=1

::Win32_VideoControllerにて解像度取得
for /f &quot;tokens=* delims=&quot; %%@ in (&apos;wmic path Win32_VideoController get CurrentHorizontalResolution  /format:value&apos;) do (
    for /f &quot;tokens=2 delims==&quot; %%# in (&quot;%%@&quot;) do set &quot;VerticalResolution=%%#&quot;
)
for /f &quot;tokens=* delims=&quot; %%@ in (&apos;wmic path Win32_VideoController get CurrentVerticalResolution /format:value&apos;) do (
    for /f &quot;tokens=2 delims==&quot; %%# in (&quot;%%@&quot;) do set &quot;HorizontalResolution=%%#&quot;
)

set Resolution=%VerticalResolution%x%HorizontalResolution%

if %Resolution%==1920x1080 (
    
    ::1920x1080の場合
    %QRes_APP_PATH% /X 3840 /Y 2160 /R 60
    set SCALE_VALUE=200
    &quot;%APP_PATH%&quot; %DISPLAY_ID% %SCALE_VALUE%

) else if %Resolution%==3840x2160 (

    ::3840x2160の場合
    %QRes_APP_PATH% /X 1920 /Y 1080 /R 144
    set SCALE_VALUE=100
    &quot;%APP_PATH%&quot; %DISPLAY_ID% %SCALE_VALUE%

)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;順を追って説明していきます。まず最初のブロックでは変数の設定を行っています。&lt;br /&gt;
もしCドライブ直下以外の箇所に設置する場合は「SetDpi_APP_PATH」「QRes_APP_PATH」のあとのダブルクオーテーションで囲まれている部分を設置先のexeファイルのパスに書き換えてください。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo off

set HorizontalResolution=
set VerticalResolution=
set SetDpi_APP_PATH=&quot;C:\display_changer\SetDpi.exe&quot;
set QRes_APP_PATH=&quot;C:\display_changer\QRes.exe&quot;
set DISPLAY_ID=1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次のブロックでは現在の解像度の取得を行っています。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::Win32_VideoControllerにて解像度取得
for /f &quot;tokens=* delims=&quot; %%@ in (&apos;wmic path Win32_VideoController get CurrentHorizontalResolution  /format:value&apos;) do (
    for /f &quot;tokens=2 delims==&quot; %%# in (&quot;%%@&quot;) do set &quot;VerticalResolution=%%#&quot;
)
for /f &quot;tokens=* delims=&quot; %%@ in (&apos;wmic path Win32_VideoController get CurrentVerticalResolution /format:value&apos;) do (
    for /f &quot;tokens=2 delims==&quot; %%# in (&quot;%%@&quot;) do set &quot;HorizontalResolution=%%#&quot;
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;取得した解像度を〇〇×□□形式にして変数Resolutionに格納。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set Resolution=%VerticalResolution%x%HorizontalResolution%
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ディスプレイサイズが1920×1080の際、括弧内の処理が行われます。ここの数値を変更すれば他のディスプレイサイズにも対応可能。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if %Resolution%==1920x1080 (
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;QRas.exeに引数として変更後のディスプレイサイズとリフレッシュレートを渡し起動。リフレッシュレートを変更したくない場合は/R 60の部分を消せばOKです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    &quot;C:\display_changer\QRes.exe&quot; /X 3840 /Y 2160 /R 60
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最後です。表示倍率や適用するディスプレイのIDを引数にSetDpi.exeを呼び出します。&lt;br /&gt;
SCALE_VALUEの値には変更後の表示倍率を入れてください。100であれば100%、200であれば200%になります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    set SCALE_VALUE=２００
    &quot;%SetDpi_APP_PATH%&quot; %DISPLAY_ID% %SCALE_VALUE%
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;これで面倒な切り替えもダブルクリック一発でできるようになりました。快適。&lt;br /&gt;
もし動かないよーとかコードに間違い等指摘あればコメントいただければと思います。&lt;/p&gt;
</content:encoded></item><item><title>Apple WatchでスクリーンショットがONになっているにも関わらず撮れない場合の対処法</title><link>https://tarailife.com/posts/apple-watch-screen-shot/</link><guid isPermaLink="true">https://tarailife.com/posts/apple-watch-screen-shot/</guid><pubDate>Fri, 28 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;結論から書こう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;設定 - アクセシビリティから「サイドボタンのクリックの間隔」をデフォルトに戻せ。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先日記事を書くためにApple Watchでスクリーンショットを撮る機会があった。&lt;/p&gt;
&lt;p&gt;普段Apple Watchでスクリーンショットなんて撮らないが、付いているボタンは二つだけだし普通に考えてクラウンとサイドボタンの同時押しだろう、と当たりをつけて押してみる。&lt;/p&gt;
&lt;p&gt;……撮れない。&lt;/p&gt;
&lt;p&gt;何度押しても、撮れない。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/apple-watch-screen-shot/image.png&quot; alt=&quot;アップルウォッチでsiriが誤起動したスクショ&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;
君は呼んでないから
&amp;lt;/figcaption&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;br&amp;gt;
二十回ほど連打していると、奇跡的に一枚だけスクリーンショットが撮れた。どうやらスクリーンショットの機能が死んでいるわけではないらしい。
&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;何はともあれGoogle先生ということで「Apple Watch スクショ 撮れない」と検索するも出てくるサイトは「スクリーンショット機能をONにしろ」というものばかり。&lt;/p&gt;
&lt;p&gt;ONなのに撮れないから困ってるの！！！！！&lt;/p&gt;
&lt;h2&gt;原因&lt;/h2&gt;
&lt;p&gt;Apple Watchでスクリーンショットが撮れない原因は「サイドボタンのクリックの間隔」設定にある。&lt;/p&gt;
&lt;p&gt;設定 - アクセシビリティ - サイドボタンのクリックの間隔&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/apple-watch-screen-shot/image-1.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/apple-watch-screen-shot/image-2.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;p&gt;この項目の設定が「デフォルト」以外になっていると、サイドボタンを再度押すまでの入力受け付け時間が伸び、スクリーンショットの成功率が5%程に低下する。&lt;/p&gt;
&lt;p&gt;つまり、サイドボタンを押した後、しばらく時間がたたないとクリックとして認識してくれないのだ。解決。&lt;/p&gt;
&lt;p&gt;&lt;s&gt;なんでこんな設定変更したし&lt;/s&gt;&lt;/p&gt;
</content:encoded></item><item><title>Apple WatchでSoundCloudの曲を再生・お気に入りする方法</title><link>https://tarailife.com/posts/applewatch-soundcloud/</link><guid isPermaLink="true">https://tarailife.com/posts/applewatch-soundcloud/</guid><pubDate>Fri, 28 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::caution
DaftCloudがApp Storeから削除されました。　囧&amp;lt;うあぁああああ――――なんで――――！
:::&lt;/p&gt;
&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;ランニングをしている時や通勤時にストリーミングで音楽を聴いていると、「あ、この曲いいな、お気に入りしたい」と思うことがある。&lt;/p&gt;
&lt;p&gt;Apple Watchをつけていると、ランニング中でもちょっと腕を上げればアーティストを確認したり次の曲にスキップしたりできるし、お気に入り登録もできたりするのが便利。なおApple Musicではラヴ（お気に入り）をするためにはわざわざメニューボタンを押して出てくるメニューリストを下にスクロールしないといけない。再生画面に表示しろ。&lt;br /&gt;
初期画面にお気に入りボタンがあるspotifyは神。&lt;/p&gt;
&lt;p&gt;さて本題に戻るが、SoundCloudは2015年のアップデートで一度はApple Watchからの操作に対応している。しかしいつのまにかApple Watchからの操作は出来なくなり今後対応されるかも不明。&lt;/p&gt;
&lt;p&gt;諦めきれずに検索をかけていると、redditの投稿でサードパーティー製アプリを発見し無事解決したのでSoundCloudの民のために記事にすることにした。&lt;/p&gt;
&lt;h2&gt;サードパーティー製アプリ「Daft Cloud」&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;DaftCloud - Wrist App　¥370　posted withアプリーチ
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;このアプリでできること&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;再生中の曲のLike（お気に入り）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;プレイリストの再生&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Streamの再生&lt;/li&gt;
&lt;li&gt;お気に入り楽曲の再生&lt;/li&gt;
&lt;li&gt;自分のアップロードした楽曲の確認&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/applewatch-soundcloud/image.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/images/applewatch-soundcloud/image-1.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;p&gt;再生画面をタップするとLikeボタンが出現する。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;できないこと&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;iPhoneのSoundCloudの操作&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;stationの作成&lt;/li&gt;
&lt;li&gt;プレイリストの作成&lt;/li&gt;
&lt;li&gt;プレイリストへの追加&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このアプリはSoundCloud純正アプリではないので、spotifyやApple MusicのようにiPhoneで起動しているアプリをApple Watchで操作するといったことはできない。あくまでApple Watch上でアプリを起動し操作しなければいけないので注意が必要。&lt;/p&gt;
&lt;p&gt;もう一つ注意として、初回にDaft Cloud上からSoundCloudアカウントでログインしDaft Cloudの承認を行う必要がある。その際普通にSoundCloudのメールアドレスでログインしようとするとApple Watchの画面が小さすぎてreCAPTCHAが押せず詰むのでAppleのアカウントからログインするように。（2022.01.29現在）&lt;/p&gt;
&lt;p&gt;もしまだSoundCloudアカウントとAppleアカウントを連携していない場合は先にSoundCloudのサイトで連携しておくと吉。もしできなかったり分からなければコメントしていただければ。&lt;/p&gt;
&lt;h2&gt;おわりに&lt;/h2&gt;
&lt;p&gt;個人的意見としてはストリーミング各社には再生画面TOPにお気に入り機能のあるApple Watch用Appを早急に作っていただきたい（わがまま）。&lt;/p&gt;
</content:encoded></item></channel></rss>