<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://chitoku.jp</id>
    <title>ちとくのホームページ</title>
    <updated>2026-04-04T10:51:32.749Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://chitoku.jp"/>
    <link rel="self" href="https://chitoku.jp/feed/atom/"/>
    <rights>ちとく &lt;odango@chitoku.jp&gt;</rights>
    <entry>
        <title type="html"><![CDATA[MiniTool Partition Wizard で SSD を引っ越してみた]]></title>
        <id>https://chitoku.jp/windows/minitool-partition-wizard-ssd-migration</id>
        <link href="https://chitoku.jp/windows/minitool-partition-wizard-ssd-migration"/>
        <updated>2021-03-13T11:40:12.000Z</updated>
        <content type="html"><![CDATA[<p>わたしの PC では今まで Windows と Linux を 1 枚の SSD にインストールしていていましたが、SSD をもう 1 枚入手したので引越しと領域拡張をしてみました。今回は Windows で動作する「MiniTool Partition Wizard」の無料版を使ってこの SSD のパーティションを引っ越し、余った領域にデータ用のパーティションを拡大してみます。</p>

<h2>引っ越し前</h2>

<p>いずれの SSD も GPT 方式のパーティションテーブルで、引っ越し前は SSD #1 に Windows が 320 GiB で Linux が 140 GiB、その他の領域にシステム用のパーティションとスワップを割り当てています。</p>

<p>目標は SSD #2 に SSD #1 の Linux 領域を移動し、移動することで増加した領域にパーティションを拡張することです。注意点としては MiniTool Partition Wizard 無料版は Linux LVM の領域の拡張をサポートしていないため、SSD #2 の一部の作業は Linux 上で実施します。</p>

<p>引っ越し前後で括弧内の番号が対応しているパーティションはデータをそのまま移動し、スワップなどのデータを保持する必要がないパーティションは新規作成としています。</p>

<p>略語:<br> ESP: EFI System Partition<br> MSR: Microsoft Reserved Partition<br> WinRE: Windows Recovery Environment<br> LVM: Logical Volume Manager</p>

<h3>SSD #1（引っ越し前）</h3>
(1) ESP<br>FAT32<br>512 MiB
(2) MSR<br>-<br>128 MiB
(3) Windows<br>NTFS<br>320 GiB
(4) WinRE<br>NTFS<br>512 MiB
Swap<br>Linux Swap<br>5 GiB
(5) Linux<br>Linux LVM<br>140 GiB
<h3>SSD #2（引っ越し前）</h3>
なし<br>-<br>512 GB]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[自作 PC デビューしました！]]></title>
        <id>https://chitoku.jp/computers/pc-renewal-202101</id>
        <link href="https://chitoku.jp/computers/pc-renewal-202101"/>
        <updated>2021-02-20T16:26:26.000Z</updated>
        <content type="html"><![CDATA[<p>2016 年から愛用していた iMac が性能的に限界を迎えたのを機に、このたび自作 PC デビューを果たしました。使っていた iMac は Fusion Drive 採用の HDD 搭載機で、5 年という期間は頑張ってくれた方です。</p>

<p>今回は予算 20 万円で、最低 5 年は戦ってくれることを期待したいマシンを以下の構成で組みました。<br> 構成は @gaogao_9 にお願いしたら良い感じに考えてくれました。<br> OS は Windows 10 Home パッケージ版の流用なので予算として考慮していません。</p>

<table><tr><td></td><td>

<p>規格・型番等</p>

</td><td>

<p>購入価格</p>

</td></tr><tr><td>

<p>CPU</p>

</td><td>

<p>AMD Ryzen 9 3900X</p>

</td><td>

<p>¥48,000</p>

</td></tr><tr><td>

<p>M/B</p>

</td><td>

<p>MSI B550 M/B</p>

</td><td>

<p>MPG B550I GAMING EDGE WIFI</p>

</td><td>

<p>¥18,678</p>

</td></tr><tr><td>

<p>GPU</p>

</td><td>

<p>NVIDIA GeForce RTX 3070</p>

</td><td>

<p>玄人志向 GG-RTX3070-E8GB/TP</p>

</td><td>

<p>¥65,544</p>

</td></tr><tr><td>

<p>電源</p>

</td><td>

<p>SUPER FLOWER LEADEX III GOLD 850W</p>

</td><td>

<p>¥14,828</p>

</td></tr><tr><td>

<p>RAM</p>

</td><td>

<p>DDR-3200 16GB×2</p>

</td><td>

<p>ADATA AD4U3200716G22-D</p>

</td><td>

<p>¥12,827</p>

</td></tr><tr><td>

<p>SSD</p>

</td><td>

<p>NVMe PCIe Gen 4 SSD 500 GB</p>

</td><td>

<p>CFD 販売 CSSD-M2B5GPG3VND</p>

</td><td>

<p>¥10,480</p>

</td></tr><tr><td>

<p>クーラー</p>

</td><td>

<p>SCYTHE 虎徹 MarkⅡ</p>

</td><td>

<p>¥3,828</p>

</td></tr><tr><td>

<p>ケース</p>

</td><td>

<p>Mini-ITX</p>

</td><td>

<p>SilverStone SUGO 15</p>

</td><td>

<p>¥23,999</p>

</td></tr><tr><td>

<p>合計</p>

</td><td>

<p>¥198,184</p>

</td></tr></table>

<p>価格は 2020/12/28 時点のもの。年末に価格.com とにらめっこしながらポチポチしていました。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[gomock の Matcher を自作して gomock.Any() 回避！]]></title>
        <id>https://chitoku.jp/programming/gomock-custom-matcher</id>
        <link href="https://chitoku.jp/programming/gomock-custom-matcher"/>
        <updated>2020-05-24T13:25:50.000Z</updated>
        <content type="html"><![CDATA[<p>Go でテストを記述する際、モックの生成にはしばしば gomock が使われますが、引数の検証に使う Matcher は標準では限られたもののみが用意されています。</p>

<p>たとえば、以下のテストの 12 行目では <code>gomock.Eq(...)</code> を使って <code>api.Client</code> に対して <code>Get("/v1/info")</code> という呼び出しが 1 回されることを期待しています。</p>

<pre><code>//go:generate mockgen -source=client.go -destination=client_mock.go -package=api package api import ( "io" "net/http" ) type Client interface { Get(url string) (*http.Response, error) Post(url, contentType string, body io.Reader) (*http.Response, error) }</code></pre>

<pre><code>import ( "testing" "go.uber.org/mock/gomock" ) func TestServiceGet(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() mock := api.NewMockClient(ctrl) mock.EXPECT().Get(gomock.Eq("/v1/info")).Return(nil, nil) service := domain.NewService(mock) service.DoFancyStuff() }</code></pre>

<p>このような単純な比較であれば標準の Matcher でも事足りますが、以下のテストの 15 行目のように引数の検証が比較演算でできないケースもあり、<code>gomock.Any()</code> を使って引数の検証自体を省略したままにしてしまうこともあります。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[EdgeRouter X に redsocks を導入して透過的にプロキシーを経由させる]]></title>
        <id>https://chitoku.jp/computers/edgerouter-x-redsocks-forwarding</id>
        <link href="https://chitoku.jp/computers/edgerouter-x-redsocks-forwarding"/>
        <updated>2020-03-01T09:05:04.000Z</updated>
        <content type="html"><![CDATA[<h2>概要</h2>

<p>SOCKS プロキシーは OpenSSH などで手軽に建てられるプロキシーの一つですが、redsocks を使用することで TCP のパケットが透過的に SOCKS プロキシーを経由するように設定することができます。今回は EdgeRouter X に redsocks をインストールし、LAN 内のコンピューターから特定の宛先への TCP 通信と名前解決が透過的に SOCKS プロキシーを経由するように設定してみます。</p>

<h2>redsocks とは</h2>

<p>redsocks は TCP パケットを受け取り、SOCKS/HTTPS プロキシーを通過させて返すソフトウェアです。iptables の REDIRECT や DNAT と組み合わせて、redsocks の動作しているポートにプロキシーを通過させたいパケットを転送して使用します。このとき、iptables が REDIRECT や DNAT で付け替える前の本来の宛先アドレスや宛先ポートは、<code>getsockopt()</code> でソケットを取得する際の <code>SO_ORIGINAL_DST</code> というオプションによって取得されるため、iptables のルールを設定するホストと redsocks が動作するホストは同一のマシンである必要があります。</p>

<h2>TCP の場合</h2>

<p>iptables の DNAT ルールによって redsocks に向けられたパケットが SOCKS プロキシーに転送されます。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bash の getopts でロングオプションを処理する]]></title>
        <id>https://chitoku.jp/programming/bash-getopts-long-options</id>
        <link href="https://chitoku.jp/programming/bash-getopts-long-options"/>
        <updated>2019-09-01T09:49:30.000Z</updated>
        <content type="html"><![CDATA[<p>Bash で書かれたシェルスクリプトで引数を処理するためには、ビルトインコマンドの <code>getopts</code> が使用できますが、このコマンドは <code>--foo</code> のようなロングオプションをサポートしていません。ロングオプションを GNU の <code>getopt</code> を持たない macOS などの環境を含めてサポートしたい場合は自前で解析する方法や、<code>getopts</code> に <code>-:</code> を渡して処理する方法がありますが、この記事では後者の <code>getopts</code> を使用した方法で、前述のリンク先の手法を参考にしながら、オプションの引数を受けてショートオプションとロングオプションを共通で扱う方法を考えてみます。</p>

<h2>ロングオプションの引数</h2>

<p>ロングオプションで引数を取るコマンド群には代表的なもので次の種類があります。</p>

<h3><code>--foo=bar</code>: 区切り文字として <code>=</code> を使って受け入れる</h3>

<p><code>--foo=bar</code> のみを受け入れる実装は見当たりませんでした。<br> この記事の --foo=bar を処理する方法で扱っています。</p>

<h3><code>--foo bar</code>: 引数を分けて受け入れる</h3>

<p>FreeBSD tar、curl、Ruby、Python などで採用されている方式です。<br> この記事の --foo bar を処理する方法で扱っています。</p>

<h3><code>--foo=bar</code> と <code>--foo bar</code> の両方を受け入れる</h3>

<p>GNU Coreutils、GNU Grep、Git、Node.js、GNU Awk など多くで採用されている方式です。<br> この記事の --foo=bar と --foo bar の両方を処理する方法で扱っています。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[EdgeRouter X と Linux サーバーで IPv6 拠点間 VPN を構成する]]></title>
        <id>https://chitoku.jp/computers/edgerouter-x-site-to-site-ipsec</id>
        <link href="https://chitoku.jp/computers/edgerouter-x-site-to-site-ipsec"/>
        <updated>2019-07-10T14:03:07.000Z</updated>
        <content type="html"><![CDATA[<p>EdgeRouter X と Linux サーバーを IPsec over IPv6 の拠点間 VPN で接続する方法です。</p>

<p>So-net 光 プラスは、フレッツ光とプロバイダー契約がセットになっているいわゆる光コラボサービスで、IPv4 が PPPoE で提供されているという特徴があります。そのため、グローバル IP アドレスが頻繁に変更されたり、NGN 網終端装置の輻輳の影響を受けたりといった問題があり、IPv6 接続のほうがより安定して VPN 接続を構成することができます。このサービスの IPv6 アドレスはあくまでも半固定ですが IPv6 アドレスの変更頻度は低く、DDNS などを設定しておけば十分に実用できます。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[strongSwan 5.8.0 の systemd ユニット変更に対応する]]></title>
        <id>https://chitoku.jp/computers/strongswan-swanctl-migration</id>
        <link href="https://chitoku.jp/computers/strongswan-swanctl-migration"/>
        <updated>2019-06-15T06:50:13.000Z</updated>
        <content type="html"><![CDATA[<p>2019/5/20 にリリースされた strongSwan 5.8.0ですが、systemd のユニットが以下のように更新されました。</p>

<blockquote>

<p>Renaming of systemd Service Units</p>

<p>The <code>systemd</code> service units have been renamed. The modern unit (charon-systemd with vici/swanctl), which was called strongswan-swanctl, is now called strongswan (the previous name is configured as alias in the unit, for which a symlink is created when the unit is enabled). The legacy unit (starter/charon with ipsec/stroke) is now called strongswan-starter.</p>

</blockquote>

<p>このリリースによって、今まで <code>strongswan</code> ユニットを使っていたシステムではその実体が <code>charon-systemd + vici/swanctl</code> を使ったものに変更されます。</p>

<table><tr><td>

<p>バージョン</p>

</td><td>

<p>ユニット</p>

</td><td>

<p>実体</p>

</td></tr><tr><td>

<p>< v5.8.0</p>

</td><td>

<p><code>strongswan</code></p>

</td><td>

<p>starter/charon + ipsec/stroke</p>

</td></tr><tr><td>

<p><code>strongswan-swanctl</code></p>

</td><td>

<p>charon-systemd + vici/swanctl</p>

</td></tr><tr><td>

<p>>= v5.8.0</p>

</td><td>

<p><code>strongswan</code></p>

</td><td>

<p>charon-systemd + vici/swanctl</p>

</td></tr><tr><td>

<p><code>strongswan-starter</code></p>

</td><td>

<p>starter/charon + ipsec/stroke</p>

</td></tr></table>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jest で location.href などの値を書き換える方法]]></title>
        <id>https://chitoku.jp/programming/jest-test-jsdom</id>
        <link href="https://chitoku.jp/programming/jest-test-jsdom"/>
        <updated>2019-04-07T10:30:40.000Z</updated>
        <content type="html"><![CDATA[<p>この記事はもう古くなってしまいました。<br> Jest v28 以降では、下記のように JSDOM のオプションを指定することができるようになっています。</p>

<pre><code>/** * @jest-environment jsdom * @jest-environment-options {"url": "https://example.com/"} */ it('detects PC', () => { expect(location.hostname).toBe('example.com'); });</code></pre>

<h2>目的</h2>

<p>Node.js におけるテストで Jest を使用する場合、DOM API が関連するテストは JSDOM の実装によって実行されます。この JSDOM はブラウザーと完全に同じ実装を持っているわけではなく、<code>location.href</code> への代入ができないなどの制約があります。そのため Jest でもこれに合わせて JSDOM の API を使用したテストコードを記述する必要があります。</p>

<h2>準備</h2>

<p>Jest では JSDOM の API を直接参照することができないため、jest-environment-jsdom-global をインストールします。</p>

<pre><code>$ npm i jest-environment-jsdom-global jest-environment-jsdom</code></pre>

<p><code>package.json</code> の <code>jest</code> の項目にも追加しておきます。</p>

<pre><code>{ "jest": { "testEnvironment": "jest-environment-jsdom-global" } }</code></pre>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[EdgeRouter X のロードバランサーで v6 プラスと PPPoE を併用する]]></title>
        <id>https://chitoku.jp/computers/edgerouter-x-load-balance-over-v6plus</id>
        <link href="https://chitoku.jp/computers/edgerouter-x-load-balance-over-v6plus"/>
        <updated>2019-03-29T13:14:26.000Z</updated>
        <content type="html"><![CDATA[<h2>ロードバランサーとは</h2>

<p>EdgeOS は標準で WAN へのロードバランサー機能を搭載しており、パケットのルーティング先を予め指定した方法でインターフェイスごとに振り分けることができます。たとえば複数の回線を契約しているような逸般の誤家庭で負荷をそれぞれに分散させたり、一方の回線が利用できなくなったときにもう一方の回線に自動で切り替えたり、といったユースケースがあります。</p>

<p>この記事では So-net 光 を契約している我が家（VDSL 😢）で、フレッツ光の PPPoE 方式による接続と v6 プラス を EdgeRouter から利用しつつ、v6 プラスが利用できないときに PPPoE 接続にフォールバックさせるように設定してみます。</p>

<h2>v6 プラスのデメリット</h2>

<p>v6 プラスを利用している場合、特定のポート番号を使用するサービスが IPv4 で利用できなくなります。しかしながらこの記事の方法を使用すると、EdgeRouter からルーティングされるパケットをロードバランシングから除外することで PPPoE がそのまま利用できるため、L2TP や IPsec などを引き続き利用することができます。</p>

<p>So-net による v6 プラスの説明では以下のようにサービスの制約として説明されています。これは v6 プラスが一つのアドレスを複数のユーザーで共有するサービスであるため、特定のポートを専有することができないことに起因する問題です。</p>

<blockquote>

<p>「v6プラス」をご利用の場合、「固定IPサービス」は利用できません。</p>

<p>※PPPoEのIPv4を有効化いただくことでご利用可能です。 (詳しくは「v6プラス」 （IPoE方式でのIPv4通信)）を無効にする （または有効にする） 方法を知りたい)<br> また、以下に該当するサービスについても、ご利用いただけない場合があります。</p>

<ul> <li>特定のプロトコル (PPTP、SCTP) を利用するサービス</li> <li>利用可能なポート番号が制限されているため、特定のポートを使うサービス</li> <li>IPv4グローバルアドレスを共有するネットワークでは利用できないサービス</li> </ul> </blockquote>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Node.js の Intl などが CI 上でも動くようにする]]></title>
        <id>https://chitoku.jp/programming/intl-on-nodejs</id>
        <link href="https://chitoku.jp/programming/intl-on-nodejs"/>
        <updated>2019-03-25T15:22:45.000Z</updated>
        <content type="html"><![CDATA[<p>CI などの環境で Node.js の Intl API をはじめとする国際化サポートが想定した挙動にならない場合があります。たとえば Travis CI の Node.js 環境で以下のコマンドを実行すると <code>ja</code> を指定していても <code>en-US</code> 相当の出力になっています。</p>

<pre><code>$ node -p '(new Intl.DateTimeFormat("ja")).format(new Date())' 3/26/2019</code></pre>

<p>Node.js の i18n は ICU を必要としており、スクリプト実行の前に full-icu…</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[EdgeRouter X のファイアウォールでフレッツ光の IPv6 から SSH が繫がらない問題を解決する]]></title>
        <id>https://chitoku.jp/computers/edgerouter-x-flets-dscp</id>
        <link href="https://chitoku.jp/computers/edgerouter-x-flets-dscp"/>
        <updated>2019-03-23T07:55:37.000Z</updated>
        <content type="html"><![CDATA[<h2>概要</h2>

<p>フレッツ光では OpenSSH が設定する DSCP 値の関係で SSH のパケットが NGN 網で捨てられてしまう問題が発生します。端的にはこの記事の指摘通り <code>ssh_config</code> を以下のように修正すれば解決できます。</p>

<pre><code>Host foo.example.com HostName foo.example.com IPQoS 0</code></pre>

<p>しかしながら、このような設定はルーター側で設定しておいたほうがクライアント側の設定が少なくて済むので楽です。今回は EdgeRouter X のファイアウォール機能を使って、ルーターにやってきた SSH のパケットの DSCP 値を変更するように設定してみます。</p>

<h2>環境</h2>
<table><tr><td>

<p>モデル</p>

</td><td>

<p>EdgeRouter X 5-Port</p>

</td></tr><tr><td>

<p>EdgeOS</p>

</td><td>

<p>v1.10.9</p>

</td></tr><tr><td>

<p>Linux</p>

</td><td>

<p>ubnt 3.10.107-UBNT</p>

</td></tr></table>
<h2>手順</h2>

<p>CLI からファイアウォールの設定を行います。<br> アドレスやポート番号等は適宜読み替えてください。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Vim で Markdown の改行をおしゃれにする]]></title>
        <id>https://chitoku.jp/computers/markdown-line-break-on-vim</id>
        <link href="https://chitoku.jp/computers/markdown-line-break-on-vim"/>
        <updated>2019-03-17T14:21:21.000Z</updated>
        <content type="html"><![CDATA[<p>Vim の小ネタです。<br> Markdown では改行を行末に半角スペースを 2 つ並べて表しますが、エディター上で改行かどうかが見つけにくくなります。</p>

<p>そこで Vim の conceal 機能を活用してちょっとだけ見つけやすくしてみます。<br> …</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[EdgeRouter X の DDNS で Cloudflare DNS の IPv6 アドレスを更新させる]]></title>
        <id>https://chitoku.jp/computers/edgerouter-x-ipv6-ddns</id>
        <link href="https://chitoku.jp/computers/edgerouter-x-ipv6-ddns"/>
        <updated>2019-03-13T14:50:49.000Z</updated>
        <content type="html"><![CDATA[<h2>概要</h2>

<p>EdgeRouter X にはビルトインの DDNS 機能が搭載されていますがドキュメントは具体的な設定例を掲載していません。設定を調整してみたところ EdgeRouter でも Cloudflare の DNS サーバーの AAAA レコードが自動更新されるような設定ができたのでご紹介します。</p>

<h2>環境</h2>
<table><tr><td>

<p>モデル</p>

</td><td>

<p>EdgeRouter X 5-Port</p>

</td></tr><tr><td>

<p>EdgeOS</p>

</td><td>

<p>v1.10.9</p>

</td></tr><tr><td>

<p>Linux</p>

</td><td>

<p>ubnt 3.10.107-UBNT</p>

</td></tr><tr><td>

<p>ddclient</p>

</td><td>

<p>v3.8.3</p>

</td></tr><tr><td>

<p>libio-socket-inet6-perl</p>

</td><td>

<p>v2.69-2</p>

</td></tr></table>
<h2>事前準備（＋ファームウェアのアップデート時の作業）</h2>

<p>EdgeRouter に搭載されている DDNS クライアントは ddclient です。<br> EdgeOS v1.x では IPv6 サポートのためには Perl ライブラリーである IO::Socket:INET6 のインストールが必要で、事前準備のほかファームウェアのアップデートの際にも以下を実行する必要があります。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[乗るしかないこのビッグウェーブに〜Gatsby 移行〜]]></title>
        <id>https://chitoku.jp/programming/migrate-to-gatsby</id>
        <link href="https://chitoku.jp/programming/migrate-to-gatsby"/>
        <updated>2019-03-10T14:35:35.000Z</updated>
        <content type="html"><![CDATA[<p>2019/02 まで WordPress で管理していた chitoku.jp ですがこの度 Gatsby に移行しました！</p>

<h2>TL;DR</h2> <ol> <li>Gatsby で TypeScript なら gatsby-plugin-ts-loader + tsconfig-paths-webpack-plugin</li> <li>Algolia で日本語の検索をするときは Keep diacritics on characters に注意</li> <li>babel-plugin-react-intl-auto に出した PR がマージされた</li> <li>gatsby-transformer-remark に出した PR がマージされた</li> <li>remark-grid-tables に出した PR がマージされた</li> <li>Gatsby の IE サポートは半分嘘なので残り半分は自分でやる</li> </ol> <h2>Gatsby とは</h2>

<p>Gatsby は React 製の静的サイトジェネレーターです。Markdown や画像、YAML、テキストファイルなどを透過的に扱うサーバーをローカルに建てて、それらを React のコンポーネントから GraphQL クエリーを通じて組み込めるという特徴があります。豊富なプラグインによって動作を拡張できるほか、細かいカスタマイズは自分でローカルにプラグインとして切り出して管理することができます。</p>

<p>コアの基本的に見える機能もプラグインとして切り出されており、ビルド時のフックに比較的柔軟に介入できます。たとえば Markdown をソースとすると、gatsby-source-filesystem がファイルを読み込んで gatsby-transformer-remark に処理を委譲し、さらに下位のプラグインが Markdown パーサーの処理をカスタマイズできます。今回は以下のようなプラグインを入れてみました。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Windows の自動再生を特定のドライブでのみ無効化する]]></title>
        <id>https://chitoku.jp/windows/disable-autorun-on-specific-drive</id>
        <link href="https://chitoku.jp/windows/disable-autorun-on-specific-drive"/>
        <updated>2018-06-02T10:03:58.000Z</updated>
        <content type="html"><![CDATA[<h2>自動再生</h2>

<p>Windows には CD や USB メモリーに反応して自動再生というダイアログを出す鬱陶しい機能がありますが、コントロール パネル等ではメディアの種類やデバイスの種類による無効化しかできません。例えば起動時に自動的にマウントされるディスクであっても、VHD による仮想ディスクの自動再生などは簡単には無効化できないわけです。</p>

<p>一方でレジストリーには NoDriveAutoRun というエントリーによって個別のドライブの自動再生を無効化する機構があります。この記事はこれで以上です。</p>

<h2>めんどくさいあなたへ</h2>

<p>NoDriveAutoRun は自動再生を無効化するドライブの設定値の合計を 16 進数に変換して手で書き入れる必要がありますが、やっていられないので作っておきました。ご自由にお使いください。</p>

<p>無効化するドライブを選択したら、出てきたコードを auto-run.reg とでも名前をつけて実行すれば完了です。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Windows バックアップで NAS を使う]]></title>
        <id>https://chitoku.jp/windows/windows-backup-on-vhd</id>
        <link href="https://chitoku.jp/windows/windows-backup-on-vhd"/>
        <updated>2018-03-18T09:40:35.000Z</updated>
        <content type="html"><![CDATA[<p>NAS があると PC のバックアップ先に利用することも多いと思いますが、Windows 7 では Professional 以上のエディションでないと Windows バックアップからネットワークバックアップを選択することができません。 Windows 8 以降ではすべてのエディションで有効になっていますが、ここでは Windows 7 Home Premium で NAS にバックアップを保存してみます。</p>

<h2>VHD を作成する</h2>

<p>Windows 7 では VHD という仮想ディスクのファイル形式がネイティヴでサポートされ、これをマウントすることで物理的に接続された HDD と同じように扱うことができるようになりました。</p>

<ol> <li>[コントロール パネル] → [ディスクの管理] を開く</li> <li>[操作] → [VHD の作成] で NAS 上に容量固定の仮想ディスクを作成する</li> <li>作成した仮想ディスクにフォーマットを実行する</li> <li>[ドライブ文字とパスの変更] からドライブ文字を設定しておく</li> </ol>

<p>Buffalo の NAS に 200 GB の仮想ディスクを作成しましたが約 1 時間で完了しました。</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[CakePHP 2 のプラグインを Travis CI でテストする]]></title>
        <id>https://chitoku.jp/programming/cakephp2-plugin-test</id>
        <link href="https://chitoku.jp/programming/cakephp2-plugin-test"/>
        <updated>2017-12-21T15:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>これは CakePHP Advent Calendar 2017 の 22 日目の記事です。</p>

<h2>プラグインのテスト</h2>

<p>今回は CakePHP 2 のプラグインを開発する際に便利な、Travis CI 上でテストを実行するためのスクリプト「FriendsOfCake/travis」を紹介します。</p>

<p>CakePHP にはプラグインの機構が搭載されていますが、公式の Cookbook にも基本的な機能の説明がなされているのみで特にテストの手法については具体的な記述がありません。基本的には標準的なアプリケーションと同じようにしてテストを作成することが可能ですが、プラグインのリポジトリー単独でテストを実行することができるように設計されていないためテストの呼び出しにやや難があります。拙作の CakePHP 2 向けプラグイン「lampager-cakephp2」では当初、テストにのみ用いられるコードをプラグイン本体にも含めていましたが、読み込むアプリケーションとの競合や、プラグイン自体のメンテナビリティーの問題があったため別の手法を取ることにしました。</p>

<p>プラグインの作成 – 2.x（CakePHP 2.x Cookbook）</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[パスワード管理はじめました]]></title>
        <id>https://chitoku.jp/computers/password-manager</id>
        <link href="https://chitoku.jp/computers/password-manager"/>
        <updated>2017-12-09T12:14:15.000Z</updated>
        <content type="html"><![CDATA[<h2>うわっ……</h2>
■おすすめ情報
<h6>うわっ…私のPW、<br> 危なすぎ…？</h6>
無料５分で、自動生成や、<br> 重複パスワードが分かる<br> 「パスワード管理ソフト」。<br> 使った人は100万人を突破！<br> 結果もすぐ分かると大人気だ。<br> CHECK!<br> >>あなたの適性PWは？]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[VPS を強くした（物理）]]></title>
        <id>https://chitoku.jp/computers/scale-up-vps</id>
        <link href="https://chitoku.jp/computers/scale-up-vps"/>
        <updated>2017-04-10T03:58:59.000Z</updated>
        <content type="html"><![CDATA[<p>SSD の容量とかスペックが足りなくなってきたのでスケールアップしてみました。 <code>/home</code> に 30 GB くらいあてられたので一生大丈夫（適当）。</p>

<h2>手順</h2> <ol> <li>コントロールパネルで涙を流す </li> <li>ディスク拡張 さくらの VPS マニュアル を読む</li> <li>祈りながら再起動する</li> </ol> <h2>メモ</h2>

<p><code>fdisk</code> はパーティションテーブルが GPT だと使えないので代わりに <code>gdisk</code>…</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Travis CI × Selenium × Chrome で気持ち良いテスト生活]]></title>
        <id>https://chitoku.jp/programming/travis-ci-x-selenium-x-chrome</id>
        <link href="https://chitoku.jp/programming/travis-ci-x-selenium-x-chrome"/>
        <updated>2017-03-02T02:07:35.000Z</updated>
        <content type="html"><![CDATA[<p>日頃からコードをお書きになるみなさんなら、三度の飯よりテストですよね？</p>

<p>今回は Chrome 拡張「TweetDeck Accounts Switcher」を Travis CI/AppVeyor 上でテストしてみました。</p>

<h2>用意するもの</h2> <ul> <li>GitHub アカウント</li> <li>Travis CI アカウント</li> <li>Google Chrome</li> <li>Node.js</li> </ul> <h2>環境構築</h2>

<p>はじめに macOS で試してみます。</p>

<p>Node.js でドライバーを読み込んで……。</p>]]></content>
    </entry>
</feed>