<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/scripts/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:h="http://www.w3.org/TR/html4/"><channel><title>むあーるの雑記</title><description>MR-Sの整備記録、Sim Racing、PCハードウェア構成などを記録する雑記</description><link>https://note.muaaru.com</link><item><title>MR-S オイル交換、オイルフィルター交換 255,650km 2026/03/01</title><link>https://note.muaaru.com/blog/2026-03-01</link><guid isPermaLink="true">https://note.muaaru.com/blog/2026-03-01</guid><description>MR-S オイル交換、オイルフィルター交換 255,650km 2026/03/01</description><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;オイル交換&lt;/h2&gt;
&lt;p&gt;Castrol(カストロール) エンジンオイル EDGE RS 10W-50 API SN 4L 90430-12028 : トヨタ(90430)オイルパンドレンコックG/K&lt;/p&gt;</content:encoded><h:img src="/_astro/PXL_20260305_113024272.RAW-01.COVER.BKaKFkw9.jpg"/><enclosure url="/_astro/PXL_20260305_113024272.RAW-01.COVER.BKaKFkw9.jpg"/></item><item><title>GT7用にモニターを買い替えた話</title><link>https://note.muaaru.com/blog/2026-01-11</link><guid isPermaLink="true">https://note.muaaru.com/blog/2026-01-11</guid><description>PS5でGT7を120Hzで楽しむためにDell S2725QSを購入。コスパ最強の4Kモニターの実機レビューに加え、イヤホンジャック非搭載やキャプチャーボード（Elgato）との兼ね合いで苦戦した配信設定・音声分離の解決策についてまとめました。</description><pubDate>Sun, 11 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;自分はPS5用にLGの27UL500-Wを使用しています。
Amazonの履歴で2019年に￥37,480で買っていました。もう7年くらい使ってるみたいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2026-01-11+20.28.09.CJ3NSI6w.png&amp;#x26;w=2954&amp;#x26;h=1404&amp;#x26;f=webp&quot; alt=&quot;27UL500-W&quot;&gt;&lt;/p&gt;
&lt;p&gt;ただ、GT7をプレイしているとコース脇のブレーキポイントなどが見えづらく困っていました。&lt;/p&gt;
&lt;p&gt;このモニターは60Hzまで対応なんですが、PS5のGT7自体は120Hzでの出力に対応しています。&lt;/p&gt;
&lt;p&gt;120Hz出力なら見えやすくなるんじゃないのというのもあって今回モニターを買い換えました。&lt;/p&gt;
&lt;h2&gt;Dell 27inch Plus 4Kモニター S2725QS&lt;/h2&gt;
&lt;p&gt;今回買ったのが、このDell 27inch Plus 4Kモニター S2725QSになります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2026-01-11+20.28.49.JtYEGsNG.png&amp;#x26;w=3254&amp;#x26;h=1704&amp;#x26;f=webp&quot; alt=&quot;S2725QS&quot;&gt;&lt;/p&gt;
&lt;p&gt;https://www.dell.com/ja-jp/shop/dell-27-plus-4k%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC-s2725qs/apd/210-bqvr/%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC-%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E7%94%A8%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8&lt;/p&gt;
&lt;p&gt;4K、HDR、VRR、120Hz対応とPS5の性能を引き出すにはちょうどいいスペックになっています。
値段も公式サイトで値引きアリで￥35,481で変えたので、スペックに対して結構安かったと思います。
27インチで￥35,000円程度でPS5の性能を引き出せるスペックとなるとこのモニターしかなかったです。&lt;/p&gt;
&lt;p&gt;PCと USB-C 1本で接続できるのS2725QCもありますが、そちらは結構値段が高くなり￥49,800なので最低限必要なSpecのモデルにしました。
この値段差だとUSB-C Dockが買えてしまいます。&lt;/p&gt;
&lt;p&gt;もっと安いモニターがいいという人はHDMI 2.1対応のWQHDモニターがいいと思います。&lt;/p&gt;
&lt;p&gt;PS5は内部でWQHDを4Kにアップスケーリングしているゲームも多いです。特に120Hz出力だとその傾向は強くなります。
今回設定をいろいろ試してみて4KとWQHDで値段分の差があるかと言われると自分はないと感じました。
WQHDだと￥20,000円台まで予算を落としてもハイフレームレートのモニターの選択肢が多かったです。&lt;/p&gt;
&lt;p&gt;後述の理由からもWQHDにしておけばよかったと後で思いました。&lt;/p&gt;
&lt;h2&gt;開封&lt;/h2&gt;
&lt;p&gt;新品のはずなんですが、なぜか外箱がやたら汚かったです。
それ以外は特に変わったところはないですね。
HDMIケーブルも入ってました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20260107_093803711.BFtAa6T1.jpg&amp;#x26;w=8160&amp;#x26;h=6144&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20260107_093856172.e1I1M4dA.jpg&amp;#x26;w=8160&amp;#x26;h=6144&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;
&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20260107_093930601.DHAG_aAL.jpg&amp;#x26;w=8160&amp;#x26;h=6144&amp;#x26;f=webp&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt;
&lt;h2&gt;PS5に接続&lt;/h2&gt;
&lt;p&gt;PS5に接続してディスプレイ設定で確認するとこのようにフルスペックで認識されました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F19bacbc02c286-screenshotUrl.h5xjrO0M.jpg&amp;#x26;w=3840&amp;#x26;h=2160&amp;#x26;f=webp&quot; alt=&quot;PS5 Display Setting&quot;&gt;&lt;/p&gt;
&lt;p&gt;GT7で120Hz出力設定を有効にした状態もしっかり120Hzで出力されていました。
&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20260111_010251118.C8925phx.jpg&amp;#x26;w=8160&amp;#x26;h=6144&amp;#x26;f=webp&quot; alt=&quot;GT7 OSD&quot;&gt;&lt;/p&gt;
&lt;p&gt;モニターの設定画面もコスパ重視のモニターだと癖が強いことがあるんですが、さすがDell製というところでしょうかサクサク動いて必要な設定もわかりやすいです。&lt;/p&gt;
&lt;h2&gt;配信設定&lt;/h2&gt;
&lt;h3&gt;音声関係&lt;/h3&gt;
&lt;p&gt;配信にこのモニターを使用する際は1点注意が必要です。&lt;/p&gt;
&lt;p&gt;このモニターには&lt;em&gt;&lt;strong&gt;3.5mmのイヤホンジャックがありません。&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;前の環境ではモニターから出力されてる音声をイヤホンジャックからヘッドホンに流してモニターしていました。
この場合は音声出力はHDMIだけですみます。&lt;/p&gt;
&lt;p&gt;しかし、このモニターの場合はイヤホンジャックがなく、PS5はHDMIとコントローラー両方から音声出力はできません。&lt;/p&gt;
&lt;p&gt;配信せずプレイするだけであればコントローラーから音声出力するのがいいと思います。&lt;/p&gt;
&lt;p&gt;配信する場合は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HDMIから音声分離するか、&lt;/li&gt;
&lt;li&gt;PS5のコントローラーから音声出力するか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;になります。&lt;/p&gt;
&lt;p&gt;これが思いのほか厄介で最終的にHDMIスプリッターに音声分離機能がついているものを購入しました。
コントローラーからの音を引き回してできなくはないはずですが、構成が複雑になるため断念しました。&lt;/p&gt;
&lt;h3&gt;映像関係&lt;/h3&gt;
&lt;p&gt;これはモニターとは関係ないですが、映像のキャプチャーについても注意点があります。&lt;/p&gt;
&lt;p&gt;自分は配信するためのキャプチャーカードとしてElgato 4K60 Pro MK.2を使用しているんですが、&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2025-05-30-post-843&quot;&gt;4k映像をライブ配信可能で持ち運びもできるコンパクトな高コスパ自作PC&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;このキャプチャーカードではパススルーだと4K、HDR、VRR、120Hzまで対応なんですが、
キャプチャーだと4K,60Hzまでになります。&lt;/p&gt;
&lt;p&gt;パススルーがPS5のフルスペックに対応しているので問題なくキャプチャーできるように思いますが、PS5から4K(2160p)、120Hzで出力すると1080p、120Hzでのキャプチャーになりました。&lt;/p&gt;
&lt;p&gt;1440p、120Hzでのキャプチャーには対応しているのでこっちになってほしかったんですが、EDID設定などいろいろ試してみましたがならなかったです。&lt;/p&gt;
&lt;p&gt;しょうがないのでPS5側で1440p出力にして1440pでのキャプチャーにしました。
これだとキャプチャーカードでも1440p、60Hzでのキャプチャーになりました。&lt;/p&gt;
&lt;p&gt;いままで4Kでキャプチャーしてきましたが、よく見比べないと画質的には違いはわからない程度だと思いますのでこれで良しとしました。&lt;/p&gt;
&lt;h3&gt;配信環境の構成図&lt;/h3&gt;
&lt;p&gt;全体の構成はこういう接続になります。&lt;/p&gt;
&lt;p&gt;ちなみにキャプチャーカードを使用するならHDMIスプリッターは持っておいたほうがいいです。
PCの電源を落とすとパススルー対応でも映像が出なくなったりするので、HDMIスプリッターから分岐するほうが使い勝手がよくなります。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;%%{init: {
  &apos;theme&apos;: &apos;base&apos;,
  &apos;themeVariables&apos;: {
    &apos;primaryColor&apos;: &apos;#444444&apos;,
    &apos;primaryTextColor&apos;: &apos;#ffffff&apos;,
    &apos;primaryBorderColor&apos;: &apos;#666666&apos;,
    &apos;lineColor&apos;: &apos;#999999&apos;,
    &apos;secondaryColor&apos;: &apos;#666666&apos;,
    &apos;tertiaryColor&apos;: &apos;#444444&apos;
  }
}}%%
flowchart LR
    subgraph &quot;&amp;#x3C;br&gt;プレイ環境&quot;
        PS5[&quot;PlayStation 5&quot;]
        MON[&quot;プレイ用モニター&quot;]
        HS[&quot;ヘッドセット&amp;#x3C;br&gt;(3.5mm 3極AUXx2)&quot;]
        SR[&quot;スピーカー&quot;]
    end

    subgraph &quot;配信設備&quot;
        SP[&quot;音声分離機能付き&amp;#x3C;br&gt;HDMIスプリッター&quot;]
        PC[&quot;配信用PC&amp;#x3C;br&gt;(キャプチャーボード)&quot;]
        AG03[&quot;オーディオミキサー&quot;]
    end

    %% 映像・音声のメインフロー
    PS5 -- &quot;HDMI&amp;#x3C;br&gt;(HDMI2.1対応ウルトラハイスピードケーブル)&quot; --&gt; SP
    SP -- &quot;HDMI OUT 1&amp;#x3C;br&gt;(HDMI2.1対応ウルトラハイスピードケーブル)&quot; --&gt; MON
    SP -- &quot;HDMI OUT 2&amp;#x3C;br&gt;(HDMI2.1対応ウルトラハイスピードケーブル)&quot; --&gt; PC
    PC &amp;#x3C;-- &quot;USBケーブル&amp;#x3C;br&gt;(IN:マイク音声,OUT:PC音声)&quot; --&gt; AG03
    SP -- &quot;3.5mm AUX&quot; --&gt; AG03

    %% ヘッドセットの分岐接続
    AG03 -- &quot;3.5mm 3極AUX&amp;#x3C;br&gt;(音声出力)&quot; --&gt; HS
    HS -- &quot;3.5mm 3極AUX&amp;#x3C;br&gt;(マイク入力)&quot; --&gt; AG03

    AG03 -- &quot;RCA-3.5mm変換&amp;#x3C;br&gt;オーディオケーブル&amp;#x3C;br&gt;(音声出力)&quot; --&gt; SR
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;120HzでGT7をプレイしてみましたが、予想通り見やすくなったように思います。
画面両サイドの流れていく背景がくっきり見えるように感じます。
やはり買い替えて正解でした。&lt;/p&gt;
&lt;p&gt;ただ、いままで60hzでプレイ、配信していて問題なかったことも120Hzとなると配信関係は意外と問題にぶち当たりますね。&lt;/p&gt;
&lt;p&gt;結局、1440pでのプレイになるならWQHDのミニターにしておけば2万円台ですんでいたのになぁ。&lt;/p&gt;</content:encoded><h:img src="/_astro/Gemini_Generated_Image_5kqtha5kqtha5kqt.BhvHjCGz.png"/><enclosure url="/_astro/Gemini_Generated_Image_5kqtha5kqtha5kqt.BhvHjCGz.png"/></item><item><title>ゆく年くる年 from 2025 to 2026</title><link>https://note.muaaru.com/blog/2025-12-31</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-12-31</guid><description>2025年の振り返りと2026年への抱負。GT7での成長、鈴鹿F1観戦、見た映画20本のレビュー、そして新たな挑戦へ</description><pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;今年もF1にSuperGTにとレース観戦にいき、映画を見まくり、GT7もやりまくりと相変わらずかなという感じでしたが、さらっと振り返りつつ来年の抱負などを。&lt;/p&gt;
&lt;h2&gt;2025年のGT7&lt;/h2&gt;
&lt;p&gt;GT7も3年目になってだんだんプレイ時間も少なくなってきた
と言っても500時間以上プレイしているんですが。&lt;/p&gt;
&lt;p&gt;白河杯でSクラス決勝で4位になったのは成長を感じました。
https://www.youtube.com/live/4ahhPhJNRNw?si=uD9gRtAUq2IAIQjY&lt;/p&gt;
&lt;p&gt;国体の鈴鹿 BRZ Gr3 がとんでもなく修行でした。
苦手なFRターボに終始苦しめられたものの、ちゃんと走ればタイムが答えてくれるという点ではとてもいいレギュだったと個人的には思いました。&lt;/p&gt;
&lt;h2&gt;鈴鹿F1観戦&lt;/h2&gt;
&lt;p&gt;今年もF1を見に鈴鹿サーキットへ
近場で宿を取るのが厳しいのでMR-Sで車中泊はそろそろ厳しいか！？
とはいえそれを差し引いても歩いて10分とかでサーキットは楽なんですよね。
あとは年々西コースの観戦エリアやマチュピチュ周辺が開発されていっていて快適度がアップしているのはいいですね。
実質入場料でスプーンやらで見放題の西コース権 様々です。&lt;/p&gt;
&lt;h2&gt;2025年に見た映画&lt;/h2&gt;
&lt;p&gt;今年もいろいろ見ましたが、以前鈴鹿で奮発してV2席を取ったらたまたま撮影協力席でレース見ながらいろいろ撮影協力させられたF1の映画が公開になりました。
実写の映像をベースにしているので映像の迫力はいままでのレース映画で一番リアルだったのではないでしょうか。&lt;/p&gt;
&lt;p&gt;アニメ映画は、ガンダムが始まった瞬間から衝撃しかなく今年の旬のアニメという感じでした。
その他は硬派版ルパン三世がついに完結したり、鬼滅の刃は変わらず凄まじい映像を見せてくれました。チェンソーマンも映像が凄まじかった。
そんななかで「ひゃくえむ。」が一番印象に残っていて、映画を見たあとコミックを買って読むくらいでした。
GT7でひたすらタイムを追う国体を走り抜けたあとに見たので、セリフの一つ一つが刺さりました。&lt;/p&gt;
&lt;p&gt;あとはGTWSで博多にいったついでにDolbyCinemaで初鑑賞したアバターも映像がすごかった。
前作までだとアバターは映像に比べてストーリーが弱かった感じだったのですが、今作はストーリも満足感がありました。&lt;/p&gt;
&lt;p&gt;ホラー映画ではサブスタンスがぶっちぎりに怖い映画でした。
ちょうど先日アマプラで配信開始になりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;01/17 機動戦士Gundam GQuuuuuuX -Beginning-&lt;/li&gt;
&lt;li&gt;05/18 【字幕】サブスタンス[R15+]&lt;/li&gt;
&lt;li&gt;05/23 岸辺露伴は動かない　懺悔室&lt;/li&gt;
&lt;li&gt;06/27 【字幕】F1／エフワン&lt;/li&gt;
&lt;li&gt;06/29 LUPIN THE IIIRD THE MOVIE 不死身の血族&lt;/li&gt;
&lt;li&gt;07/18 字幕ATMOS ｽｰﾊﾟｰﾏﾝ&lt;/li&gt;
&lt;li&gt;08/10 長崎ー閃光の影でー&lt;/li&gt;
&lt;li&gt;08/24 字幕ATMOS ﾊﾞﾚﾘｰﾅ The World of John Wick&lt;/li&gt;
&lt;li&gt;08/26 劇場版 鬼滅の刃 無限城編 第一章 猗窩座再来&lt;/li&gt;
&lt;li&gt;09/19 劇場版『チェンソーマン レゼ篇』(PG12)&lt;/li&gt;
&lt;li&gt;09/22 ひゃくえむ。&lt;/li&gt;
&lt;li&gt;09/27【字幕】ラスト・ブレス&lt;/li&gt;
&lt;li&gt;10/04 【字幕】ワン・バトル・アフター・アナザー&lt;/li&gt;
&lt;li&gt;10/13 劇場先行版 アニメ『ゴールデンカムイ』 札幌ビール工場編 前編&lt;/li&gt;
&lt;li&gt;11/01 劇場先行版 アニメ『ゴールデンカムイ』 札幌ビール工場編 後編&lt;/li&gt;
&lt;li&gt;11/07 ﾌﾟﾚﾃﾞﾀｰ ﾊﾞｯﾄﾞﾗﾝﾄﾞ&lt;/li&gt;
&lt;li&gt;12/22 【DolbyCinema3D・字幕】アバター：ファイヤー・アンド・アッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2026年に向けて&lt;/h2&gt;
&lt;p&gt;そんなこんなで今年もいろいろありましたが、
来年もさらにいろいろやっていこうかということで、&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20251231_144342673.Bow9xgqo.jpg&amp;#x26;w=6144&amp;#x26;h=8160&amp;#x26;f=webp&quot; alt=&quot;不動産重要書類&quot;&gt;&lt;/p&gt;
&lt;p&gt;ガレージ、買っちゃいました。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;最後に今年一番印象に残った言葉を&lt;/p&gt;
&lt;p&gt;「不安とは君自身が君を試す時の感情だ」(出典元：ひゃくえむ。 新装版 下 P161)&lt;/p&gt;
&lt;p&gt;来年も新しいことにチャレンジして不安も含めて楽しんで行こうと思います。&lt;/p&gt;</content:encoded><h:img src="/_astro/Gemini_Generated_Image_k67yiek67yiek67y.CvuDGbGq.png"/><enclosure url="/_astro/Gemini_Generated_Image_k67yiek67yiek67y.CvuDGbGq.png"/></item><item><title>【脱レンタルサーバー】WordpressのブログをVercel（Astro）に完全移行した話</title><link>https://note.muaaru.com/blog/2025-12-13</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-12-13</guid><description>さくらのレンタルサーバーを解約し、ドメイン管理だけ残してVercelに移行する手順。DNS設定のハマりポイントやリダイレクト設定についてまとめました。</description><pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;これまでさくらインターネットのレンタルサーバーを借りてWordpressでブログを運営してきましたが、
自分のブログではそこまでの環境が必要ないためサーバー代節約も兼ねて、ブログをAstroで作り直しホスティング先をVercelに変更することにしました。&lt;/p&gt;
&lt;p&gt;最終的なゴールは以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ブログ:&lt;/strong&gt; VercelにAstroで新ブログサイトを構築&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;転送設定:&lt;/strong&gt; 旧URL&lt;code&gt;https://muaaru.com?p=914&lt;/code&gt; にアクセスしたら、新URL&lt;code&gt;https://muaaru.com/blog/2025-08-24-post-914&lt;/code&gt; に自動転送&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;サーバー契約:&lt;/strong&gt; さくらのレンタルサーバーは解約し、ドメイン管理のみにする&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;移行の全体像&lt;/h2&gt;
&lt;p&gt;WordPress（さくらレンタルサーバー）からVercelへの移行作業の流れを整理すると、以下のようになります。
大きく分けて「データ抽出」「ローカル開発」「デプロイ」「DNS切り替え」の4フェーズです。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;%%{init: {
  &apos;theme&apos;: &apos;base&apos;,
  &apos;themeVariables&apos;: {
    &apos;actorBkg&apos;: &apos;#444444&apos;,
    &apos;actorTextColor&apos;: &apos;#ffffff&apos;,
    &apos;actorBorder&apos;: &apos;#666666&apos;,
    &apos;signalColor&apos;: &apos;#0066ff&apos;,
    &apos;signalTextColor&apos;: &apos;#666666&apos;,
    &apos;actorLineColor&apos;: &apos;#999999&apos;,
    &apos;noteBkgColor&apos;: &apos;#444444&apos;,
    &apos;noteTextColor&apos;: &apos;#ffffff&apos;
  }
}}%%
sequenceDiagram
    autonumber
    actor User as あなた (管理者)
    participant WP as WordPress&amp;#x3C;br&gt;(旧サーバー)
    participant Local as ローカル環境&amp;#x3C;br&gt;(VS Code)
    participant GitHub as GitHub
    participant Vercel as Vercel&amp;#x3C;br&gt;(新サーバー)
    participant DNS as DNS設定&amp;#x3C;br&gt;(さくら)

    Note over User, WP: 1. データ準備
    User-&gt;&gt;WP: XMLエクスポート
    WP--&gt;&gt;Local: 記事データ (XML)

    Note over User, Local: 2. 開発・設定
    User-&gt;&gt;Local: 変換スクリプト実行
    Local-&gt;&gt;Local: vercel.json (リダイレクト設定) 生成
    Local-&gt;&gt;Local: astro build (動作確認)

    Note over User, Vercel: 3. 公開・切り替え
    User-&gt;&gt;GitHub: git push
    GitHub-&gt;&gt;Vercel: デプロイ開始
    Vercel--&gt;&gt;Vercel: ビルド完了 (Ready)

    User-&gt;&gt;DNS: レコード変更 (A / CNAME)
    DNS-&gt;&gt;Vercel: ドメイン接続
    Vercel--&gt;&gt;Vercel: SSL証明書 自動発行

    Note over User, Vercel: 4. 移行完了
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;各フェーズのポイント
&lt;ul&gt;
&lt;li&gt;データ準備: まずはWordPress標準の「エクスポート」機能を使って、全記事データをXML形式でローカルにダウンロードします。&lt;/li&gt;
&lt;li&gt;開発・設定: AIで作らせたスクリプトでXMLデータから旧サイトの画像ファイルをダウンロードして、記事全体をAstroで扱えるMarkdownに変換します。さらに、旧URLとはURLの構造が変わため、vercel.json にリダイレクトルールも作成しておきます。&lt;/li&gt;
&lt;li&gt;公開・切り替え: GitHubにプッシュしてVercelへのデプロイが完了したら、最後にDNS設定を変更します。DNSが浸透し、Vercel側でドメイン接続が確認されると、SSL証明書（https）も自動で発行されます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;旧URLからのリダイレクトの仕組み&lt;/h2&gt;
&lt;p&gt;WordPressからAstroへ移行すると、URLの構造が大きく変わります。
（例：&lt;code&gt;https://muaaru.com?p=914&lt;/code&gt; → &lt;code&gt;https://muaaru.com/blog/2025-08-24-post-914&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;古いリンクを踏んだユーザーも移行後のサイトで同じ記事が開けるように、Vercel側で「旧住所から新住所へ転送」する処理を行っています。
記事URLの転送の動きを図解すると以下のようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;%%{init: {
  &apos;theme&apos;: &apos;base&apos;,
  &apos;themeVariables&apos;: {
    &apos;actorBkg&apos;: &apos;#444444&apos;,
    &apos;actorTextColor&apos;: &apos;#ffffff&apos;,
    &apos;actorBorder&apos;: &apos;#666666&apos;,
    &apos;signalColor&apos;: &apos;#0066ff&apos;,
    &apos;signalTextColor&apos;: &apos;#666666&apos;,
    &apos;actorLineColor&apos;: &apos;#999999&apos;,
    &apos;noteBkgColor&apos;: &apos;#444444&apos;,
    &apos;noteTextColor&apos;: &apos;#ffffff&apos;
  }
}}%%
sequenceDiagram
    autonumber
    actor User as ユーザー (ブラウザ)
    participant Vercel as Vercel サーバー
    participant Config as vercel.json&amp;#x3C;br&gt;(受付係)
    participant Astro as Astro&amp;#x3C;br&gt;(記事データ)

    Note over User, Vercel: 1. 古いURLへのアクセス
    User-&gt;&gt;Vercel: GET https://muaaru.com/?p=914

    activate Vercel
    Vercel-&gt;&gt;Config: 転送設定確認
    Config--&gt;&gt;Vercel: 転送先は&amp;#x3C;br&gt;&quot;https://muaaru.com/blog/2025-08-24-post-914&quot;

    Vercel--&gt;&gt;User: HTTP 308 Permanent Redirect&amp;#x3C;br&gt;(引越しました。新住所へ行って！)
    deactivate Vercel

    Note right of User: ブラウザが自動的に&amp;#x3C;br&gt;新しいURLへ移動

    Note over User, Vercel: 2. 新しいURLで再度アクセス (自動)
    User-&gt;&gt;Vercel: GET https://muaaru.com/blog/2025-08-24-post-914

    activate Vercel
    Vercel-&gt;&gt;Config: 転送設定確認
    Config--&gt;&gt;Vercel: 転送なし&amp;#x3C;br&gt;そのままのアドレスで表示

    Vercel-&gt;&gt;Astro: 記事ファイルを取得
    Astro--&gt;&gt;User: 記事ページを表示 (HTTP 200 OK)
    deactivate Vercel
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;仕組みのポイント：vercel.json&lt;/h3&gt;
&lt;p&gt;この「受付係」の役割を果たしているのが、プロジェクトルートに置いた vercel.json です。
Vercelの has プロパティ（クエリパラメータ判定） を利用して、WordPress特有のURLパラメータ（?p=数字）を、Astroの新しいパスに正確にマッピングしています。&lt;/p&gt;
&lt;p&gt;実際の vercel.json の記述は以下の通りです。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;    {
      &quot;source&quot;: &quot;/&quot;,
      &quot;has&quot;: [
        {
          &quot;type&quot;: &quot;query&quot;,
          &quot;key&quot;: &quot;p&quot;,
          &quot;value&quot;: &quot;914&quot;
        }
      ],
      &quot;destination&quot;: &quot;/blog/2025-08-24-post-914&quot;,
      &quot;permanent&quot;: true
    },
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;正規表現などを使わずに type: &quot;query&quot; でキーと値を明示的に指定することで、誤作動を防ぎながら確実にリダイレクトさせています。これを記事数分だけ自動生成するスクリプトを書いて対応しました。
AIにテストコードを書かせて実行したところ一部記事のリダイレクトが上手く生成できていなかったので、そこだけは手動で修正しました。&lt;/p&gt;
&lt;h2&gt;ハマりポイント：さくらのサーバー側のドメイン設定ミス&lt;/h2&gt;
&lt;p&gt;Vercel用のCNAMEを設定してもなぜか反映されず、さくらのエラーページが表示され続ける現象が発生しました。&lt;/p&gt;
&lt;p&gt;原因はDNSレコードではなく、&lt;strong&gt;「レンタルサーバー・コントロールパネル」側でドメイン設定をしていたこと&lt;/strong&gt;でした。&lt;/p&gt;
&lt;p&gt;ドメインのコントロールパネルからDNS設定（ゾーン編集）を変更しても、サーバーのコントロールパネルにある「ドメイン/SSL設定」に &lt;code&gt;note.muaaru.com&lt;/code&gt; が登録されたままだと、そちらの設定が干渉してしまうようです。&lt;/p&gt;
&lt;p&gt;サーバーコントロールパネルから対象ドメインを削除したところ、しばらくしてVercelへの接続が反映されました。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;普段アプリ開発しかしてないのでWebサイトのDNSやらの設定は詳しくないんですが、AIに聞きながら簡単に移行ができました。
サーバー代がこれで無料になるので少し節約になりました。&lt;/p&gt;</content:encoded><h:img src="/_astro/Gemini_Generated_Image_w53sxlw53sxlw53s.CZqLXoRL.png"/><enclosure url="/_astro/Gemini_Generated_Image_w53sxlw53sxlw53s.CZqLXoRL.png"/></item><item><title>MR-S オイル交換、オイルフィルター交換 250,316km 2025/09/06</title><link>https://note.muaaru.com/blog/2025-09-06-post-925</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-09-06-post-925</guid><description>MR-S オイル交換、オイルフィルター交換 250,316km 2025/09/06</description><pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;オイル交換&lt;/h2&gt;
&lt;p&gt;Castrol(カストロール) エンジンオイル EDGE RS 10W-50 API SN 4L 90430-12028 : トヨタ(90430)オイルパンドレンコックG/K&lt;/p&gt;
&lt;h2&gt;オイルフィルター交換&lt;/h2&gt;
&lt;p&gt;90915-10003 : トヨタ(90915)オイルエレメント&lt;/p&gt;</content:encoded><h:img src="/_astro/PXL_20250906_054422978-scaled-e1757141977647.Jq9x-_hs.jpg"/><enclosure url="/_astro/PXL_20250906_054422978-scaled-e1757141977647.Jq9x-_hs.jpg"/></item><item><title>【デスク整理の救世主】USB切り替え機でゲーム配信環境をスッキリさせよう！</title><link>https://note.muaaru.com/blog/2025-08-24-post-914</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-08-24-post-914</guid><description>【デスク整理の救世主】USB切り替え機でゲーム配信環境をスッキリさせよう！</description><pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;「PS5でキーボード入力したいけど、配信用PCでもコメントを返したい…でも、キーボードを2つも置くスペースがない！」&lt;/p&gt;
&lt;p&gt;そんな悩みを抱えていませんか？ 特にコクピット環境を構築しているとデバイスの置き場所には本当に困ります。&lt;/p&gt;
&lt;p&gt;今回は、そんな悩みをボタン一つで解決してくれる、非常に便利なガジェット「USB切り替え機」を紹介します。&lt;/p&gt;
&lt;h2&gt;PS5と配信PCのキーボードを1つにまとめる&lt;/h2&gt;
&lt;p&gt;今回導入したのは、こちらのUGREEN製のUSB切り替え機です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F717WXHxfgL._AC_SX679_-300x300.C1mIpfFn.jpg&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/dp/B0C8MSP967?th=1&amp;#x26;linkCode=sl1&amp;#x26;tag=grune-22&amp;#x26;linkId=9eb4116d25eab52af96f9df25301e500&amp;#x26;language=ja_JP&amp;#x26;ref_=as_li_ss_tl&quot;&gt;Amazon.co.jp: UGREEN USB3.0 切替器 2PCでUSB-C&amp;#x26;Aデバイス共有 5Gbps高速転送 USB 切り替え プリンタ/マウス/キーボード/ハブなどを切替 リモコン＆切替ボタン 切り替え機 2*USBケーブル&amp;#x26;リモコン付き スカイグレー : パソコン・周辺機器&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使い方は簡単で&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;このデバイスをPS5と配信PCそれぞれにUSBケーブルで接続&lt;/li&gt;
&lt;li&gt;共有したいキーボードを切り替え機に接続&lt;/li&gt;
&lt;li&gt;手元のボタンを押すだけで、使いたい方の機器にキーボードの接続先が切り替え&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;切り替えに若干タイムラグはありますが、物理的にキーボードを1つに集約できるのでデスクやコクピット周りがごちゃつかずにスッキリするのが大きなメリットです。&lt;/p&gt;
&lt;h2&gt;PS5でキャプチャした画像や動画もすぐ配信PCに取り込める&lt;/h2&gt;
&lt;p&gt;この切り替え機の便利な点は、キーボードやマウスだけにとどまりません。USBポートに接続するものであれば、基本的に何でも共有できます。&lt;/p&gt;
&lt;p&gt;例えば、USBメモリを接続してみましょう。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;切り替え機をPS5側に設定し、USBメモリにスクリーンショットやプレイ動画を保存&lt;/li&gt;
&lt;li&gt;ボタンを押して、接続先を配信PCに切り替え&lt;/li&gt;
&lt;li&gt;PCにUSBメモリが認識され、すぐに動画を編集や画像をSNSにアップロード&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これまでPS5からPCへデータを移す際に、わざわざUSBメモリを抜き差ししていた手間がなくなり、作業が非常にスムーズになりました。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;たった一つの小さな機材ですが、その効果は絶大です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;省スペース: デバイスを1つにまとめてコクピット周りがスッキリ&lt;/li&gt;
&lt;li&gt;手間削減: ケーブルの抜き差しや、面倒なデータ移行作業も簡単に&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PS5とPCを併用しているゲーマーや配信者の方にとって、スペースの節約と手間の削減に大きく貢献してくれる。 まさに「縁の下の力持ち」的なデバイスです。 デスク周りの環境をより快適にしたい方は、ぜひ導入を検討してみてはいかがでしょうか。&lt;/p&gt;</content:encoded><h:img src="/_astro/717WXHxfgL._AC_SX679_.DCZeJSDe.jpg"/><enclosure url="/_astro/717WXHxfgL._AC_SX679_.DCZeJSDe.jpg"/></item><item><title>国スポ オフライン大会に参加する人が知っておくべきこと</title><link>https://note.muaaru.com/blog/2025-08-19-post-905</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-08-19-post-905</guid><description>国スポ オフライン大会に参加する人が知っておくべきこと</description><pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;この記事のAI要約&lt;/h2&gt;
&lt;p&gt;[audio mp3=&quot;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/08/ce5c4a0c2e83f8f029969111bb086d3b.mp3&quot;&gt;https://www.muaaru.com/wp-content/uploads/2025/08/ce5c4a0c2e83f8f029969111bb086d3b.mp3&lt;/a&gt;&quot;]&lt;/p&gt;
&lt;h2&gt;国スポ オフライン大会に参加する人が知っておくべきこと&lt;/h2&gt;
&lt;p&gt;何度も参加している人は勝手がわかっているので問題ないですが、 今年は各県オンライン予選突破人数が多いので初めて参加する人も多いかと思います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.groovesync.com/gt2025shiga/&quot;&gt;全国都道府県対抗 eスポーツ選手権 2025 SHIGA グランツーリスモ7スペシャルグランプリ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;個人的に国スポのオフライン大会参加はハンター試験並みに罠が多いと思っているので 初参加の人は自分の実力を大会でできるだけ出せるように事前準備から入念にしておきましょう。&lt;/p&gt;
&lt;p&gt;ということで、自分が過去に参加した経験から色々と紹介しておきます。&lt;/p&gt;
&lt;h2&gt;運営とのコミュニケーション&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;結構 運営がガバいので おかしいな？と思ったら自分から積極的に運営に問い合わせるようにしましょう
&lt;ul&gt;
&lt;li&gt;普通に別人宛の連絡が自分に来たりするレベルでガバいです&lt;/li&gt;
&lt;li&gt;参加登録したはずなのに参加することになっていない事もあります、おかしいな？と思ったら能動的に動かないと大会参加する前に終わります&lt;/li&gt;
&lt;li&gt;Twitterなどで他の参加者に連絡が来ているのに自分には来ていないといったことがないか、常に情報収集に気をつけましょう&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;年に1回あるかないかの大会です。ミスやトラブルはあって当然の姿勢で参加者側で自衛しましょう&lt;/li&gt;
&lt;li&gt;使用する機材やレギュレーション等わからないことは早めに運営に質問しておきましょう&lt;/li&gt;
&lt;li&gt;確認していても当日になって戦略が変わるレベルで全然違うレギュレーションだったこともあります。諦めて頑張りましょう
&lt;ul&gt;
&lt;li&gt;当日朝に会場に行くと運営がテスト走行している可能性が高いです、実際のレギュレーションを早めに知ることができるかもしれません。が、当日なのでどのみち手遅れです&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;大会に行く前の準備&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;普段のゲーム内設定を全てスクリーンショットに撮ってスマホにメモ
&lt;ul&gt;
&lt;li&gt;ボタン設定、アシスト設定、BGM/SE音量設定など　運転に影響する箇所は全てスマホで確認できるようにメモしておきます&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;大会で使用する機材の説明書を探してメモ
&lt;ul&gt;
&lt;li&gt;事前に運営から大会で使用する機材の連絡があるはずです&lt;/li&gt;
&lt;li&gt;モニターのイヤホンジャックの位置、コクピットの調整方法、ハンコンの設定/操作方法、ペダル配置、ボタン配置など&lt;/li&gt;
&lt;li&gt;ペダルはT-GTであれば3ペダルですが、DD proだと2ペダルになると思います。右足だけでアクセルブレーキの人は辛いことになりますが諦めましょう&lt;/li&gt;
&lt;li&gt;RCZ01であればDDProのペダル位置調整用の金具が別売りされています。持参すればペダル位置が調整可能になる場合があります。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ハンコンがオーバーヒートする機種か調べる
&lt;ul&gt;
&lt;li&gt;ハンコンは機種によってはFFBを強くするとオーバーヒートでFFBがなくなったり最悪ハンコンが操作不能でフリーズする場合があります&lt;/li&gt;
&lt;li&gt;熱に弱い機種の場合はFFBを弱くしましょう&lt;/li&gt;
&lt;li&gt;DD ProやT-GTであれば比較的大丈夫な印象ですが、低価格なモデルの場合は要注意です&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ロビーで大会レギュを検索すると参加者が部屋を建てている事があります、知らない人でも突撃して模擬練習しましょう&lt;/li&gt;
&lt;li&gt;自分で大会レギュ部屋をOPENで建てていると参加者が入ってくる事があります、模擬練習しましょう&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;持ち物&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;身分証明書
&lt;ul&gt;
&lt;li&gt;オフライン大会では免許証などで本人確認が行われます忘れると参加できなくなるので絶対に確認しましょう&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;有線接続可能な遮音性の高いヘッドホン
&lt;ul&gt;
&lt;li&gt;大会開催は観客有りの場合が多いです。イオンモールの広場などでは騒音だけでなく見えない多数の電波も飛び交っています。無線は通信が不安定になる場合があるので自分は有線接続をお勧めします&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2m程度の延長オーディオケーブル&lt;/li&gt;
&lt;li&gt;モニターのイヤホンジャックからコクピットまで意外とケーブルの長さが必要になります。念のため持って行ったほうがいいです。&lt;/li&gt;
&lt;li&gt;グローブ、シューズ
&lt;ul&gt;
&lt;li&gt;コクピットが土足禁止の場合があります。靴下や裸足でよければそのままでも大丈夫です&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;すぐ手に取って飲める飲み物
&lt;ul&gt;
&lt;li&gt;レース中に足が攣ったりしないよう小まめに水分補給しましょう。自分はレース中に吊りかけて死にそうになりながら走ってました。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(option) 走行録画用に小型アクションカメラ、スマホ&lt;/li&gt;
&lt;li&gt;(option) プレイ中のモニターが撮影できる高さに伸ばせるカメラ用一脚にスタンドつけるのがコンパクト、もしくはネックマウント&lt;/li&gt;
&lt;li&gt;(option） ハンコン冷却用 モバイルファン&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;大会会場にて&lt;/h2&gt;
&lt;h3&gt;大会受付&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;時間になっても何もアナウンスなしな場合があります&lt;/li&gt;
&lt;li&gt;時間になったらスタッフを捕まえて身分証明書を見せて大会受付を済ませます&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ウォームアップ時間&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ここからすでにレースが始まっていると言っても過言ではないです&lt;/li&gt;
&lt;li&gt;大会中は参加者に公平になるように走行可能な時間が限られます&lt;/li&gt;
&lt;li&gt;大体15~30分程度 機材・ゲーム内セッティング＆ウォームアップ走行の時間があります&lt;/li&gt;
&lt;li&gt;スマホのメモを頼りに素早くゲーム設定、コントローラー設定、FFB強度、ドライビングポジション、ヘッドフォン音量などを素早く調整してウォームアップの時間を稼ぎます&lt;/li&gt;
&lt;li&gt;ゲーム内のオプションからペダル開度、ステアリングセンターを表示してハンコン個体状態を確認
&lt;ul&gt;
&lt;li&gt;ハンコンは個体差があるので設定から必ずアクセル、ブレーキペダルが100%まで踏めるか、0％まで戻るか、ハンドルがセンターからどれくらいズレているかは最低限確認します&lt;/li&gt;
&lt;li&gt;機材はあまり使い込まれない場合ブレーキがめちゃくちゃ硬い場合があります。普段の踏力では足りない可能性があるのでペダルの踏み加減はしっかりウォームアップで体に叩き込みます。人によってはコース上をウォームアップ走行するよりオプション設定のペダル開度の設定画面でどれくらいの力で何％の開度になるかしつこく確認しておくのもいいでしょう&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;　(option) 走行録画カメラの調整&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;レース中&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;機材トラブルが起きた際はすぐに手を挙げるなりして運営にアピールしましょう
&lt;ul&gt;
&lt;li&gt;タイミングによってはすぐレースリスタートなど対応ができます&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;レース中は大会運営による写真撮影などで人影がちらついたり実況の声などがありますが、全集中で走りましょう&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;レース後&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;リザルト画面をスマホで撮影&lt;/li&gt;
&lt;li&gt;録画したプレイ画面などレースを振り返りましょう&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;大会当日は慣れていても緊張します。 スタート直後の１コーナーでさっそくミスって前に追突しそうになって緊急回避してコースアウトすることがあるかもしれません。 ですが諦めず最後まで頑張って走りましょう。 モータースポーツは最後まで何が起こるかわかりませんから。&lt;/p&gt;</content:encoded><h:img src="/_astro/Gemini_Generated_Image_58nx1j58nx1j58nx.CTSfJhH5.png"/><enclosure url="/_astro/Gemini_Generated_Image_58nx1j58nx1j58nx.CTSfJhH5.png"/></item><item><title>習慣を作る技術</title><link>https://note.muaaru.com/blog/2025-07-13-post-892</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-07-13-post-892</guid><description>習慣を作る技術</description><pubDate>Sun, 13 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;この記事のAI要約&lt;/h2&gt;
&lt;p&gt;[audio mp3=&quot;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/07/f6c9cc53a18a60dd136d37af641e881d.mp3&quot;&gt;https://www.muaaru.com/wp-content/uploads/2025/07/f6c9cc53a18a60dd136d37af641e881d.mp3&lt;/a&gt;]&lt;/p&gt;
&lt;h2&gt;もう挫折しない！習慣化の鍵は「0秒スタート」にある&lt;/h2&gt;
&lt;p&gt;「今年こそは毎日筋トレするぞ！」 「ブログを毎日更新して、いつかは収益化を…」 「毎朝30分、英語の勉強をしよう！」&lt;/p&gt;
&lt;p&gt;私たちは誰もが、一度はこのような目標を立てたことがあるのではないでしょうか。しかし、その固い決意もむなしく、三日坊主で終わってしまった経験も、また多くの人が持っているはずです。&lt;/p&gt;
&lt;p&gt;「やっぱり自分は意志が弱いんだ…」と落ち込む必要はありません。実は、習慣化に失敗する原因は、あなたの意志の力不足ではないのです。&lt;/p&gt;
&lt;h3&gt;習慣化は「環境」が9割&lt;/h3&gt;
&lt;p&gt;結論から言いましょう。習慣化を成功させるたった一つの、しかし最も強力なコツは、&lt;strong&gt;「やろう」と思った瞬間に、1秒もかからずに始められる状態をあらかじめ作っておくこと&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;言い換えれば、**「行動開始までの手間（フリクション）を極限までゼロにする」**ということです。私たちは、自分が思っている以上に、ほんの些細な手間にやる気を削がれています。その小さな障壁を取り払うことこそが、習慣化への一番の近道なのです。&lt;/p&gt;
&lt;h3&gt;例えばブログを毎日書く&lt;/h3&gt;
&lt;p&gt;例えば、あなたが「毎日ブログ記事を書く」ことを習慣にしたいとしましょう。多くの人は、以下のような手順を踏んでいるはずです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;椅子に座る&lt;/li&gt;
&lt;li&gt;PCの電源を入れる&lt;/li&gt;
&lt;li&gt;モニターの電源を入れる&lt;/li&gt;
&lt;li&gt;ブラウザを立ち上げる&lt;/li&gt;
&lt;li&gt;ブログの管理画面にアクセスしてログインする&lt;/li&gt;
&lt;li&gt;新規作成画面を開く&lt;/li&gt;
&lt;li&gt;「さて、何を書こうか…」と考える&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この手順を見て、どう感じるでしょうか。「面倒くさい」と思いませんでしたか？特に、仕事で疲れて帰ってきた後などは、「PCを立ち上げるのすら億劫だ…」と感じてしまい、結局「明日でいいか」となってしまうのです。&lt;/p&gt;
&lt;p&gt;そこで、「0秒スタート」の出番です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PCもモニターも、電源を付けっぱなしにしておくのです。そして、ブログの編集画面も開いたままの状態にしておきましょう。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;あなたがやるべきことは、ただ椅子に座ることだけ。目の前には、いつでも書き始められる真っ白な編集画面が広がっています。これなら、「ちょっと5分だけ書いてみるか」という気にもなりやすいはずです。&lt;/p&gt;
&lt;h3&gt;「もったいない」という気持ちこそが最大の敵&lt;/h3&gt;
&lt;p&gt;この話をすると、多くの人がこう言います。 「PCを付けっぱなしなんて、電気代がもったいない！」 「モニターの寿命が縮むんじゃないの？」&lt;/p&gt;
&lt;p&gt;その気持ちは、非常によく分かります。私たちは、節約を美徳として教わってきました。しかし、ここで一度、冷静に天秤にかけてみてほしいのです。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;あなたが失うもの：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;月に数百円程度の電気代&lt;/li&gt;
&lt;li&gt;いつか買い替えるモニターの、ほんのわずかな消耗&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;あなたが手に入れるもの：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブログを毎日更新するという、かけがえのない&lt;strong&gt;習慣&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;文章力の向上、思考の整理といった&lt;strong&gt;スキル&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;継続によって生まれる読者からの&lt;strong&gt;信頼&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;将来的な広告収入やアフィリエイトといった&lt;strong&gt;収益&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;自己肯定感の向上と、人生が好転していく&lt;strong&gt;実感&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;月に数百円のコストを惜しんだがために、これら全ての可能性を失ってしまうとしたら、それこそが**「最大のもったいない」**だとは思いませんか？&lt;/p&gt;
&lt;p&gt;電気代やモニターの消耗は、あなたの人生をより良くするための**「必要経費」であり、「未来への投資」**なのです。習慣化によって得られる絶大なリターンに比べれば、それはあまりにも些細な代償と言えるでしょう。&lt;/p&gt;
&lt;h3&gt;あらゆる習慣に応用できる「0秒スタート」の法則&lt;/h3&gt;
&lt;p&gt;この考え方は、ブログ執筆に限りません。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;筋トレ・運動をしたいなら：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;リビングのど真ん中にヨガマットを敷きっぱなしにしておく。&lt;/li&gt;
&lt;li&gt;トレーニングウェアに着替えてから寝る。起きた瞬間に始められます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;読書をしたいなら：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;本を開き、栞を挟んだ状態で机の上に置いておく。&lt;/li&gt;
&lt;li&gt;電子書籍なら、読みたいページを開いたままスリープさせる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;勉強をしたいなら：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;テキストもノートも、筆記用具も、全て机の上に出しっぱなしにしておく。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ポイントは、&lt;strong&gt;「片付けない」勇気を持つこと&lt;/strong&gt;です。見た目の綺麗さよりも、あなたの未来を変える習慣のほうが、何倍も重要です。&lt;/p&gt;
&lt;h3&gt;まとめ：意志に頼るな、仕組みを作れ&lt;/h3&gt;
&lt;p&gt;習慣化は、根性や意志の力で乗り切るものではありません。それは、&lt;strong&gt;いかに行動のハードルを下げ、楽に始められる「仕組み」や「環境」をデザインするかという技術&lt;/strong&gt;なのです。&lt;/p&gt;
&lt;p&gt;もしあなたが、何かを習慣にしたいのにうまくいかないと悩んでいるのなら、ぜひ一度「0秒スタート」を試してみてください。&lt;/p&gt;
&lt;p&gt;小さなコストを未来への投資と捉え、行動までの障壁を徹底的に取り払う。 その小さな一歩が、あなたの人生を大きく変えるきっかけになるはずです。&lt;/p&gt;</content:encoded><h:img src="/_astro/Gemini_Generated_Image_2w3eto2w3eto2w3e.C1WPP_zd.jpeg"/><enclosure url="/_astro/Gemini_Generated_Image_2w3eto2w3eto2w3e.C1WPP_zd.jpeg"/></item><item><title>4k映像をライブ配信可能で持ち運びもできるコンパクトな高コスパ自作PC</title><link>https://note.muaaru.com/blog/2025-05-30-post-843</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-05-30-post-843</guid><description>4k映像をライブ配信可能で持ち運びもできるコンパクトな高コスパ自作PC</description><pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;この記事のAI要約&lt;/h2&gt;
&lt;p&gt;[audio mp3=&quot;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/0c03d75e8538a595609699b56ad6143b.mp3&quot;&gt;https://www.muaaru.com/wp-content/uploads/2025/05/0c03d75e8538a595609699b56ad6143b.mp3&lt;/a&gt;&quot;]&lt;/p&gt;
&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/2024/08/12/675/&quot; title=&quot;去年メインPCを更新したんですが&quot;&gt;去年メインPCを更新したんですが&lt;/a&gt;、今年は配信・録画につかっているサブPCの更新です。&lt;/p&gt;
&lt;p&gt;サブPCなので今回の自作PCのテーマは &lt;strong&gt;4K映像をライブ配信可能で持ち運びもできるコンパクトな高コスパ自作PC&lt;/strong&gt; です。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/PXL_20250530_125741932-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250530_125741932-300x226.b6-lZUFK.jpg&amp;#x26;w=300&amp;#x26;h=226&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;全体構成&lt;/h2&gt;
&lt;p&gt;だいたいの構成は以下のとおりです。 この構成にElgato Game Capture 4K60 Pro MK.2が追加されたような構成になります。 あと実際はメモリが24Gになってます。&lt;/p&gt;
&lt;p&gt;新たに購入したのは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Core i3-14100 Box&lt;/li&gt;
&lt;li&gt;B760M GAMING PLUS WIFI DDR4&lt;/li&gt;
&lt;li&gt;JONSBO C6 Handle になります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/PXL_20250525_043316286-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250525_043316286-300x226.DuGKhmJQ.jpg&amp;#x26;w=300&amp;#x26;h=226&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/PXL_20250528_035952917-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250528_035952917-300x226.ffbdB72w.jpg&amp;#x26;w=300&amp;#x26;h=226&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;CPUクーラはCPU付属品をそのまま使っています。 最近の付属CPUクーラーは全然静かなので、このCPU程度なら別途購入する必要はないです。 最近はCPUクーラーが付属してないCPUもあるんですがこれには付いてきます。&lt;/p&gt;
&lt;p&gt;もともとサブPCで使っていたパーツがほとんどなのと、マザーボードが安く手に入ったので すべて新品ですが追加でかかったのは&lt;strong&gt;約3.5万程度&lt;/strong&gt;ですみました。&lt;/p&gt;
&lt;p&gt;全部１から揃えると中古品とかも使えば１０万～１５万ぐらいでしょうか&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://2tom.jp/diy/?a=9000&amp;#x26;b=1&amp;#x26;c=2&amp;#x26;d=16&amp;#x26;e=&amp;#x26;f=&amp;#x26;g=1.8&amp;#x26;st.cpu=1&amp;#x26;st.Auto_mode=0&amp;#x26;st.gpu=3&amp;#x26;st.size=1&amp;#x26;st.chipset=0&amp;#x26;st.hashOK=true&amp;#x26;st.color=0&amp;#x26;h=1.510369,2.269709,3.443232,4.442191,6.645324,7.152425,11.584852,12.118174&quot;&gt;https://2tom.jp/diy/?a=9000&amp;#x26;b=1&amp;#x26;c=2&amp;#x26;d=16&amp;#x26;e=&amp;#x26;f=&amp;#x26;g=1.8&amp;#x26;st.cpu=1&amp;#x26;st.Auto_mode=0&amp;#x26;st.gpu=3&amp;#x26;st.size=1&amp;#x26;st.chipset=0&amp;#x26;st.hashOK=true&amp;#x26;st.color=0&amp;#x26;h=1.510369,2.269709,3.443232,4.442191,6.645324,7.152425,11.584852,12.118174&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CPU ： Core i3-14100   12671円
　　　　 [ インテル | 性能(PassMark)：15,039 | 1スレッド性能(PassMark)：3,743 | 4コア Pコア：4+Eコア：0 | 8スレッド | 第14世代 Core プロセッサー | LGA1700 | TDP:60~110 | ﾁｯﾌﾟｾｯﾄ:B660,H670,Z690,Z790,H770,B760 | GPU:Intel UHD Graphics 730 ]

メモリ ： CFD D4U3200CS 16G [DDR4 PC4 25600 16GB]   2922円
　　　　 [ CFD | 16GB | 1枚 | 合計容量：16GB | DIMM DDR4 SDRAM | 3200MHz　 ]

GPU ： SPARKLE SPARKLE Intel Arc A380 ELF SA380E-6G   18200円
　　　　 [ SPARKLE | 性能(PassMark)：6,253 | Arc A380 | メモリ：6.0 GB | 消費電力:75W | 3ポート ]

SSD ： MP33 PRO TM8FPD002T0C101   16878円
　　　　 [ Team | 2TB | 2GB/s | M.2 （Type2280）　 ]

マザーボード ： B760M GAMING PLUS WIFI DDR4   10980円
　　　　 [ MSI | INTEL B760 | LGA1700 | MicroATX | ﾒﾓﾘｽﾛｯﾄ数：4 | DIMM DDR4 | RAID:1個 | VRM数:12+1+1 | M.2:M key：type 2242/2260/2280 |  ]

OS ： Microsoft Windows 11 Pro 日本語版   20884円
　　　　 [ マイクロソフト |  ]

PCケース ： JONSBO C6 Handle [Black]   6631円
　　　　 [ JONSBO | MicroATX ITX | 2.3kg | 内容積：202x295.2x266mm | 水冷： | GPUサイズ:200〜255mm | CPUｸｰﾗｰ高:75mm | 電源規格:ATX | 電源サイズ:185mm ]

電源 ： ION Gold 550W FD-P-IA2G-550 [ブラック]   8800円
　　　　 [ Fractal Design | ATX12V v2.52/EPS12V v2.92 | 550W | 80PLUS認証○　GOLD | 150x150x86mm ]

拡張スロット：　Elgato Game Capture 4K60 Pro MK.2　31,480円
―――――――――――――――――――
合計 : 97966円　+ 31,480円
―――――――――――――――――――
構成概要
Core i3-14100 | メモリ：16GB | GPU:Arc A380 | SSD:2TB | 電源:550W
CPU-GPUバランス：グラボが弱い（0.42）
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;パーツ選定理由&lt;/h2&gt;
&lt;p&gt;パーツ選定のポイントをそれぞれ書くと&lt;/p&gt;
&lt;h3&gt;Core i3-14100 Box&lt;/h3&gt;
&lt;p&gt;今回GPUには珍しいIntel製GPUのArc A380を採用しています。 このGPU性能を活かすためにくわしくは後ほど説明しますが内蔵GPU付きのCPUを選択する必要がありました。 他にはCore i5-12400の中古品などが候補だったんですが、値段がたいして変わらないのでこちらを選択しています。&lt;/p&gt;
&lt;h3&gt;B760M GAMING PLUS WIFI DDR4&lt;/h3&gt;
&lt;p&gt;これはとりあえず一番安くてかつPCIe 4.0 x8とPCIe 4.0 x4があれば何でも良かったです。 GPUとキャプチャーカードの2枚を刺さないといけないので安いH610とかは選択できませんでした。&lt;/p&gt;
&lt;h3&gt;SPARKLE SPARKLE Intel Arc A380 ELF SA380E-6G&lt;/h3&gt;
&lt;p&gt;このGPUはゲーム性能も低くNvidiaのRTXなどと違い相性が激しいじゃじゃ馬GPUなので1万5000円とかで投げ売りされていました。 ただ、このGPUは異様に映像のエンコード処理に強くてAV1のハードウェアエンコーダーを搭載しています。 ハードウェアエンコードなので低スペックのCPUと組み合わせても問題なく配信ができます。 このAV1だとネットワーク帯域が低くても結構きれいに配信ができます。 このエンコード性能だと普通は倍以上値段がするGPUが必要なんですが1.5万です。&lt;/p&gt;
&lt;p&gt;ただ、根本的なGPU性能が低くて4K配信だとちょくちょくフレームドロップがでていました。 そこで、ローエンドの内蔵GPU付きCPUの方でモニターには出力をして、GPUは配信エンコードに専念させます。 これだと安定してフレームドロップもほぼなく4k配信を行うことができました。&lt;/p&gt;
&lt;h3&gt;JONSBO C6 Handle&lt;/h3&gt;
&lt;p&gt;小さいケースは色々とあるんですが、ハンドル付きとなるとなかなかないです。 ネットでさがしてたらちょうどこのケースを見つけました。 似た名前でITX版とか、もうちょっと前面に長くて大きいCPUクーラーやGPUが使えるC6 Maxとかあります。&lt;/p&gt;
&lt;h2&gt;組み立て&lt;/h2&gt;
&lt;p&gt;今回使用したPCケースはかなり小さいケースなので組み立ての難易度は高いです。 結構慣れていたつもりの自分でも間違えて数回全部バラしてやりなおしました。&lt;/p&gt;
&lt;p&gt;あとは予期せず組み立ててる最中にメモリが1枚故障していて原因がわからず1回全バラして全パーツチェックする羽目に。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/PXL_20250525_043934747-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250525_043934747-226x300.BnwEtMfO.jpg&amp;#x26;w=226&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/PXL_20250528_232639338-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250528_232639338-226x300.B-D4fZEK.jpg&amp;#x26;w=226&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/PXL_20250528_232655881-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250528_232655881-226x300.CpYO5pVf.jpg&amp;#x26;w=226&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;けっこうミチミチです。&lt;/p&gt;
&lt;h2&gt;完成&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/PXL_20250530_112449917-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250530_112449917-300x226.dVLMY8Bg.jpg&amp;#x26;w=300&amp;#x26;h=226&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/PXL_20250530_112502521-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250530_112502521-300x226.Cg7uqazL.jpg&amp;#x26;w=300&amp;#x26;h=226&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/05/PXL_20250530_125741932-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250530_125741932-300x226.b6-lZUFK.jpg&amp;#x26;w=300&amp;#x26;h=226&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; 前のPCケースはE-ATXも入る空気清浄機くらいでかいケースだったのでかなりちっさくなりました。 今回のPCケースは小さい上に持ち運びようにハンドルも付いてるので自宅以外にも持ち運んでいきやすくなりました。 OBS使って会社でちょっとリッチな配信環境で勉強会などやってみたかったので今度ためしてみます。 今年の水郷祭はライブ配信でいくか！？&lt;/p&gt;</content:encoded><h:img src="/_astro/PXL_20250530_125741932-scaled.CRvd0XJN.jpg"/><enclosure url="/_astro/PXL_20250530_125741932-scaled.CRvd0XJN.jpg"/></item><item><title>MR-S オイル交換 244,908km 2025/04/27</title><link>https://note.muaaru.com/blog/2025-04-27-post-922</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-04-27-post-922</guid><description>MR-S オイル交換 244,908km 2025/04/27</description><pubDate>Sun, 27 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20250426_225126219-scaled-e1757142679176-300x208.9kZzoniq.jpg&amp;#x26;w=300&amp;#x26;h=208&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;2025/04/27 24,4908km&lt;/p&gt;
&lt;h2&gt;オイル交換&lt;/h2&gt;
&lt;p&gt;Castrol(カストロール) エンジンオイル EDGE RS 10W-50 API SN 4L 90430-12028 : トヨタ(90430)オイルパンドレンコックG/K&lt;/p&gt;</content:encoded><h:img src="/_astro/PXL_20250426_225126219-scaled-e1757142679176.2Ss_hk88.jpg"/><enclosure url="/_astro/PXL_20250426_225126219-scaled-e1757142679176.2Ss_hk88.jpg"/></item><item><title>OBSでGT7のテレメトリーデータをゲーム画面に自然にオーバーレイ表示してみた</title><link>https://note.muaaru.com/blog/2025-02-09-post-814</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-02-09-post-814</guid><description>OBSでGT7のテレメトリーデータをゲーム画面に自然にオーバーレイ表示してみた</description><pubDate>Sun, 09 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;OBSでGT7のテレメトリーデータをゲーム画面にオーバーレイ表示&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/02/1eae94f4b967b057853aad9c6237d916.webp&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F1eae94f4b967b057853aad9c6237d916-300x300.wTGh8RMW.webp&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GT7は、レース中など走行中のテレメトリーデータを裏で吐き出しているようで アプリを使用してテレメトリーデータを可視化することができる&lt;/p&gt;
&lt;p&gt;今回は、このテレメトリーデータをOBSでGT7のゲーム画面にいい感じにオーバーレイしてみよう&lt;/p&gt;
&lt;h2&gt;テレメトリーデータの取得&lt;/h2&gt;
&lt;p&gt;まずはテレメトリーデータの取得を行う準備を行う&lt;/p&gt;
&lt;p&gt;Androidであれば自分は下記のアプリを使用している&lt;/p&gt;
&lt;p&gt;SIM Dashboard &lt;a href=&quot;https://play.google.com/store/apps/details?id=de.stryder_it.simdashboard&amp;#x26;hl=ja&quot;&gt;https://play.google.com/store/apps/details?id=de.stryder_it.simdashboard&amp;#x26;hl=ja&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;iPhoneにも似たようなアプリがあるが、そちらは使ったことがないので自分で探してもらいたい&lt;/p&gt;
&lt;p&gt;画面表示のレイアウトはテンプレートが共有されているので、探して良さそうなのを選べばＯＫ 自分で１からレイアウトを作る必要はない&lt;/p&gt;
&lt;p&gt;実際にアプリを使用すると下記のような画面が取得できる&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/02/Screenshot_20250209-105216-display-20.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FScreenshot_20250209-105216-display-20-300x169.CxlGQ432.png&amp;#x26;w=300&amp;#x26;h=169&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;スマホ画面をキャプチャー&lt;/h2&gt;
&lt;p&gt;AndroidばDP Alt Mode対応の機種(Pixel8Proとか)は、下記のような変換ケーブルで USB -&gt; HDMI に変換できるので&lt;/p&gt;
&lt;p&gt;RS-UCHD4K60-1M &lt;a href=&quot;https://www.ratocsystems.com/products/smartdev/smartcable/uchd4k60m/&quot;&gt;https://www.ratocsystems.com/products/smartdev/smartcable/uchd4k60m/&lt;/a&gt; &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/02/rs_uchd4k60-xm_1_iPhone16-680x680-1.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Frs_uchd4k60-xm_1_iPhone16-680x680-1-300x300.bv2J156A.jpg&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;iOSでも上記のであれば使えると思うが試していないので、自分で探してほしい&lt;/p&gt;
&lt;p&gt;あとは適当なキャプチャー機材で映像をキャプチャーすればOBSに取り込める&lt;/p&gt;
&lt;p&gt;フルHD程度キャプチャーできれば十分なので、自分は数千円くらいのこういう小さいやつでキャプチャーしている&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/02/61ShN8ZjRhL._AC_SL1500_-1.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F61ShN8ZjRhL._AC_SL1500_-1-300x238.JE0muYk_.jpg&amp;#x26;w=300&amp;#x26;h=238&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;必要なテレメトリー表示だけ抜き出すOBS設定方法&lt;/h2&gt;
&lt;p&gt;アプリ画面をそのままでゲーム画面にのせてもいいのだが、 アプリの画面から必要な情報の箇所だけを切り抜いてい配置するとゲーム画面になじんで自然な表示にできる&lt;/p&gt;
&lt;p&gt;そのためには、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;1つの映像ソースをコピーして複数の映像ソースに分割&lt;/li&gt;
&lt;li&gt;コピーした映像ソースそれぞれにクロップ処理を行い必要な個所のみに切り抜く という処理が必要になる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;キャプチャーの仕方によると思うが、 キャプチャーボードであれば普通に1つの画面を複数の映像ソースとして参照できるのだが、 USBカメラなどは同じように設定してもどれか1つにしか映像が表示できなかったり 映像は表示できてもクロップフィルターが共有されてしまい、それぞれで別の箇所を切り抜けなかったりした&lt;/p&gt;
&lt;p&gt;なので、すこし裏技的な設定になるが シーンを使用することでUSBカメラの場合でも、1つの画面を複数の映像ソースとして参照して切り抜くことができた&lt;/p&gt;
&lt;p&gt;やり方は&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;切り抜きたい箇所ごとにシーンを作成&lt;/li&gt;
&lt;li&gt;シーンにアプリ画面の映像ソースを追加&lt;/li&gt;
&lt;li&gt;メインのシーンに先ほど作成したシーンを追加&lt;/li&gt;
&lt;li&gt;追加したシーンにクロップフィルターを適用して切り抜き という設定方法で、1つの画面を複数の映像ソースとして参照して切り抜くことができる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ただし、この設定の仕方によるのかわからないが、複数の映像ソースをクロップしているので、すこしOBSが重くなった気がする&lt;/p&gt;
&lt;p&gt;ぎりぎりのPCスペックだと、このような表示はキツイかもしれない&lt;/p&gt;
&lt;p&gt;実際に切り抜いてテレメトリー表示だけ配置してみるとこんな感じになる &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/02/e325eff6e4fcae89d474f0114423dc83.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Fe325eff6e4fcae89d474f0114423dc83-300x252.NFFSHmVv.png&amp;#x26;w=300&amp;#x26;h=252&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;OBSでテレメトリーデータをいい感じにオーバーレイする&lt;/h2&gt;
&lt;p&gt;最終的にはこのようにゲーム画面上に配置してみた&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/02/90ef4476d8bf807400fbb7bba32674ad.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F90ef4476d8bf807400fbb7bba32674ad-300x244.Disq6lhP.png&amp;#x26;w=300&amp;#x26;h=244&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;アプリ画面そのまま表示するより自然に見えるようになった&lt;/p&gt;</content:encoded><h:img src="/_astro/1eae94f4b967b057853aad9c6237d916.DcxkIdZj.webp"/><enclosure url="/_astro/1eae94f4b967b057853aad9c6237d916.DcxkIdZj.webp"/></item><item><title>Windows11で普段使うアプリのインストールを爆速で行う方法</title><link>https://note.muaaru.com/blog/2025-01-13-post-802</link><guid isPermaLink="true">https://note.muaaru.com/blog/2025-01-13-post-802</guid><description>Windows11で普段使うアプリのインストールを爆速で行う方法</description><pubDate>Mon, 13 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2025/01/106545a46973a59894fec4d7e249fb0c.webp&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F106545a46973a59894fec4d7e249fb0c-300x300.-PZUDUqJ.webp&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下記のバッチファイルを作成してダブルクリックで終了 環境セットアップ後は一度Windowsを再起動&lt;/p&gt;
&lt;p&gt;wingetは昔はインストールしてたが今はデフォルトで入ってるのか？ なければ、そこだけ手動インストール&lt;/p&gt;
&lt;p&gt;windows11setup.bat&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;@echo off

echo Installing Google Chrome using winget...
winget install -e --id Google.Chrome

echo Installing Google Japanese Input using winget...
winget install -e --id Google.JapaneseIME

@REM For Windows Useful Tools
echo Installing Microsoft PowerToys using winget...
winget install -e --id Microsoft.PowerToys

echo Installing Windows Terminal using winget...
winget install -e --id Microsoft.WindowsTerminal

@REM For Communication
echo Installing Discord using winget...
winget install -e --id Discord.Discord

echo Installing Slack using winget...
winget install -e --id SlackTechnologies.Slack

@REM For Develop
echo Installing Docker Desktop using winget...
winget install -e --id Docker.DockerDesktop

echo Installing Visual Studio Code using winget...
winget install -e --id Microsoft.VisualStudioCode

@REM For OBS StudioFor OBS Studio
echo Installing iTunes using winget...
winget install -e --id Apple.iTunes

echo Installing OBS Studio using winget...
winget install -e --id OBSProject.OBSStudio

@REM For Photo
@REM echo Installing Amazon Photos using winget...
@REM winget install -e --id Amazon.Photos
@REM Not Found

@REM For Online Storage
echo Installing Google Drive using winget...
winget install -e --id Google.GoogleDrive

echo Installing Dropbox using winget...
winget install -e --id Dropbox.Dropbox

@REM echo Installing Resilio Sync using winget...
@REM winget install -e --id Resilio.Sync
@REM Not Found

@REM For Game
echo Installing Steam using winget...
winget install -e --id Valve.Steam

echo Installing Epic Games Launcher using winget...
winget install -e --id EpicGames.EpicGamesLauncher

echo Installing DMM Game Player using winget...
winget install -e --id DMM.com.GamePlayer

echo Installation completed.
pause
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="/_astro/106545a46973a59894fec4d7e249fb0c.CPfhlVa5.webp"/><enclosure url="/_astro/106545a46973a59894fec4d7e249fb0c.CPfhlVa5.webp"/></item><item><title>MR-S オイル交換,オイルフィルター交換 239,026km 2024/11/30</title><link>https://note.muaaru.com/blog/2024-12-01-post-790</link><guid isPermaLink="true">https://note.muaaru.com/blog/2024-12-01-post-790</guid><description>MR-S オイル交換,オイルフィルター交換 239,026km 2024/11/30</description><pubDate>Sun, 01 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;23万9026km　3.25L オイルフィルター交換あり &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/12/fe5dceb1490ddd2fb47c87479feab1a1.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Ffe5dceb1490ddd2fb47c87479feab1a1-300x127.DhpJ5oQw.png&amp;#x26;w=300&amp;#x26;h=127&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/12/7799f13e399c83f6358a72ac3a43c8fd.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F7799f13e399c83f6358a72ac3a43c8fd-300x183.C2xnHYgW.png&amp;#x26;w=300&amp;#x26;h=183&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/12/PXL_20241130_031407146.PORTRAIT.ORIGINAL-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20241130_031407146.PORTRAIT.ORIGINAL-300x226.UI5ub1mF.jpg&amp;#x26;w=300&amp;#x26;h=226&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/858a3fc1eef36e8be86e13f53f175cda.CyprrKjJ.png"/><enclosure url="/_astro/858a3fc1eef36e8be86e13f53f175cda.CyprrKjJ.png"/></item><item><title>2024年メインPC構築メモ</title><link>https://note.muaaru.com/blog/2024-08-11-post-675</link><guid isPermaLink="true">https://note.muaaru.com/blog/2024-08-11-post-675</guid><description>2024年メインPC構築メモ</description><pubDate>Sun, 11 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Fuuqiqq-725x725.xyV2KH5t.jpg&amp;#x26;w=725&amp;#x26;h=725&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h1&gt;全体構成&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://2tom.jp/diy/?a=9000&amp;#x26;b=1&amp;#x26;c=2&amp;#x26;d=16&amp;#x26;e=&amp;#x26;f=&amp;#x26;g=1.8&amp;#x26;st.cpu=0&amp;#x26;st.Auto_mode=0&amp;#x26;st.gpu=0&amp;#x26;st.size=1&amp;#x26;st.chipset=0&amp;#x26;st.hashOK=true&amp;#x26;st.color=0&amp;#x26;h=1.272260,13.461116,2.233560,3.103416,4.134752,6.537337,7.152425,11.520841,12.346510,14.78858&quot;&gt;https://2tom.jp/diy/?a=9000&amp;#x26;b=1&amp;#x26;c=2&amp;#x26;d=16&amp;#x26;e=&amp;#x26;f=&amp;#x26;g=1.8&amp;#x26;st.cpu=0&amp;#x26;st.Auto_mode=0&amp;#x26;st.gpu=0&amp;#x26;st.size=1&amp;#x26;st.chipset=0&amp;#x26;st.hashOK=true&amp;#x26;st.color=0&amp;#x26;h=1.272260,13.461116,2.233560,3.103416,4.134752,6.537337,7.152425,11.520841,12.346510,14.78858&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CPU ： Ryzen 9 7950X   77456円
　　　　 [ AMD | 性能(PassMark)：62,775 | 1スレッド性能(PassMark)：4,279 | 16コア | 32スレッド | Ryzen 7000シリーズ | Socket AM5 | TDP:170W | ﾁｯﾌﾟｾｯﾄ:A620,B650,B650E,X670,X670E | GPU:Radeon Graphics ]

CPUクーラー ： AN600 R-AN600-BKNNMN-G   6596円
　　　　 [ DEEPCOOL | トップフロー型 | ノイズレベル:24.4dB（A） with LSP：20dB（A） | 120x120x15mm | TDP:180 | 幅x高さx奥行:122x67x120mm | 対応ｿｹｯﾄ:LGA 1700/1200/1151/1150/1155AM5/AM4 ]

メモリ ： Corsair CMK32GX5M2B5200C40W [DDR5 PC5 41600 16GB ] 2枚   15464円
　　　　 [ Corsair | 16GB | 2枚 | 合計容量：32GB | DIMM DDR5 SDRAM | 5200MHz　 ]

GPU ： ASUS TUF-RTX3090-O24G-GAMING   中古 111,800円
　　　　 [ ASUS | 性能(PassMark)：26,764 | NVIDIA GeForce RTX 3090 | メモリ：24.0 GB | 消費電力:420W | 299.9x126.9x51.7mm ]

SSD ： WD Blue SN570 NVMe WDS100T3B0C   9500円
　　　　 [ WESTERN DIGITAL | 1TB | 3GB/s | M.2 （Type2280）　 ]

マザーボード ： B650 Steel Legend WiFi   27521円
　　　　 [ ASRock | AMD B650 | ATX | ﾒﾓﾘｽﾛｯﾄ数：4 | DIMM DDR5 | RAID:1個 | VRM数:○ | M.2:M key：type 2230/2260/2280 | PCIe4.0対応なので、PCIe5.0のグラボは性能が出ない可能性があります。 ]

OS ： Microsoft Windows 11 Pro 日本語版   9196円
　　　　 [ マイクロソフト |  ]

PCケース ： COOLER MASTER QUBE 500 Flatpack White Q500-WGNN-PSE [ホワイト]   14376円
　　　　 [ COOLER MASTER | ATX MicroATX Extended ATX（最大幅：SFX電源使用時296mm/ATX電源使用時273mm） Mini-ITX | 7.8kg | 内容積：231x415x406mm | 水冷：○ | GPUサイズ:365mm | CPUｸｰﾗｰ高:164mm/172mm （水冷ブラケット不使用） | 電源規格:SFX、SFX-L、ATX | 電源サイズ:173mm（GPUスロット1の高さまで）/216mm/332mm ]

電源 ： TUF-GAMING-850G   19096円
　　　　 [ ASUS | フォームファクタ：ATX12V 規格：ATX 3.0 | 850W | 80PLUS認証○　GOLD | 150x150x86mm ]

ケースファン ： Sirius Loop ASL120 ASL120FAN-3PK   3022円
　　　　 [ IN WIN | 最大風量50CFM | ﾌｧﾝｻｲｽﾞ120mm角 | 厚さ25mm | 最大ﾉｲｽﾞﾚﾍﾞﾙ27dB | 最大回転数1800rpm | PWM：○ | 発光：○ | 　 ]

―――――――――――――――――――
合計 : 310475円
―――――――――――――――――――
構成概要
Ryzen 9 7950X | メモリ：16GB×2枚 合計32GB | GPU:NVIDIA GeForce RTX 3090 | SSD:1TB | 電源:850W
CPU-GPUバランス：グラボが弱め（0.43）
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;組み立て&lt;/h1&gt;
&lt;h2&gt;開封していく&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_025826586-530x399.Bl_hWWX4.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;マザーボード関係を組み立てる&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_030436433-530x399.Dvwy8Ofc.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_031103981-530x399.B7R73HKp.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_031115127-530x399.CamGAZnU.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_031420016-399x530.C1zHMzr2.jpg&amp;#x26;w=399&amp;#x26;h=530&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_031451790-530x399.BJ_x1Wvn.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_030628371-530x399.Dj16HFIi.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_030902612-530x399.NAr77O_V.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_032219066-530x399.mUENLdL-.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_033228933-530x399.DXJnFbeM.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_033223447-530x399.CZaGcYfX.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_032614320-530x399.I9V7T2zs.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_031820477-530x399.D4P6HXBy.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_033859270-530x399.B7HIW29J.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_035359427-399x530.-jwjXCJ3.jpg&amp;#x26;w=399&amp;#x26;h=530&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; 完璧なクリアランス &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_034304329-399x530.DkydUJYC.jpg&amp;#x26;w=399&amp;#x26;h=530&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h1&gt;背面＆前面を組み立てる&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_041704646-530x399.Bd13ZK3-.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_052009588-530x399.VaZEB58M.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_040246560-399x530.Dli8NX-v.jpg&amp;#x26;w=399&amp;#x26;h=530&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_040703283-530x399.7IznFFV9.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; いったん動作チェック &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_044432122-530x399.DLbPXFjP.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_050032772-530x399.CApcgVdt.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_051909275-530x399.CUUsOlmu.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_041633306-530x399.D4sXz_8_.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h1&gt;上面&amp;#x26;底面を組み立てる&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_052202894-399x530.DKfxADCK.jpg&amp;#x26;w=399&amp;#x26;h=530&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_052159006-530x399.DRTBZRfD.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_052232766-530x399.Kq73iwc0.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h1&gt;側面を組み立てる&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_052323174-530x399.C5-WIHX1.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_052549589-530x399.C8NBuoWK.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_052340381-530x399.BUSfRkzF.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt; &lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_052927727-530x399.B1dxMK_g.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h1&gt;完成&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20240727_053221206-530x399.IJCMWtTI.jpg&amp;#x26;w=530&amp;#x26;h=399&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/uuqiqq.Cnpc8LEu.jpg"/><enclosure url="/_astro/uuqiqq.Cnpc8LEu.jpg"/></item><item><title>PRレビューの品質と速度の改善をAIでなんとかしてみる</title><link>https://note.muaaru.com/blog/2024-02-25-post-656</link><guid isPermaLink="true">https://note.muaaru.com/blog/2024-02-25-post-656</guid><description>PRレビューの品質と速度の改善をAIでなんとかしてみる</description><pubDate>Sun, 25 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/02/2bebd617314f7ef41a62fd1c39e40bbd.webp&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F2bebd617314f7ef41a62fd1c39e40bbd-300x300.3bfmB5Ki.webp&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;PRレビューの品質と速度の改善&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;開発時にPRを作成して複数人でレビューしてマージするというのが一般的な開発の進め方になっています。&lt;/li&gt;
&lt;li&gt;ただ、PRレビューには時間も手間もかかるためPRを作成してもなかなかレビューが終わらなかったり、レビューする人によって指摘の品質がまちまちだったりします。&lt;/li&gt;
&lt;li&gt;そこでAIにPRレビューをさせることで、自動でPRレビューをさせてPRレビューの品質と速度の改善を行います。&lt;/li&gt;
&lt;li&gt;AIがレビューすることによりLintチェックやフォーマッターのように人間がレビューする時点のコード品質を一定以上になるようにして人間のレビュアーの負担を軽減しつつ品質の均一化も狙っています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;GitHub Actions&lt;/h1&gt;
&lt;p&gt;GitHub ActionsとしてAIレビューのワークフローを組んで実装してみました。 また、今回はAIレビューだけでなくPRの修正量をチェックするワークフローを追加しています。 これはAIで入力できるデータ量には制限があるのと、要約などを行うのに量が多すぎるとレビューの精度が下がるためです。 人間がレビューする時にも大量の修正を含むPRレビューの効果は低いと言われているため、PRサイズの制限も導入しています。(&lt;a href=&quot;https://zenn.dev/isana/articles/ideal-size-of-pull-request-and-why&quot;&gt;Pull requestの理想的なサイズとその理由&lt;/a&gt;) このワークフローを使用する際には、OpenAI APIのAPIKeyを取得してGithubのSecretsにOPENAI_API_KEYの変数として設定してください。&lt;/p&gt;
&lt;h2&gt;今回作成したGithubActionsのコードが下記です。&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;.github/workflows/main.yml&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;name: On pull request

on:
  pull_request:
    types: [opened]
  pull_request_review_comment:
    types: [created]
  issue_comment:
    types: [created]

jobs:
  limit-changes:
    if: ${{ github.event_name == &apos;pull_request&apos; }}
    uses: ./.github/workflows/check-pr-changes-limit.yml
    with:
      limit: 400
      extension: kt|java
  code-review:
    if: ${{ github.event_name == &apos;pull_request&apos; || github.event_name == &apos;pull_request_review_comment&apos; || github.event_name == &apos;issue_comment&apos; }}
    uses: ./.github/workflows/check-pr-ai-reviewer.yml
    with:
      openai_light_model: &apos;gpt-4&apos;
      openai_heavy_model: &apos;gpt-4&apos;
      language: &apos;ja-JP&apos;
    secrets:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;github/workflows/check-pr-ai-reviewer.yml&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;name: Code Review

permissions:
  contents: read
  pull-requests: write

on:
  workflow_call:
    inputs:
      debug:
        description: Debug mode
        required: false
        type: boolean
        default: false
      review_simple_changes:
        description: Review simple changes
        required: false
        type: boolean
        default: false
      review_comment_lgtm:
        description: Review comment LGTM
        required: false
        type: boolean
        default: false
      openai_light_model:
        description: OpenAI light model to use
        required: true
        type: string
        default: &apos;gpt-4&apos;
      openai_heavy_model:
        description: OpenAI heavy model to use
        required: true
        type: string
        default: &apos;gpt-4&apos;
      openai_timeout_ms:
        description: OpenAI timeout in milliseconds
        required: false
        type: number
        default: 900000
      language:
        description: Language of the review
        required: true
        type: string
        default: &apos;ja-JP&apos;
    secrets:
      GITHUB_TOKEN:
        required: true
      OPENAI_API_KEY:
        required: true

concurrency:
  group: ${{ github.repository }}-${{ github.event.number || github.head_ref ||
    github.sha }}-${{ github.workflow }}-${{ github.event_name ==
    &apos;pull_request_review_comment&apos; &amp;#x26;&amp;#x26; &apos;pr_comment&apos; || &apos;pr&apos; }}
  cancel-in-progress: ${{ github.event_name != &apos;pull_request_review_comment&apos; }}

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: coderabbitai/ai-pr-reviewer@latest
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        with:
          debug: ${{ inputs.debug }}
          review_simple_changes: ${{ inputs.review_simple_changes }}
          review_comment_lgtm: ${{ inputs.review_comment_lgtm }}
          openai_light_model: ${{ inputs.openai_light_model }}
          openai_heavy_model: ${{ inputs.openai_heavy_model }}
          openai_timeout_ms: ${{ inputs.openai_timeout_ms }}
          language: ${{ inputs.language }}
          system_message: |
            あなたは @coderabbitai（別名 github-actions[bot]）で、OpenAIによって訓練された言語モデルです。
            些細なコードスタイルの問題や、コメント・ドキュメントの欠落についてはコメントしないでください。
          summarize: |
            次の内容でmarkdownフォーマットを使用して、最終的な回答を提供してください。

              ### 概要: 特定のファイルではなく、全体の変更に関する高レベルの要約を80語以内で。
              ### 詳細: ファイルとその要約のテーブル。スペースを節約するために、同様の変更を持つファイルを1行にまとめることが可能
          summarize_release_notes: |
            このプルリクエストのために、markdownフォーマットで簡潔なリリースノートを作成してください。
            変更は以下のような分類で箇条書きにすること:
              &quot;New Feature&quot;, &quot;Bug fix&quot;, &quot;Documentation&quot;, &quot;Refactor&quot;, &quot;Style&quot;,
              &quot;Test&quot;, &quot;Chore&quot;, &quot;Revert&quot;

            例えば:
            ```
            - New Feature: モーダルコンポーネントを追加
            ```
            回答は50-100語以内にしてください。
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;github/workflows/check-pr-changes-limit.yml
&lt;pre&gt;&lt;code class=&quot;language-yml&quot;&gt;name: Limit number of changed lines
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;on: workflow_call: inputs: limit: description: Limit of changes required: true type: number extension: description: &gt; File extensions that you want to count changes. Do not include &quot;.&quot; before extensions. Use regular expressions if you want to specify multiple extensions. (example) kt|yml|gradle required: true type: string exclude_dir: description: &gt; Directories where you don&apos;t want to count changes. Do not add &quot;/&quot; at the end of directory name. type: string required: false&lt;/p&gt;
&lt;p&gt;env: LIMIT: ${{ inputs.limit }} EXT: ${{ inputs.extension }} EXCLUDE: ${{ inputs.exclude_dir }}&lt;/p&gt;
&lt;p&gt;jobs: limit-changed-lines: name: Limit changed lines in the pull request runs-on: ubuntu-latest steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;name: Checkout base branch uses: actions/checkout@v3 with: ref: ${{ github.base_ref }}&lt;/li&gt;
&lt;li&gt;name: Setup base commit ID run: echo &quot;BASE=$(git rev-parse HEAD)&quot; &gt;&gt; $GITHUB_ENV&lt;/li&gt;
&lt;li&gt;name: Checkout PR branch uses: actions/checkout@v3&lt;/li&gt;
&lt;li&gt;name: Count number of changed lines and prepare comment id: count_changes run: | changed=$(git diff $BASE --numstat \ | if [ -n &quot;$EXCLUDE&quot; ]; then grep -vE &quot;^(\d+\s+)+\/?($EXCLUDE)\/&quot;; else cat; fi \ | grep -E &quot;.*.($EXT)$&quot; \ | awk &apos;{ additions+=$1; deletions+=$2 } END { print additions+deletions }&apos;) echo &quot;CHANGED=$changed&quot; &gt;&gt; $GITHUB_ENV
&lt;pre&gt;&lt;code&gt;  if [ $changed -gt $LIMIT ]; then
    message=&quot;**The number of changed lines exceeds the limit.**\n:hammer_and_wrench: LIMIT: $LIMIT, :fire: CHANGED: $changed&quot;
    echo &quot;MESSAGE=$message&quot; &gt;&gt; $GITHUB_ENV
    echo &quot;::error::Exceeds limit. (Limit: $LIMIT, Changed: $changed)&quot;
  else
    message=&quot;:sparkles: Changes are within the limit :sparkles:&quot;
    echo &quot;MESSAGE=$message&quot; &gt;&gt; $GITHUB_ENV
  fi
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;name: Post comment uses: actions/github-script@v6 with: script: | const message = process.env.MESSAGE; github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: message });&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Code Review Workflowの解説&lt;/h2&gt;
&lt;p&gt;このWorkflowは、プルリクエストの開始、プルリクエストレビューコメントの作成、およびイシューコメントの作成に反応します。 特に、GitHubのイベントに基づいて動作し、コードレビューのプロセスを自動化するために設計されています。&lt;/p&gt;
&lt;h3&gt;Githubの権限権限&lt;/h3&gt;
&lt;p&gt;このWorkflowには、コンテンツの読み取りとプルリクエストの書き込み権限が必要です。&lt;/p&gt;
&lt;h3&gt;トリガー&lt;/h3&gt;
&lt;p&gt;下記のイベントに反応して自動レビューが起動されます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pull_request&lt;/code&gt;: プルリクエストが開かれたとき&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pull_request_review_comment&lt;/code&gt;: プルリクエストのレビューコメントが作成されたとき&lt;/li&gt;
&lt;li&gt;&lt;code&gt;issue_comment&lt;/code&gt;: イシューにコメントが作成されたとき&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;並行性&lt;/h3&gt;
&lt;p&gt;このWorkflowでは、&lt;code&gt;concurrency&lt;/code&gt;を設定しています。 これは、特定のグループ内で複数のジョブが同時に実行されるのを防ぎ、重複や競合を避けるためです。 また、プルリクエストレビューコメントイベントが発生した場合にのみ、進行中のジョブのキャンセルを避ける設定が施されています。&lt;/p&gt;
&lt;h3&gt;レビュー&lt;/h3&gt;
&lt;p&gt;このアクションは、AIによるコードレビューを提供し、以下の環境変数を使用します：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GITHUB_TOKEN&lt;/code&gt;: GitHubから提供されるトークンを設定します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OPENAI_API_KEY&lt;/code&gt;: OpenAIのAPIキーを設定します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;また、以下のオプションを設定しています：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;`debug: false`&lt;/code&gt; : デバッグモードの無効化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;`review_simple_changes: false`&lt;/code&gt; : 単純な変更に対するレビューの無効化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;`review_comment_lgtm: false`&lt;/code&gt; : LGTMのレビューコメントを無効化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;`openai_light_model: gpt-4`&lt;/code&gt; : 要約などに使用するOpenAIモデルの選択しています、コスト削減でgpt-3.5-turboを指定するのもあり&lt;/li&gt;
&lt;li&gt;&lt;code&gt;`openai_heavy_model: gpt-4`&lt;/code&gt; ; コードレビューに使用するOpenAIモデルの選択しています&lt;/li&gt;
&lt;li&gt;&lt;code&gt;`openai_timeout_ms: 900000`&lt;/code&gt;:処理のタイムアウト時間&lt;/li&gt;
&lt;li&gt;&lt;code&gt;`language: ja-JP`&lt;/code&gt; : 生成する言語を設定しています&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;レビューの概要と詳細&lt;/h3&gt;
&lt;p&gt;AIは、レビューの概要と詳細なフィードバックを提供します。 これには、変更の高レベルの要約、ファイルごとの変更点の詳細、リリースノートの作成が含まれます。&lt;/p&gt;
&lt;p&gt;このWorkflowは、開発プロセスを効率化し、より迅速かつ正確なフィードバックを提供することを目的としています。&lt;/p&gt;
&lt;h1&gt;実行結果&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;ワークフローをリポジトリに反映して、実際にPRを作成してAIコードレビューを試してみます。&lt;/li&gt;
&lt;li&gt;PRが作成されるとAIレビューが開始され下記のような処理中コメントが追加されます。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/02/review_proc.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Freview_proc-300x187.DhflwW73.png&amp;#x26;w=300&amp;#x26;h=187&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;そのまま数分待つと下記のようにPRのサマリが自動で更新されます。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/02/review_PR_summary.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Freview_PR_summary-300x103.BytqmNGh.png&amp;#x26;w=300&amp;#x26;h=103&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/02/review_PR_summary_2.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Freview_PR_summary_2-300x159.BCt_PvnY.png&amp;#x26;w=300&amp;#x26;h=159&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;またコメントでもPRの詳細な要約が生成されます。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/02/review_PR_comment.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Freview_PR_comment-300x187.D0NjdShG.png&amp;#x26;w=300&amp;#x26;h=187&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;さらにケアレスミスや改善案のコメントも追加されています。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/02/review_PR_comment_2.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Freview_PR_comment_2-300x187.BgG34vDW.png&amp;#x26;w=300&amp;#x26;h=187&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/02/review_PR_comment_3.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Freview_PR_comment_3-300x162.BYXM9ivo.png&amp;#x26;w=300&amp;#x26;h=162&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AIレビューの設定で日本語指定していたのでレビューもしっかり日本語で生成されています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;コスト面&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;コスト麺はだいたい１回レビューするのに100円程度かかりました。&lt;/li&gt;
&lt;li&gt;すべてをGPT4で処理するようにしているのと日本語で回答するようにしているので高めになっていると思います。&lt;/li&gt;
&lt;li&gt;この辺はチューニングの余地アリで、
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;`openai_light_model: &apos;gpt-4&apos;`&lt;/code&gt;としていたところをgpt-3-turboにする&lt;/li&gt;
&lt;li&gt;レビューを英語で生成する&lt;/li&gt;
&lt;li&gt;レビュー生成用のプロンプトを工夫してトークン数が減るようにする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;上記の対応をすることでもう少しコスト削減はできると思います。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/02/cost.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Fcost-300x232.ChGVu823.png&amp;#x26;w=300&amp;#x26;h=232&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2024/02/cost2.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Fcost2-300x162.CZa_DAAv.png&amp;#x26;w=300&amp;#x26;h=162&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;まとめ&lt;/h1&gt;
&lt;p&gt;AIによるコードレビューを導入して試してみました。 思ったより使えるなという印象で、フォーマッターやLintチェックではレビューし辛い内容のレビューが生成できていたかと思います。 GPT４を使用するので1回のレビューでもそれなりのコストがかかりますが、人間がレビューするよりは低いコストでレビューが行えました。 また、人間によるレビューではレビュアーによってレビューの品質はまちまちになりがちですが、フォーマッターやLintチェックのようにAIレビューであれば一定以上の品質を担保しやすくなります。 AIレビュー用にPRサイズ制限もしているので最終的に人間がレビューする際も見やすいサイズのPRになります。 gpt-4のコストがさらに安くなればもっと気軽にバンバン使いたいとこです。&lt;/p&gt;
&lt;h1&gt;参考&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://zenn.dev/eno49/articles/3a635b91c85cb0&quot;&gt;githubのPR行数制限フローを作ってみた&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zenn.dev/isana/articles/ideal-size-of-pull-request-and-why&quot;&gt;Pull requestの理想的なサイズとその理由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://qiita.com/crakaC/items/f80c89154f5c687b56e5&quot;&gt;GitHub Actionsでプルリクエストの変更行数を制限する #GitHubActions - Qiita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zenn.dev/eno49/articles/3a635b91c85cb0&quot;&gt;githubのPR行数制限フローを作ってみた&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eno-conan/check-PR-update-rows/blob/main/.github/workflows/check_update_rows.yml&quot;&gt;check-PR-update-rows/.github/workflows/check_update_rows.yml at main · eno-conan/check-PR-update-rows · GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tech.layerx.co.jp/entry/2023/09/01/102612&quot;&gt;PR-Agent を使って Pull Request をAIレビューしてみた。（日本語対応もしてみた） - LayerX エンジニアブログ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://note.com/llm_labo/n/na628310b50e2&quot;&gt;ChatGPT CodeReviewでコードレビューを自動化してみた｜LLMラボ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zenn.dev/2bo/articles/chatgpt-codereview-github-actions&quot;&gt;ChatGPT APIとGitHub ActionsでPull RequestのAI Code Reviewをつくってみた&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tech.tential.jp/entry/2023/04/12/110122&quot;&gt;ChatGPT にプルリクエストのタイトルをレビューしてもらう - TENTIALのテックブログ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maasaablog.com/blog/itpmmty931kd/&quot;&gt;【ChatGpt】CodeRabbitとGithubActionsを連携してプルリクエストのレビューと要約を自動生成する&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://coderabbit.ai/&quot;&gt;CodeRabbit: AI-powered Code Reviews&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zenn.dev/minedia/articles/7928ef7545b393&quot;&gt;もう初回コードレビューはAIに任せる時代になった - CodeRabbit -&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><h:img src="/_astro/2bebd617314f7ef41a62fd1c39e40bbd.BxVzS5l0.webp"/><enclosure url="/_astro/2bebd617314f7ef41a62fd1c39e40bbd.BxVzS5l0.webp"/></item><item><title>バッテリー上がりは突然に</title><link>https://note.muaaru.com/blog/2023-08-12-post-645</link><guid isPermaLink="true">https://note.muaaru.com/blog/2023-08-12-post-645</guid><description>バッテリー上がりは突然に</description><pubDate>Sat, 12 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;セルモータが回らない&lt;/h1&gt;
&lt;p&gt;駐車場にしばらく止めていたらセルモータが回らなくなっていた。 メータやらに電気は来ているようだったので、最初はこの夏の暑さでセルモーターがとうとうオシャカになったかと思った。 とりあえず、バッテリーを疑いモバイルジャンプスターターを持っていたのでそれで始動を試みてみた。&lt;/p&gt;
&lt;h1&gt;ジャンプスターターも効かない&lt;/h1&gt;
&lt;p&gt;ジャンプスターターを充電して戻って来るとキーレスエントリーまで反応しなくなっていた。 短時間でバッテリーが完全にあがってしまっていた。 ただのバッテリー上がりではない嫌な予感がしつつも、エンジンルームを開けてバッテリーにジャンプスターターを繋げてエンジンをかけてみる。 が、セルがちょっと動くだけでエンジンはかからない。 何度かやってジャンプスターターのバッテリーが切れてしまった。&lt;/p&gt;
&lt;h1&gt;何かがおかしい&lt;/h1&gt;
&lt;p&gt;この時点でセルモーターが怪しい気もするが何かがおかしい。 しかし、この日は電気系を調べるテスターを持っていなかったので、いったん作業を中断してそのままにして帰宅。会社の駐車場でよかった。&lt;/p&gt;
&lt;h1&gt;暗電流を測ってみる&lt;/h1&gt;
&lt;p&gt;前日になにかがおかしいと思っていたのでとりあえず暗電流を測ってみることに。 すると何も動いていないのになんと6A近くも暗電流が流れていた。 これではバッテリーがすぐに空になるのも当然でジャンプスターターも効かないわけである。&lt;/p&gt;
&lt;h1&gt;暗電流の原因は？&lt;/h1&gt;
&lt;p&gt;だんだん原因に近づいてきた。 ヒューズボックスを開けてヒューズを抜いていきながら暗電流を測定して原因を探っていくことにする。 すると、STOPのヒューズを抜いたときに暗電流が大きく下がった。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2023/08/PXL_20230801_054755666-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20230801_054755666-226x300.Rer3g7zp.jpg&amp;#x26;w=226&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;STOPのヒューズはリアのテールランプのヒューズなので、ヒューズを戻してテールランプのカプラーを外すと同じように暗電流が大きく下がった。 原因はテールランプだった。 テールランプのどこかがショートしているのかと思ったが、配線や電球が切れている様子はない。 原因がわからずディーラに持っていくしかないかと思ったが、いったん保留で作業を中断してまた帰った。&lt;/p&gt;
&lt;h1&gt;新犯人はお前か！&lt;/h1&gt;
&lt;p&gt;いろいろとネットなどで調べ直していくと１つ気になる症例を見た。 ブレーキランプをつけたり消したりするブレーキペダルにあるセンサーに使われるストップランプスイッチクッションというのが砕けてブレーキランプが点きっぱなしになるという症例だ。 翌日、もしやと思い運転席を調べてみるとビンゴである。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2023/08/PXL_20230803_094518164-scaled-e1691808478535.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20230803_094518164-scaled-e1691808478535-300x300.B-SulinN.jpg&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;砕けた破片がマットの上に散らばっていた。 黒い部品に黒いマットだったので落ちているのに全く気づかなかった。 また、ブレーキランプが付きっぱなしなのに、もっと早くきづければよかったが昼間に調べていて全く見えていなかった。&lt;/p&gt;
&lt;h1&gt;交換パーツがない！&lt;/h1&gt;
&lt;p&gt;ようやく原因にたどりつけたが、このパーツのストックはないため発注。 発注したパーツ番号は90541-06036で大抵の車と共通のようだ。 &lt;a href=&quot;https://www.monotaro.com/p/2649/8544/&quot;&gt;https://www.monotaro.com/p/2649/8544/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2023/08/012bd971c50bc0171ef365a295e4a446.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F012bd971c50bc0171ef365a295e4a446-300x169.B1dxLZwq.png&amp;#x26;w=300&amp;#x26;h=169&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;しかし、メーカー在庫切れで届くのは1週間以上先であった。 仕方ないので応急処置としてテープをぐるぐる巻にして高さを調整して両面テープでストップランプスイッチクッションの代用として取り付けた。 ブレーキランプの消灯点灯が問題なく動くのを確認していったん帰宅。&lt;/p&gt;
&lt;h1&gt;修理完了&lt;/h1&gt;
&lt;p&gt;パーツが届いたので応急処置のテープとはおさらばして交換。 原因がわかってみると全く大したことがなかった。 ディーラーに頼んでいたら積車と原因調査の工賃でいくらかかっていたことやらである。 1個120円、1分で交換できる部品のためにエラくてんやわんやすることになった。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>SUPER GT 2022 Rd.7 オートポリス観戦旅行</title><link>https://note.muaaru.com/blog/2022-10-07-post-625</link><guid isPermaLink="true">https://note.muaaru.com/blog/2022-10-07-post-625</guid><description>SUPER GT 2022 Rd.7 オートポリス観戦旅行</description><pubDate>Fri, 07 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2022/10/PXL_20221007_225916565-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20221007_225916565-225x300.BjkbRsM4.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;チケット種別について&lt;/h1&gt;
&lt;p&gt;決勝日のみグランドスタンドは有料になります 各ファンシートチケットなら2日間通し入場券、グランドスタンド入場券とグッズがセットになっていてかなりお得です。 車で行くならファンシートチケットと4輪駐車券で通常はOKです。&lt;/p&gt;
&lt;h1&gt;宿泊場所&lt;/h1&gt;
&lt;p&gt;岡山国際サーキット同様に周辺に宿泊施設がほぼありません。 ホテルを取るとしたら早期に熊本方面で探したほうがいいでしょう キャンプエリアであればテントの設営が可能です。 また、通常の駐車券でも場内駐車場で車中泊が可能ですがテントは使えません 土曜に駐車したらそのまま一度も退場せずに日曜の終わりまで動かずにいることも可能です。 以前は一度退場する必要があったようですが変わったようです。 再入場も可能ですが門限が24時でした 駐車場内ではお湯を沸かしたり程度は問題ないようです 10月のオートポリスはそこまで寒くないですが10℃前後までは下がります ある程度の防寒が必要です&lt;/p&gt;
&lt;h1&gt;サーキットまでのルート&lt;/h1&gt;
&lt;p&gt;日田ICからのルートは避けましょう ICからの道のりはMR-Sでも60km/hでは険しい峠道が延々1時間続きます 決勝終了から2時間程度経ってから出発しても渋滞に捕まり2時間半かかりました 次回は熊本からのルートにすると誓いました&lt;/p&gt;
&lt;h1&gt;駐車場&lt;/h1&gt;
&lt;p&gt;岡山と違い場内駐車場が広大なのでいっぱいになるということはなさそうです 入り口から各駐車場へのルートは初めてだとわかりにくいので確認しておきましょう 入り口はメインゲートのみです&lt;/p&gt;
&lt;h1&gt;タイムスケジュール&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://autopolis.jp/ap/wp-content/uploads/2022/09/2022-sgt-time.pdf&quot;&gt;https://autopolis.jp/ap/wp-content/uploads/2022/09/2022-sgt-time.pdf&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;場内の移動&lt;/h1&gt;
&lt;p&gt;場内を反時計回りで周遊するバスがあり目的の場所付近までは基本バスを利用しました ただ、決勝中はなかなかバスが来ない場合があります 来るときは２〜３台いっきにくるので長蛇の列でも意外と１回で乗れます 場所によっては歩いたほうが早い場合もありました&lt;/p&gt;
&lt;h1&gt;観戦場所&lt;/h1&gt;
&lt;p&gt;キャンプエリアはそのキャンプエリアへの入場券がないと入れません 最終コーナ周辺のスタンドからはコースの大部分が見渡せます。 双眼鏡があれば第一ヘアピンまで見えます。 ただ、日よけがないので大判のタオルなどで日差しを避けられるようにしていきましょう さよぐりんブリッジ周辺はかなり迫力があるのでおすすめです グランドスタンドは屋根があるおかげで日陰で観戦できるのでおすすめです&lt;/p&gt;
&lt;h1&gt;持ち物&lt;/h1&gt;
&lt;p&gt;グランドスタンド周辺であれば自販機がいくつか設置されていますが、 補充と冷却が間に合わず冷たい飲料を入手するのが難しいときがありました 可能なら保冷剤を入れたクーラボックスで飲料水は持参したほうがいでしょう&lt;/p&gt;
&lt;p&gt;最終コーナ周辺のスタンドで観戦するなら日よけがないので帽子や大判のタオルなどで日差しを避けられるようにしましょう 日傘はスタンドで使用するとスタッフさんに注意されます&lt;/p&gt;
&lt;p&gt;車中泊をするならポータブルバッテリーや防寒具（上着、毛布など）などがあるといいでしょう&lt;/p&gt;
&lt;h1&gt;移動スケジュール&lt;/h1&gt;
&lt;h4&gt;9/30 340km&lt;/h4&gt;
&lt;p&gt;島根　6:30発 宮島SA　9:15着 壇ノ浦PA　12：00着 ららぽーと福岡(実物大νガンダム立像) 14:30着 ホテルフロントイン福岡空港　16:30着&lt;/p&gt;
&lt;h4&gt;10/1　126km&lt;/h4&gt;
&lt;p&gt;ホテルフロントイン福岡空港 9:00発 日田IC 10:00着 エネオス日田北SS　給油、買い出しなど オートポリス 12:00着 オートポリス車中泊&lt;/p&gt;
&lt;h4&gt;10/2 78km&lt;/h4&gt;
&lt;p&gt;オートポリス　18:00発 ホテル花景色　20:30着&lt;/p&gt;
&lt;h4&gt;10/3 304km&lt;/h4&gt;
&lt;p&gt;ホテル花景色　9:30発 福岡周辺観光 ファミリーロッジ旅籠屋　宮島SA店 20:15着&lt;/p&gt;
&lt;h4&gt;10/4 186km&lt;/h4&gt;
&lt;p&gt;ファミリーロッジ旅籠屋　宮島SA店 8:30発 島根 11:00&lt;/p&gt;
&lt;h1&gt;参考&lt;/h1&gt;
&lt;p&gt;　&lt;a href=&quot;http://ke-kun.com/circuit/autopolis-guide.html&quot;&gt;http://ke-kun.com/circuit/autopolis-guide.html&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/PXL_20221007_225916565-scaled.DhuxgkEl.jpg"/><enclosure url="/_astro/PXL_20221007_225916565-scaled.DhuxgkEl.jpg"/></item><item><title>ConstLayntLayout内でmatchParentを使用した場合に警告するカスタムLintを作成する</title><link>https://note.muaaru.com/blog/2022-02-26-post-607</link><guid isPermaLink="true">https://note.muaaru.com/blog/2022-02-26-post-607</guid><description>[Android]ConstLayntLayout内でmatchParentを使用した場合に警告するカスタムLintを作成する</description><pubDate>Sat, 26 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;DroidKaigi 2021にて行われた下記の発表に触発されて&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WUJOqFJzPNY&quot;&gt;DroidKaigi 2021 - 25分で作るAndroid Lint / Nozomi Takuma [JA] - YouTube&lt;/a&gt; &lt;a href=&quot;https://speakerdeck.com/tkmnzm/android-lint-made-in-25-minutes?slide=20&quot;&gt;25分で作るAndroid Lint / Android Lint made in 25 minutes - Speaker Deck&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PRレビューでよく指摘していたことをLintにできたらいいなと思い、上記を参考に自分もAndroidのカスタムLintを作成してみました。 Lint化しておけばローカルの開発環境や、CI上でDangerを使用してPR作成後に自動でLintチェックを行い、レビュアーが指摘せずとも間違いに気づける環境が構築できるという狙いがあります。&lt;/p&gt;
&lt;h2&gt;カスタムLint作成の準備&lt;/h2&gt;
&lt;p&gt;まずは発表内容を参考にカスタムLint作成時に必要なものが揃っているので下記のリポジトリをベースに作成していきます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/googlesamples/android-custom-lint-rules&quot;&gt;GitHub - googlesamples/android-custom-lint-rules: This sample demonstrates how to create a custom lint checks and corresponding lint tests&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回はConstraintLayout内の子Viewに &lt;code&gt;android:layout_width=&quot;match_parent&quot;&lt;/code&gt;もしくは &lt;code&gt;android:layout_height=&quot;match_parent&quot;&lt;/code&gt; が設定されている場合に警告するLintを作成してみます。&lt;/p&gt;
&lt;p&gt;ConstraintLayout内の子Viewにmatch_parentを使っては行けない理由は公式ドキュメントにかかれているのでそちらを参考にしてください。 &lt;a href=&quot;https://developer.android.com/reference/androidx/constraintlayout/widget/ConstraintLayout&quot;&gt;ConstraintLayout  |  Android Developers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;layout.xmlに対するLintの作成方法は発表内容やドキュメントだけだとわかりにくいので 標準のConstraintLayoutのLintのコードを参考にしながら作成しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/ConstraintLayoutDetector.kt;l=47?q=LayoutDetector&quot;&gt;ConstraintLayoutDetector.kt - Android Code Search&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;layout.xmlに対するカスタムLintの作成&lt;/h2&gt;
&lt;p&gt;まずはカスタムLintの本体となるLayoutDetectorを実装していきます。&lt;/p&gt;
&lt;p&gt;appliesToやgetApplicableElementsでLintを適用する対象を絞っています。 visitElementで対象を実際にLintチェックするコードを実装します。 最後にLintチェックに引っかかったらcontext.reportでIssueを報告するようにします。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;package com.example.lint.checks.detector

import com.android.SdkConstants.*
import com.android.resources.ResourceFolderType
import com.android.tools.lint.detector.api.*
import com.android.utils.forEach
import org.w3c.dom.Element
import org.w3c.dom.Node

class ConstraintLayoutDetector : LayoutDetector() {

    // layoutファイルだけ検出するように設定
    override fun appliesTo(folderType: ResourceFolderType) =
        (folderType == ResourceFolderType.LAYOUT)

    // ConstraintLayoutの要素だけ検出するように設定
    override fun getApplicableElements() = setOf(
        CONSTRAINT_LAYOUT.oldName(),
        CONSTRAINT_LAYOUT.newName()
    )

    // 検出したConstraintLayoutに対してLintCheckを実行
    override fun visitElement(context: XmlContext, element: Element) {
        var child = element.firstChild
        while (child != null) {
            if (child.nodeType != Node.ELEMENT_NODE) {
                child = child.nextSibling
                continue
            }
            // ConstraintLayout内の子Viewの設定をチェックしていく
            child.attributes.forEach { attribute -&gt;
                val name = attribute.localName ?: return@forEach
                val value = attribute.nodeValue
                // android:layout_width or android:layout_heightにmatch_parentが含まれているかチェック
                if (name != ATTR_LAYOUT_WIDTH &amp;#x26;&amp;#x26; name != ATTR_LAYOUT_HEIGHT) return@forEach
                if (value != VALUE_MATCH_PARENT) return@forEach
                // Lintチェックに引っかかったのでreportする
                context.report(
                    issue = ISSUE_USE_MATCH_PARENT_IN_CONSTRAINT_LAYOUT,
                    location = context.getLocation(element),
                    message = ISSUE_USE_MATCH_PARENT_IN_CONSTRAINT_LAYOUT.getExplanation(TextFormat.TEXT)
                )
                return
            }
            child = child.nextSibling
        }
    }

    companion object {
        // Lintで検知した際に表示する内容などを設定する
        @JvmStatic
        internal val ISSUE_USE_MATCH_PARENT_IN_CONSTRAINT_LAYOUT = Issue.create(
            id = &quot;UseMatchParentInConstraintLayout&quot;,
            briefDescription = &quot;Similar behavior can be defined by using MATCH_CONSTRAINT with the corresponding left/right or top/bottom constraints being set to \&quot;parent\&quot;&quot;,
            explanation = &quot;MATCH_PARENT is not recommended for widgets contained in a ConstraintLayout.&quot;,
            category = Category.CORRECTNESS,
            priority = 6,
            severity = Severity.ERROR,
            implementation = Implementation(
                ConstraintLayoutDetector::class.java,
                Scope.RESOURCE_FILE_SCOPE
            ),
            androidSpecific = true
        ).addMoreInfo(&quot;https://developer.android.com/reference/androidx/constraintlayout/widget/ConstraintLayout&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;また、カスタムLint開発時はテストコードでデバッグしながらやるとわかりやすいです。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;package com.example.lint.checks

import com.android.tools.lint.checks.infrastructure.TestFiles.xml
import com.android.tools.lint.checks.infrastructure.TestLintTask.lint
import com.example.lint.checks.detector.ConstraintLayoutDetector
import org.junit.Test

@Suppress(&quot;UnstableApiUsage&quot;)
class XmlDetectorTest {
    @Test
    fun testXML() {
        lint()
            .files(
                xml(
                    &quot;res/layout/sample.xml&quot;,
                    &quot;&quot;&quot;
                &amp;#x3C;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
                &amp;#x3C;layout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
                    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
                    xmlns:tools=&quot;http://schemas.android.com/tools&quot;&gt;

                    &amp;#x3C;data&gt;

                    &amp;#x3C;/data&gt;

                    &amp;#x3C;androidx.constraintlayout.widget.ConstraintLayout
                        android:id=&quot;@+id/main&quot;
                        android:layout_width=&quot;match_parent&quot;
                        android:layout_height=&quot;match_parent&quot;
                        tools:context=&quot;.ui.main.MainFragment&quot;&gt;

                        &amp;#x3C;EditText
                            android:id=&quot;@+id/message_1&quot;
                            android:layout_width=&quot;wrap_content&quot;
                            android:layout_height=&quot;match_parent&quot;
                            android:text=&quot;MainFragment&quot;
                            app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
                            app:layout_constraintEnd_toEndOf=&quot;parent&quot;
                            app:layout_constraintStart_toStartOf=&quot;parent&quot;
                            app:layout_constraintTop_toTopOf=&quot;parent&quot; /&gt;

                        &amp;#x3C;EditText
                            android:id=&quot;@+id/message_2&quot;
                            android:layout_width=&quot;wrap_content&quot;
                            android:layout_height=&quot;wrap_content&quot;
                            android:text=&quot;MainFragment&quot;
                            app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
                            app:layout_constraintEnd_toEndOf=&quot;parent&quot;
                            app:layout_constraintStart_toStartOf=&quot;parent&quot;
                            app:layout_constraintTop_toTopOf=&quot;parent&quot; /&gt;

                    &amp;#x3C;/androidx.constraintlayout.widget.ConstraintLayout&gt;
                &amp;#x3C;/layout&gt;
            &quot;&quot;&quot;.trimIndent()
                ).indented()
            )
            .issues(ConstraintLayoutDetector.ISSUE_USE_MATCH_PARENT_IN_CONSTRAINT_LAYOUT)
            .allowMissingSdk()
            .run()
            .expectErrorCount(1)
    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;あとは発表内容にもあるように 作成したカスタムLintようのIssueRegistryの作成や src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry リソースの追加を行えばカスタムLintモジュールが完成します。&lt;/p&gt;
&lt;h2&gt;作成したLintを導入する&lt;/h2&gt;
&lt;p&gt;作成したカスタムLintモジュールを対象のプロジェクトに導入してappのbuild.gradleにlintChecksで追加したLintCheckモジュールを参照します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;// build.gradle(app)
dependencies {

    // Custom Lint Check
    lintChecks project(&amp;#x26;#039;:lint-checks&amp;#x26;#039;)

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで対象のプロジェクトで作成したカスタムLintが機能するようになります。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;コードレビューで何度も指摘することを検出するカスタムLintを作成することでレビューの負荷が減らすことができます。&lt;/p&gt;
&lt;p&gt;また、特定のクラスを参照しないように検知するといったプロジェクト固有のルールを適用するLintも作成できます。&lt;/p&gt;
&lt;p&gt;これにより複数人での開発でもプロジェクトがカオスになっていくのを防ぐことができます。&lt;/p&gt;
&lt;p&gt;カスタムLintの書き方はドキュメントも少なく分かりづらいですが、 既存Lintのコードを参考にすればなんとか作成していけると思います。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>[Android]Fragmentの実装の仕方について</title><link>https://note.muaaru.com/blog/2021-12-25-post-574</link><guid isPermaLink="true">https://note.muaaru.com/blog/2021-12-25-post-574</guid><description>[Android]Fragmentの実装の仕方について</description><pubDate>Sat, 25 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;[Android]Fragmentの実装の仕方について&lt;/p&gt;
&lt;p&gt;Fragment正しく実装できてますか？ 結構みんな間違ってFragment実装しているコードを見るので、 一度Fragmentの実装について自分なりに整理してみました。&lt;/p&gt;
&lt;h2&gt;FragmentでDatabindingを使う場合の実装について&lt;/h2&gt;
&lt;p&gt;DatabindingをFragmentのフィールドに持つ場合は必ずonDestroyViewで開放する必要があります。 &lt;a href=&quot;https://developer.android.com/topic/libraries/view-binding#fragments&quot;&gt;https://developer.android.com/topic/libraries/view-binding#fragments&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;
    private var _binding: ResultProfileBinding? = null
    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = ResultProfileBinding.inflate(inflater, container, false)
        val view = binding.root
        return view
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;でそのためにはbindingフィールドをNullableにしないといけないんですが、 Nullableにするといちいちオプショナルの解除が必要でNonNullで宣言したいんですよね。&lt;/p&gt;
&lt;p&gt;そこで、こういう風にAutoCleardValueを使ったり &lt;a href=&quot;https://github.com/DroidKaigi/conference-app-2020/pull/294/files#diff-ece280c4922c43e26a5266b1a334647bR32&quot;&gt;https://github.com/DroidKaigi/conference-app-2020/pull/294/files#diff-ece280c4922c43e26a5266b1a334647bR32&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;DataBinding-ktxを使ったり &lt;a href=&quot;https://github.com/wada811/DataBinding-ktx&quot;&gt;https://github.com/wada811/DataBinding-ktx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;といろいろあるわけなんですが。&lt;/p&gt;
&lt;p&gt;調べてみてAutoCleardValueはonDestroyView以降でbindingを触るとクラッシュする可能性があるし。&lt;/p&gt;
&lt;p&gt;DataBinding-ktxは結局使い勝手があまりNullableで宣言するのと変わらない感じがあって。 わざわざライブラリに依存してまで対応するほどなのか？という気がするし。&lt;/p&gt;
&lt;p&gt;で、結局は普通にNullableで宣言すればいいんでは?と思ってしまいました。 ただ、絶対にonDestroyViewで開放忘れを無くしたいぜって場合はDataBinding-ktxがいいとは思います。&lt;/p&gt;
&lt;h2&gt;Fragmentでのviewのinfrateについて&lt;/h2&gt;
&lt;p&gt;FragmentのviewをinfrateするのにonCreateViewをoverrideしますが。 実はAndroidXのFragmentは下記のようにコンストラクタに直接LayoutXMLを渡せて、onCreateViewをoverrideする必要がない書き方ができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/reference/androidx/fragment/app/Fragment#Fragment(int)&quot;&gt;https://developer.android.com/reference/androidx/fragment/app/Fragment#Fragment(int&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;
class MainFragment : Fragment(R.layout.main_fragment){

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この書き方だとonCreateViewでinfrate以外のViewの初期化をしたりといった非推奨な書き方をしないように、onCreateViewをそもそも書かないので強制できるわけです。 &lt;a href=&quot;https://developer.android.com/reference/androidx/fragment/app/Fragment#onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle)&quot;&gt;https://developer.android.com/reference/androidx/fragment/app/Fragment#onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ただこれだとDatabindingのインスタンスはどうやって取得するのか？となるんですが。&lt;/p&gt;
&lt;p&gt;onViewCreatedで下記のようにviewRootからDatabindingのインスタンスが取得できるようになっています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/topic/libraries/data-binding/generated-binding#create&quot;&gt;https://developer.android.com/topic/libraries/data-binding/generated-binding#create&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;
val binding: MyLayoutBinding = MyLayoutBinding.bind(viewRoot)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;いろいろ調べて書いてきましたが結論として できるだけシンプルに間違った書き方ができない、しずらいコードを目指すと このサンプルの実装が今の所シンプルで良かったですということです。 さすが公式サンプルでした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/android/architecture-components-samples/blob/master/ViewBindingSample/app/src/main/java/com/android/example/viewbindingsample/BindFragment.kt#L36-L41&quot;&gt;https://github.com/android/architecture-components-samples/blob/master/ViewBindingSample/app/src/main/java/com/android/example/viewbindingsample/BindFragment.kt#L36-L41&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;/**
 * View Binding example with a fragment that uses the alternate constructor for inflation and
 * [onViewCreated] for binding.
 */
class BindFragment : Fragment(R.layout.fragment_blank) {

    // Scoped to the lifecycle of the fragment&amp;#x26;#039;s view (between onCreateView and onDestroyView)
    private var fragmentBlankBinding: FragmentBlankBinding? = null

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val binding = FragmentBlankBinding.bind(view)
        fragmentBlankBinding = binding
        binding.textViewFragment.text = getString(string.hello_from_vb_bindfragment)
    }

    override fun onDestroyView() {
        // Consider not storing the binding instance in a field, if not needed.
        fragmentBlankBinding = null
        super.onDestroyView()
    }
}
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>MR-Sのエンジンが始動不調からのアイドリング不調</title><link>https://note.muaaru.com/blog/2021-12-24-post-559</link><guid isPermaLink="true">https://note.muaaru.com/blog/2021-12-24-post-559</guid><description>MR-Sのエンジンが始動不調からのアイドリング不調</description><pubDate>Fri, 24 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;エンジン不調は突然に&lt;/h2&gt;
&lt;p&gt;今年もとうとう12月になり寒くなってきた。 島根は例年よりだいぶ早く雪がちらほらしだしてきたので、スタッドレスタイヤに交換しようとしました。 しかし、車を少し動かしてエンジンを切ったのが運の尽き&lt;/p&gt;
&lt;p&gt;そう、まさしくこれをやらかしました。&lt;/p&gt;
&lt;p&gt;見事にプラグがかぶってエンジンがかからず、アクセルを踏み込んだ状態ならなんとか始動しました。&lt;/p&gt;
&lt;p&gt;ところが、今度はアクセルを放すとアイドリングするはずがストンとそのまま回転が落ちてエンスト&lt;/p&gt;
&lt;p&gt;アイドリング不調まで発症する始末&lt;/p&gt;
&lt;h2&gt;エンジン不調を直していく&lt;/h2&gt;
&lt;h4&gt;プラグかぶり&lt;/h4&gt;
&lt;p&gt;壊れたもんはしょうがないので直していきます。&lt;/p&gt;
&lt;p&gt;まずはプラグかぶりから&lt;/p&gt;
&lt;p&gt;スパークプラグは清掃して再利用できるとは思うんですが、そこそこ使っていたのとプラグかぶりで真っ黒な上にサビが出ていたので交換します。 前回と同じくNGKのプレミアムRXにしときました。 &lt;a href=&quot;https://www.muaaru.com/2018/12/11/post-279/&quot;&gt;https://www.muaaru.com/2018/12/11/post-279/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/12/PXL_20211205_024722749-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20211205_024722749-225x300.BExL3SeN.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;そしてスパークプラグのネジが錆びてるのはエンジンヘッドカバーがついてないと雨水などがエンジンの上に溜まってプラグホールに浸透していくからだそうな。&lt;/p&gt;
&lt;p&gt;まさにこの動画ほどではないですが、初期症状くらいになってた感じです。&lt;/p&gt;
&lt;p&gt;というわけでエンジンヘッドカバーも購入&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/12/PXL_20211218_025938250-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20211218_025938250-300x225.GqPSceBj.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ついでにいままで一度もコイルを交換したことがなかったのでこれも購入 画像だと2つしか写ってないですが4本買ってます&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/12/PXL_20211218_025339608-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20211218_025339608-300x225.CDNKm2I8.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;コイルもプラグも交換してプラグかぶりの方はこれでOKなはず エンジンヘッドカバーもつけました。&lt;/p&gt;
&lt;p&gt;あとはアイドリングを何とかする。&lt;/p&gt;
&lt;h4&gt;アイドリング不調&lt;/h4&gt;
&lt;p&gt;MR-SのOBDコネクタからエラーコードを読み取ろうとしますが、何もエラーが記録されておらず。 &lt;a href=&quot;https://www.muaaru.com/2018/09/02/post-136/&quot;&gt;https://www.muaaru.com/2018/09/02/post-136/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一応、自己診断機能を作動させてみてそっちでも確認しましたが、やはりエラーなし ということでセンサー類は大丈夫そう&lt;/p&gt;
&lt;p&gt;そうなるとISCVが汚れて正常に機能しておらずアイドリングができなくなってると推測しました。&lt;/p&gt;
&lt;p&gt;バッテリーやらエアクリやら外してスロットルバルブにアクセスします。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/12/PXL_20211211_072724069-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20211211_072724069-300x225.DuzzHxmD.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;バルブ手前の左下にあるISCVの入り口を見ると案の定真っ黒&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/12/PXL_20211211_072719640-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20211211_072719640-300x225.trtK9O-d.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ISCVに入り口だけにスロットルバルブクリーナーが入るようノズルをしっかり狙ってブシュブシュスプレーします。 スロットルバルブクリーナーは結構強力みたいなので少しずつ控えめに吹いていきました。&lt;/p&gt;
&lt;p&gt;この状態で一旦エンジンを掛けてみます、 まだ安定しませんがアイドリングしそうな雰囲気が出てきました。&lt;/p&gt;
&lt;p&gt;ということで、何度かこの作業を繰り返して ついにアイドリングするようになりました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/12/PXL_20211212_074858447-scaled.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20211212_074858447-300x225.1TZcAD03.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;クリーナーを使うとISCVのグリスが切れるらしいので仕上げにISCVにスプレーグリスを吹いときました。&lt;/p&gt;
&lt;p&gt;あとは元通りに戻してしばらくアイドリングさせてECUの学習も済ませます。&lt;/p&gt;
&lt;p&gt;試走してみましたが元通り問題なくエンジンもかかりアイドリングも問題なし。 これで大丈夫そうです。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;あと少しで20万kmということだったので、 いきなりエンジンが動かなくなっったときは最初だいぶ焦りましたが、意外と大したことなくて助かりました。&lt;/p&gt;
&lt;p&gt;今回交換したコイルやプラグは使えないわけではないのでいざというときの予備として保管しておきます。&lt;/p&gt;
&lt;p&gt;今回部品がすぐに手に入らず1週間くらい車が使えずにめちゃくちゃ不便でした。&lt;/p&gt;
&lt;p&gt;いままでエンジン廻りで不調が出たことがなかったので今回はいい経験になりました。&lt;/p&gt;</content:encoded><h:img src="/_astro/PXL_20211211_072719640-scaled.B90NoPuy.jpg"/><enclosure url="/_astro/PXL_20211211_072719640-scaled.B90NoPuy.jpg"/></item><item><title>[Android]タップ範囲を広げるレイアウト構築テクニック</title><link>https://note.muaaru.com/blog/2021-08-28-post-541</link><guid isPermaLink="true">https://note.muaaru.com/blog/2021-08-28-post-541</guid><description>[Android]タップ範囲を広げるレイアウト構築テクニック</description><pubDate>Sat, 28 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;小さいアイコンをそのままViewで表示するとタップ範囲が狭くて押しづらくなります。&lt;/p&gt;
&lt;p&gt;Material Designのガイドラインでも最低48dp以上のサイズのタップ範囲を設定するよう記述されています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://material.io/design/usability/accessibility.html#layout-and-typography&quot;&gt;Accessibility - Material Design&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;小さいアイコンのタップ範囲を広げたい&lt;/h2&gt;
&lt;p&gt;Androidでタップ範囲を広げるためにはTouchDelegateが使用できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/training/gestures/viewgroup?hl=ja#delegate&quot;&gt;ViewGroup のタッチイベントの管理  |  Android デベロッパー  |  Android Developers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;しかし、タッチ範囲を広げたつもりが反応しなかったりなど、 TouchDelegateは正しく動作させようとすると意外とハマりどころが多く実装が難しいです。&lt;/p&gt;
&lt;p&gt;そこで、もっと簡単にタップ範囲を広げてみます。&lt;/p&gt;
&lt;h2&gt;TouchArea用のViewを追加する&lt;/h2&gt;
&lt;p&gt;このように真ん中に配置された小さいアイコンのタップ範囲を拡大していきます。&lt;/p&gt;
&lt;p&gt;ここでは&lt;code&gt;touch_area_small_icon_view&lt;/code&gt;というタップ範囲用のViewを追加しています。 このViewは&lt;code&gt;layout_constraintBottom_toBottomOf&lt;/code&gt;などで 左右上下に&lt;code&gt;small_icon_view&lt;/code&gt;を指定して、 ２つのViewの中心が同じ位置になるようにしています。&lt;/p&gt;
&lt;p&gt;こうすることで&lt;code&gt;touch_area_small_icon_view&lt;/code&gt;のサイズを変えることでタップ範囲を調整できるようにします。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;#x3C;androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;
        tools:context=&quot;.MainActivity&quot;&gt;

        &amp;#x3C;ImageView
            android:id=&quot;@+id/small_icon_view&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
            app:layout_constraintEnd_toEndOf=&quot;parent&quot;
            app:layout_constraintStart_toStartOf=&quot;parent&quot;
            app:layout_constraintTop_toTopOf=&quot;parent&quot;
            app:srcCompat=&quot;@android:drawable/ic_delete&quot; /&gt;

        &amp;#x3C;View
            android:id=&quot;@+id/touch_area_small_icon_view&quot;
            android:layout_width=&quot;48dp&quot;
            android:layout_height=&quot;48dp&quot;
            app:layout_constraintBottom_toBottomOf=&quot;@id/small_icon_view&quot;
            app:layout_constraintEnd_toEndOf=&quot;@id/small_icon_view&quot;
            app:layout_constraintStart_toStartOf=&quot;@id/small_icon_view&quot;
            app:layout_constraintTop_toTopOf=&quot;@id/small_icon_view&quot; /&gt;

    &amp;#x3C;/androidx.constraintlayout.widget.ConstraintLayout&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;あとは&lt;code&gt;touch_area_small_icon_view&lt;/code&gt;に設定していたClickListenerを&lt;code&gt;touch_area_small_icon_view&lt;/code&gt;に付け替えます。&lt;/p&gt;
&lt;p&gt;これでタップ範囲の拡大ができました。&lt;/p&gt;
&lt;h2&gt;タップ範囲を可視化する&lt;/h2&gt;
&lt;p&gt;このやり方だとタップ範囲用にViewを追加しているので、タップ範囲をレイアウトファイルで可視化することができます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;touch_area_small_icon_view&lt;/code&gt;に下記の設定を追加することでタップ範囲が可視化できます。 toolsで指定しているのでレイアウトエディタ上でのみ可視化が反映されます。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;tools:background=&quot;@android:color/holo_red_dark&quot;
tools:alpha=&quot;0.3&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;#x3C;androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;
        tools:context=&quot;.MainActivity&quot;&gt;

        &amp;#x3C;ImageView
            android:id=&quot;@+id/small_icon_view&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
            app:layout_constraintEnd_toEndOf=&quot;parent&quot;
            app:layout_constraintStart_toStartOf=&quot;parent&quot;
            app:layout_constraintTop_toTopOf=&quot;parent&quot;
            app:srcCompat=&quot;@android:drawable/ic_delete&quot; /&gt;

        &amp;#x3C;View
            android:id=&quot;@+id/touch_area_small_icon_view&quot;
            android:layout_width=&quot;48dp&quot;
            android:layout_height=&quot;48dp&quot;
            app:layout_constraintBottom_toBottomOf=&quot;@id/small_icon_view&quot;
            app:layout_constraintEnd_toEndOf=&quot;@id/small_icon_view&quot;
            app:layout_constraintStart_toStartOf=&quot;@id/small_icon_view&quot;
            app:layout_constraintTop_toTopOf=&quot;@id/small_icon_view&quot;
            tools:background=&quot;@android:color/holo_red_dark&quot;
            tools:alpha=&quot;0.3&quot;/&gt;

    &amp;#x3C;/androidx.constraintlayout.widget.ConstraintLayout&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/08/4bd126a19d13ce610aab8ac63147c930.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F4bd126a19d13ce610aab8ac63147c930-309x530.C8KPv3r_.png&amp;#x26;w=309&amp;#x26;h=530&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;TouchArea用のViewを追加することで単純にレイアウトファイルの修正だけで対応できました。 さらにタップ範囲もレイアウトエディタ上で確認でき、わかりやすいので範囲調整も容易です。&lt;/p&gt;
&lt;p&gt;どんな場合でも適用できるとはわけではないですが、大抵はこのやり方で十分ではないでしょうか。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>[Android]Android端末のデバイスファームSTFを構築する</title><link>https://note.muaaru.com/blog/2021-08-09-post-522</link><guid isPermaLink="true">https://note.muaaru.com/blog/2021-08-09-post-522</guid><description>[Android]Android端末のデバイスファームSTFを構築する</description><pubDate>Mon, 09 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;STF&lt;/h2&gt;
&lt;p&gt;このSTFというのは、AWS Device Farm のように Android端末のデバイスファームを自作できるツールになります。 &lt;a href=&quot;https://github.com/DeviceFarmer/stf&quot;&gt;GitHub - DeviceFarmer/stf: Control and manage Android devices from your browser.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;このSTFを構築しておくと会社にあるAndroid端末でも自宅からリモートで接続してデバッグに使用できるようになります。&lt;/p&gt;
&lt;p&gt;今回、これがDocker Composeで簡単に構築できるというのを耳にして構築してみました。&lt;/p&gt;
&lt;h2&gt;準備&lt;/h2&gt;
&lt;p&gt;まずはDocker ComposeとADBコマンドを使用できるようにします。&lt;/p&gt;
&lt;p&gt;Dockerのインストールは下記を参照してインストールしておきます。 &lt;a href=&quot;https://docs.docker.jp/compose/install.html#docker-compose&quot;&gt;Docker Compose のインストール — Docker-docs-ja 19.03 ドキュメント&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ADBコマンドはAndroidStudioをインストールすれば一緒についてきます。&lt;br&gt;
そのままだとパスが通って無くて使えないのでパスを通しておきます。&lt;/p&gt;
&lt;p&gt;Macの場合だと ~/.bash_profile にADBのパスの設定を追記しておきます。&lt;br&gt;
&lt;code&gt;[user_name]&lt;/code&gt;は自分のPCの環境に合わせてください。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;export PATH=$PATH:/Users/[user_name]/Library/Android/sdk/platform-tools
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;source ~/.bash_profile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;で反映して適当にadbコマンドが実行できるようになっていればOKです。&lt;/p&gt;
&lt;p&gt;最後にdocker-compose.yamlを用意していきます。&lt;/p&gt;
&lt;p&gt;STF公式のdocker-compose.yamlが下記にあります。 &lt;a href=&quot;https://github.com/DeviceFarmer/stf/blob/master/docker-compose.yaml&quot;&gt;stf/docker-compose.yaml at master · DeviceFarmer/stf · GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ただ、公式のものはADB用のコンテナ内からUSBに接続したAndroid端末を認識するようになっているのですが、 自分の場合だとうまく認識しなかったのでホストのADBコマンドを直接使うように変更しています。 また、stf の起動オプションに &lt;code&gt;--no-cleanup&lt;/code&gt; で インストールしたアプリを端末利用終了時に削除されないようにしています。&lt;/p&gt;
&lt;p&gt;下記の設定ファイルのIP:192.168.100.193 の部分を自分のホストのIPに変更すればMacでもWindowsでも構築できるはずです。&lt;/p&gt;
&lt;p&gt;今回作成した docker-compose.yaml ファイル&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# [DeviceFarmer/stf: Control and manage Android devices from your browser.](https://github.com/DeviceFarmer/stf)

# 使い方
# 1. 192.168.100.193 の部分を自分のホストのIPに変更
# 2. adb start-server
# 3. docker-compose up -d
# 4. http://192.168.100.193:7100 にアクセスすれば管理画面が表示される

version: &apos;3&apos;

services:
  rethinkdb:
    container_name: rethinkdb
    image: rethinkdb:2.3
    restart: unless-stopped
    volumes:
      - &apos;rethinkdb-data:/data&apos;
    command: &apos;rethinkdb --bind all --cache-size 2048&apos;

  # コンテナからUSBがうまく認識しなかったのでホストのadbを使うようにする
  # adb:
  #   container_name: adb
  #   image: devicefarmer/adb:latest
  #   restart: unless-stopped
  #   volumes:
  #     - &quot;/dev/bus/usb:/dev/bus/usb&quot;
  #   privileged: true

  # --adb-host host.docker.internal でホストのadbを使用する　
  #     コンテナを起動する前に adb start-server でadbを立ち上げておくこと
  # --no-cleanup で インストールしたアプリを端末利用終了時に削除されないようする
  # http://192.168.100.193:7100 にアクセスすれば管理画面が表示される

  stf:
    container_name: stf
    image: devicefarmer/stf
    ports:
      - &apos;7100:7100&apos;
      - &apos;7110:7110&apos;
      - &apos;7400-7500:7400-7500&apos;
    environment:
      - TZ=&amp;#x26;#039;America/Los_Angeles&amp;#x26;#039;
      - RETHINKDB_PORT_28015_TCP=tcp://rethinkdb:28015
      - STF_ADMIN_EMAIL=p1j98x1i@gmail.com
      - STF_ADMIN_NAME=p1j98x1i
    restart: unless-stopped
    command: stf local --public-ip 192.168.100.193 --adb-host host.docker.internal --provider-min-port 7400 --provider-max-port 7500 --no-cleanup

volumes:
  rethinkdb-data: {}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;起動&lt;/h2&gt;
&lt;p&gt;準備ができたらSTFサーバーを立ち上げていきます。&lt;/p&gt;
&lt;p&gt;今回はホストのADBコマンドを直接使うように変更しているので、 まずはホスト側で端末を認識できるようにADBサーバを起動しておきます。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;adb start-server
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;あとはdocker-compose.yamlがあるディレクトリで&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;を実行すればSTFのサーバが立ち上がります。&lt;/p&gt;
&lt;p&gt;ポートは7100で設定されているので &lt;a href=&quot;http://192.168.100.193:7100&quot;&gt;http://192.168.100.193:7100&lt;/a&gt; にアクセスすればSTFの管理画面が表示されます。&lt;/p&gt;
&lt;h2&gt;使い方&lt;/h2&gt;
&lt;p&gt;STFの管理画面にアクセスるとユーザー登録の画面が表示されるので、 適当にユーザー登録するとログインできるようになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/08/153c1cfeeb25c0181b95112eb6efdb1c.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F153c1cfeeb25c0181b95112eb6efdb1c-300x188.Cic3ydtL.png&amp;#x26;w=300&amp;#x26;h=188&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ホストPCにAndroid端末を接続すると端末側にデバッグ接続許可のダイアログが表示されるので承認すればDevicesの画面に接続した端末が表示されます。&lt;/p&gt;
&lt;p&gt;デフォルトだと言語が英語になってますが、上部のメニューのSettingsから日本語に設定することもできます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/08/1a56dfffd7186fe5c3114c3553f0f195-1.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F1a56dfffd7186fe5c3114c3553f0f195-1-300x77.CQGQShJ7.png&amp;#x26;w=300&amp;#x26;h=77&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;リストのUseボタンを押すと端末の操作画面が開きます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/08/db3350b9d3ea601fe29090106d236c45.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Fdb3350b9d3ea601fe29090106d236c45-300x104.CYfh-lqg.png&amp;#x26;w=300&amp;#x26;h=104&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;端末の操作画面ではエミュレータを操作するようにブラウザ上で端末を操作できます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/08/3c543c671784916815321dee06a48bbd.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F3c543c671784916815321dee06a48bbd-300x203.C3ncCftB.png&amp;#x26;w=300&amp;#x26;h=203&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;さらにRemote debugの項目に記述されているコマンドを手元のPCで実行すれば、 AndroidStudioから直接ローカルの端末と同様に端末にリモート接続してデバッグが行なえます。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;adb connect 192.168.100.193:7401
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Appsの項目の設定アイコンを押すと端末の設定画面が直接開けたりと他にも便利な機能がいろいろとあります。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;STFを構築してみましたが、完成度が高くさまざまな機能があってデバッグする上で困ることはほぼなさそうです。 また、1度Docker Composeファイルを作ってしまえば構築もほとんど手間がかかりません。&lt;/p&gt;
&lt;p&gt;昨今のリモートワークする機会が多くなっていますが、なかなか自宅に端末を揃えるのも負担です。&lt;/p&gt;
&lt;p&gt;会社の端末でデバッグしたいというときに、このSTFを構築してVPNで接続できるようにしておけば、 自宅からエミュレータでデバッグするように会社の実機端末でデバッグできるため、端末を取りに出社するというようなことも減らせそうです。&lt;/p&gt;</content:encoded><h:img src="/_astro/3c543c671784916815321dee06a48bbd.DEozR_7M.png"/><enclosure url="/_astro/3c543c671784916815321dee06a48bbd.DEozR_7M.png"/></item><item><title>android.visibilityにvisible,invisible,goneをデータバインドする方法</title><link>https://note.muaaru.com/blog/2021-08-08-post-519</link><guid isPermaLink="true">https://note.muaaru.com/blog/2021-08-08-post-519</guid><description>[Android]android.visibilityにvisible,invisible,goneをデータバインドする方法</description><pubDate>Sun, 08 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Viewのvisibilityのbinding&lt;/h2&gt;
&lt;p&gt;ViewModelをViewにbindingした際、Viewのvisibilityを変更できるようにすることは多いかと思います。 たいていはvisible/invisibleやvisible/goneの切り替えだけなのでBooleanを処理するBindingAdapterを作成すれば事足ります。&lt;/p&gt;
&lt;p&gt;しかし、visible/invisibleに加えてgoneもbindしたい場合があります。&lt;/p&gt;
&lt;p&gt;この場合はBoolean?を使用してvisible/invisibleをtrue/falseに、goneをnullにbindする下記のようなBindingAdapterを作成します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;@BindingAdapter(&quot;android:bindVisibleInvisibleGone&quot;)
fun View.bindVisibleInvisibleGone(visibilityValue: Boolean?) {
    visibility = when (visibilityValue) {
        true -&gt; View.VISIBLE
        false -&gt; View.INVISIBLE
        else -&gt; View.GONE
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでViewModelをViewに依存させずに記述できるようになりました。&lt;/p&gt;
&lt;p&gt;他にもView.VISIBLEなどがIntであることを利用してIntをbindすればオプショナルにせずともすみそうです。 しかし、意味的にも近くなるのでBoolean?のほうがわかりやすいと思います。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ちょっとしたことですが思いつくまで自分は地味に悩みました。&lt;/p&gt;
&lt;p&gt;今回検証に使用したソースは下記にアップしています。 &lt;a href=&quot;https://github.com/muaaru/testBindingAdapter&quot;&gt;muaaru/testBindingAdapter&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>[Android]ConstraintLayout Flowを使ってみる</title><link>https://note.muaaru.com/blog/2021-08-07-post-512</link><guid isPermaLink="true">https://note.muaaru.com/blog/2021-08-07-post-512</guid><description>[Android]ConstraintLayout Flowを使ってみる</description><pubDate>Sat, 07 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Constraint Layout Flow について&lt;/h2&gt;
&lt;p&gt;ハッシュタグ一覧のようなViewを作ろうとすると、いままでライブラリや自前での実装をしていました。 しかし、FlowというのがConstraintLayout2.0から追加され、ConstraintLayoutを使用してLayoutファイルの記述だけで実装できるようになりました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/reference/androidx/constraintlayout/helper/widget/Flow&quot;&gt;Flow  |  Android デベロッパー  |  Android Developers&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Flowで実装するハッシュタグ一覧&lt;/h2&gt;
&lt;p&gt;実装は簡単でConstraintLayoutの中にこのようなFlowのタグを追加します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;#x3C;androidx.constraintlayout.helper.widget.Flow
            android:id=&quot;@+id/flow&quot;
            app:constraint_referenced_ids=&quot;text_1,text_2,text_3,text_4&quot;
            android:layout_width=&quot;0dp&quot;
            android:layout_height=&quot;0dp&quot;
            android:orientation=&quot;horizontal&quot;
            app:flow_horizontalBias=&quot;0&quot;
            app:flow_horizontalStyle=&quot;packed&quot;
            app:flow_verticalStyle=&quot;packed&quot;
            app:flow_wrapMode=&quot;chain&quot;
            app:flow_verticalAlign=&quot;baseline&quot;
            app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
            app:layout_constraintEnd_toEndOf=&quot;parent&quot;
            app:layout_constraintStart_toStartOf=&quot;parent&quot;
            app:layout_constraintTop_toTopOf=&quot;parent&quot; /&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Flowのレイアウトを適用したいViewのidを&lt;code&gt;app:constraint_referenced_ids&lt;/code&gt;にカンマ区切りで追加します。 ここで追加したViewには&lt;code&gt;app:layout_constraintTop_toTopOf=&quot;parent&quot;&lt;/code&gt;のような位置決めのための設定は不要になります。 ただし、AndroidStudioのバージョンよっては位置決めの設定がないことでWarningが出ます。 無視して問題ありませんが、Warningが気になる場合は&lt;code&gt;tools:ignore=&quot;MissingConstraints&quot;&lt;/code&gt;を設定しましょう。&lt;/li&gt;
&lt;li&gt;１行に収まりきらなくなった場合にViewが次の行に配置されるように&lt;code&gt;app:flow_wrapMode=&quot;chain&quot;&lt;/code&gt;を設定します。&lt;/li&gt;
&lt;li&gt;View同士が隙間無く配置されるように&lt;code&gt;app:flow_horizontalStyle&lt;/code&gt;や&lt;code&gt;app:flow_verticalStyle&lt;/code&gt;には&lt;code&gt;packed&lt;/code&gt;を指定します。 ここで設定できるStyleの値は、下記に詳しい説明が図解付きであるのでわかりやすいです。 &lt;a href=&quot;https://developer.android.com/reference/androidx/constraintlayout/widget/ConstraintLayout#chain-style&quot;&gt;ConstraintLayout  |  Android デベロッパー  |  Android Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;デフォルトではFontやテキストサイズが違うTextView同士が横並びになった際に微妙に上下にずれます。 これを防ぐために&lt;code&gt;app:flow_verticalAlign=&quot;baseline&quot;&lt;/code&gt;を追加しておきます。 これでそれぞれのテキストのbaselineに合わせて縦方向の配置が調整されるようになります。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;いままで実装が大変だったハッシュタグ一覧のようなViewがレイアウトファイルだけで実装できました。 また、実装方法もFlowタグをConstraintLayout内に追加するだけで簡単にできました。&lt;/p&gt;
&lt;p&gt;今回実装したサンプルは下記にあります。 &lt;a href=&quot;https://github.com/muaaru/testConstraintLayoutFlow&quot;&gt;muaaru/testConstraintLayoutFlow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回はハッシュタグ一覧でしたが、他にもスマホとタブレットでレイアウトファイルを分けていたような場合に、 1つのレイアウトファイルで済ませるといったこともできるので、今後使用する機会が多くなりそうです。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>Androidで画面が開かれると同時にキーボードを表示したい場合の実装</title><link>https://note.muaaru.com/blog/2021-07-25-post-509</link><guid isPermaLink="true">https://note.muaaru.com/blog/2021-07-25-post-509</guid><description>Androidで画面が開かれると同時にキーボードを表示したい場合の実装</description><pubDate>Sun, 25 Jul 2021 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;キーボードが表示されない&lt;/h2&gt;
&lt;p&gt;画面を開いたタイミングでキーボードを表示したいと思い下記を参考にキーボードを表示しようとした &lt;a href=&quot;https://developer.android.com/training/keyboard-input/visibility?hl=ja#ShowOnDemand&quot;&gt;入力方法の表示の処理  |  Android デベロッパー  |  Android Developers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;しかし、onResumeのタイミングででキーボードを表示しようとしても、表示されたりされなかったり不安定な現象が出た。&lt;/p&gt;
&lt;p&gt;ボタンをタップしてキーボードを表示しようとすると キーボードが確実に表示されたので、 どうやらタイミングが悪いらしいというのはわかった。&lt;/p&gt;
&lt;p&gt;たとえば、下記のようにonResumeからdelayさせると動作するようになるが、対症療法な感じになってしまう。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;    view.postDelayed({
      showSoftInput()
    }, 100)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;そこでもう少し原因を探ってみた。&lt;/p&gt;
&lt;h2&gt;キーボードが確実に表示されるようにする&lt;/h2&gt;
&lt;p&gt;結論としては、ViewのFocusだけでなく、その画面がWindowのFocusを取得している必要があるためということのようだ。 確かにデバッグログを出してみるとonResumeのあとにonWindowFocusChangedが呼び出される。 なので、onResumeのタイミングではまだWindowのFocusが取得できていない。&lt;/p&gt;
&lt;p&gt;そのためonWindowFocusChangedでWindowのFocusが取得できてから、キーボードを表示することで確実に表示できるようになった&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;    override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        Log.d(&quot;DEBUG&quot; , &quot;onWindowFocusChanged hasFocus : $hasFocus&quot;)
        if(hasFocus) {
            binding.editText.setSelection(selectionStart,selectionEnd)
            showSoftInput(binding.editText)
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;キーボードを表示したい場合はEditTextへのフォーカスだけでなく、その画面のWindowFocusも必要だった。&lt;/p&gt;
&lt;p&gt;今回検証に使用したコードは下記にあります。 &lt;a href=&quot;https://github.com/muaaru/testKeyboard&quot;&gt;GitHub - muaaru/testKeyboard&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>iOSでGoogle Natural Language APIのサンプルコードを実行できるようにする</title><link>https://note.muaaru.com/blog/2021-05-16-post-482</link><guid isPermaLink="true">https://note.muaaru.com/blog/2021-05-16-post-482</guid><description>iOSでGoogle Natural Language APIのサンプルコードを実行できるようにする</description><pubDate>Sun, 16 May 2021 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;GoogleのCloud PlatformのサービスにCloud Natural Languageというものがあります。 これはテキストデータを入力すると機械学習を使用してテキスト構造や意味を解析した結果を返してくれるサービスになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloud.google.com/natural-language&quot;&gt;Cloud Natural Language  |  Google Cloud&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ドキュメントにはサーバー向けのSDKは用意されています。 しかし、今回はiOSアプリに組み込みたかったので、下記のNatural LanguageのiOS版サンプルコードを動かしてみようとしました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/GoogleCloudPlatform/ios-docs-samples/tree/master/natural-language/swift&quot;&gt;ios-docs-samples/natural-language/swift at master · GoogleCloudPlatform/ios-docs-samples&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;しかし、セットアップの手順を実行してもプロジェクトのビルドでエラーになってしまいます。(2021-05-16 現在)&lt;/p&gt;
&lt;p&gt;動かない原因をいろいろと調べた結果、このサンプルコードは不完全な状態であることがわかりました。 なので、これを実際にiOSアプリとしてビルドして動かせるようにするまでの手順を説明していきます。&lt;/p&gt;
&lt;h2&gt;プロジェクトの修正方法&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;INSTALL-COCOAPODSスクリプトの修正&lt;/li&gt;
&lt;li&gt;APIキーのみで動作するように修正&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;INSTALL-COCOAPODSスクリプトの修正&lt;/h4&gt;
&lt;p&gt;まずはセットアップの手順で使用するINSTALL-COCOAPODSというスクリプトがありますが、 この内容がNatural Languageを使用するようには作られていません。&lt;/p&gt;
&lt;p&gt;github からダウンロードした状態でプロジェクトをXcodeでビルドしても下記のようなエラーが表示されます。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;google/protobuf/Descriptor.pbobjc.h file not found
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Descriptorのprotoファイルがダウンロードされていませんでした。&lt;/p&gt;
&lt;p&gt;他のファイルのダウンロード先などを見ると下記のリポジトリからダウンロードしているようなので、ここから必要なファイルを探してきます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/googleapis/googleapis&quot;&gt;googleapis/googleapis: Public interface definitions of Google APIs.&lt;/a&gt; &lt;a href=&quot;https://github.com/protocolbuffers/protobuf&quot;&gt;protocolbuffers/protobuf: Protocol Buffers - Google&apos;s data interchange format&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Descriptorについては下記のコードを追加します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;mkdir protobuf
curl https://raw.githubusercontent.com/protocolbuffers/protobuf/master/src/google/protobuf/descriptor.proto &gt;&gt; protobuf/descriptor.proto
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;他にもNatural Languageで使用するクラスが記述されたprotoファイルもダウンロードされておらず、なぜかtranslationのクラスをダウンロードする処理になっています。 こちらも下記のコードを追加してダウンロードするように修正します。 Natural Languageで使用するクラスはlanguage_service.protoファイルにあります。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;mkdir -p cloud/language/v1
curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/cloud/language/v1/language_service.proto &gt;&gt; cloud/language/v1/language_service.proto
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;language_service.protoの内容を確認すると、下記のようなimport文があります。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;import &quot;google/api/annotations.proto&quot;;
import &quot;google/api/client.proto&quot;;
import &quot;google/api/field_behavior.proto&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;language_service.protoを使用するにはimportで指定されるprotoファイルも必要になるのでそれぞれ追加します。 追加したprotoファイルにもimportを含むものがあるので、同じようにすべてのprotoファイルを集めます。&lt;/p&gt;
&lt;p&gt;不要なファイルをダウンロードしていた部分を削除して、 最終的にprotoファイルをダウンロードする部分は下記のようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;mkdir google
cd google

mkdir api
curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/api/annotations.proto &gt;&gt; api/annotations.proto
curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/api/client.proto &gt;&gt; api/client.proto
curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/api/field_behavior.proto &gt;&gt; api/field_behavior.proto
curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/api/http.proto &gt;&gt; api/http.proto

mkdir protobuf
curl https://raw.githubusercontent.com/protocolbuffers/protobuf/master/src/google/protobuf/descriptor.proto &gt;&gt; protobuf/descriptor.proto

mkdir -p cloud/language/v1
curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/cloud/language/v1/language_service.proto &gt;&gt; cloud/language/v1/language_service.proto

cd ..
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;スクリプトの残りの部分については、Clean BoringSSL module.modulemapとFix the bad imports in the generated filesは不要なので削除します。&lt;/p&gt;
&lt;p&gt;以上でINSTALL-COCOAPODSについては修正は終わりになます。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sh INSTALL-COCOAPODS
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;を実行します。&lt;/p&gt;
&lt;p&gt;うまくいくとXcodeでプロジェクトが立ち上がり、protoファイルからObjective-Cのコードがgoogleフォルダ配下に生成されます。 もし生成されてない場合は、依存するprotoファイルが足りてないなどが考えられます。&lt;/p&gt;
&lt;h4&gt;APIキーのみで動作するように修正&lt;/h4&gt;
&lt;p&gt;元のサンプルコードでは認証トークンを使用していますが、APIキーで動かすほうがGCPの設定も簡単です。&lt;/p&gt;
&lt;p&gt;また、Xcodeのバージョンが新しいと依存しているCryptoSwiftが未対応でビルドが通らなかったのでAPIキーを使用したほうがシンプルで動かす分にはいいです。&lt;/p&gt;
&lt;p&gt;GCPのAPIキーの設定については下記などを参考にしてもらえばと思うので、ここでは説明しません。 それほど手間はかからないです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://qiita.com/hsylife/items/eb8ca8d48bd808bf6036&quot;&gt;iOSでGoogle Cloud Vision APIのサンプルをランするまでの手順(5分以内に) - Qiita&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;それではプロジェクトファイルを修正していきます。&lt;/p&gt;
&lt;p&gt;Podfileに下記の2つのライブラリがあります。 認証トークンのために導入しているライブラリなのでこれを削除します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pod AuthLibrary, :git =https://github.com/google/auth-library-swift.git
pod Firebase/Messaging
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Xcodeで削除したライブラリを使用している箇所にエラーがでるようになっているので、削除するなりコメントアウトしていきます。&lt;/p&gt;
&lt;p&gt;NaturalLanguageService.swiftを開いて、 認証トークンを使用していた箇所がるので、&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;call.requestHeaders.setObject(NSString(string:authToken), forKey:NSString(string:&quot;Authorization&quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この部分を下記のようにAPIキーを使用するように修正します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;call.requestHeaders.setObject(NSString(string: apiKey), forKey: NSString(string: &quot;X-Goog-Api-Key&quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;あとはビルドしてアプリが起動すれば完成です。 適当にネットからニュース記事などをコピペして試すと、テキストが解析されてアプリの画面にこのような結果が表示されます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2021/05/db37bf62e56a02dceba362ca7be80c78.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Fdb37bf62e56a02dceba362ca7be80c78-150x150.Cx4412a3.png&amp;#x26;w=150&amp;#x26;h=150&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;iOSアプリ自体が不慣れなのとgRPCを初めていじったのもあって勝手がわからず、調べるのに時間がかかりました。 また、Googleのサンプルコードが不完全な状態だったのも不運でした。&lt;/p&gt;
&lt;p&gt;GCPの他のサービスのサンプルコードについても、今回の対応を参考にすれば動くようにできるかもしれません。&lt;/p&gt;
&lt;p&gt;最終的に動くように修正したサンプルは下記のリポジトリにアップしてあります。 APIキーに自分のキーを入力すれば動作するはずです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/muaaru-develop/ios-docs-samples/tree/master/natural-language/swift&quot;&gt;muaaru-develop/ios-docs-samples&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/db37bf62e56a02dceba362ca7be80c78.Ce4nLouS.png"/><enclosure url="/_astro/db37bf62e56a02dceba362ca7be80c78.Ce4nLouS.png"/></item><item><title>Gooleフォトが有料化するのでPixel端末に手間なく転送する方法</title><link>https://note.muaaru.com/blog/2020-11-14-post-475</link><guid isPermaLink="true">https://note.muaaru.com/blog/2020-11-14-post-475</guid><description>Gooleフォトが有料化するのでPixel端末に手間なく転送する方法</description><pubDate>Sat, 14 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;Googleフォトから、下記のような記述がされたメールがきていました。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;2021年06月01日以降に高画質でバックアップしたすべての写真と動画は、Google アカウントに付属する無料の保存容量またはご購入いただいた追加の保存容量を使用するようになります。 容量無制限で写真や動画の保存ができた、Googleフォトがついに容量制限されるようです。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ただ、幸運にも下記にも記述されていますがPixel3などのPixelシリーズには、この制限は適用されないようです。 &lt;a href=&quot;https://support.google.com/photos/answer/6220791?co=GENIE.Platform%3DAndroid&amp;#x26;hl=ja&quot;&gt;写真や動画のアップロード サイズを選択する - Android - Google フォト ヘルプ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;そこで、Pixelシリーズ以外の端末にある写真や動画をPixelに転送して、PixelからGoogleフォトにアップロードすることで、この制限を回避します。 Pixel3の場合、2022年01月31日までは元の画質で無制限にアップロード可能です。&lt;/p&gt;
&lt;p&gt;それ以降はGoogleOneの契約などをするしかないですが、 今回のやり方はPixel端末だけではなくPCへ転送するようにも設定できるので、 最終的には自分のPCに写真や動画を集約して保存しておくというのでもいいですね。&lt;/p&gt;
&lt;p&gt;ただ、後述しますがiPhoneでは、今回のやり方では使い勝手が少々悪かったです。&lt;/p&gt;
&lt;h2&gt;設定方法&lt;/h2&gt;
&lt;p&gt;今回のやり方では「Resilio Sync」というファイル同期アプリを使用します。 iPhoneやAndroidだけでなくPCとも相互にファイル同期ができるアプリになります。 有料プランもあるのですが、無料で使える機能だけで十分です。 有料プランだと便利機能が追加されるようです。&lt;/p&gt;
&lt;h4&gt;Resilio Syncをインストールする&lt;/h4&gt;
&lt;p&gt;「Resilio Sync」のアプリをダウンロードします。&lt;/p&gt;
&lt;p&gt;スマホの場合、ストアで「Resilio Sync」を検索すれば出てきます。&lt;/p&gt;
&lt;p&gt;PCの場合は以下の公式サイトからダウンロードしてください。 &lt;a href=&quot;https://www.resilio.com/individuals/&quot;&gt;File Sync Software - Sync Home | Resilio Sync&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Resilio Syncを設定する (ファイル送信側)&lt;/h4&gt;
&lt;p&gt;転送したいファイルがある送信側の端末をまずは設定していきます。&lt;/p&gt;
&lt;p&gt;iPhoneの場合は、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;プラスマークを押してカメラのバックアップを選択&lt;/li&gt;
&lt;li&gt;バックアップを設定を押して共有設定に必要なリンクを手に入れます。 このリンクはファイルを受信する端末で使用するので、メールを自分宛てに送信するなどして、ファイルを受信する端末に送信しておきます。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Androidの場合も同じように&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;プラスマークを押してバックアップを追加を選択&lt;/li&gt;
&lt;li&gt;カメラのバックアップを追加と表示された文字があるので選択&lt;/li&gt;
&lt;li&gt;共有リンクが生成されるのでファイルを受信する端末に送信 Androidの場合、共有リンクを送信しなくても、後でQRコードを表示してそれを読み取らせることもできます。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;共有用のリンクが生成できれば送信側の設定は完了です。&lt;/p&gt;
&lt;h4&gt;Resilio Syncを設定する (ファイル受信側)&lt;/h4&gt;
&lt;p&gt;転送したいファイルを受け取る受信側の端末を設定していきます。&lt;/p&gt;
&lt;p&gt;ファイル送信側から転送した共有用のリンクを受信側の端末で開きます。 すると、アプリに先程設定したフォルダが追加されます。&lt;/p&gt;
&lt;p&gt;初期設定の状態だと、転送するファイルを選択しないとファイルが転送されません。 それだと手間がかかるので自動ですべて転送されるように設定を変更します。&lt;/p&gt;
&lt;p&gt;フォルダの右に表示されている「！」マークをタップして詳細設定画面を開きます。 選択型同期という項目がONになっているのでこれをOFFにします。&lt;/p&gt;
&lt;p&gt;これで選択しなくてもすべて自動で転送されるようになります。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;これでしばらくはGooleフォトを使い続けられそうです。 今回は説明しませんでしたが、PCへの動機も同じ用に設定していけば簡単に設定できます。&lt;/p&gt;
&lt;p&gt;ただ、実はこのやり方、iPhoneでは使い勝手が微妙でした。 というのも、iPhoneではアプリを開いてる間だけ転送されるようになっており、転送中はずっとアプリを起動しておかないといけません。&lt;/p&gt;
&lt;p&gt;Androidの場合は、カメラで撮影したらなんの操作も必要なく全自動で転送されるので非常に快適です。&lt;/p&gt;
&lt;p&gt;iPhoneの方はOS自体の制約でこういう仕様になっていると思うので、おそらく今後も改善はされないでしょう。&lt;/p&gt;
&lt;p&gt;Amazon Photos を使用する手もあるかと思いますが、あちらもいつ無制限をやめるかわからないので今回はやめました。 特にAndroidの場合、全自動で転送できるのでAmazon Photosより便利だと思います。&lt;/p&gt;
&lt;p&gt;最終的にはGoogleOneを契約して不要な画像は削除していく運用にするしかないですね。&lt;/p&gt;</content:encoded><h:img src="/_astro/Screenshot_20201114-193437.CDi-V79S.png"/><enclosure url="/_astro/Screenshot_20201114-193437.CDi-V79S.png"/></item><item><title>MR-Sのアームレストの爪折れ対応</title><link>https://note.muaaru.com/blog/2020-10-04-post-461</link><guid isPermaLink="true">https://note.muaaru.com/blog/2020-10-04-post-461</guid><description>MR-Sのアームレストの爪折れ対応</description><pubDate>Sun, 04 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/10/PXL_20201004_082634901.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20201004_082634901-300x225.YLdv_99S.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ドアの内張りを外す際にアームレストを外さなければならないが、何度もつけ外しているうちに固定用の爪が折れてしまった。&lt;/p&gt;
&lt;p&gt;アームレストを接着剤などで完全に固定してしまうと内張りを外す際に困るので、つけ外し可能なようにマグネットで固定するようにした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/10/PXL_20201004_082715816.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20201004_082715816-300x225.DYwGLwTx.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ホームセンターで売っていた強力な磁石と適当な鉄製のプレートを用意する。 １個だと少し弱いので１箇所に２つ重ねて、磁力を増すようにする。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/10/PXL_20201004_080903805.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20201004_080903805-300x225.B7JOjUQF.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ドア側に鉄製プレートを接着剤で固定する。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/10/PXL_20201004_080853568.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20201004_080853568-300x225.CzvNlibg.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;少し幅がはみ出しているが、これぐらいならアームレストと干渉しないので問題ない。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/10/PXL_20201004_080930985.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20201004_080930985-300x225.B-iBtwGq.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;アームレストにパテを盛ってそこにマグネットを埋め込む。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/10/PXL_20201004_080945438.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20201004_080945438-300x225.OTItRsB7.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;パテを盛る高さは横のしきりと同じでいい。&lt;/p&gt;
&lt;p&gt;パテが硬化したあとマグネットやパテが取れるようなら接着剤で固定しておく。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/10/PXL_20201004_082634901-1.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20201004_082634901-300x225.YLdv_99S.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;このようにアームレストの２箇所にマグネットを固定する。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/10/PXL_20201004_082623468.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FPXL_20201004_082623468-300x225.BZjaI9td.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;あとはアームレストをハメれば完成。&lt;/p&gt;
&lt;p&gt;走行中の振動などではビクともしないくらいに、しっかり固定できている。&lt;/p&gt;
&lt;p&gt;外すときはちょっと力をかけなら引っ張れば簡単に外すことができる。&lt;/p&gt;</content:encoded><h:img src="/_astro/PXL_20201004_082634901.Cj39xpJT.jpg"/><enclosure url="/_astro/PXL_20201004_082634901.Cj39xpJT.jpg"/></item><item><title>MR-Sにサンバイザーの代わりにGoProのマウントをつける</title><link>https://note.muaaru.com/blog/2020-08-29-post-455</link><guid isPermaLink="true">https://note.muaaru.com/blog/2020-08-29-post-455</guid><description>MR-Sにサンバイザーの代わりにGoProのマウントをつける</description><pubDate>Sat, 29 Aug 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/08/IMG_20200829_185747.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20200829_185747-300x225.BVMpf7mn.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MR-Sで車載動画を撮影するには、フロントガラスにサクションカップで取り付けたりする方法がある。 しかし、直射日光が当たりやすいためカメラが高温になりやすい。&lt;/p&gt;
&lt;p&gt;そこで、もう少し日陰になりそうな場所ということでサンバイザーの取り付け穴がちょうどよさそうだった。&lt;/p&gt;
&lt;p&gt;サンバイザーの取り付け穴のカバーの3Dデータが公開されていたので、少し編集してGoProのマウントをつけられるアダプターを3Dモデルを作成した。&lt;/p&gt;
&lt;p&gt;今回作成した3Dモデルのデータはこちらにアップロードしてある。 &lt;a href=&quot;https://www.thingiverse.com/thing:4582687&quot;&gt;MR2 Spyder Sunvisor GoPro Mount by muaaru - Thingiverse&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これを3Dプリンターで印刷して、実際に取り付けてみるとこんな感じになる。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2020/08/IMG_20200829_192150-e1598707007900.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20200829_192150-e1598707007900-225x300.A0HEEz11.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回はPLAしかフィラメントがなかったのでPLAで印刷したが、夏の炎天下の車内だと高温過ぎてPLAだと変形してしまうので、本当はもっと耐熱性の高い素材を使用したほうが良いと思う。&lt;/p&gt;
&lt;p&gt;自由雲台と組み合わせると自由にアングルを変えられて便利だった。&lt;/p&gt;
&lt;p&gt;これならフロントガラスにサクションカップで取り付けるよりも視界の邪魔になりにくく、直射日光も避けられるので結構良い感じである。&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_20200829_192150-e1598707007900.RtfoAKWZ.jpg"/><enclosure url="/_astro/IMG_20200829_192150-e1598707007900.RtfoAKWZ.jpg"/></item><item><title>[Android]LiveDataでRxのCombineLatestをやる</title><link>https://note.muaaru.com/blog/2019-06-21-post-405</link><guid isPermaLink="true">https://note.muaaru.com/blog/2019-06-21-post-405</guid><description>[Android]LiveDataでRxのCombineLatestをやる</description><pubDate>Fri, 21 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;複数の LiveData を組み合わせようとすると MediatorLiveData を使用することになりますが、 これがボイラープレート山盛りなコードを書かされて非常に使いにくい。&lt;/p&gt;
&lt;p&gt;そこで、Rx みたいにお手軽に 2 つの LiveData を組み合わせる方法はないかと探して、ちょうど良さそうな実装が書かれた下記の記事を見つけました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/@gauravgyal/combine-results-from-multiple-async-requests-90b6b45978f7&quot;&gt;Combine Results from Multiple Async Requests – Gaurav Goyal – Medium&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;この記事では、 zip〜 と関数名をつけていますが、Rx 的には zip 　ではないです。&lt;/p&gt;
&lt;p&gt;2 つのストリーム、どちらかに更新があれば、それぞれストリームの最後の値のセットが流れてくるので、Rx 的には Zip でなく、CombineLatest になります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://reactivex.io/documentation/operators/zip.html&quot;&gt;ReactiveX - Zip operator&lt;/a&gt; &lt;a href=&quot;http://reactivex.io/documentation/operators/combinelatest.html&quot;&gt;ReactiveX - CombineLatest operator&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;この記事では関数として定義してますが、もっと Rx 的に書けるように LiveData の拡張関数として書いてみました。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;fun &amp;#x3C;A, B&gt; LiveData&amp;#x3C;A&gt;.combineLatest(b: LiveData&amp;#x3C;B&gt;): LiveData&amp;#x3C;Pair&amp;#x3C;A, B&gt;&gt; {
    return MediatorLiveData&amp;#x3C;Pair&amp;#x3C;A, B&gt;&gt;().apply {
        var lastA: A? = null
        var lastB: B? = null

        fun update() {
            val localLastA = lastA
            val localLastB = lastB
            if (localLastA != null &amp;#x26;&amp;#x26; localLastB != null)
                value = Pair(localLastA, localLastB)
        }

        addSource(this@combineLatest) {
            lastA = it
            update()
        }
        addSource(b) {
            lastB = it
            update()
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで、LiveData だけで、ログイン画面で ID とパスワードの入力チェックが通ったらログインボタンを有効にする、というような処理もサクッとかけるようになります。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>[Android]RecyclerViewで角丸にする方法</title><link>https://note.muaaru.com/blog/2019-06-16-post-399</link><guid isPermaLink="true">https://note.muaaru.com/blog/2019-06-16-post-399</guid><description>[Android]RecyclerViewで角丸にする方法</description><pubDate>Sun, 16 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;RecyclerView で角丸にするには&lt;/h2&gt;
&lt;p&gt;Button などで角丸にするには android:background に角丸の shape を設定するれば実現できますが、 RecyclerView では中の View がはみ出してしまい、うまくいきません。&lt;/p&gt;
&lt;p&gt;そこで、API level 21 から追加された &lt;a href=&quot;https://developer.android.com/reference/kotlin/android/view/ViewOutlineProvider.html&quot;&gt;ViewOutlineProvider  |  Android Developers&lt;/a&gt; を使用します。&lt;/p&gt;
&lt;p&gt;Google 公式にサンプルもあります。 &lt;a href=&quot;https://github.com/googlesamples/android-ClippingBasic&quot;&gt;GitHub - googlesamples/android-ClippingBasic&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;実装してみる&lt;/h2&gt;
&lt;p&gt;Google 公式のサンプルでは、Java で実装されていて RecyclerView も使われていないので、 実際に、kotlin で RecyclerView に 角丸を実装してみました。 ついでに RecyclerView には &lt;a href=&quot;https://github.com/lisawray/groupie&quot;&gt;Groupie&lt;/a&gt; を適用して簡単にリスト表示をしています。&lt;/p&gt;
&lt;p&gt;実装的には非常に少ないので単純です。&lt;/p&gt;
&lt;p&gt;サンプルコードのプロジェクトファイルは下記においてあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/muaaru/testRecyclerViewRoundCorner&quot;&gt;GitHub - muaaru/testRecyclerViewRoundCorner&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FtestRecyclerViewRoundCorner.-hyfrWBM.gif&amp;#x26;w=320&amp;#x26;h=658&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4&gt;ViewOutlineProvider の実装&lt;/h4&gt;
&lt;p&gt;ViewOutlineProvider を継承したクラスを作成し、getOutline メソッドで角丸にする処理を記述します。 ドキュメントでは、記述されてませんが渡す値は px 単位になります。 なので、各値を dp から px に変換して渡しています。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;    class ClipOutlineProvider : ViewOutlineProvider() {
        override fun getOutline(view: View, outline: Outline) {
            val margin = dp2Px(10f, view.context).toInt()
            outline.setRoundRect(
                margin, margin, (view.width - margin), (view.height - margin),
                dp2Px(30f, view.context)
            )
        }

        private fun dp2Px(dp: Float, context: Context): Float {
            val metrics = context.resources.displayMetrics
            return dp * metrics.density
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;View に角丸を適用&lt;/h4&gt;
&lt;p&gt;あとは対象の View に下記のように ClipOutlineProvider のインスタンスをセットして clip を有効にすれば適用できます。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;    outlineProvider = ClipOutlineProvider()
    clipToOutline = true
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;RecyclerView でも、非常に簡単に角丸が実装できました。 最近だと API level 21 未満に対応するアプリも少ないかと思うので、普通はこれで十分でしょう。&lt;/p&gt;</content:encoded><h:img src="/_astro/Screenshot_1560646145.BEwSr2TX.png"/><enclosure url="/_astro/Screenshot_1560646145.BEwSr2TX.png"/></item><item><title>NavigationArchitectureComponentでSharedElementTransitionの遷移</title><link>https://note.muaaru.com/blog/2019-03-24-post-378</link><guid isPermaLink="true">https://note.muaaru.com/blog/2019-03-24-post-378</guid><description>[Android] Navigation Architecture Component で、Shared Element Transition を使用した遷移方法</description><pubDate>Sun, 24 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Navigation Architecture Component で、Shared Element Transition を使用した遷移方法&lt;/h2&gt;
&lt;p&gt;Android Architecture Components の　Navigation Architecture Component で、Shared Element Transition を使用した遷移方法が、よくわからなんかったので調査してみました。&lt;/p&gt;
&lt;p&gt;参考にしたコード &lt;a href=&quot;https://github.com/googlesamples/android-architecture-components/tree/master/GithubBrowserSample&quot;&gt;Github Browser Sample with Android Architecture Components&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;とりあえず、下記の２パターンで遷移できるとこまで作成&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通常のViewをクリックしただけの遷移&lt;/li&gt;
&lt;li&gt;RecyclerViewで表示されている要素からの遷移&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Navigation Component と Shared Elementsを使用した遷移&lt;/h2&gt;
&lt;p&gt;通常のNavigationComponentでの遷移時に、追加でFragmentNavigatorExtrasを使用してSharedElementsを指定します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;        view.findViewById&amp;#x3C;View&gt;(R.id.imageView).setOnClickListener {
            it.findNavController().navigate(
                TransitionSourceFragmentDirections.actionTransitionSourceFragmentToTransitionDestinationFragment(),
                FragmentNavigatorExtras(
                    it to &quot;testTransitionName&quot;
                )
            )
        }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;遷移先では、通常のSharedElementsを使用した遷移と同様に,Viewに同じtransitionNameを指定しておき、 遷移時のアニメーションを指定します。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(R.transition.move)
        return inflater.inflate(R.layout.fragment_transition_destination, container, false)
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで、NavigationComponentを使用しながら、ShareadElementsも使用して遷移ができるようになります。 バックボタンで、前の画面に戻る際にも、アニメーションが入るようになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/03/single_navigation_transition.gif&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Fsingle_navigation_transition-169x300.D9PxH3Le.gif&amp;#x26;w=169&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;RecyclerViewを使用している場合の実装&lt;/h2&gt;
&lt;p&gt;RecyclerViewで選択した要素から、遷移する場合は上記だけでは、うまく動作しません。&lt;/p&gt;
&lt;p&gt;追加で必要なポイントとしては、 * RecyclerViewの準備ができてから、遷移アニメーションを行うようにする * 要素ごとにユニークなtransitionNameを使用する になります。&lt;/p&gt;
&lt;p&gt;まず、RecyclerViewの準備ができてから〜、の部分はviewTreeObserverを使用します。 いったんpostponeEnterTransitionでアニメーションを止めて、RecyclerViewの描画が終了してからアニメーションを開始させます。&lt;/p&gt;
&lt;p&gt;これによって、バックボタンでRecyclerViewに戻った際にも、アニメーションが行われるようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        postponeEnterTransition()
        view.viewTreeObserver
            .addOnPreDrawListener {
                startPostponedEnterTransition()
                true
            }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次に、要素ごとにユニークなtransitionNameを使用するの部分は、 RecyclerView.Adapterで、各要素のViewをbindする際に、ユニークなtransitionNameをbindします。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;    override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
        val item = mValues[position]
        val transitionView = holder.itemView.findViewById&amp;#x3C;View&gt;(R.id.imageView)
        transitionView.transitionName = item.id

    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;遷移時には、遷移先のViewにtransitionNameを渡すようにします。 これで、遷移先でも同じtransitionNameを使用できます。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;    override fun onClickItem(transitionView: View) {
        view.findNavController().navigate(
            TransitionSourceGridFragmentDirections.actionTransitionSourceGridFragmentToTransitionDestinationGridFragment(
                transitionView.transitionName
            ),
            FragmentNavigatorExtras(
                transitionView to transitionView.transitionName
            )
        )
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;遷移先では、受け取ったtransitionNameを自身のViewにセットします。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        arguments?.let {
            view.findViewById&amp;#x3C;View&gt;(R.id.imageView).transitionName =
                TransitionDestinationGridFragmentArgs.fromBundle(it).transitionName
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/03/grid_navigation_transition.gif&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Fgrid_navigation_transition-169x300.Dh8G4htQ.gif&amp;#x26;w=169&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;全体のコードは、ココにおいてあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/muaaru/testNavigationComponent&quot;&gt;testNavigationComponent&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;やり方さえ分かれば、大した実装ではないです。 が、なかなかやり方がわからず、サンプルコードを見つけるまで苦労しました。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>島根からDroidKaigi2019に参加する 2日目</title><link>https://note.muaaru.com/blog/2019-02-09-post-369</link><guid isPermaLink="true">https://note.muaaru.com/blog/2019-02-09-post-369</guid><description>島根からDroidKaigi2019に参加する 2日目</description><pubDate>Sat, 09 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190208_094016-e1549718789876.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190208_094016-e1549718789876-300x225.zHoWv3hC.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;DroidKaigi2019 2日目、一部オフィスアワーにもいってみたのでメモを。&lt;/p&gt;
&lt;p&gt;2日目は朝食も用意されていていました。&lt;/p&gt;
&lt;p&gt;オフィスアワーでした質問の内容には、Q/Aとつけてあります。&lt;/p&gt;
&lt;h2&gt;Dialogflowによる自然言語処理(NLP)を用いたボイスコマンド音声認識の精度向上&lt;/h2&gt;
&lt;p&gt;DialogFlowによる自然言語処理(NLP)を用いたボイスコマンド音声認識の精度向上&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/kakka/20190208-droidkaigi2019&lt;/p&gt;
&lt;p&gt;登壇者 https://twitter.com/KAKKA_Blog&lt;/p&gt;
&lt;h4&gt;単純なボイスコマンドの場合&lt;/h4&gt;
&lt;p&gt;複雑なコマンドでなけれ、SpeechRecognizerだけで十分 ただし、認識は完璧ではないので表記揺れを考慮しとかないといけない。&lt;/p&gt;
&lt;p&gt;Q/A　どうやって表記ゆれを、集めているのか？ ＝＞アプリを使ってもらって集めているが、 何でもかんでも表記ゆれとして入れると、他のワードで逆に認識率が下がったりするので、 取捨選択が重要&lt;/p&gt;
&lt;h4&gt;複雑なボイスコマンドの場合&lt;/h4&gt;
&lt;p&gt;DialogFlowのように自然言語処理が必要&lt;/p&gt;
&lt;p&gt;DialogFlowを使うことで、自然言語処理について詳しくなくてもコンソールから設定すれば、認識機が作れる。&lt;/p&gt;
&lt;p&gt;ただし、固有名詞などを処理しようとすると、コツが必要になってくる。&lt;/p&gt;
&lt;h4&gt;認識率の改善について&lt;/h4&gt;
&lt;p&gt;ユーザが認識できないことを言わないようにするのも認識率改善の方法の一つ あらかじめできることを先にユーザに知らせておくのが重要&lt;/p&gt;
&lt;p&gt;誤認識の結果から、ユーザの意図を推測することが重要 　どれを学習させるのか、どれを認識の揺れとするのかなど、ここが一番泥臭いポイント&lt;/p&gt;
&lt;p&gt;そんな感じで３５％＝＞１７％台にまで誤認識を減らせた。&lt;/p&gt;
&lt;p&gt;Q/A 改善しても、それでも誤認識するものってどんなものがあったのか？ 上記の話は英語での話だったのだが、認識できなかったのは、 そもそも意味不明な内容だった。 どうやっても認識しようのないものというのも出てくる。&lt;/p&gt;
&lt;p&gt;↓の内容は、セッションの内容とは関係なかったのだが、会社で作っているアプリについても聞いてみた。 Q/A ActivityRecognitionとかセンサーの値を使った機能のデバッグはどうやっている？ カーシェアで車を借りて実際に試している。&lt;/p&gt;
&lt;h2&gt;Wi-Fi RTTによる屋内測位アプリを作ろう&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/70885&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/napplecomputer/wi-fi-rttniyoruwu-nei-ce-wei-apuriwozuo-rou&lt;/p&gt;
&lt;p&gt;登壇者 https://twitter.com/napplecomputer&lt;/p&gt;
&lt;p&gt;前のセッションのオフィスアワーがあったので、最初のほうが聞けていない。&lt;/p&gt;
&lt;p&gt;Google Wifiだけがしれっと対応しているとのこと。&lt;/p&gt;
&lt;p&gt;用途的に、イベントとかでないとつらそうな感じだった。 測位する場所の地図が必要だったり、専用のAPが必要だったりとハードルが高い。&lt;/p&gt;
&lt;p&gt;測位できる環境が作れても、センサーの値はかなりブレがある。 デモ動画があったが、何かしらフィルターをかけないと厳しいぐらいブレがあった。&lt;/p&gt;
&lt;h2&gt;カスタムブラウザの作り方 ー 実例から学ぶ Chrome と Firefox のカスタムビルド開発 ー&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/70785&lt;/p&gt;
&lt;p&gt;なんかレッサーパンダのぬいぐるみがおいてある。かわいい。&lt;/p&gt;
&lt;p&gt;ブラウザのビルド簡単なようで難しいという感じ。 ちょっとカスタムするなら内容にもよるが、簡単&lt;/p&gt;
&lt;p&gt;基本的にビルドはめちゃくちゃ大変　数時間単位&lt;/p&gt;
&lt;p&gt;AndroidのFirefoxやChrominiumをビルドしたい人は必見だが、めっちゃニッチでマニアック。&lt;/p&gt;
&lt;h2&gt;SpekでUnitTestを書こう&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/69464&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/moriiimo/unit-test-with-spek&lt;/p&gt;
&lt;p&gt;登壇者 https://twitter.com/moriiimo&lt;/p&gt;
&lt;h2&gt;Android EnterPriseで実現できる端末管理の世界&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/70820/&lt;/p&gt;
&lt;p&gt;MDM？ 　Mobile Device Management 　会社が従業員の端末を管理したい&lt;/p&gt;
&lt;p&gt;問題点 OSバージョアップで、制限できることが減ってしまっている&lt;/p&gt;
&lt;p&gt;そこで　Android　Enterprice　（元Android for Work）&lt;/p&gt;
&lt;h4&gt;Android　Enterprizeについて&lt;/h4&gt;
&lt;p&gt;Google Playの管理ができる ただし、Googleの許可が必要&lt;/p&gt;
&lt;p&gt;文鎮化デモ動画&lt;/p&gt;
&lt;h4&gt;注意点&lt;/h4&gt;
&lt;p&gt;Android9 からdepricated Android 10では　Enterprize に完全移行&lt;/p&gt;
&lt;p&gt;Q/A　キオスク端末とかで、通信ポート制限とかはできる？ ＝＞ポート制限する案件は結構あるけど、Enterprizeにその機能はないので、アプリ側で頑張るしかない。&lt;/p&gt;
&lt;h2&gt;Navigation Architecture Component によるアプリ内遷移の管理&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/70415/&lt;/p&gt;
&lt;p&gt;登壇者 https://twitter.com/yt_hizi&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/ytakahashi/navigation-architecture-component-niyoruapurinei-qian-yi-falseguan-li&lt;/p&gt;
&lt;p&gt;DeepLinkもnavigationのXMLとAndroidManifestに書くだけで実装できるので、めっちゃお手軽 しかも、DeepLinkでもバックスタックをちゃんと作ってくれて便利&lt;/p&gt;
&lt;p&gt;マルチモジュールでNavigation使おうとするとツライ アクティビティ名をハードコーティングしたり、リフレクションを使うことになる&lt;/p&gt;
&lt;p&gt;現状は共通モジュールにNavigationをもたせてリフレクションさせるのが良さそう 今回のDroidKaigi2019のような構成&lt;/p&gt;
&lt;h2&gt;ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~&lt;/h2&gt;
&lt;p&gt;スライド https://www.slideshare.net/SaikiIijima/tdd-130994383&lt;/p&gt;
&lt;p&gt;画面分割して、テストとソースを並べて、かなり頻繁に行き来しながら書いていく&lt;/p&gt;
&lt;p&gt;テストを通す以上に実装してはならないルールを守るのかなり難しそう 自分のテストコードの書き方の考えとめちゃくちゃ乖離していた。&lt;/p&gt;
&lt;p&gt;自分の想像以上にテストコードとソースの行き来が多い&lt;/p&gt;
&lt;p&gt;工数の見積もりは、実装にテストも含める （＜＝　実装と切り離せないくらい行き来するから）&lt;/p&gt;
&lt;p&gt;テストの粒度 テストは１つの振る舞いごとに書く&lt;/p&gt;
&lt;h2&gt;BLEアプリ設計パターン&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/70753&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/tomohikosato/ble-app-pattern&lt;/p&gt;
&lt;p&gt;登壇者 https://twitter.com/8yabusa&lt;/p&gt;
&lt;p&gt;Qrio Lockアプリのノウハウの紹介&lt;/p&gt;
&lt;p&gt;BLE 低用量（バイト単位）で低頻度の通信が得意 Bluetoothだと1ヶ月しか持たないバッテリーが1年持つようになる。&lt;/p&gt;
&lt;p&gt;BLEには、20バイトの壁がある&lt;/p&gt;
&lt;p&gt;BLEの通信経路は暗号化されないので自前で用意しないといけない。 あるにはあるが、使える状況がかぎられる。&lt;/p&gt;
&lt;p&gt;低レイヤーの部分を結構自作する必要があって、いろいろ辛い。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;本当はコードラボにも行ってみようと思っていたが、部屋が満員で入れなかった。&lt;/p&gt;
&lt;p&gt;オフィスアワーは現地へ行っているからこその部分なので、もっと行っておけば良かったと思った。 けど、あんまりオフィスアワーに来ている人が少ない感じだった。&lt;/p&gt;
&lt;p&gt;セッションはあとからでもYoutubeで見れるはずなので、現地へ行ってるならオフィスアワーに積極的に行くべき。&lt;/p&gt;
&lt;p&gt;1日中内容の濃いセッションを聞き続けて、かなりハードであった。 最後の方のセッションは本当にヘトヘト状態になっていた。&lt;/p&gt;
&lt;p&gt;この2日間、かなりの知見が得られたり、いろいろと体験できた。 ぜひ一度、現地へ行って、あの熱気にあふれる空間を体験してみると良いかもしれない。&lt;/p&gt;
&lt;p&gt;ただし、来年は会社のお金で行こう。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190209_205142.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190209_205142-300x225.OfW-rLeP.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_20190208_094016-e1549718789876.QgH9n_sT.jpg"/><enclosure url="/_astro/IMG_20190208_094016-e1549718789876.QgH9n_sT.jpg"/></item><item><title>島根からDroidKaigi2019に参加する 1日目</title><link>https://note.muaaru.com/blog/2019-02-08-post-362</link><guid isPermaLink="true">https://note.muaaru.com/blog/2019-02-08-post-362</guid><description>島根からDroidKaigi2019に参加する 1日目</description><pubDate>Fri, 08 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190207_115227.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190207_115227-300x225.B1umbIF2.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;DroidKaigi2019 1日目、DroidKaigiに初参加してきたのでメモを。&lt;/p&gt;
&lt;h2&gt;マルチモジュールなプロジェクトでテストはどう変わる？&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/70713&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/tkmnzm/how-change-testing-in-modular-architecture&lt;/p&gt;
&lt;p&gt;PITというテスト用のライブラリ？ツール？が気になった。 機械的にソースを変えて、ちゃんとテストで変更を拾えるか確認するやつらしい。 境界値テストを見つけるのに役立つということで、テストの漏れなどのチェックができるらしい。&lt;/p&gt;
&lt;p&gt;Qiitaに記事を見つけたので、見ておきたい。 https://qiita.com/tkmnzm/items/36d8332e58c1d71bd037&lt;/p&gt;
&lt;h2&gt;マルチモジュールプロジェクトでのDagger2を用いたDependency Injection&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/68629&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/kgmyshin/android-multi-module-with-dagger&lt;/p&gt;
&lt;p&gt;Dagger2を使い始めるときに、仕組みとか概念がいまいちよくわからなくて苦労したのだが、 このセッションのDaggerがinjectする仕組みの説明の部分がわかりやすかった。&lt;/p&gt;
&lt;p&gt;スライドに手書きで説明書いてるのが、硬すぎなくて良い印象的だった。&lt;/p&gt;
&lt;h2&gt;マテリアルデザインの起源とベースとなる哲学&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/69850&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/ken0331/materiarudezainfalseqi-yuan-tobesutonaruzhe-xue&lt;/p&gt;
&lt;p&gt;マテリアルデザイン作った人 マティアス・デュアルテ氏&lt;/p&gt;
&lt;p&gt;自分としては、一番印象に残っているセッション。&lt;/p&gt;
&lt;p&gt;人間は、どう動くかよくわからないものや予想と異なる動きをされるとストレスを感じる。 なので、老若男女問わずに理解できる物理法則が重視されている。&lt;/p&gt;
&lt;p&gt;マテリアルデザインは絶対ではないし、場合によっては外れることも必要という感じのことを言っていたような気がする。 例えば、BottomNabigationはもともとマテリアルデザインになかった？が、今は取り入れられている。&lt;/p&gt;
&lt;p&gt;マテリアルデザインはあくまで手段であって目的ではないのだな、という感じに思った。&lt;/p&gt;
&lt;h2&gt;Master of Android Theme&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/70938&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/konifar/master-of-android-theme&lt;/p&gt;
&lt;p&gt;英語のセッションだった。 同時通訳のレシーバーが全席に置いてあってすごい。 これは今年からの取り組みらしい。&lt;/p&gt;
&lt;p&gt;どういう場合にThemeを使えばいいか、どうやって独自のThemeを作っていくかを説明していた。&lt;/p&gt;
&lt;h2&gt;Understanding Kotlin Coroutines: コルーチンで進化するアプリケーション開発&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/70802&lt;/p&gt;
&lt;p&gt;スライド https://speakerdeck.com/mhidaka/understanding-kotlin-coroutines-korutindejin-hua-suruapurikesiyonkai-fa&lt;/p&gt;
&lt;p&gt;超満員のセッションだった&lt;/p&gt;
&lt;p&gt;並行処理と並列処理の説明が、いまだによく理解できていない。&lt;/p&gt;
&lt;p&gt;全体的にJavaのFutureのような雰囲気のものに感じたが、さらに扱いやすくなった感じか。&lt;/p&gt;
&lt;p&gt;Rxとどちらを使えばいいのか判断が難しそうである。 Rxから移行はしやすいようになっているとは言っていた。&lt;/p&gt;
&lt;p&gt;ドキュメントなど見ながら実際に使ってみないと、理解が難しそうである。&lt;/p&gt;
&lt;h2&gt;From Monolithic to Modularized codebase with Dagger&lt;/h2&gt;
&lt;p&gt;https://droidkaigi.jp/2019/timetable/70516&lt;/p&gt;
&lt;p&gt;スライド https://drive.google.com/file/d/1rICcpOK-5ly61KLqkyTlhgvAPKL18OPs/view&lt;/p&gt;
&lt;p&gt;Android パターン設計の本に載っていたメルカリアプリの話をさらに詳しくした説明するセッション&lt;/p&gt;
&lt;p&gt;Dynamic feature moduleは、まだちょっとつらそうな感じ 　＝＞　今年のGoogleIOでどう変わるか注目というところか&lt;/p&gt;
&lt;h2&gt;展示ブース&lt;/h2&gt;
&lt;h3&gt;MOV&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;タクシー配車アプリ
https://m-o-v.jp/
タクシーに載っている機器にシリアル接続データを取り出してBluetoothでアプリと接続していた。
バックエンドにはAWSとGCPを組み合わせていたのも気になった。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;JAPAN TAXI&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;タクシー配車アプリ
ハードウェア周りとかMOVと変わらない感じ。
バックエンドはAWSだけのようだった。
実際に決済するところまでデモをしていてわかりやすかった。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;CREW&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;タクシーではなく普通の車を配車するUber的なアプリ
https://crewcrew.jp/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;とりあえずメモからまとめてみたが、まだまとめきれていないし、消化しきれていない。&lt;/p&gt;
&lt;p&gt;特に午後以降のセッションが疲れてしまってあまり理解できていないものが多いので、 島根に帰ってからメモとスライドを突き合わせて消化していきたい。&lt;/p&gt;
&lt;p&gt;あと予習、大事な気がした。 セッションだけだと、なかなかついていけない。&lt;/p&gt;
&lt;p&gt;明日は、発表後の質問コーナー（なんていうか忘れた）にも行ってみよう。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190207_192727-e1549584075801.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190207_192727-e1549584075801-300x225.CSmYKsVD.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_20190207_192727-e1549584075801.BABPalt3.jpg"/><enclosure url="/_astro/IMG_20190207_192727-e1549584075801.BABPalt3.jpg"/></item><item><title>島根からDroidKaigi2019に参加する 0日目</title><link>https://note.muaaru.com/blog/2019-02-07-post-343</link><guid isPermaLink="true">https://note.muaaru.com/blog/2019-02-07-post-343</guid><description>島根からDroidKaigi2019に参加する 0日目</description><pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;島根からDroidKaigi2019に参加する 0日目&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190206_103136-e1549495797425.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190206_103136-e1549495797425-225x300.DW5CnyOG.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;DroidKaigiというのは、簡単に言うとAndroid開発のすごい人がいっぱい集まるイベントです。&lt;/p&gt;
&lt;p&gt;去年のDroidKaigi2018のセッションの動画がYoutubeで配信されていたのを見て、知りました。&lt;/p&gt;
&lt;p&gt;Android開発での知見満載で、昨年は実際に業務でも役立った内容があったので、 今年は直接会場に乗り込むことにしました。&lt;/p&gt;
&lt;p&gt;今年もYoutubeにセッションの動画は残るようです。&lt;/p&gt;
&lt;h2&gt;交通費、宿泊費、もろもろの費用&lt;/h2&gt;
&lt;p&gt;東京に住んでいないので当然ですが、それなりに費用がかかります。 自分はいろいろ抑えて下記の費用と+αで食費などという感じです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;合計　49,280円
    航空券(往復) 25,080円
    宿泊費（3泊） 9,200円
    DroidKaigi参加チケット 15,000円
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;交通費&lt;/h3&gt;
&lt;p&gt;松江から東京への飛行機代が、早期割引で往復25,000円ほどです。 &lt;a href=&quot;https://www.tour.ne.jp/&quot;&gt;トラベルコ&lt;/a&gt;で検索して、&lt;a href=&quot;https://www.airtrip.jp/&quot;&gt;エアトリ&lt;/a&gt;で購入しました。&lt;/p&gt;
&lt;p&gt;松江からは隣の鳥取県にある米子空港のほうが近いので、そちらの便にしました。&lt;/p&gt;
&lt;p&gt;米子区港までだと下道で車で30分ほどです。 出雲空港も高速を使えば同じく30分ほどで着きます。&lt;/p&gt;
&lt;p&gt;松江周辺にある出雲空港も米子空港も、空港の駐車場が無料なので助かります。&lt;/p&gt;
&lt;p&gt;今だけですが、米子空港にはカニ汁蛇口があってお得な感じです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190206_102446-e1549495780435.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190206_102446-e1549495780435-225x300.Ot6G6SFm.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/00100lPORTRAIT_00100_BURST20190206110148684_COVER.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F00100lPORTRAIT_00100_BURST20190206110148684_COVER-300x225.CHCDFlL3.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190206_110558.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190206_110558-300x225.CGlS-LBJ.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;宿泊費&lt;/h3&gt;
&lt;p&gt;宿泊費が、DroidKaigi当日移動では、間に合わないので前乗りするため３泊になります。 自分は寝て風呂に入れればいいという感じなので、トラベルコで探して&lt;a href=&quot;https://first-cabin.jp/hotels/33&quot;&gt;ファーストキャビン&lt;/a&gt;に決めました。&lt;/p&gt;
&lt;p&gt;市ヶ谷駅のすぐ近くで、周辺に飲食店や24時間営業のスーパーがあり、便利でした。 市ヶ谷駅から会場のある新宿へ電車一本で行けて便利です。&lt;/p&gt;
&lt;p&gt;最近できたばかりなので非常にキレイです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190206_183031.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190206_183031-300x225.CuJNCMim.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190206_184147-e1549495819723.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190206_184147-e1549495819723-225x300.BWpnc1NS.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;風呂もキレイで良かったです。 コインランドリーが、家庭用のドラム式洗濯機で洗濯と乾燥がいっぺんにできるのもいい感じです。&lt;/p&gt;
&lt;p&gt;朝食は微妙そうだったので、朝食無しのプランにしました。&lt;/p&gt;
&lt;p&gt;会場近くに朝食が食べれそうな場所が、いろいろとあったので、 通勤ラッシュを避けるためにも早めに出て、そっちで食べるようにしました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190206_202350.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190206_202350-300x225.DPGuOY0X.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/02/IMG_20190206_202821.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190206_202821-300x225.NdA-D8HR.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;DroidKaigi参加チケット&lt;/h3&gt;
&lt;p&gt;DroidKaigiのチケット代が15,000円となります。 ２日間の昼食代と１日目のパーティー代が含まれているようです。 ２日目だけ朝食も数量限定であるようです。&lt;/p&gt;
&lt;p&gt;早期申込みなら10,000円なんですが、速攻売り切れてました。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;やはり地方から東京のイベントに参加、となると費用がかさみます。 その分、いろいろと経験値を稼いで帰りたいと思います。&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_20190206_103136-e1549495797425.B6McpING.jpg"/><enclosure url="/_astro/IMG_20190206_103136-e1549495797425.B6McpING.jpg"/></item><item><title>Mac mini 2018を買ってしばらく使ってみて</title><link>https://note.muaaru.com/blog/2019-01-30-post-329</link><guid isPermaLink="true">https://note.muaaru.com/blog/2019-01-30-post-329</guid><description>Mac mini 2018を買ってしばらく使ってみて</description><pubDate>Wed, 30 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/01/IMG_20181215_161535.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181215_161535-300x225.hJ8hwBsI.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;購入したMac miniの構成&lt;/h2&gt;
&lt;p&gt;以前、&lt;a href=&quot;https://www.muaaru.com/2018/11/01/post-202/&quot;&gt;5年は戦える構成&lt;/a&gt;を考えましたが、基本的にはあの構成と同じです。 違いは、メモリとEthernet端子です。&lt;/p&gt;
&lt;h3&gt;メモリ&lt;/h3&gt;
&lt;p&gt;メモリは16GBに上げました。 これは自分でメモリ交換するのとアップルストアでカスタムするのとで、金額にあまり差がなかったからです。 Androidアプリ開発などをしようと思うと8GBでは、少々心もとないので16GBにしました。 ただ、今後メモリ価格が下がっていくようなら自分で交換したほうがいいと思います。&lt;/p&gt;
&lt;h3&gt;Ethernet&lt;/h3&gt;
&lt;p&gt;Ethernet端子ですが、これは1Gに下げました。&lt;/p&gt;
&lt;p&gt;これは、10Gb Ethernet関係の機材が、まだ結構高いというのがあります。&lt;/p&gt;
&lt;p&gt;企業とかで今すぐ10Gb Ethernet環境があるんであれば、つけたほうが良いとは思いますが、 正直、個人で使う分には、まだつけなくても良いと思います。&lt;/p&gt;
&lt;p&gt;それに、USB-C端子に接続する10Gb Ethernetの変換アダプターというのがありまして、 あとからでも追加できるということで、10Gb Ethernetにはしませんでした。&lt;/p&gt;
&lt;p&gt;５年後くらいなら普及してるかもとも思いますが、そのときは新しいMacに買い換えるべきでしょう。&lt;/p&gt;
&lt;h2&gt;キーボードとかマウスとか&lt;/h2&gt;
&lt;p&gt;キーボードはApple純正の初期型のBluetoothキーボードがあったので、それを使おうと思ったのですが。 長年しまっておいたせいなのか、誤入力が連発して使い物にならなかったので新しいのを買いました。&lt;/p&gt;
&lt;p&gt;AnkerのテンキーレスUS配列のBluetoothキーボードです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/Anker-%E3%82%A6%E3%83%AB%E3%83%88%E3%83%A9%E3%82%B9%E3%83%AA%E3%83%A0-Bluetooth-%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%AC%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-Android/dp/B00U260UR0&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ぱっと見、Apple純正のキーボードにめっちゃ似てますが、実物はプラスチック感満載なので、質感とかは似ても似つかないです。安っぽい。 値段が2000円以下の激安なので、こんなもんかと思います。 キーの配列がMacと一緒なので使いやすいです。&lt;/p&gt;
&lt;p&gt;マウスの方は、Apple純正の初期型のトラックパッドを使用してます。 こっちは誤入力とかは起きてないのでそのまま使ってます。&lt;/p&gt;
&lt;h2&gt;使ってみて&lt;/h2&gt;
&lt;p&gt;普通に使っている分にはマシンパワーを使い切ることはできないくらい余裕があります。&lt;/p&gt;
&lt;p&gt;AndroidStudioで大きいプロジェクトをビルドすると真価を発揮する感じです。&lt;/p&gt;
&lt;p&gt;それでもCPU使用率80%くらいまでだったりします。 ただ、ここまで負荷をかけると、さすがにファンが回りだします。 地味にうるさいのと、本体もそれなりに熱くなります。&lt;/p&gt;
&lt;p&gt;最近のデスクトップPCだと結構静かなやつが多いので、ちょっと気になりました。 音的にはノートPCからするようなファンの音です。&lt;/p&gt;
&lt;p&gt;ただ、そもそもファンが回りだすほど負荷をかけようと思うと、 上記のように相当重い処理でないといけないので、普段はほぼ無音です。&lt;/p&gt;
&lt;p&gt;4Kモニターもつなげてみましたが、カクつきもなく快適に使えます。&lt;/p&gt;
&lt;p&gt;USBも最近増えてきたtype-Cだけでなく、普通のtype-Aを挿せるので便利です。&lt;/p&gt;
&lt;h2&gt;リモート接続&lt;/h2&gt;
&lt;p&gt;VPN接続してMac標準の画面共有で出先から接続したりしています。&lt;/p&gt;
&lt;p&gt;回線によりますが、テキストを打ち込んだりとかする分には、ちょっとラグがあるかなと言う感じですが十分な使い心地です。&lt;/p&gt;
&lt;p&gt;ただ、他のMacBook Proなどから画面共有で接続すると、 解像度の関係で画面が滲んだような汚い感じになったり、 余白ができたりして気になっていました。&lt;/p&gt;
&lt;p&gt;そこで、Quick Resという解像度をいじるソフトを使ってます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.thnkdev.com/QuickRes/&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これを使うといろいろと解像度が選択できるようになります。 MacBook Proとかであれば、1280*800(HiDpi)を選択すると綺麗に表示できるようになります。&lt;/p&gt;
&lt;p&gt;あと画面共有だと接続先のマシンにスワイプの操作が送る方法がわからないんですが、 もうそこは割り切ってCommand+Shift+tabでウィンドウ切り替えでやってます。&lt;/p&gt;
&lt;p&gt;という感じで、 5年以上前に買ったMacbookAir(mid 2013)でも、開発にリモートでMac miniのパワーが使えるので非常に快適です。&lt;/p&gt;
&lt;h2&gt;持ち運び&lt;/h2&gt;
&lt;p&gt;結構サイズが小さいのもあって、持ち運んでつかえたりします。 実家に帰ったときなど、普通にバッグに本体やらケーブルやら入れて持ち帰って使ってました。&lt;/p&gt;
&lt;p&gt;あとはiPadのアプリを使ってMac miniと接続すれば画面が出せるので、テレビとかモニタがなくても普通に使えたりします。&lt;/p&gt;
&lt;p&gt;Mac mini キーボート トラックパッド ipad pro 電源ケーブル ライトニングケーブル&lt;/p&gt;
&lt;p&gt;上記を持ち歩けばどこでもデスクトップのパワーが手に入ります。 少し大きめのカバンであれば余裕で入ります。&lt;/p&gt;
&lt;p&gt;とはいえ、 ネット環境がない場所ならアレですが、 別に持ち運ばなくてもリモート接続して使えば十分です。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;自分としては、今回のMac miniは買って正解でした。&lt;/p&gt;
&lt;p&gt;メモリもその気になれば増量可能ですが、今のとこは16Gで事足りています。&lt;/p&gt;
&lt;p&gt;SSDの容量は128Gだとちょっと狭い感じなんですが、AppleStoreだとやはり割高な感じです。 ここのところSSDの値段が下がり気味なので余計割高になってます。&lt;/p&gt;
&lt;p&gt;なので、USB-C接続の外付けSSDで誤魔化してます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%83%A9%E3%83%88%E3%83%83%E3%82%AF%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0-USB-C-SATA-%E5%A4%89%E6%8F%9B%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%83%BC-REX-U30ST3-C/dp/B01BKXROMC/ref=pd_sbs_0_3?_encoding=UTF8&amp;#x26;pd_rd_i=B01BKXROMC&amp;#x26;pd_rd_r=1aa3493a-2490-11e9-8bb4-3f81336e79c1&amp;#x26;pd_rd_w=Crlme&amp;#x26;pd_rd_wg=ADSLT&amp;#x26;pf_rd_p=cda7018a-662b-401f-9c16-bd4ec317039e&amp;#x26;pf_rd_r=YJQZ24RGBXVC04CET5X5&amp;#x26;psc=1&amp;#x26;refRID=YJQZ24RGBXVC04CET5X5&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;内蔵SSDと比べると速度は遅くなりますが、正直気にならないです。 自分はDropboxとかGoogleDriveの同期フォルダやらiTunesのフォルダなんかを外付けに退避させてます。 なので、読み込みが遅くて気になるとかもないです。 そもそもSSDなので遅いと言っても速いです。&lt;/p&gt;
&lt;p&gt;今なら分割で支払っても24回までなら金利０円キャンペーンも延長してるので買うなら今のうちですかね。&lt;a href=&quot;https://iphone-mania.jp/news-238343/&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_20181215_161535.D9NNHWqw.jpg"/><enclosure url="/_astro/IMG_20181215_161535.D9NNHWqw.jpg"/></item><item><title>Webサイトで離脱確認を実装する際に詰まった</title><link>https://note.muaaru.com/blog/2019-01-29-post-323</link><guid isPermaLink="true">https://note.muaaru.com/blog/2019-01-29-post-323</guid><description>Webサイトで離脱確認を実装する際に詰まった</description><pubDate>Tue, 29 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;ページを離れる際に警告を出したい&lt;/h2&gt;
&lt;p&gt;Webアプリの設定ページだと、 設定を編集中の状態で、ユーザがページを移動しようとした際に、 データが保存されていないことを警告したい場合があります。&lt;/p&gt;
&lt;p&gt;このような機能を実装しようとしたのですが、 実装して、いざ各ブラウザで動作確認すると正常に動作しない場合があったので、 まとめておきます。&lt;/p&gt;
&lt;h2&gt;beforeunloadイベントが、SafariとiOSだけ動作がかなり違う&lt;/h2&gt;
&lt;p&gt;上記で説明したようなことをしようと思うと、 beforeunloadイベントのメソッドを実装すると思います。&lt;/p&gt;
&lt;p&gt;ただ、iOSの場合、このbeforeunload自体が発火しません。&lt;/p&gt;
&lt;p&gt;このあたりで確認して見ると、 https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload&lt;/p&gt;
&lt;p&gt;Mobile Safariはbeforeunloadが未実装であると書かれてるんですが、 iOSのChromeでも発火しません。&lt;/p&gt;
&lt;p&gt;PCのSafariの場合は、一応beforeunloadが発火します。 しかし、他のブラウザと違い、 表示されたダイアログで、一度ページを移動するを選択すると、 それ以降はbeforeunloadが発火してもダイアログが表示されなくなりました。&lt;/p&gt;
&lt;p&gt;ダイアログの選択がキャッシュされるようで、ブラウザのリロードをすると再度表示されるようになります。 ただ、バックフォワードキャッシュでもないようで、結局２回目以降にダイアログを表示させる方法が見つかりませんでした。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;入力が変わった時点で都度変更を保存するというのが、一番マシな方法になるのかなぁと思います。 なんか他にいい方法ないもんでしょうかね？&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>MR-Sが15万km到達とオイル交換の話</title><link>https://note.muaaru.com/blog/2019-01-13-post-310</link><guid isPermaLink="true">https://note.muaaru.com/blog/2019-01-13-post-310</guid><description>MR-Sが15万km到達とオイル交換の話</description><pubDate>Sun, 13 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;走行距離 15万km到達&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/01/IMG_20190109_182238-e1547371040905.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190109_182238-e1547371040905-300x189.AglHL3OX.jpg&amp;#x26;w=300&amp;#x26;h=189&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;中古で10万kmぐらいの車両を買ってから3年で5万kmくらいで、 走行距離が15万kmに到達しました。&lt;/p&gt;
&lt;p&gt;通勤やら買い物、ぶらぶらドライブといろいろ走りました。 島根だと信号が少なくて流れも早かったりするので、下道でもあっという間に40~50km走ってたりします。&lt;/p&gt;
&lt;p&gt;オイル交換もだいたい３ヶ月〜４ヶ月に一回とシーズンごとに交換してる感じです。&lt;/p&gt;
&lt;h2&gt;オイル交換&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2019/01/IMG_20190113_174508-e1547371118820.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20190113_174508-e1547371118820-284x300.D6HgUoMy.jpg&amp;#x26;w=284&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以前はディーラで変えてもらってましたが、 自分でやるようになってからは、Castrol EDGE 5W-40 4L を使ってます。&lt;/p&gt;
&lt;p&gt;MR-Sはもともと5w-30が指定オイルになるんですが、 10万km超えということで少し固めのやつがいいかなと思い、Amazonだと4L缶で3000円くらいと結構手頃なので、これにしてます。 このオイル、なぜか20Lで買うよりも4Lで買うほうが単価が安いです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B003U3LU0S/ref=ppx_yo_dt_b_asin_title_o00__o00_s00?ie=UTF8&amp;#x26;psc=1&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MR-Sはオイルフィルターも交換して、3.7Lなので4L缶でちょうどいいかちょっと余る感じになります。&lt;/p&gt;
&lt;p&gt;だいたい交換してから5000km超えてくるとエンジン音がやかましくなってくるのでわかりやすいです。 エンジンオイル交換後は、エンジン音が明らかに静かになります。&lt;/p&gt;
&lt;p&gt;オイルフィルターやらパッキンはモノタロウで、純正のものを購入してます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.monotaro.com/p/2934/4726/?displayId=5&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.monotaro.com/p/2933/3842/?displayId=5&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;モノタロウブランドの数百円のオイルフィルターもありますが、たいして値段が変わるわけではないので、 気分も安心の純正品を使用してます。&lt;/p&gt;
&lt;p&gt;オイルの廃棄ボックスはネットで買うといまいち安くないので、近くのホームセンターで200~300円くらいで買っています。 Amazonとかだとムダに高いです。 4.5Lのやつがちょうどいいサイズになります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%82%A8%E3%83%BC%E3%83%A2%E3%83%B3-%E3%83%9D%E3%82%A4%E3%83%91%E3%83%83%E3%82%AF-%E5%BB%83%E6%B2%B9%E5%87%A6%E7%90%86%E7%AE%B1-4-5L-1604/dp/B0035UUBNS/ref=sr_1_6?s=automotive&amp;#x26;ie=UTF8&amp;#x26;qid=1547371410&amp;#x26;sr=1-6&amp;#x26;keywords=%E3%82%AA%E3%82%A4%E3%83%AB%E4%BA%A4%E6%8F%9B&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MR-Sは、オイル交換ぐらいなら、プラスチック製とかのラダーレールとか木材に乗せてやれば ジャッキアップせずとも作業空間が確保できるので楽です。&lt;/p&gt;
&lt;p&gt;作業時間もオイルフィルターやら交換しても片付け含めて1時間くらいでできました。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;次は20万kmを目指して、またいろいろ走り回って行こうと思います。 とりあえず次は九州か東海地方あたりにでもいってみたいと思ってます。&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_20190109_182238-e1547371040905.BFMGzS1g.jpg"/><enclosure url="/_astro/IMG_20190109_182238-e1547371040905.BFMGzS1g.jpg"/></item><item><title>MR-SのスパークプラグをNGKのプレミアムRXプラグに交換してみた</title><link>https://note.muaaru.com/blog/2018-12-10-post-279</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-12-10-post-279</guid><description>MR-SのスパークプラグをNGKのプレミアムRXプラグに交換してみた</description><pubDate>Mon, 10 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;スパークプラグ交換&lt;/h2&gt;
&lt;p&gt;中古車で買ってからディーラーで整備してもらったので、今ついてるのは純正のスパークプラグです。&lt;/p&gt;
&lt;p&gt;数年前のことなので、もう寿命になっているはずということでスパークプラグを交換することにしました。&lt;/p&gt;
&lt;p&gt;ネットなどを見てると純正のやつからイリジウムなどの高いプラグに交換すると、結構体感できるほどよくなるということだったので、 どうせ変えるならいいやつにしとこうかと思い、NGKのプレミアムRXプラグという１本1500円ほどの高いプラグに交換してみました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ngk-sparkplugs.jp/products/sparkplugs/rx/index.html&quot;&gt;NGK プレミアムRXプラグ&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;交換に必要なもの&lt;/h2&gt;
&lt;h3&gt;必要な工具&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_110724-e1544452289794.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_110724-e1544452289794-300x242.BocrtN1r.jpg&amp;#x26;w=300&amp;#x26;h=242&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回もAmazonやらモノタロウで揃えました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;16mmのプラグソケット(マグネット付き) 結構マグネットが強力で、少々手荒に扱ってもプラグが落下しそうにないくらい強力です。&lt;a href=&quot;https://www.monotaro.com/p/0558/3418/&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;T型レンチ コレ一本あるだけで作業がめちゃくちゃ楽になります。エクステンダーも必要ないので便利でした。&lt;a href=&quot;https://www.amazon.co.jp/ASTRO-PRODUCTS-02-18281-8DR-T%E5%9E%8B%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AB/dp/B01MAVPBRS/ref=sr_1_4?s=automotive&amp;#x26;ie=UTF8&amp;#x26;qid=1544448230&amp;#x26;sr=1-4&amp;#x26;keywords=T%E5%9E%8B%E3%83%AC%E3%83%B3%E3%83%81&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;スピンナハンドル タワ−バーが結構なトルクで締めてあるので、チカラをかけやすい大きめのやつがないと緩まないです。&lt;a href=&quot;https://www.amazon.co.jp/SK11-%E3%82%B9%E3%83%94%E3%83%B3%E3%83%8A%E3%83%BC%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AB-9-5mm-8%E3%82%A4%E3%83%B3%E3%83%81-SFH3/dp/B003YUG8EU/ref=pd_sbs_60_6?_encoding=UTF8&amp;#x26;pd_rd_i=B003YUG8EU&amp;#x26;pd_rd_r=8e13b638-fc80-11e8-bfbf-dd43b077b391&amp;#x26;pd_rd_w=mWenb&amp;#x26;pd_rd_wg=GlLHY&amp;#x26;pf_rd_p=cda7018a-662b-401f-9c16-bd4ec317039e&amp;#x26;pf_rd_r=GC01JF6ASHSJA6TTDQBX&amp;#x26;psc=1&amp;#x26;refRID=GC01JF6ASHSJA6TTDQBX&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;10mm,14mmのソケット リアのタワーバーや、コネクターを固定しているボルトを外すのに使います。&lt;a href=&quot;https://www.amazon.co.jp/%E3%80%90%E3%82%A2%E3%82%B9%E3%83%88%E3%83%AD%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%84%E3%80%91AP-3-8DR-%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88-9%E5%80%8B%E3%82%BB%E3%83%83%E3%83%88/dp/B018K1S3SG/ref=sr_1_3?ie=UTF8&amp;#x26;qid=1544448302&amp;#x26;sr=8-3&amp;#x26;keywords=%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%82%BB%E3%83%83%E3%83%88%E3%80%80%E3%82%A2%E3%82%B9%E3%83%88%E3%83%AD%E3%80%803%2F8&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;クリップリムーブハンドル 内装のクリップなどを外す工具ですが、今回は電気系のソケットを外すのに使います。 なければマイナスドライバなどで。&lt;a href=&quot;https://www.amazon.co.jp/%E3%82%A2%E3%82%B9%E3%83%88%E3%83%AD%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%84-%E3%80%90%E3%82%A2%E3%82%B9%E3%83%88%E3%83%AD%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%84%E3%80%91AP-%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%AA%E3%83%A0%E3%83%BC%E3%83%96%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AB-V%E5%9E%8B/dp/B002RL3TK8/ref=sr_1_1?ie=UTF8&amp;#x26;qid=1544449407&amp;#x26;sr=8-1&amp;#x26;keywords=%E5%86%85%E8%A3%85%E5%89%A5%E3%81%8C%E3%81%97%E3%80%80%E3%82%A2%E3%82%B9%E3%83%88%E3%83%AD&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;必要な部品&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;NGKのプレミアムRXプラグ MR-Sは熱価5なので、品番：BKR5ERX-11Pを使用します。 4気筒なので４本用意します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/NGK-%E3%82%A8%E3%83%8C%E3%82%B8%E3%83%BC%E3%82%B1%E3%83%BC-RX%E3%83%97%E3%83%A9%E3%82%B0-%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB-%E3%80%9093228%E3%80%91BKR5ERX-11P/dp/B005CEM09I&quot;&gt;&lt;/a&gt;I&lt;/p&gt;
&lt;h2&gt;交換してみる&lt;/h2&gt;
&lt;p&gt;エンジンルームを開けて、スパークプラグを交換していきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;タワーバーを外す スパークプラグの上にタワーバーがあるので、作業をしやすいように先に外します。 すべて14mmで4箇所で止まっています。 70~80くらいのトルクがかかってるので、スピンナハンドルを使って緩めます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;　　　&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_104318.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_104318-300x225.CuFGjhUB.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;電気関係のケーブルなどを外していく ケーブルがコイルにつながっているので、ソケットの爪を外していきます。 ケーブルがつながるプラスチックのバーもボルト外して、外しておきます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_104753.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_104753-300x225.DPteF6Aa.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_104852-e1544451411509.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_104852-e1544451411509-300x225.CKi9yzEd.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;コイルを抜いて、古いスパークプラグを外す コイルを固定してるボルトを外して、コイルを抜きます。 T型レンチにプラグソケットをつけて、古いプラグを外します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_104926-e1544451581145.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_104926-e1544451581145-300x225.CVMrbugm.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_105010-e1544451624541.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_105010-e1544451624541-300x225.1RxuAGkH.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_105055-e1544451658914.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_105055-e1544451658914-300x225.BE96YijY.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新しいスパークプラグを取り付ける 新しいスパークプラグをプラグソケットにはめて、ぶつけないように慎重にはめ込みます。 軽く回していって固くなったところから、更に1/2回転させて、プラグのガスケットを潰して密着させます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_105235-e1544451762498.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_105235-e1544451762498-300x225.Bdk04J4w.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;電気系のケーブルを戻していく ４本とも交換できたら、電気系のケーブルを外すときの逆の手順でつけていけばいいだけです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_110506-e1544451834592.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_110506-e1544451834592-300x225.DHBGMQMC.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_110511-e1544451857939.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_110511-e1544451857939-300x225.D3_6A7sO.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;タワーバーを戻す タワーバーも戻していきます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_111428-e1544451948832.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_111428-e1544451948832-300x225.BmTMrW8n.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;確認 取り付けが終わったら、エンジンをかけてみて、異常がないか確認します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;古いプラグは、なんか白い感じでした。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181208_110711-e1544452048754.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181208_110711-e1544452048754-300x225.y8o-qB1x.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;MR-Sはタワーバーさえ外せば、スパークプラグの交換は簡単です。 初めてでも１時間かからないくらいでできました。&lt;/p&gt;
&lt;p&gt;プラグ交換後はネットで調べたとおり、かなり体感できるくらい良くなりました。 エンジンがリニアに低回転から高回転までスムーズに回る感じになりました。 特に2000回転以下が非常に安定するようになりました。&lt;/p&gt;
&lt;p&gt;燃費もかなり良くなって、ほぼ高速道路の走行ですが、16km/lくらいでました。&lt;/p&gt;
&lt;p&gt;3〜4km/lくらい良くなってるので、高いプラグですがすぐ元が取れそうです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181210_203634-e1544452179480.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181210_203634-e1544452179480-300x165.DegEIIdd.jpg&amp;#x26;w=300&amp;#x26;h=165&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/12/IMG_20181210_215154-e1544452157155.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20181210_215154-e1544452157155-300x109.C4YfxqRn.jpg&amp;#x26;w=300&amp;#x26;h=109&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_20181208_105235-e1544451762498.BehT6M8p.jpg"/><enclosure url="/_astro/IMG_20181208_105235-e1544451762498.BehT6M8p.jpg"/></item><item><title>Googleのローカルガイドをやっていたら特典で13,000円も得した話</title><link>https://note.muaaru.com/blog/2018-11-29-post-266</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-11-29-post-266</guid><description>Googleのローカルガイドをやっていたら特典で13,000円も得した話</description><pubDate>Thu, 29 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;突然のGoogleからの謎のメール&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/7ec38c268730a93fd307c1add89c46f3.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F7ec38c268730a93fd307c1add89c46f3-300x224.B6mIXH76.png&amp;#x26;w=300&amp;#x26;h=224&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今日メールを確認していたら、なにやら英語のメールが。 よく見るとGoogleからのメールでした。&lt;/p&gt;
&lt;p&gt;タイトルは「Perk: Free 12-month trial of Google One for Local Guides」で中身を読んでみると、&lt;/p&gt;
&lt;p&gt;どうやらGoogleのローカルガイドを頑張ってる特典として、Google One (旧 Google Drive) の2TBプランを無料で試せるみたいです。&lt;/p&gt;
&lt;p&gt;普通に契約すると１年一括で13,000円もするやつです。&lt;/p&gt;
&lt;h2&gt;特典の受け取り方&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/2d96b441d488790571e2ba3762175544.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F2d96b441d488790571e2ba3762175544-300x265.3bF10kJ-.png&amp;#x26;w=300&amp;#x26;h=265&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;招待メールのリンクからボタンを押していくだけで特典が受け取れました。 メール自体は英語ですが、リンクで開くページからはすべて日本語で書かれているのでわかりやすかったです。&lt;/p&gt;
&lt;p&gt;途中支払画面が出ますが、ちゃんと無料/365日と書かれています。 ただ、支払いはないですが、アカウントにクレジットカードを登録している必要があるようです。&lt;/p&gt;
&lt;p&gt;Google　One のサイトで確認すると実際に2TBになっています。 これまで15GBしかなかったので、ほぼ0%の使用率になりました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/76b010003ab4c358ebbaed5cd25f8365.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F76b010003ab4c358ebbaed5cd25f8365-300x122.CMIXLPAC.png&amp;#x26;w=300&amp;#x26;h=122&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一応、お試しということ１年後までに解約すれば完全に無料で利用できるようです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/932791f88a7a196e9d088190b2baef0c.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F932791f88a7a196e9d088190b2baef0c-300x269.xjsU4jMn.png&amp;#x26;w=300&amp;#x26;h=269&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;さらに特典のメールが届く&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/64724fcdaf09519d5b835e6ff49d234c.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F64724fcdaf09519d5b835e6ff49d234c-199x300.CtaFiaCI.png&amp;#x26;w=199&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これで無料でGoogle Oneに加入したわけですが、Gooleから更にメールが届きました。&lt;/p&gt;
&lt;p&gt;どうやらGoogle Oneに加入する事自体にも特典があるようで、 Google Play 600円分のギフトがもらえました。&lt;/p&gt;
&lt;p&gt;さらに、Google検索からホテルを予約すると、宿泊料金が最大40%オフになる特典もついてました。&lt;/p&gt;
&lt;p&gt;どんだけ特典あるんだという感じです。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ローカルガイドをやってて、まだGoogle Oneの招待メールを確認してない人は、すぐメールを確認してみるといいです。&lt;/p&gt;
&lt;p&gt;ローカルガイドは、これまでもいろいろと特典があり、もともとかなりお得感が高いのですが、 今回は、普通に契約すれば13,000円もするプランが無料で提供の上、追加で600円分の特典やらまであって、かなり大盤振る舞いな感じでした。&lt;/p&gt;</content:encoded><h:img src="/_astro/7ec38c268730a93fd307c1add89c46f3.9JAXDi1n.png"/><enclosure url="/_astro/7ec38c268730a93fd307c1add89c46f3.9JAXDi1n.png"/></item><item><title>[Android]バックグラウンドでセンサーなどのログを取得し続けるには</title><link>https://note.muaaru.com/blog/2018-11-16-post-254</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-11-16-post-254</guid><description>[Android]バックグラウンドでセンサーなどのログを取得し続けるには</description><pubDate>Fri, 16 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;バックグラウンドからサービスを起動できなくなった&lt;/h2&gt;
&lt;p&gt;ライフログなどのログを取得し続けるアプリを作ろうと思うと、アプリを閉じた状態でもセンサーなどの値を監視し続ける必要がある。&lt;/p&gt;
&lt;p&gt;そのようなログアプリで端末再起動後も自動でログの取得を開始するようにしていると、下記のようなエラーでサービスが起動できなくなった。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.muaaru.testbackgroundservice/.ForegroundService }: app is in background uid UidRecord{c4b2502 u0a100 RCVR idle change:uncached procs:1 seq(0,0,0)}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;どうもAndroid O (8) 以降では下記の制限に引っかかってしまうようになったようだ。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/about/versions/oreo/background&quot;&gt;バックグラウンド実行制限&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;バックグラウンドからサービスを起動するには&lt;/h2&gt;
&lt;p&gt;回避するには、サービスをフォアグランドサービスとして起動する必要がある。&lt;/p&gt;
&lt;p&gt;公式ドキュメントの説明だと、NotificationManager.startServiceInForegroundを使用すると書かれているが、 そのメソッドが見当たらず、実際はContextCompat.startForegroundServiceを使用するらしい。&lt;/p&gt;
&lt;p&gt;ContextCompat.startForegroundServiceの実装を見てみると、Androidのバージョンによって切り替えているだけだった。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;    public static void startForegroundService(@NonNull Context context, @NonNull Intent intent) {
        if (VERSION.SDK_INT &gt;= 26) {
            context.startForegroundService(intent);
        } else {
            context.startService(intent);
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;minSdkVersionを26以降にできるなら、ContextのstartForegroundServiceで良さそうである。&lt;/p&gt;
&lt;p&gt;さらに、Android P以降だと、startForegroundServiceする際に、パーミッションが必要になり、&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;    &amp;#x3C;uses-permission android:name=&quot;android.permission.FOREGROUND_SERVICE&quot; /&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AndroidManifestに上記の記述が必要になっている。&lt;/p&gt;
&lt;h2&gt;起動したサービスをフォアグランドサービスに設定する&lt;/h2&gt;
&lt;p&gt;バックグラウンドからstartForegroundServiceでサービスを起動するが、これだけではフォアグランドサービスには、まだならない。&lt;/p&gt;
&lt;p&gt;サービス側で、onStartCommandがよびだされるので、さらにServiceのstartForegroundメソッドを呼び出して、サービスをフォアグランドサービスとして設定する。 startForegroundする際に、Notificationが必要になってくる。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;startForeground(ForegroundServiceNotification.FOREGROUND_SERVICE_NOTIFICATION_ID, notification);
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;フォアグラウンドサービスに設定する通知について&lt;/h2&gt;
&lt;p&gt;Android O 以降、すべての通知をチャンネルに割り当てる必要がある。&lt;/p&gt;
&lt;p&gt;下記のようにしてチャンネルを設定するのだが、フォアグラウンドサービスに設定するNotificationChannel特有の注意点があった。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;NotificationChannel notificationChannel = new NotificationChannel(
                CHANNEL_ID,
                CHANNEL_NAME,
                NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(notificationChannel);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;フォアグラウンドサービスの通知の場合、公式ドキュメントにはIMPORTANCE_MIN は非推奨と記述されている。 &lt;a href=&quot;https://developer.android.com/reference/android/app/NotificationManager.html#IMPORTANCE_MIN&quot;&gt;https://developer.android.com/reference/android/app/NotificationManager.html#IMPORTANCE_MIN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ただ、実際に動作を見てみると、IMPORTANCE_HIGH 未満を指定しても、IMPORTANCE_HIGHとして扱われていた。&lt;/p&gt;
&lt;p&gt;このあたりは、ユーザに気づかれずにバックグラウンドで処理ができなくなるようにするため、と考えると当然かもしれない。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今回の調査で作成したソースはGitHubで公開してます。 &lt;a href=&quot;https://github.com/muaaru/testbackgroundservice&quot;&gt;https://github.com/muaaru/testbackgroundservice&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;バックグラウンドでサービスを起動するのに把握しなければいけないことが、だいぶ増えている。&lt;/p&gt;
&lt;p&gt;特に通知が必須になっているので、対応するには新規に通知の処理を作らないといけなくなっている。 また、公式ドキュメントに記載がない仕様がいろいろとあり、動作を調べながらでないと予期しない動きとなりそうである。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>Pixel3 XLのケースを探してみた</title><link>https://note.muaaru.com/blog/2018-11-08-post-231</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-11-08-post-231</guid><description>Pixel3 XLのケースを探してみた</description><pubDate>Thu, 08 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/IMG_2761.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2761-225x300.DojkfwCk.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;背景&lt;/h2&gt;
&lt;p&gt;Pixel3 XLを購入してあったんですが、ケースやらガラスフィルムを買うのを全く忘れていたので探してみました。&lt;/p&gt;
&lt;h2&gt;購入したケース＆ガラスフィルム&lt;/h2&gt;
&lt;p&gt;Amazonでいろいろ見てたんですが、いまいちどれがいいのかわからないので、 昔使ったことのあるSPIGENのケースで探してみてコレにいきつきました。&lt;/p&gt;
&lt;p&gt;SPIGENのスマホケース　THIN　FIT 360&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B07H5SR1FC/ref=oh_aui_detailpage_o08_s00?ie=UTF8&amp;#x26;psc=1&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なんかもう売り切れになってる。 きっとそのうち復活するんじゃないかな。&lt;/p&gt;
&lt;p&gt;このケースは、ケースとガラスフィルムがセットになっていて、 端末全体をケースとガラスフィルムで覆い尽くす感じのケースになります。&lt;/p&gt;
&lt;p&gt;ガラスフィルムが、予備でもう一枚入っていました。&lt;/p&gt;
&lt;h2&gt;ケースの使い心地とか&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/IMG_2763.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2763-300x225.CrkhK3II.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ケース自体の触り心地は、マットでスベスベ感のある感じ。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/IMG_2789.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2789-300x225.8LAASftL.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ツルツルしている感じではない。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/IMG_2791.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2791-300x225.CCpoZvv8.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;サイドの部分は少しゴムっぽくて、グリップするようになっている。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/IMG_2792.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2792-300x225.CAdde6oH.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/IMG_2771.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2771-300x225.4_HrHclO.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ケースとガラスフィルムとの隙間は、髪の毛１本分ほどでほんの少しだけ隙間がある。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/IMG_2782.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2782-300x225.BD0MBeqm.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/IMG_2783.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2783-300x225.jJDnsb56.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ガラスフィルムの装着が簡単で 先にケースをつけて、ケース自体を貼り付けのガイドとして貼り付けていくだけでピッタリの位置に貼り付けができる。&lt;/p&gt;
&lt;p&gt;Pixel3 XLなので、もともと大きいのもあると思うが、 ケース自体は、非常に薄いので、ケースをつけることで大きくなった感じもあまりない。&lt;/p&gt;
&lt;p&gt;画面の端っこが湾曲しているようで、ガラスフィルムの左右は少し浮いている感じ。 気になるといえば気になる。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/IMG_2786-1-e1541680399245.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2786-1-e1541680399245-225x300.kRxJNdeh.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;触り心地や装着のしやすさはさすがで、4000円もするだけのことはありました。 下手なケースとガラスフィルムを買わずに、少し高いですが思い切ってコレを買って良かったです。&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_2761.CGPtcyoB.jpg"/><enclosure url="/_astro/IMG_2761.CGPtcyoB.jpg"/></item><item><title>Mac mini 2018年モデルで5年は戦える構成を考えてみた</title><link>https://note.muaaru.com/blog/2018-10-31-post-202</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-10-31-post-202</guid><description>Mac mini 2018年モデルで5年は戦える構成を考えてみた</description><pubDate>Wed, 31 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Mac mini 2018年モデル&lt;/h2&gt;
&lt;p&gt;結論から書きますが、私はこの構成が一番コスパが高いと思います。&lt;/p&gt;
&lt;p&gt;|                | Mac miniをカスタマイズ                                          |
| -------------- | --------------------------------------------------------------- |
| CPU            | 3.2GHz 6コア第8世代Intel Core i7（Turbo Boost使用時最大4.6GHz） |
| メモリ         | 8GB 2,666MHz DDR4                                               |
| GPU            | Intel UHD Graphics 630                                          |
| 内蔵ストレージ | 128GB SSDストレージ                                             |
| LAN端子        | 10ギガビットEthernet                                            |&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/5c3dbc69de9e78c9642aa3a9c1d542bf.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F5c3dbc69de9e78c9642aa3a9c1d542bf-300x138.bkEvKtoA.png&amp;#x26;w=300&amp;#x26;h=138&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;あとから変更不可な上に開発機には重要なCPUはMAXにカスタムしますが、それ以外は最小構成という感じ。&lt;/p&gt;
&lt;p&gt;10Gb Ethernetは、好みでというとこですが、＋1万なので5年後も戦える端末と考えるとつけとくほうがいいようにも思います。&lt;/p&gt;
&lt;h2&gt;メモリは自分で交換できるみたい&lt;/h2&gt;
&lt;p&gt;下記の記事やアップル公式サイトの画像をみると、どうもメモリは交換可能な様子。&lt;/p&gt;
&lt;p&gt;&amp;#x3C;追記　2018-11-08&gt;&lt;/p&gt;
&lt;p&gt;メモリ交換は可能だが、以前までのモデルと違って、ロジックボードを取り出す必要がある。 割とめんどくさい模様なので、今すぐメモリ増強したいとかいう人は、AppleStoreで素直にカスタムしたほうが良さそう。 逆にメモリが安くなってからでもいい人は、8GBを選択でいいと思う。&lt;a href=&quot;https://twitter.com/akibakan_mac/status/1059996478528086016&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#x3C;追記 終わり&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://applech2.com/archives/20181031-mac-mini-2018-ssd-and-memory.html&quot;&gt;Mac mini 2018のSSDはオンボードで購入後のアップグレードは不可能なものの、メモリは通常のSO-DIMMを採用しサービスプロバイダーなどでアップグレード可能。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/11/8f7da6fdcf4641fe6fcabcaafca6c16d.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F8f7da6fdcf4641fe6fcabcaafca6c16d-300x201.jOOSNrJR.png&amp;#x26;w=300&amp;#x26;h=201&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://www.apple.com/jp/mac-mini/&quot;&gt;Mac mini&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なので、AppleStoreでカスタムする際は最小の8Gを選択して、あとから自分で交換がコストパフォーマンスが高い。&lt;/p&gt;
&lt;p&gt;Amazonでメモリを探すと32GBにすると、コレぐらいの値段になるようだ。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/CORSAIR-%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-VENGEANCE-16GB%C3%972%E6%9E%9A%E3%82%AD%E3%83%83%E3%83%88-CMSX32GX4M2A2666C18/dp/B01BGZEVHU&quot;&gt;CORSAIR DDR4 SO-DIMM メモリモジュール VENGEANCE SO-DIMM シリーズ 16GB×2枚キット CMSX32GX4M2A2666C18&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ちなみに、元からついてる8GB分のメモリはだいたい5,000円くらい(2018-11-01現在)の買取価格の模様。&lt;/p&gt;
&lt;p&gt;ただ、このあたりは正直、販売後にメモリの互換性を確認してから購入するほうが良さそうに思う。&lt;/p&gt;
&lt;h2&gt;SSDは128GBで十分&lt;/h2&gt;
&lt;p&gt;XcodeやAndroidStudio、AdobeCCなどをインストールすると考えると、128GBは少ないと思うが、Thunderbolt3やUSB3接続でSSDなりを外付けすればいいと思う。&lt;/p&gt;
&lt;p&gt;AmazonでThunderbolt3対応の外付けSSDが、コレぐらいの値段である。 &lt;a href=&quot;https://www.amazon.co.jp/Plugable-Thunderbolt-NVMe-SSD-%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96/dp/B0799SDR6H/ref=sr_1_11?s=computers&amp;#x26;ie=UTF8&amp;#x26;qid=1541032451&amp;#x26;sr=1-11&amp;#x26;keywords=Thunderbolt3+SSD&quot;&gt;Plugable Thunderbolt 3™ NVMe SSD ドライブ - 480GB&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;10Gb EthernetはThunderbolt3で追加可能だが&lt;/h2&gt;
&lt;p&gt;現状のThunderbolt3に10Gb Ethernetを追加するアダプターが数万円するよう。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/StarTech-com-Thunderbolt-3-10GBase-T-%E3%83%9E%E3%83%AB%E3%83%81Gigabit%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF-TB310G/dp/B07GKD4ZCR&quot;&gt;StarTech.com Thunderbolt 3-10GBase-T 有線LANアダプタ マルチGigabitイーサネットアダプタ 10GbE TB310G&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なので、このオプションは付けておいたほうがオトクな感じがする。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;安く開発環境を構築するには最適なMac miniが発表されました。 ココ最近は開発用のMacとしてパッとするモデルが見当たらず、コスパの高い4coreの2012モデルのMac miniが使われたりしてましたが、これで完全に乗り換え先ができました。&lt;/p&gt;
&lt;p&gt;とりあえず会社に開発機をおねだりするなら、この構成にしたいと思います。&lt;/p&gt;</content:encoded><h:img src="/_astro/87f2deb5f7324cdcfb919d84f7349d4f.BhuBkrKx.png"/><enclosure url="/_astro/87f2deb5f7324cdcfb919d84f7349d4f.BhuBkrKx.png"/></item><item><title>LEDライトバーを自作した</title><link>https://note.muaaru.com/blog/2018-10-01-post-179</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-10-01-post-179</guid><description>LEDライトバーを自作した</description><pubDate>Mon, 01 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;LEDライトバーを自作&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/10/IMG_2284.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2284-1024x768.DNbUN4k7.jpg&amp;#x26;w=1024&amp;#x26;h=768&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;メタルラックのライトアップ用に、LEDライトバーをつけようと思ったが、意外と値段が高いかった。 LEDライトの長さ調整もできないので、自作することにした。&lt;/p&gt;
&lt;h2&gt;材料・工具&lt;/h2&gt;
&lt;h3&gt;材料&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;LEDテープ 500mm (1000mm　1,500円程度)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/10/IMG_2272-1-e1538403714207.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2272-1-e1538403714207-225x300.B5tdmdVS.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;12V電源 ACアダプター　 (電源容量による 1,000円〜3,000円程度)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/10/IMG_2285.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2285-300x225.D4wsx70d.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10mm * 1000mm * 1mm のアルミ平角棒　(1000m 200円程度)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/10/IMG_2277.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2277-300x225.CizH6qPg.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ACアダプターは家に転がっていたのを今回は使用した。&lt;/p&gt;
&lt;p&gt;LEDを点灯させるだけなら、アルミ平角棒は必要ないのだが、LEDの放熱のために使用する。 LEDは点灯させ続けていると結構な発熱になる。 LEDは高温状態が続くと寿命が短くなるため、アルミに貼り付けることで放熱させる。&lt;/p&gt;
&lt;p&gt;テープ状よりバーになってたほうが、マグネットでメタルラックに貼り付けたりするのに扱いやすいというのもある。&lt;/p&gt;
&lt;p&gt;アルミ平角棒は、大きいので通販だと送料が高くなってしまう。 近くのホームセンターを探せば売っているところがあるはず。&lt;/p&gt;
&lt;h3&gt;工具&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;電工ペンチ（なければハサミでもOK）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/10/IMG_2286.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2286-300x225.J96JWVYt.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;カッター（大きいＨ型刃のやつ）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/10/IMG_2287.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2287-300x225.CJ2hM08f.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;金物ヤスリ&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;LEDテープの選び方&lt;/h2&gt;
&lt;p&gt;激安の5mで1000円以下のローコストLEDテープは、球切れが起きやすいのでやめたほうがいい。&lt;/p&gt;
&lt;p&gt;間接照明であれば高演出ではないやつで十分だと思う。&lt;/p&gt;
&lt;p&gt;室内で水に濡れないような場所に設置するのであれば非防水タイプがいい。 放熱性が高いのでLEDの寿命が長くなる。&lt;/p&gt;
&lt;p&gt;1mで1000~1500円程度であれば大丈夫だと思う。&lt;/p&gt;
&lt;p&gt;今回使用したLEDテープは、東京出張した際に秋葉原のLEDライト専門店で調達してきた。 ネット通販もやっている。 &lt;a href=&quot;https://www.akiba-led.jp/&quot;&gt;akibaピカリ館&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Amazonなりネット通販で探せば、他にも売っている場所はいろいろと見つかる。&lt;/p&gt;
&lt;h2&gt;作り方&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;アルミ平角棒を必要な長さにカッターで切断する アルミ平角棒の切断する箇所にカッターで何度も切りつけて、傷を深くしていく。 傷をつけたらペンチなどで何度もグリグリ折り曲げるていると、金属疲労で切断される。 そのままだと切断面が凸凹しているので、ヤスリでならしておく。&lt;/li&gt;
&lt;li&gt;LEDテープを必要な長さに電工ペンチで切断する LEDテープの切断してもいい接点のある箇所で、電工ペンチを使って切断する。&lt;/li&gt;
&lt;li&gt;LEDテープの両面テープで、アルミ平角棒に貼り付ける LEDテープの両面テープをすこしづつ剥がしては、アルミ平角棒に貼り付けていく。 一気に長い範囲を剥がすと、うまく貼り付けるのが難しくなるので、少しづつ貼り付けていく。&lt;/li&gt;
&lt;li&gt;電源とLEDテープのケーブルを接続する 電源の端子をLEDテープの端子に差し込めばいい。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;全部くっつけた状態 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/10/IMG_2280.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2280-300x225.BO6MKLzZ.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;点灯させてみる &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/10/IMG_2281.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_2281-300x225.Co7_Vif7.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;使い方&lt;/h2&gt;
&lt;p&gt;アルミ平角棒の裏面にマグネットをつければ、メタルラックに貼り付けることができて便利。&lt;/p&gt;
&lt;p&gt;セリアなどの１００円ショップでマグネットが売っている。 シートタイプや粒タイプなどがあるが、 メタルタックにつける場合は粒タイプでないと剥がれやすい。&lt;/p&gt;
&lt;p&gt;電源とLEDテープの間にスイッチを挟み込めば電源のON・OFFが簡単にできるようになる。&lt;/p&gt;
&lt;p&gt;この他にも、電源から２分岐、４分岐させるようなケーブルがあるので、延長ケーブルなどと組み合わせて、メタルラック全体をショーケースのようにライトアップすることもできる。&lt;/p&gt;
&lt;p&gt;メタルラックにLEDライトバーをつければ、大型の撮影ブースも作る事ができる。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;自作することで半額程度の費用で制作ができた。 自作であれば安くて長さやLEDの色も自由に調整可能なのがいい。&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_2284.BEB5qKAI.jpg"/><enclosure url="/_astro/IMG_2284.BEB5qKAI.jpg"/></item><item><title>Evernoteのように同期するメモ環境をDropBoxで構築する</title><link>https://note.muaaru.com/blog/2018-09-16-post-171</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-09-16-post-171</guid><description>Evernoteのように同期するメモ環境をDropBoxで構築する</description><pubDate>Sun, 16 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/gori0I9A3064072102745_TP_V.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Fgori0I9A3064072102745_TP_V-300x200.Di6F7XTk.jpg&amp;#x26;w=300&amp;#x26;h=200&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;メモが取りたい&lt;/h2&gt;
&lt;p&gt;思いついたらすぐにメモを取りたくなる。 ブログなどを書こうとすると、ネタになりそうなことは、すぐにメモがしたい。 仕事でもそうだろう。&lt;/p&gt;
&lt;p&gt;そういうときは、Evernoteを使えばいいのだが、自分はどうも使いにくく感じる。 URLを貼り付けたときなど、自動でリッチテキストにされるのが、お節介に感じるからだ。&lt;/p&gt;
&lt;p&gt;そこで、 Dropbox と Visual Studio Code (VSCode) を組み合わせて、マークダウンでメモをとるようにした。 １年ほどやってみて、うまく回せてきたので、その方法を書いておこうと思う。&lt;/p&gt;
&lt;h2&gt;必要なもの&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dropbox&lt;/li&gt;
&lt;li&gt;Visual Studio Code (VSCode)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;どちらもWindwos,Mac,Linuxのどれでもインストール可能なので、環境を選ばない。 Dropboxは、Googleドライブなど、他のファイル同期ソフトでも大丈夫。 メモだけであれば10MBもあれば十分だった。&lt;/p&gt;
&lt;p&gt;そして、この環境でやっていけると思えたのが、Visual Studio Codeの登場である。 これが非常に使いやすく、動作も軽快で必要なものが揃っているので、これを選んだ。&lt;/p&gt;
&lt;h2&gt;やり方&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Dropboxのフォルダに、メモ用のフォルダを作成する。&lt;/li&gt;
&lt;li&gt;メモ用のフォルダに、メモのカテゴリを分けをフォルダで作成する。&lt;/li&gt;
&lt;li&gt;カテゴリごとに「メモの名前.md」などのファイル名にして、マークダウン記法でメモを取っていくだけ。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;手順としては以上である。&lt;/p&gt;
&lt;p&gt;非常に簡単。&lt;/p&gt;
&lt;p&gt;私は、カテゴリのフォルダ名をつける際は、「A_TODO」など「A_」や「W_」などの接頭辞をつけている。 VSCodeでフォルダをサイドに表示した際の順番を指定するためだ。&lt;/p&gt;
&lt;p&gt;こうすることで、カテゴリ名とは関係なく、フォルダの表示順を指定できる。&lt;/p&gt;
&lt;h2&gt;使い方&lt;/h2&gt;
&lt;p&gt;VSCodeでメモをとるときは、メモ用のフォルダが最近使用した項目に表示されているので、そこからすぐに開ける。 基本的にはVSCodeを起動しっぱなしにしておけば、気にならない。&lt;/p&gt;
&lt;p&gt;スマホだとVSCodeがないので、マークダウンのメモを閲覧するだけならいいが、記述するのはツライ。 ただ、スマホで文章を書くのはもともとツライと思っているので、スマホでは閲覧さえできれば、それほど困ることはなかった。&lt;/p&gt;
&lt;h2&gt;注意点&lt;/h2&gt;
&lt;p&gt;ないとは思うが複数人で同時に二箇所で同じメモを開いて編集してしまうと、変更が衝突してしまうので、基本的に複数人で使うことはできない。&lt;/p&gt;
&lt;p&gt;１人で使う場合も、DropBoxは常に起動しておき、メモが同期された状態を保たないと、同じことが起こるので注意が必要だった。 最初の頃は何度か、メモが衝突してしまい修正するのに面倒なことになってしまった。&lt;/p&gt;
&lt;p&gt;テキストのメモの同期は瞬時に行われるが、メモを保存している間はPCを閉じないなど、気をつけないといけない。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;１年ほどやってみて、いろいろ試してみた中では一番しっくり来ている。 あとはスマホでVSCodeのようなエディタが見つかれば、より完璧になるはずだ。&lt;/p&gt;</content:encoded><h:img src="/_astro/gori0I9A3064072102745_TP_V.8k5Rq_Jg.jpg"/><enclosure url="/_astro/gori0I9A3064072102745_TP_V.8k5Rq_Jg.jpg"/></item><item><title>Bose SoundLink Miniを5年使ってみたけど、どこでも使えて便利だった</title><link>https://note.muaaru.com/blog/2018-09-03-post-155</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-09-03-post-155</guid><description>Bose SoundLink Miniを5年使ってみたけど、どこでも使えて便利だった</description><pubDate>Mon, 03 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1941.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1941-300x225.DnYYGnYI.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;５年ほど使い続けているBose SoundLink Miniについて紹介したいと思います。&lt;/p&gt;
&lt;p&gt;Bose SoundLink Mini&lt;/p&gt;
&lt;h2&gt;何これ？&lt;/h2&gt;
&lt;p&gt;Bluetooth接続で使える、どこでも気軽に持ち運べるポータブルスピーカーです。 現在は後継機種が出たため、絶版になっています。&lt;/p&gt;
&lt;p&gt;500mlのペットボトルぐらいの大きさと重さなのに、重低音の迫力がすごいスピーカー。&lt;/p&gt;
&lt;p&gt;現在では様々なメーカーがポータブルスピーカーを出しているが、その元祖的なスピーカーです。 BOSEが販売して人気が出ると、SONYが同じようなコンセプトのスピーカーを発売し、その後、各メーカーが安価なポータブルスピーカーを発売してきました。&lt;/p&gt;
&lt;h2&gt;何が良いのか？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;コンパクト 小さいので、どこでも持って移動できます。 家の中でも常に持ち歩いて、自分の側においておけるます。&lt;/li&gt;
&lt;li&gt;スピーカとしての性能が高い 重低音の迫力がすごくて、iPhoneなどのスピーカだと、どうしても重低音がでないのです。 しかし、コレをつなげれば映画を観ても重低音の迫力がでます。 また、音量をどこまで上げても音割れしません。 普通、イヤホンやスピーカーで音量をMAXにするとビリビリと音が割れるのですが、このスピーカーは音量をMAXにしてもそういう事がありません。 そして、MAXの音量はとんでもない音量で、オープンカーで高速を走っていても、問題なく音楽が聞こえるレベルです。 部屋の中ではMAXにはできないほどの音量でした。 ただ、ミニジャックで接続すると音質が悪い気がしますが、まず使うことはないので問題ないとも言えます。&lt;/li&gt;
&lt;li&gt;長時間バッテリー　 バッテリーが10時間ほどもつので、 1泊2日程度なら充電器いらずです。 車で片道３時間で往復つけっぱなしでも、充電が消えることはありませんでした。&lt;/li&gt;
&lt;li&gt;頑丈 ポータブルでいろいろと持ち歩くと当然スマホ等と同じように落とします。 しかし、MacBookAirのようにアルミの削りだしのボディなので、雑に扱っても頑丈でなかなか壊れません。 5年使ってきて、今まで何度も落としたり、車のダッシュボードんい置きっぱなしにしたりしました。 だいぶ傷だらけになっていますが、一度も故障しませんでした。 頑丈ですが、落としたら傷はつくのでケースに入れて持ち歩いたほうがいいです。 スピーカのメッシュの部分が凹むと、見た目的にちょっときになります。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;駄目なとこ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;値段が高い 2万円くらいして、結構高いので買うのに勇気がいります。 私は最初買うとき高くて悩みましたが、思い切って買って使ってみるとすぐに値段以上の価値が合うように思いました。 実際、5年ずっといろいろ使い倒してきたので、十分もとは取れていると思います。 新品だと高いので中古でもいいと思います。頑丈なので中古でも大丈夫でしょう。 中古なら15,000円ほどで売っています。 もし、ポータブルスピーカーが初めてなら、Ankerなどが出している5,000円ほどのスピーカーで試してみてもいいでしょう。 ポータブルスピーカーの便利さがわかると、この機種の価値がわかるはずです。&lt;/li&gt;
&lt;li&gt;充電がUSBでできない 充電が専用の充電器でしかできないため、1泊2日を超える場合は充電器を持ち運ぶ必要があります。 充電器も非常にコンパクトなのですが、やはりUSBで充電できえばなと思います。 ただ、私が使っている機種の後継機種のBose SoundLin kMini 2ではUSB充電に対応しています。 こちらだと、充電器も必要なく、車のシガーソケットからUSBで充電できたりするので、非常に便利そうです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bose SoundLink Mini Bluetooth speaker II&lt;/p&gt;
&lt;h2&gt;どう使うと便利なのか？&lt;/h2&gt;
&lt;p&gt;一番使うのは、車の中で音楽を流すときです。&lt;/p&gt;
&lt;p&gt;それ以外にも、iPadと組み合わせると迫力ある動画鑑賞環境がどこでも持ち運べます。&lt;/p&gt;
&lt;p&gt;キャンプで音楽を聞いたり、キッチンで料理をしながら動画の音声だけ流したりと様々です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1951.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1951-300x225.BUpnlWPZ.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;カラーにこだわりがなければ、USBで充電できるBoseSoundLinkMini2が便利でオススメです。 私は、MacBookAirと同じ色で統一したくて、BoseSoundLinkMiniを使い続けてます。&lt;/p&gt;
&lt;p&gt;Apple製品のような綺麗さのあるボディなど、一度気に入ってしまうと私のように他の機種には買い替え出来なくなるかもしれません。&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_1951.PHfk2h3J.jpg"/><enclosure url="/_astro/IMG_1951.PHfk2h3J.jpg"/></item><item><title>MR-SにOBD2をBluetooth接続してアプリを設定する</title><link>https://note.muaaru.com/blog/2018-09-02-post-136</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-09-02-post-136</guid><description>MR-SにOBD2をBluetooth接続してアプリを設定する</description><pubDate>Sun, 02 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;MR-Sの水温などを見たいと思い、OBD2端子をスマホで読み取ってみようと思います。&lt;/p&gt;
&lt;h2&gt;Bluetooth接続するOBD2ドングルを探す&lt;/h2&gt;
&lt;p&gt;車のOBD2端子から読み取れるデータをスマホへ送信するために、OBD2ドングルが必要です。&lt;/p&gt;
&lt;p&gt;私はこのOBD2ドングルを購入しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B00J7CC4T2/ref=oh_aui_detailpage_o01_s00?ie=UTF8&amp;#x26;psc=1&quot;&gt;ELM327 OBD2スキャンツール&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Amazonを探すと、これ以外にもいろいろ見つかります。 ただ、レビューを見るとうまく動作しなかったり、付属のCDにウィルスが混入されていたりと、安いものは選ばないほうがいいようです。&lt;/p&gt;
&lt;h2&gt;OBD2ドングルをOBD2端子に接続する&lt;/h2&gt;
&lt;p&gt;OBD2ドングルを手に入れたら、車に接続します。&lt;/p&gt;
&lt;p&gt;MR-SのOBD2端子は、運転席のハンドル右下にあります。 この画像の白い端子がOBD2端子です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1921.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1921-300x225.d4upawlo.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ここにOBD2ドングルを刺しますが、その前にエンジンをかけます。 エンジンをかけてから、このようにOBD2のドングルを刺します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1930.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1930-300x225.MicrTmxi.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;エンジンをかけるまえにOBD2ドングルが刺さっていると、ABSのチェックランプが高速で点滅するようになります。&lt;/p&gt;
&lt;p&gt;エンジンをかけたあとに挿せば、この症状はでません。&lt;/p&gt;
&lt;p&gt;私が購入したOBD2ドングルは、スイッチがついていないので、毎回使うときに刺すようにしています。&lt;/p&gt;
&lt;h2&gt;OBD2ドングルとAndroidアプリを接続する&lt;/h2&gt;
&lt;p&gt;今回は、Torque ProというAndroidアプリを使用します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=org.prowl.torque&amp;#x26;hl=ja&quot;&gt;Torque Pro&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Androidタブレットは、１万円以下でいろいろ選択肢が多いのでAndroidを使用します。 私は、7,000円程で購入したNexus7(2013)を使用してます。&lt;/p&gt;
&lt;p&gt;アプリの左下にある設定からMR-Sの接続設定を行います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/Screenshot_20180902-174009.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FScreenshot_20180902-174009-169x300.ajPV4ywE.png&amp;#x26;w=169&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;車両プロフィールを選択します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/Screenshot_20180902-174015.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FScreenshot_20180902-174015-169x300.CiiOQiMa.png&amp;#x26;w=169&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;各種MR-Sの情報を入力していきます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/Screenshot_20180902-174039.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FScreenshot_20180902-174039-169x300.C24tEBob.png&amp;#x26;w=169&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;設定画面の一番下に「ATIB 96\n ATIIA 13\n ATSH8113F1\n ATSP A4\n ATSW 0」 と入力します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/Screenshot_20180902-174124.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FScreenshot_20180902-174124-169x300.BuJ7h-Dv.png&amp;#x26;w=169&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;設定を保存して、しばらくすると接続されるはずです。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;OBD2のドングルが怪しいものばかりで、実際に使ってみるまで使えるかわかりませんでしたが、 無事、MR-SのOBD2からセンサーの値を読み取る事ができました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/Screenshot_20180614-111023.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FScreenshot_20180614-111023-169x300.DrjZarK_.png&amp;#x26;w=169&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/Screenshot_20180614-111023.CM1IdmbC.png"/><enclosure url="/_astro/Screenshot_20180614-111023.CM1IdmbC.png"/></item><item><title>MR-Sの幌交換の費用を節約するために幌を海外から個人輸入した話</title><link>https://note.muaaru.com/blog/2018-09-01-post-107</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-09-01-post-107</guid><description>MR-Sの幌交換の費用を節約するために幌を海外から個人輸入した話</description><pubDate>Sat, 01 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;幌を交換しないといけなくなったら&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_20170304_085439-e1535762915658.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_20170304_085439-e1535762915658-300x155.B3kRocx1.jpg&amp;#x26;w=300&amp;#x26;h=155&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;オープンカーにとって幌は消耗品のため、中古車などで購入した場合は数年も乗れば、かなり劣化していると思います。&lt;/p&gt;
&lt;p&gt;そのため、幌の交換はできるだけ安く済ませたいのですが、部品代と工賃を合わせると、だいたい15万円から20万円は予算がないとできません。 そこで、少しでも節約するため、海外で安く売っている社外品の幌を購入しました。&lt;/p&gt;
&lt;h2&gt;どこで売ってるのか&lt;/h2&gt;
&lt;p&gt;海外のサイトでは、いくつかMR-Sの幌が購入できるサイトがありますが、私はここで購入しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.topsonline.com/model/Convertible_Tops_And_Accessories/Toyota/1999_thru_2007_Toyota_MR-2_And_MR-S_Spyder.html&quot;&gt;TOPS ONLINE&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;TOPS ONLINEでの購入方法&lt;/h2&gt;
&lt;p&gt;上のリンクを開くとMR-Sの幌の販売ページが開きます。 ４種類のブランドがあって、選択できる色や値段はそれぞれ違います。 一覧の右側半分にEZ ON BrandやのRobbins Brandは、日本の通販でも販売しているEZ ON社製やロビンス製のようです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/9df6247b3826043c72b7f4cc543cf0e5.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F9df6247b3826043c72b7f4cc543cf0e5-300x183.jV8t6oBX.png&amp;#x26;w=300&amp;#x26;h=183&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;どれもリアはガラスウィンドウのようなので、好きなブランドでいいと思います。 縦方向は色と材質の選択になります。 純正と同じようなVinylのビニール製か、Clothの布製かを選びます。&lt;/p&gt;
&lt;p&gt;私は一番安いTopsonline Brandにある550ドルのBordeaux Haartz Stayfast Clothで布製の幌にしました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/349807ceab9ff80bf77691ce988ab1a2.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F349807ceab9ff80bf77691ce988ab1a2-300x209.td1zh7dz.png&amp;#x26;w=300&amp;#x26;h=209&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;「Add To Cart」のボタンを押すとカート画面が表示されます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/76aabc5f00d915041ed4422aee2e1481.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F76aabc5f00d915041ed4422aee2e1481-300x149.Zb34WOiV.png&amp;#x26;w=300&amp;#x26;h=149&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;個数が1になっているのを確認します。&lt;/p&gt;
&lt;p&gt;「I&apos;d prefer a DVD sent for $5 instead - add it to my Cart!」 と書かれたやつがあるので、取り付け手順を解説したDVDが必要ならクリックして、カートに追加します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/8299a706aa8e3b9ed3662f33eeb52972.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F8299a706aa8e3b9ed3662f33eeb52972-300x153.2Ib6lc3y.png&amp;#x26;w=300&amp;#x26;h=153&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;「Estimate Shipping Costs」と書かれた箇所で、配送先を選択していきます。 「Shipping Outside US」を選択して、アメリカ国外を指定します。&lt;/p&gt;
&lt;p&gt;「select country」となっているドロップダウンから「Japan」を選択して日本を指定します。&lt;/p&gt;
&lt;p&gt;「View Estimate」のボタンを押すと、日本までの送料が表示されます。&lt;/p&gt;
&lt;p&gt;「Year of the Car」で車の年式を入力します&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/29187fb6ede503846664430dd284d886.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F29187fb6ede503846664430dd284d886-300x69.CtgzBHQl.png&amp;#x26;w=300&amp;#x26;h=69&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;後はクレジットカードか、Paypalで支払います。 私はPaypalを選択して、ドル払で支払いました。 日本円で支払う場合はクレジットカード会社やPaypalでドルへの交換手数料がかかってきます。&lt;/p&gt;
&lt;p&gt;また、Paypalで支払う場合は、配達先などの住所、氏名がペイパルの情報から取得されます。 そのため、事前にペイパルのアカウントには日本語ではなく、英語で住所、氏名を登録しておきます。 住所は複数登録できるのですが、氏名は一つしか登録できない上にネット上から変更することができません。 サーポートセンターとやり取りして変更する必要があるので時間と手間がかかります。 すでにPaypalのアカウントを登録している場合は、注意してください。&lt;/p&gt;
&lt;p&gt;日本語だとおそらく注文しても、店の人が読めないと思うのでキャンセルされてしまう可能性があると思うので注意してください。&lt;/p&gt;
&lt;p&gt;クレジットカードで支払う場合は、次の画面で住所、氏名を英語で入力して、カード情報を入力していけば購入できるはずです。 私はPaypalで購入したのでクレジットでの支払いは&lt;/p&gt;
&lt;p&gt;注文が完了すると 「TopsOnline Order Confirmation」という確認メールが来ます。&lt;/p&gt;
&lt;h2&gt;配達されてくるまで&lt;/h2&gt;
&lt;p&gt;注文が完了から４日ぐらいすると「Your TopsOnline.com order has shipped」という出荷メールが来ました。&lt;/p&gt;
&lt;p&gt;出荷メールにはアメリカ合衆国郵便公社の追跡番号もついているので、荷物が今どこにあるのかもわかります。 荷物は船便ではなく空輸されてくるようです。&lt;/p&gt;
&lt;p&gt;さらに１週間ほどすると日本の郵便局から国際郵便で配達されてきます。 受け取る際には、輸入関税が３千円ほどかかりました。&lt;/p&gt;
&lt;p&gt;私は配達時に不在だったので郵便局まで取りに行きました。 MR-Sに積む場合は、幌を開ければ助手席に積めます。&lt;/p&gt;
&lt;h2&gt;配達されてきた幌&lt;/h2&gt;
&lt;p&gt;幌の箱の大きさは、120cm × 50cm × 10cm ぐらいでした。 幌の布の部分と、リアガラスだけなので、意外と軽くて１人で十分持てる重さです。&lt;/p&gt;
&lt;p&gt;「Topsonline Brand」で注文したはずですが、配達されてきた箱には、なぜか「EZ ON Auto Tops」と書かれていました。 説明書も「EZ ON Auto Tops」と書かれていました。&lt;/p&gt;
&lt;p&gt;もしかしたら、幌自体もEZ ON製かもしれませんが、よくわからないです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1912.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1912-225x300.BbJo_tMD.jpg&amp;#x26;w=225&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1913-e1535762318350.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1913-e1535762318350-300x225.DMx9eOZf.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;商品の代金と送料で$649.30＋関税が3000円程度で、だいたい日本円だと¥75,000程で購入できました。&lt;/p&gt;
&lt;p&gt;注文してから２週間くらいはかかりますが、日本で販売しているサイトから購入すると10万円以上していたので、だいぶ節約できました。 リアの電熱線の配線処理は少し残念でしたが、安い社外品と言っても、布製のちゃんとした幌が届いたので満足してます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1362.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1362-300x225.Cb5MO2Ra.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1233-e1535762694222.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1233-e1535762694222-300x219.DlZGSVKW.jpg&amp;#x26;w=300&amp;#x26;h=219&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1234-e1535762631139.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1234-e1535762631139-300x190.BwOTsGVn.jpg&amp;#x26;w=300&amp;#x26;h=190&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;2021/06/04 追記&lt;/h2&gt;
&lt;p&gt;もうそろそろ幌を交換してから3年ほど経ちました。 雪の日も大風の日も365日青空駐車でしたが幌は特に問題が起きていません。&lt;/p&gt;
&lt;p&gt;布の幌なのでビニールのように冬場に硬くなったりもしないです。 この幌交換時に骨組みの歪みもある程度とったので、幌の開閉もスムーズになりました。 ちょっとコツがいりますが運転席に座ったまま開け閉めができるのは本当に便利です。&lt;/p&gt;
&lt;p&gt;この幌を交換する際に、ウェザーストリップも交換したほうがよかったのでが、 結構高いのと雨漏りしてたわけでもなく、後からでもできるので自分は交換しませんでした。&lt;/p&gt;
&lt;p&gt;結果的にはその後も雨漏りなど特に問題ありませんでした。 現状雨漏りしてないなら様子見で交換しないのもありだと思います。&lt;/p&gt;
&lt;p&gt;今見るとTOPS ONLINEの幌の値段がめっちゃ上がってますね。 550ドルだったのが804ドルに…&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/9db950cb891399b3aa5b229f3e698c57.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2F9db950cb891399b3aa5b229f3e698c57-150x150.Dn-dlprV.png&amp;#x26;w=150&amp;#x26;h=150&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最後に本文中には載せてませんでしたが、幌交換時に撮ってた写真があるのでココに載せておきます。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1218.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1218-150x150.CbbIpfeZ.jpg&amp;#x26;w=150&amp;#x26;h=150&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1225.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1225-150x150.is4Cy9Mp.jpg&amp;#x26;w=150&amp;#x26;h=150&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1227.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1227-150x150.DJgjeY4D.jpg&amp;#x26;w=150&amp;#x26;h=150&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/09/IMG_1232.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1232-150x150.SeZ9yTKm.jpg&amp;#x26;w=150&amp;#x26;h=150&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_1233-e1535762694222.BlpFiHIG.jpg"/><enclosure url="/_astro/IMG_1233-e1535762694222.BlpFiHIG.jpg"/></item><item><title>MR-Sのエアコンを掃除してみた</title><link>https://note.muaaru.com/blog/2018-08-30-post-81</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-08-30-post-81</guid><description>MR-Sのエアコンを掃除してみた</description><pubDate>Thu, 30 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;なんかエアコンが臭い&lt;/h2&gt;
&lt;p&gt;夏場エアコンでクーラーをガンガン使っていたが、エアコンの風の嫌な匂いが気になるようになった。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/takaponzzw30/status/1027475324160770049&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ちょうど以前Twitterでこんな投稿を見つけていたので、自分でもやってみることにした。&lt;/p&gt;
&lt;h2&gt;使う道具&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;歯ブラシ&lt;/li&gt;
&lt;li&gt;家庭用エアコン洗浄スプレー&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;エアコンのブロアーを外す&lt;/h2&gt;
&lt;p&gt;このツイートを参考に、ブロアーを外していきます。&lt;a href=&quot;https://twitter.com/takaponzzw30/status/1027495450134204416&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;まずは、助手席側のスカッフプレートを外していきます。 スカッフプレートは、上方向に引っ張ると簡単に外れます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1848.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1848-300x225.DgLpMIBE.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;助手席のグローブボックスを外します。 グローブボックスを開けて、グローブボックスの左右を内側に抑えるとグローブボックスが下まで開くようになります。 奥側にグローブボックスが引っ掛けてあるので、少し上に持ち上げれば外れます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1870.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1870-300x225.CwoCOb68.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;次は、助手席の足元のカバーを外します。 奥の方に一本ネジが止まっていたと思います。 外したら、手前方向に引っ張りながら外します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1849.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1849-300x225.CFWdCQ-P.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;外すとこんな感じに電気系の配線がむき出しになります。 この上側にブロアーがあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1850.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1850-300x225.8dWCYpqz.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;助手席の足元に頭を入れて上方向をみると、こんな感じになっています。 ブロアーはネジで３本でとまっていますが、まずは左側に見える青い配線のカプラーを外します。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1851.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1851-300x225.BeeaTSJw.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;このカプラーはこのような構造になっており、奥側に爪が引っかかています。 適当にマイナスドライバーを突っ込んで、爪を押さえなが引っ張っていくと外れます。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1856.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1856-300x225.FdV-nJri.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;カプラーを外したら、ブロアーを固定するネジを外せばブロアーが落ちてきます。 他の部分にあたって引き抜きにくいですが、なんとか引き抜きます。&lt;/p&gt;
&lt;h2&gt;エアコンのヒダヒダを洗浄する&lt;/h2&gt;
&lt;p&gt;エアコンのヒダヒダの部分、エバポレーターというやつをエアコン洗浄剤で洗浄します。&lt;/p&gt;
&lt;p&gt;グローブボックスのあったあたりの金属の部品の奥側に、黒い箱状の部分があります。 この左下に窓のようにセンサーが埋め込まれているので、これを外します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1869.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1869-300x225.CL2Ua5PM.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;金属の部品のネジも外しておかないと、センサーが引っかかってはずれないので外しておきます。 センサーを壊さないように、慎重に引っ張り出します。 意外と長いので、ぶつかる部分をどかしながら引き抜けばギリギリ取れます。&lt;/p&gt;
&lt;p&gt;外すとこんな感じになります。 &lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1860-e1535629321670.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1860-e1535629321670-300x286.CGuzowF9.jpg&amp;#x26;w=300&amp;#x26;h=286&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;センサーを外すとこのようにエバポレーターが見えるので、ここからエアコン洗浄剤を吹き付けます。 吹き付けたらしばらく放置してます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1861.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1861-300x225.BFQZ-68O.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;ブロアーを洗う&lt;/h2&gt;
&lt;p&gt;取り外したブロアーを洗浄していきます。&lt;/p&gt;
&lt;p&gt;バケツにブロアーの白い部分だけ浸かる程度に水をためて、ブロアーの白い部分を洗います。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1863.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1863-300x225.DHyTxmEC.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1862.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1862-300x225.Dg45XLw5.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;歯ブラシやらでこすると、こんな感じに水が真っ黒になりました。 中古車で買って、それから数年乗っていたので、すごい汚れでした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1864.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1864-300x225.DTqvSGiP.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;洗浄していくと、だいぶ白くなります。 汚れが結構頑固なのと、形状が複雑でなかなか歯ブラシが届きません。 ある程度、掃除できたので適当なところで切り上げました。&lt;/p&gt;
&lt;p&gt;乾燥させて、念の為カプラーの刺さっていた端子部分も乾いた布などで拭きます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.muaaru.com/wp-content/uploads/2018/08/IMG_1867.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_1867-300x225.Mlb5thJP.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;戻していく&lt;/h2&gt;
&lt;p&gt;ここまでの手順の逆に戻していきます。 エバポレーターのセンサーをもとに戻して、ブロアーをもとに戻します。 カプラーも接続したら、エアコンは切った状態でエンジンをかけて送風でエバポレータを乾かすために、しばらく動かします。 しばらく動かしたら、エアコンもつけてエアコンが動いてることを確認します。&lt;/p&gt;
&lt;p&gt;ちゃんと動いていたら、残りのラゲッジボックスや、スカッフプレートなどを戻して完了です。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;掃除してみると、嫌な匂いはしなくなりました。 正直、ブロアーを洗ってい時、よく今までこんな汚いブロアーが吐き出した空気を吸っていたなと思いました。&lt;/p&gt;
&lt;p&gt;エアコン洗浄剤も２本で千円しないので、安くすみました。&lt;/p&gt;
&lt;p&gt;中古車で買って、今まで掃除したことがない人は、一度、掃除してみるといいでしょう。 きっと私と同じようにびっくりするぐらい汚れているはずです。&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_1864.DyxQA4FA.jpg"/><enclosure url="/_astro/IMG_1864.DyxQA4FA.jpg"/></item><item><title>MR-Sのエンジンチェックランプが点灯したので修理してみた話</title><link>https://note.muaaru.com/blog/2018-08-29-post-53</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-08-29-post-53</guid><description>MR-Sのエンジンチェックランプが点灯したので修理してみた話</description><pubDate>Wed, 29 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;エンジンチェックランプが点灯した原因を調べる&lt;/h2&gt;
&lt;p&gt;インターネットなどで調べると、MR-Sの場合はだいたいはO2センサーが故障したということらしい。&lt;/p&gt;
&lt;p&gt;ODB2端子にBluetooth接続できるドングルを使って、&lt;a href=&quot;https://play.google.com/store/apps/details?id=org.prowl.torque&amp;#x26;hl=ja&quot;&gt;Torque Pro&lt;/a&gt;というAndroidアプリで調べてみます。エラーコードを見てみると、やはり片方のO2センサーで異常コードがでていました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://muaaru.com/wp-content/uploads/2018/08/Screenshot_20180414-084219-e1535544691118.png&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FScreenshot_20180414-084219-e1535544691118-300x93.BF4W9yQH.png&amp;#x26;w=300&amp;#x26;h=93&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ということで、せっかくO2センサーが壊れたので、自分で交換してみることにしました。&lt;/p&gt;
&lt;h2&gt;修理に必要なもの&lt;/h2&gt;
&lt;h3&gt;部品と工具&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://muaaru.com/wp-content/uploads/2018/08/IMG_0841-e1535545030112.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_0841-e1535545030112-300x250.2tnngk65.jpg&amp;#x26;w=300&amp;#x26;h=250&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;すべてAmazonなり、アストロプロダクツなどで揃います。 O2センサーを回す際に、かなりチカラをかけないと回らないため、工具は丈夫なものを選んだほうが良いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ソケットレンチ&lt;/li&gt;
&lt;li&gt;O2センサーソケット&lt;/li&gt;
&lt;li&gt;クレ556&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/gp/product/B01N3O96GF/ref=oh_aui_detailpage_o09_s00?ie=UTF8&amp;#x26;psc=1&quot;&gt;O2センサーソケット&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;部品&lt;/h3&gt;
&lt;p&gt;純正品は非常に高価なので、社外品をAmazonで適当に探しました。 これに交換をして、しばらく経ちますが特に問題は起きてません。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O2センサー&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O2センサー&lt;/p&gt;
&lt;h2&gt;交換してみる&lt;/h2&gt;
&lt;p&gt;エンジンルームを開けて、O2センサーを交換していきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O2センサーにクレ556を吹いておく 何もせずに回そうとすると、ネジ部分がガッチリ固まっていて回せないと思うので、 先にクレ556をO2センサーのネジ部分に吹いて置きます。 しばらく、その状態で放置して潤滑剤を染み込ませます。&lt;/li&gt;
&lt;li&gt;O2センサーのカプラーを外す 潤滑剤を染み込ませている間に、O2センサーの配線ケーブルを外しておきます。 カプラーで接続されているので、カプラーの爪の引っかかりを外すように意識しながら引っ張ると外れます。 今回は2本とも交換なので2つ外します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://muaaru.com/wp-content/uploads/2018/08/IMG_0844.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_0844-300x300.BJAcsXE9.jpg&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://muaaru.com/wp-content/uploads/2018/08/IMG_0843.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_0843-300x300.pvP-WRDN.jpg&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O2センサーを外す 潤滑剤が染み込んだら、O2センサーソケットをつかって、O2センサーを回して外します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://muaaru.com/wp-content/uploads/2018/08/IMG_0846.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_0846-300x300.DyYQr-76.jpg&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O2センサーを取り付け 取り外すときと同じように、O2センサーソケットをつかって、O2センサーを取り付けます。 カプラーも接続します。抜くときと違って刺すのは簡単です。&lt;/li&gt;
&lt;li&gt;確認 取り付けが終わったら、エンジンをかけてみて、エンジンチェックランプが消えているの確認します。 エンジンルームも確認して、O2センサーのあたりから排気が漏れていなければ完了です。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://muaaru.com/wp-content/uploads/2018/08/IMG_0847.jpg&quot;&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_0847-300x300.BN_CePkf.jpg&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;他の車種だと、部品を外さないとアクセスできない場所にO2センサーがあったりするようですが、 MR-Sの場合は、エンジンルームを開ければ目の前にいます。&lt;/p&gt;
&lt;p&gt;タイヤ交換よりも簡単で、左右交換しても1万円以下でできました。&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_0841-e1535545030112.BP1GpaO4.jpg"/><enclosure url="/_astro/IMG_0841-e1535545030112.BP1GpaO4.jpg"/></item><item><title>MR-Sを購入してからの総費用</title><link>https://note.muaaru.com/blog/2018-08-28-post-9</link><guid isPermaLink="true">https://note.muaaru.com/blog/2018-08-28-post-9</guid><description>MR-Sを購入してからの総費用</description><pubDate>Tue, 28 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;MR-Sを購入してから3年近く立つので、今ままでにかかった費用を振り返ってみる。&lt;/p&gt;
&lt;h2&gt;MR-Sとは&lt;/h2&gt;
&lt;p&gt;TOYOTAが2000年頃に発売した車で今は生産されていない。 2人乗りのオープンカーで1トンちょっとのライトウェイトスポーツカーである。 低価格の車には珍しい、エンジンが運転席の後ろにあるミッドシップで後輪を駆動させるMRになっている。&lt;/p&gt;
&lt;p&gt;頭文字Dにも登場した車種なので、見たことがあるかもしれない。 実際に運転してみると、結構、面白い車だと思う。&lt;/p&gt;
&lt;h2&gt;買ったばかりの状態&lt;/h2&gt;
&lt;p&gt;３年くらい前の買ったばかりの状態が下記の画像。 2006年度登録の後期型、運転席はフルバケットシートで、ロールケージが入っていた。 幌やシートはタンレザーになっている。 10万キロちょっとの車両で、中古車屋で95万円で購入した。 正直、今思うと高かった気がする。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2Ffb495585671a478af21a8285510d4bbf-300x300.BZkyB6B4.jpg&amp;#x26;w=300&amp;#x26;h=300&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;1年目から３年目まで&lt;/h2&gt;
&lt;p&gt;ネッツのディーラーにて12ヶ月点検のシビアコンディションで点検してもらい、いろいろと修理箇所が出てきた。 タイヤやらエンジン、ブレーキまわりの修理で16万くらいかかった。&lt;/p&gt;
&lt;p&gt;ただ、大きな修理はこれくらいで、車検までの1年位は問題なく乗れていた。&lt;/p&gt;
&lt;p&gt;車検で再び、いろいろと整備が必要になり車検費用と合わせて18万くらいかかった。 スタビライザーがついてなかったり、サイドブレーキが腐ってたりと、ここでもいろいろ出てきた。&lt;/p&gt;
&lt;p&gt;その後は再び、１年程度は問題なく乗れていた。&lt;/p&gt;
&lt;p&gt;ある日、エンジンチェックランプがついた。 MR-SにはよくあるらしくO2センサーが壊れたようだった。 簡単に交換できるため、自分で交換してみたが、普通に交換できた。&lt;/p&gt;
&lt;h2&gt;最近の状態&lt;/h2&gt;
&lt;p&gt;最近の状態が下記の画像。 ぱっと見だと最初の画像から変化がないが、幌がワインレッドに交換されていたり、タイヤがミシュランになっていたりする。&lt;/p&gt;
&lt;p&gt;オープンカーの幌は消耗品のため、数年も使うとだいぶボロボロに。 MR-Sの幌交換は、頼むと15〜20万くらいはかかるようだった。 O2センサーを交換したあたりから、自分でも車をイジるようになり、試しに幌の交換も自分でやってみることに。 海外サイトでMR-Sの幌が売られており、日本円でだいたい７万円というところだったので、個人輸入で購入。 Amazonで購入するのとそう変わらなかった。 幌が届いて自分でやってみたが、結構大変だった。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://note.muaaru.com/_image?href=%2F_astro%2FIMG_4498-300x225.BBc7JdRX.jpg&amp;#x26;w=300&amp;#x26;h=225&amp;#x26;f=webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;３年ほどMR-Sに乗ってきて、おおよそ税金なども含め総額で200万くらいはかかっている。&lt;/p&gt;
&lt;p&gt;安くで楽しいスポーツカーに乗りたいけど、他の人と被りたくないという人には向いている車種かもしれない。&lt;/p&gt;
&lt;p&gt;最後に今までの詳細な記録を載せておく。&lt;/p&gt;</content:encoded><h:img src="/_astro/IMG_4498.dRoCQpCn.jpg"/><enclosure url="/_astro/IMG_4498.dRoCQpCn.jpg"/></item></channel></rss>