<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>未分類 | Engineer Ryo Blog</title>
	<atom:link href="https://engineer-ryo-blog.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>https://engineer-ryo-blog.com</link>
	<description></description>
	<lastBuildDate>Sun, 20 Sep 2026 11:13:18 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.1</generator>

<image>
	<url>https://engineer-ryo-blog.com/wp-content/uploads/2022/11/cropped-site-icon-1-32x32.jpg</url>
	<title>未分類 | Engineer Ryo Blog</title>
	<link>https://engineer-ryo-blog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>iOSDC 2026 (i will blog)</title>
		<link>https://engineer-ryo-blog.com/2026/09/20/iosdc-2026-i-will-blog/</link>
					<comments>https://engineer-ryo-blog.com/2026/09/20/iosdc-2026-i-will-blog/#respond</comments>
		
		<dc:creator><![CDATA[ryo]]></dc:creator>
		<pubDate>Sun, 20 Sep 2026 11:13:17 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<guid isPermaLink="false">https://engineer-ryo-blog.com/?p=263</guid>

					<description><![CDATA[目次 i will blogOptional&#60;Bar>がよかったCallKitの通話、やっぱり大変だよねペンライトを自動制御したい！次は、登壇したい！ i will blog というわけで書いています。3回目のiO [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">i will blog</a></li><li><a href="#toc2" tabindex="0">Optional&lt;Bar>がよかった</a></li><li><a href="#toc3" tabindex="0">CallKitの通話、やっぱり大変だよね</a></li><li><a href="#toc4" tabindex="0">ペンライトを自動制御したい！</a></li><li><a href="#toc5" tabindex="0">次は、登壇したい！</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">i will blog</span></h2>



<p class="wp-block-paragraph">というわけで書いています。3回目のiOSDC、オフラインでの参加は2回目でした。day0〜day2まで3日間いました！</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><span id="toc2">Optional&lt;Bar>がよかった</span></h2>



<p class="wp-block-paragraph">会場にあったバー「Optional&lt;Bar>」がとてもよかったです！</p>



<p class="wp-block-paragraph">3日間、それぞれ違うカクテルが提供されていました。</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="683" src="https://engineer-ryo-blog.com/wp-content/uploads/2026/09/E0474ABD-0E50-4C89-80A1-3B2F1F6B2B30_1_105_c-1024x683.jpeg" alt="" class="wp-image-264" srcset="https://engineer-ryo-blog.com/wp-content/uploads/2026/09/E0474ABD-0E50-4C89-80A1-3B2F1F6B2B30_1_105_c-1024x683.jpeg 1024w, https://engineer-ryo-blog.com/wp-content/uploads/2026/09/E0474ABD-0E50-4C89-80A1-3B2F1F6B2B30_1_105_c-768x512.jpeg 768w, https://engineer-ryo-blog.com/wp-content/uploads/2026/09/E0474ABD-0E50-4C89-80A1-3B2F1F6B2B30_1_105_c-300x200.jpeg 300w, https://engineer-ryo-blog.com/wp-content/uploads/2026/09/E0474ABD-0E50-4C89-80A1-3B2F1F6B2B30_1_105_c.jpeg 1086w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">1日目のカクテル。カップのロゴが基板パターンになっている</figcaption></figure>



<p class="wp-block-paragraph">写真のとおり、底のほうが濃い青緑で、上に向かってすっと色が抜けていくグラデーション。しっかり炭酸。カップに刷られたロゴが基板のパターンになっていて、すごい&#8230;!! (語彙力)</p>



<p class="wp-block-paragraph">シークレットLTの「Optional&lt;Bar>うらばなし」で裏側がのお話しも聞けて、運営の皆さんに感謝です！</p>



<h2 class="wp-block-heading"><span id="toc3">CallKitの通話、やっぱり大変だよね</span></h2>



<p class="wp-block-paragraph">技術面でいちばん刺さったのこちらです！</p>



<p class="wp-block-paragraph"><a href="https://fortee.jp/iosdc-japan-2026/proposal/db0b002a-ed2b-47e8-b798-3b8f8bcc4007">通話はつながれば終わりじゃない ― CallKitで通話機能の裏側</a>（金 瑠加須 / @LucasGoldner さん）</p>



<p class="wp-block-paragraph">Agoraを使った音声通話を例に、CallKitとの組み合わせ方、通話ステートの設計、ライフサイクル管理、実装上の落とし穴とデバッグ方法を扱うセッションでした。</p>



<p class="wp-block-paragraph">私自身、Flutterで通話のアプリを作っていたので、共感できる部分が多かったです。というか、聞きながら何度も「わかる〜」となっていましたw</p>



<p class="wp-block-paragraph">通話機能って、外から見ると「つながればOK」に見えるんですよね。<br>発信して、相手が出て、話せる。PoC的な形だと意外とすぐできます。<br>でも実際に作ってみると、大変なのはその先でした。。。</p>



<p class="wp-block-paragraph">私が特に苦しんだのは、セッションでも触れられていたこのあたりでした。</p>



<ul class="wp-block-list">
<li><strong>着信（PushKit）まわり</strong>。アプリがバックグラウンドにいるとき、あるいは落とされているときに、ちゃんと着信させる。ここが動かないと通話アプリとして成立しないのに、ここがいちばん手元で再現しづらい。</li>



<li><strong>通話ステート管理</strong>。発信中、呼び出し中、通話中、保留、終了。紙に書くとただの状態遷移図なのに、実機では「終わったはずの通話が残っている」「切ったのにUIが戻らない」みたいなことが起きる。ネットワークが切れたときの扱いを決めていないと、あっという間に破綻します。</li>



<li><strong>音声ルーティング</strong>。AVAudioSessionの設定、スピーカーとイヤホンとBluetoothの切り替え。音が出ない、意図しない出力先から鳴る、途中でデバイスを繋ぎ変えられる。ここは本当に、地道に潰していくしかない領域でした。<br></li>
</ul>



<p class="wp-block-paragraph">(世の中の通話機能があるアプリってすげぇ！ってなりますよね！)</p>



<h2 class="wp-block-heading"><span id="toc4">ペンライトを自動制御したい！</span></h2>



<p class="wp-block-paragraph"><a href="https://fortee.jp/iosdc-japan-2026/proposal/e3e8e210-c405-45f4-a101-5baed82df109">iOSDCのペンライトを自動制御したい！</a>（akkey / AkkeyLab さん）</p>



<p class="wp-block-paragraph">Swiftでペンライトを制御する、という話です。<br>ライブ会場のRF制御、テーマパークのIR・音声信号制御、Bluetooth制御と、用途ごとの制御方式を整理したうえで、AVFoundationとAVAudioEngineで制御信号をリアルタイムに生成・出力して、実際にペンライトを光らせてみる。</p>



<p class="wp-block-paragraph">見ていて、素直に「自分もやりたい！」と思いました。</p>



<p class="wp-block-paragraph">10年くらい前はよりハードウェアに近い部分の実装をしていたので、懐かしいな〜と思うと同時に、またやってみたいな〜と思ったりしていました！</p>



<h2 class="wp-block-heading"><span id="toc5">次は、登壇したい！</span></h2>



<p class="wp-block-paragraph">というわけで、次回は登壇したい！！(<strong>ペンライトを制御して、LTで登壇する側に回りたい。</strong>)</p>



<p class="wp-block-paragraph">とりあえずテーマを考えておきます！</p>



<p class="wp-block-paragraph">i will blog、ちゃんと書きました！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://engineer-ryo-blog.com/2026/09/20/iosdc-2026-i-will-blog/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>flutter コマンドのtips</title>
		<link>https://engineer-ryo-blog.com/2026/01/03/flutter-%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%81%aetips/</link>
					<comments>https://engineer-ryo-blog.com/2026/01/03/flutter-%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%81%aetips/#respond</comments>
		
		<dc:creator><![CDATA[ryo]]></dc:creator>
		<pubDate>Sat, 03 Jan 2026 11:49:31 +0000</pubDate>
				<category><![CDATA[flutter]]></category>
		<category><![CDATA[エンジニア]]></category>
		<category><![CDATA[モバイルアプリ]]></category>
		<category><![CDATA[未分類]]></category>
		<guid isPermaLink="false">https://engineer-ryo-blog.com/?p=213</guid>

					<description><![CDATA[目次 はじめに僕は ホットリスタート をしたい&#8230;他のコマンドも知りたい表にまとめてみた はじめに flutter で開発していますか？ ネイティブ(swift・kotlin)・react-native・.NE [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">僕は ホットリスタート をしたい&#8230;</a></li><li><a href="#toc3" tabindex="0">他のコマンドも知りたい</a></li><li><a href="#toc4" tabindex="0">表にまとめてみた</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p class="wp-block-paragraph">flutter で開発していますか？</p>



<p class="wp-block-paragraph">ネイティブ(swift・kotlin)・react-native・.NET MAUIなど、アプリ開発の選択肢が多く、技術選定に悩むこの頃です&#8230;</p>



<p class="wp-block-paragraph">クロスプラットフォームで開発したいな〜という時はflutterを選ぶことが多いのですが、そこで得た <code>flutter</code> コマンドのtipsを紹介します。</p>



<h2 class="wp-block-heading"><span id="toc2">僕は ホットリスタート をしたい&#8230;</span></h2>



<p class="wp-block-paragraph">これまでホットリスタートする時に、毎回 <code>flutter run</code> を実行したいたのですが、<code>Shift + R</code> でホットリスタートができるらしい。</p>



<p class="wp-block-paragraph">-&gt; % flutter run<br>Connected devices:<br>macOS (desktop) • macos • darwin-arm64 • macOS 26.2 25C56 darwin-arm64<br>Chrome (web) • chrome • web-javascript • Google Chrome 143.0.7499.170</p>



<p class="wp-block-paragraph">No wireless devices were found.</p>



<p class="wp-block-paragraph">この状態でデバイスを選んで、<code>Shift + R</code> を入力すると、ホットリロードできました！！！(もっと早く知ってたら&#8230;)</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><span id="toc3">他のコマンドも知りたい</span></h2>



<p class="wp-block-paragraph"><code>flutter run</code> でデバイスを選んだあと、<code>h</code> を入力するとヘルプが表示された。</p>



<p class="wp-block-paragraph">(色々便利なコマンドがあるっぽい)</p>



<pre class="wp-block-code"><code>Flutter run key commands.
r Hot reload. 🔥🔥🔥
R Hot restart.
v Open Flutter DevTools.
w Dump widget hierarchy to the console.                                               (debugDumpApp)
t Dump rendering tree to the console.                                          (debugDumpRenderTree)
L Dump layer tree to the console.                                               (debugDumpLayerTree)
f Dump focus tree to the console.                                               (debugDumpFocusTree)
S Dump accessibility tree in traversal order.                                   (debugDumpSemantics)
U Dump accessibility tree in inverse hit test order.                            (debugDumpSemantics)
i Toggle widget inspector.                                  (WidgetsApp.showWidgetInspectorOverride)
p Toggle the display of construction lines.                                  (debugPaintSizeEnabled)
I Toggle oversized image inversion.                                     (debugInvertOversizedImages)
o Simulate different operating systems.                                      (defaultTargetPlatform)
b Toggle platform brightness (dark and light mode).                        (debugBrightnessOverride)
P Toggle performance overlay.                                    (WidgetsApp.showPerformanceOverlay)
a Toggle timeline events for all widget build methods.                    (debugProfileWidgetBuilds)
g Run source code generators.
h Repeat this help message.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
</code></pre>



<h2 class="wp-block-heading"><span id="toc4">表にまとめてみた</span></h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>キー</th><th>アクション</th><th>日本語での説明</th></tr></thead><tbody><tr><td><strong>r</strong></td><td>ホットリロード</td><td>コードの変更を即座に反映します（状態を維持）</td></tr><tr><td><strong>R</strong></td><td>ホットリスタート</td><td>アプリを再起動して変更を反映します（状態をリセット）</td></tr><tr><td><strong>v</strong></td><td>DevTools</td><td>Flutter DevTools をブラウザで開きます</td></tr><tr><td><strong>w</strong></td><td>ウィジェットツリー</td><td>ウィジェットの階層構造をコンソールに表示します</td></tr><tr><td><strong>t</strong></td><td>レンダリングツリー</td><td>レンダリングツリーの詳細をコンソールに表示します</td></tr><tr><td><strong>L</strong></td><td>レイヤーツリー</td><td>レイヤーの階層構造をコンソールに表示します</td></tr><tr><td><strong>f</strong></td><td>フォーカスツリー</td><td>現在のフォーカス状態をコンソールに表示します</td></tr><tr><td><strong>S</strong></td><td>アクセシビリティ(順)</td><td>アクセシビリティツリーをトラバーサル順に表示します</td></tr><tr><td><strong>U</strong></td><td>アクセシビリティ(逆)</td><td>アクセシビリティツリーを逆ヒットテスト順に表示します</td></tr><tr><td><strong>i</strong></td><td>インスペクタ</td><td>ウィジェットインスペクタの表示を切り替えます</td></tr><tr><td><strong>p</strong></td><td>ガイド線表示</td><td>レイアウト確認用の補助線（サイズ等）の表示を切り替えます</td></tr><tr><td><strong>I</strong></td><td>巨大画像の反転</td><td>オーバーサイズの画像を反転表示して特定しやすくします</td></tr><tr><td><strong>o</strong></td><td>OSシミュレート</td><td>AndroidやiOSなどのOS表示を切り替えます</td></tr><tr><td><strong>b</strong></td><td>明るさ切り替え</td><td>ダークモードとライトモードを切り替えます</td></tr><tr><td><strong>P</strong></td><td>パフォーマンス</td><td>パフォーマンスオーバーレイの表示を切り替えます</td></tr><tr><td><strong>a</strong></td><td>ビルドタイムライン</td><td>全ウィジェットのビルドイベント記録を切り替えます</td></tr><tr><td><strong>g</strong></td><td>コード生成</td><td>ソースコードジェネレータを実行します</td></tr><tr><td><strong>h</strong></td><td>ヘルプ</td><td>コマンドのヘルプメッセージを再表示します</td></tr><tr><td><strong>d</strong></td><td>デタッチ</td><td>アプリは動かしたまま、コンソールとの接続を解除します</td></tr><tr><td><strong>c</strong></td><td>画面クリア</td><td>コンソールのログ表示をクリアします</td></tr><tr><td><strong>q</strong></td><td>終了</td><td>アプリを終了してプロセスを停止します</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://engineer-ryo-blog.com/2026/01/03/flutter-%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%81%aetips/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>IPv6のみの環境でcloudflaredを使用する時の注意点</title>
		<link>https://engineer-ryo-blog.com/2025/05/06/ipv6%e3%81%ae%e3%81%bf%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7cloudflared%e3%82%92%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8b%e6%99%82%e3%81%ae%e6%b3%a8%e6%84%8f%e7%82%b9/</link>
					<comments>https://engineer-ryo-blog.com/2025/05/06/ipv6%e3%81%ae%e3%81%bf%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7cloudflared%e3%82%92%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8b%e6%99%82%e3%81%ae%e6%b3%a8%e6%84%8f%e7%82%b9/#respond</comments>
		
		<dc:creator><![CDATA[ryo]]></dc:creator>
		<pubDate>Tue, 06 May 2025 13:50:20 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<guid isPermaLink="false">https://engineer-ryo-blog.com/?p=208</guid>

					<description><![CDATA[(詳細はあとで書きます。) 目次 何が起きたか対処方法 何が起きたか IPv6のみのEC2にcloudflaredをインストールした際に、IPv4のアドレスで名前解決してしまい、タイムアウトが発生していた。 対処方法 / [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">(詳細はあとで書きます。)</p>



<p class="wp-block-paragraph"></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">何が起きたか</a></li><li><a href="#toc2" tabindex="0">対処方法</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">何が起きたか</span></h2>



<p class="wp-block-paragraph">IPv6のみのEC2にcloudflaredをインストールした際に、IPv4のアドレスで名前解決してしまい、タイムアウトが発生していた。</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><span id="toc2">対処方法</span></h2>



<p class="wp-block-paragraph">/etc/systemd/system/cloudflared.service を変更し、IPv6のエッジサーバーに向けた。</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">変更前</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=cloudflared
After=network-online.target
Wants=network-online.target

&#91;Service]
TimeoutStartSec=0
Type=notify
ExecStart=/usr/bin/cloudflared --no-autoupdate run --token &lt;token>
Restart=on-failure
RestartSec=5s

&#91;Install]
WantedBy=multi-user.target</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">変更後</p>



<p class="wp-block-paragraph"> <strong>&#8211;edge-ip-version 6</strong> を追記</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=cloudflared
After=network-online.target
Wants=network-online.target

&#91;Service]
TimeoutStartSec=0
Type=notify
ExecStart=/usr/bin/cloudflared --no-autoupdate <strong>--edge-ip-version 6 </strong>tunnel run --token
Restart=on-failure
RestartSec=5s

&#91;Install]
WantedBy=multi-user.target
</code></pre>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://engineer-ryo-blog.com/2025/05/06/ipv6%e3%81%ae%e3%81%bf%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7cloudflared%e3%82%92%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8b%e6%99%82%e3%81%ae%e6%b3%a8%e6%84%8f%e7%82%b9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
