<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>kushun's Blog</title><link>https://makiharu.github.io/persona-blog/</link><description>Recent content on kushun's Blog</description><generator>Hugo -- 0.154.3</generator><language>ja</language><lastBuildDate>Sat, 12 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://makiharu.github.io/persona-blog/index.xml" rel="self" type="application/rss+xml"/><item><title>AWSセキュリティグループの削除前に確認すること</title><link>https://makiharu.github.io/persona-blog/tech/03-sg%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%9F%E8%A9%B1/</link><pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/tech/03-sg%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%9F%E8%A9%B1/</guid><description>技術関連の記事</description></item><item><title>AWSでMFAを強制する方法とIAM Identity Centerの使い分け</title><link>https://makiharu.github.io/persona-blog/tech/02/</link><pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/tech/02/</guid><description>技術関連の記事</description></item><item><title>SMTPとMIME、メールが日本語や画像を運べる仕組みを整理する</title><link>https://makiharu.github.io/persona-blog/tech/01/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/tech/01/</guid><description>技術関連の記事</description></item><item><title>MCP超入門 ── AIに「道具」を持たせる仕組みを理解する</title><link>https://makiharu.github.io/persona-blog/tech/mcp-intro/</link><pubDate>Fri, 21 Aug 2026 10:00:00 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/tech/mcp-intro/</guid><description>MCPとは何か、なぜ必要か、どう動くかを、社内でAI活用を始めたい人向けにわかりやすく整理した。</description></item><item><title>Next.jsのSSR・SSG・Hydrationを整理して理解した</title><link>https://makiharu.github.io/persona-blog/tech/0712-sdk-ssr/</link><pubDate>Sun, 12 Jul 2026 10:00:00 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/tech/0712-sdk-ssr/</guid><description>Next.jsプロジェクトへSDKを組み込む際にdynamic importとssr: falseが必要になったことをきっかけに、SSR・SSG・Hydrationの仕組みを整理した。</description></item><item><title>Markdownに画像をbase64で直接埋め込む</title><link>https://makiharu.github.io/persona-blog/tech/md-base64-image/</link><pubDate>Thu, 02 Jul 2026 10:00:00 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/tech/md-base64-image/</guid><description>外部ファイルなしでMarkdownに画像を埋め込む方法のメモ。Data URIスキームを使う。</description></item><item><title>週末マジシャン的なあれこれ</title><link>https://makiharu.github.io/persona-blog/magic/2026-06-start-activity-blog/</link><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/magic/2026-06-start-activity-blog/</guid><description>都内〜千葉を中心に活動する週末マジシャンとしての備忘録</description></item><item><title>初OSSコントリビュート振り返り〜WholePizza ParrotのPRで学んだこと</title><link>https://makiharu.github.io/persona-blog/tech/oss-pizzaparrot-retrospective/</link><pubDate>Thu, 19 Mar 2026 00:00:00 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/tech/oss-pizzaparrot-retrospective/</guid><description>cult of the party parrot に自作GIFを投稿し、レビュアーとやり取りしながらPRをマージするまでの体験記。GIF透過処理やgifsicle最適化のハマりどころと、OSSコミュニケーションで学んだことをまとめます。</description></item><item><title>npm create vite@latest 実行で出たエラーを解決した</title><link>https://makiharu.github.io/persona-blog/tech/npm-create-vite-error/</link><pubDate>Wed, 11 Mar 2026 21:39:12 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/tech/npm-create-vite-error/</guid><description>npm create vite@latest でReactプロジェクトを作成したところVSCode上でTypeScriptのエラーが発生。原因はVSCode内蔵のTypeScriptバージョンの古さにありました。</description></item><item><title>S3署名付きURL入門 - 期限付きで安全にファイルを共有する方法</title><link>https://makiharu.github.io/persona-blog/tech/s3-presigned-url/</link><pubDate>Sun, 08 Feb 2026 10:00:00 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/tech/s3-presigned-url/</guid><description>AWS S3の署名付きURL（Presigned URL）を使って、期限付きで安全にファイルを共有する方法を初心者向けに解説します。</description></item><item><title>TypeScript Partial型入門 - オブジェクトのプロパティをすべてオプショナルにする</title><link>https://makiharu.github.io/persona-blog/tech/typescript-partial/</link><pubDate>Thu, 05 Feb 2026 10:00:00 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/tech/typescript-partial/</guid><description>TypeScriptのPartial型について初心者向けに解説します。使い方、実践例、仕組みまでわかりやすく説明します。</description></item><item><title>TypeScript ジェネリクス入門 - &lt;T&gt;って何？を初心者向けに解説</title><link>https://makiharu.github.io/persona-blog/tech/typescript-generics/</link><pubDate>Thu, 05 Feb 2026 09:00:00 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/tech/typescript-generics/</guid><description>TypeScriptの&lt;T&gt;（ジェネリクス）が何なのか、初心者向けにわかりやすく解説します。</description></item><item><title>JWT入門 - 初心者のためのJSON Web Token</title><link>https://makiharu.github.io/persona-blog/tech/jwt/</link><pubDate>Wed, 04 Feb 2026 23:13:45 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/tech/jwt/</guid><description>JWT（JSON Web Token）の仕組みを初心者向けにわかりやすく解説します。構造、使い方、セキュリティの注意点まで基礎から学べます。</description></item><item><title>Test</title><link>https://makiharu.github.io/persona-blog/posts/test/</link><pubDate>Tue, 03 Feb 2026 09:13:49 +0900</pubDate><guid>https://makiharu.github.io/persona-blog/posts/test/</guid><description/></item><item><title>Profile</title><link>https://makiharu.github.io/persona-blog/about/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/about/</guid><description>&lt;h2 id="about-me"&gt;About Me&lt;/h2&gt;
&lt;p&gt;kurino&lt;/p&gt;
&lt;h2 id="interests"&gt;Interests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;技術&lt;/li&gt;
&lt;li&gt;手品&lt;/li&gt;
&lt;li&gt;読書&lt;/li&gt;
&lt;li&gt;etc&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="contact"&gt;Contact&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/makiharu%22"&gt;github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>はじめに</title><link>https://makiharu.github.io/persona-blog/misc/hello-misc/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/misc/hello-misc/</guid><description>雑記/走り書き ページのintoroduction</description></item><item><title>技術カテゴリのサンプル記事</title><link>https://makiharu.github.io/persona-blog/tech/hello-tech/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/tech/hello-tech/</guid><description>技術カテゴリのサンプル記事です。</description></item><item><title>読んだもの見たもののサンプル記事</title><link>https://makiharu.github.io/persona-blog/reviews/hello-review/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/reviews/hello-review/</guid><description>読んだもの見たもののサンプル記事です。</description></item><item><title/><link>https://makiharu.github.io/persona-blog/tech/0712-webrtc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/tech/0712-webrtc/</guid><description>&lt;p&gt;WebRTC・WebSocket・シグナリング・呼制御・Socket.ioクライアント、Socket.ioサーバー、TURN、CORN、画面共有の仕組みについて段階的に理解する。&lt;/p&gt;
&lt;p&gt;ゴール
Twilio(あるいはzoomからリアルタイム通信の仕組みを理解する)&lt;/p&gt;
&lt;h2 id="構成"&gt;構成&lt;/h2&gt;
&lt;p&gt;React
│
Socket.io
│
WebSocket（TCP）
│
シグナリング
│
WebRTC
│
UDP
│
音声・映像&lt;/p&gt;
&lt;p&gt;Q. 普段Web開発で使うHTTP通信と比べて、WebSocketは何が違うのか——特に「誰が」「いつ」データを送れるのか、という点に注目して調べてみてください。&lt;/p&gt;
&lt;p&gt;Http通信の場合はライアントからリクエストを投げたらサーバーからレスポンスが入ってくると言う。1方向的な通信のやりとりを行うが、それに対してウェブソケットはリアルタイム通信、つまり双方向通信を行うことができる。&lt;/p&gt;
&lt;p&gt;補足:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP: クライアントが要求 → サーバーが応答、で1往復が完結。次のやり取りをするには再度リクエストが必要（コネクションはその都度使い捨てに近い）。&lt;/li&gt;
&lt;li&gt;WebSocket: 最初の接続確立だけHTTPのハンドシェイク（Upgrade: websocket）を使うが、一度繋がるとコネクションを張りっぱなしにする。だから「クライアントから聞かれてないのにサーバーから送る」ということができる＝双方向・非同期。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Q. では素のWebSocketがあるのに、なぜ実務では「Socket.io」というライブラリを使うのか？ WebSocketだけでは足りない・面倒な点を調べてみてください。&lt;/p&gt;
&lt;p&gt;WebSocketはリアルタイム通信の仕組みそのものですが、&lt;/p&gt;
&lt;p&gt;Socket.ioは、
部屋(Room)管理
自動再接続
イベント管理
接続・切断通知
ブロードキャスト（全員・特定の部屋への送信）
などの機能を提供してくれるライブラリのため、
WebSocketで一から自前実装するよりも開発効率が高く、保守しやすいため利用される。&lt;/p&gt;
&lt;p&gt;補足: Socket.ioは「WebSocketの上位互換」ではなく、フォールバック機構を持つ点も大きいです。WebSocketが使えない環境（古いプロキシ等）では自動的にlong-pollingに切り替えます。つまりSocket.io自体が独自のプロトコルで、内部で「使えるならWebSocket、ダメならHTTPポーリング」を切り替えている、という位置づけです。&lt;/p&gt;
&lt;p&gt;Q. Socket.io（サーバー経由の通信）があるのに、なぜビデオ通話や画面共有には別途「WebRTC」という技術が必要なのか？ 音声・映像データがサーバーを経由する場合としない場合で、何が変わるか考えてみてください。&lt;/p&gt;
&lt;p&gt;映像、音声データは通信遅延を避けるためにUDPプロトコルを利用している。サーバーを経由する場合には、TCPプロトコルによる通信となるが、TCPプロトコルの通信の場合は、信頼性の確立のための仕組みが整っている反面、音声・映像のデータはデータサイズが多すぎて、通信をする際に、データ破損などが起こりやすく、通信遅延、通信事故が発生してしまう。そのため、UWPプロトコルを利用するのに、WebRTCという通信技術を使って映像、音声データはやり取りをする必要がある&lt;/p&gt;
&lt;p&gt;良い着眼点です。UDP/TCPの違いは正しいですが、もう一つ重要な観点が抜けています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ プロトコルの違い: 音声・映像はSRTP（UDPベース）を使う。TCPは再送・順序保証の仕組みがある分、パケットロス時に「待ち」が発生し、リアルタイム性を損なう（多少コマ落ちしても待たされるよりマシ、という発想）。&lt;/li&gt;
&lt;li&gt;⚠️ もう一つの本質: 仮にサーバー経由でUDPを使えたとしても、全員の映像・音声データがサーバーを通ると、参加者が増えるほどサーバーの帯域・処理コストが跳ね上がり、サーバーが1つ余分な中継点＝遅延要因にもなる。WebRTCの一番の価値は「サーバーを介さずピア同士が直接繋がる（P2P）」こと。UDPを使うのは手段の一つで、目的は「サーバーを経由しない直接通信」を実現すること。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Q. ピア同士が「直接」繋がるには、事前にお互いのIPアドレスなどの接続情報を知る必要があります。でも見知らぬ相手同士がいきなり直接通信することはできません。この「最初の情報交換」はどうやって行うのでしょうか？ （ここでSocket.ioが再登場します）&lt;/p&gt;
&lt;p&gt;自分の回答&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;シグナリングを行う。シグナリングとは、P2P通信のやりとりをするための接続情報を交換する仕組み。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;✅ 仕組みの本質: シグナリングとは「まだP2Pで直接繋がっていない2人が、繋がるために必要な情報を、既存の別の通信路（Socket.io/WebSocketなど）経由でやり取りすること」。&lt;/li&gt;
&lt;li&gt;📌 重要な補足: WebRTC自体は「シグナリングをどうやるか」を規定していません。Socket.ioでも、素のWebSocketでも、極端な話メールでコピペしてもいい（実用的ではないですが）。あくまで**サーバーを介した「仲介」**であって、通信方式は自由です。&lt;/li&gt;
&lt;li&gt;📌 実際に交換するものは次の2種類です:
a. SDP（Session Description Protocol）: 「どんなコーデック・解像度で通信したいか」という能力・条件の記述
b. ICE candidate: 実際の接続先候補（IP:ポートの組み合わせ）のリスト&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このSDPのやり取りの手順こそが「呼制御」です。&lt;/p&gt;</description></item><item><title/><link>https://makiharu.github.io/persona-blog/tech/0730-mac-tips/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://makiharu.github.io/persona-blog/tech/0730-mac-tips/</guid><description>&lt;h2 id="mac開発環境"&gt;Mac開発環境&lt;/h2&gt;
&lt;p&gt;これは入れておけツール&lt;/p&gt;
&lt;p&gt;Nix
Docker
アルフレッド？
なんかもっと違うのがあったような&lt;/p&gt;
&lt;p&gt;Mac開発で一番最初にやること&lt;/p&gt;
&lt;p&gt;隠しファイル・フォルダを表示状態にする
Finder上で常に見えるようにしたい場合は、隠しファイルの表示ショートカットを使います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Finderで 「Macintosh HD」（またはユーザーのルートフォルダ） を開きます。&lt;/li&gt;
&lt;li&gt;キーボードで Command (⌘) + Shift + .（ピリオド） を押します。&lt;/li&gt;
&lt;li&gt;うっすら半透明になった隠しフォルダ（usr や opt など）が表示されるようになります。&lt;/li&gt;
&lt;li&gt;あとは usr ➔ local ➔ var ➔ www とダブルクリックで順にたどっていけばアクセスできます。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;/usr/local/などのファイルパスで&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;open .
とすると、finderが開けるが、
code .
でVSCodeを開けるようにしたい。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;設定手順（最初の一回だけ）&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;VS Code を普通にアプリ一覧から起動します。&lt;/li&gt;
&lt;li&gt;キーボードで Command (⌘) + Shift + P を押します（コマンドパレットが開きます）。&lt;/li&gt;
&lt;li&gt;入力欄に shell command と入力します。&lt;/li&gt;
&lt;li&gt;候補に出てくる 「Shell Command: Install &amp;lsquo;code&amp;rsquo; command in PATH」 を選択してクリックします。 (日本語設定の場合：「シェル コマンド: PATH 内に &amp;lsquo;code&amp;rsquo; コマンドをインストールします」)&lt;/li&gt;
&lt;li&gt;「成功しました」という通知（またはダイアログ）が出たら設定完了です！（VS Codeは閉じてOKです）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;めも&lt;/p&gt;</description></item></channel></rss>