<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[てくにかるむ]]></title><description><![CDATA[「エラーをなくすことは非常に有益で時には新しい真実や事実を作り上げるよりも勝る」
ー チャールズ・ダーウィン]]></description><link>http://multix.jp/</link><generator>Ghost 0.6</generator><lastBuildDate>Fri, 15 May 2026 05:48:37 GMT</lastBuildDate><atom:link href="http://multix.jp/tag/machintosh/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[ModefierKeyを取得する]]></title><description><![CDATA[<p><a href="https://ghost.multix.jp/dmm-playing-viewer/">艦板-KanPan-</a>では起動時にShiftキー/Ctrlキーの押し下げ状態を見てキャッシュやCookieを消去しつつ起動できたりする。この動作はもともとOptionキーを押しながらクリックしたり実行したりすると振る舞いが変わるiTunesやAirMac Utilityに触発された小技だ・・・が、ではどうやってこれらのModefierKey状態を取得する？</p>

<ul class="index"></ul>

<hr>

<h4 id="osx">OSXの場合</h4>

<p>OSXの場合、AppKit/Frameworkの<code>NSEvent-&gt;modifierFlags</code>を利用することでModefierKeyのビットフラグ値<sup id="fnref:1"><a href="http://multix.jp/get-modefierkey-propety/#fn:1" rel="footnote">1</a></sup>を取得することが出来る。OSX付属のPerlやPythonにはAppKitのバインディングが標準でインストールされているため、例えばPerlでは以下のようにすればビットフラグ値を標準出力へ返すことが出来る。コメント他を除けば実質5行だ。</p>

<pre><code class="language-brush:perl gutter:true title:modefierkey.pl">#!/usr/bin/perl

=comment=
enum {  
   NSAlphaShiftKeyMask  = 1 &lt;&lt; 16,
   NSShiftKeyMask       = 1 &lt;&lt; 17,
   NSControlKeyMask     = 1 &lt;&lt; 18,
   NSAlternateKeyMask   = 1 &lt;&lt; 19,
   NSCommandKeyMask     = 1 &lt;&lt; 20,</code></pre>]]></description><link>http://multix.jp/get-modefierkey-propety/</link><guid isPermaLink="false">9097cc8e-f724-4a61-8eae-f8c98cafd3f7</guid><category><![CDATA[てくにかるむ]]></category><category><![CDATA[Windows]]></category><category><![CDATA[Machintosh]]></category><category><![CDATA[Perl]]></category><dc:creator><![CDATA[朝日薫]]></dc:creator><pubDate>Thu, 07 May 2015 08:17:04 GMT</pubDate><content:encoded><![CDATA[<p><a href="https://ghost.multix.jp/dmm-playing-viewer/">艦板-KanPan-</a>では起動時にShiftキー/Ctrlキーの押し下げ状態を見てキャッシュやCookieを消去しつつ起動できたりする。この動作はもともとOptionキーを押しながらクリックしたり実行したりすると振る舞いが変わるiTunesやAirMac Utilityに触発された小技だ・・・が、ではどうやってこれらのModefierKey状態を取得する？</p>

<ul class="index"></ul>

<hr>

<h4 id="osx">OSXの場合</h4>

<p>OSXの場合、AppKit/Frameworkの<code>NSEvent-&gt;modifierFlags</code>を利用することでModefierKeyのビットフラグ値<sup id="fnref:1"><a href="http://multix.jp/get-modefierkey-propety/#fn:1" rel="footnote">1</a></sup>を取得することが出来る。OSX付属のPerlやPythonにはAppKitのバインディングが標準でインストールされているため、例えばPerlでは以下のようにすればビットフラグ値を標準出力へ返すことが出来る。コメント他を除けば実質5行だ。</p>

<pre><code class="language-brush:perl gutter:true title:modefierkey.pl">#!/usr/bin/perl

=comment=
enum {  
   NSAlphaShiftKeyMask  = 1 &lt;&lt; 16,
   NSShiftKeyMask       = 1 &lt;&lt; 17,
   NSControlKeyMask     = 1 &lt;&lt; 18,
   NSAlternateKeyMask   = 1 &lt;&lt; 19,
   NSCommandKeyMask     = 1 &lt;&lt; 20,
   NSNumericPadKeyMask  = 1 &lt;&lt; 21,
   NSHelpKeyMask        = 1 &lt;&lt; 22,
   NSFunctionKeyMask    = 1 &lt;&lt; 23,
   NSDeviceIndependentModifierFlagsMask  = 0xffff0000U 
};
=cut=

use strict;  
use warnings;  
use Foundation;

@NSEvent::ISA = qw(PerlObjCBridge);

my $AppKit = '/System/Library/Frameworks/AppKit.framework';  
NSBundle-&gt;bundleWithPath_($AppKit)-&gt;load;

print +(NSEvent-&gt;modifierFlags);  
exit 0;

__END__  
</code></pre>

<p>Bashスクリプト等からModefierKey状態を扱いたい場合はこのスクリプトコマンドを呼び出せば充分用が足りる。</p>

<pre><code class="language-brush:bash title:ビット列を16進数表示する">#/bin/bash
printf '%x¥n' $(modefierkey.pl)  
</code></pre>

<pre><code class="language-brush:bash title:ビットを判定する">#/bin/bash
(($(modefierkey.pl) &amp;&amp; 2**17)) &amp;&amp; echo ShiftDown || echo ShiftUp
</code></pre>

<hr>

<h4 id="windows">Windowsの場合</h4>

<p>前述のコードを Windows Visual Basic<sup id="fnref:2"><a href="http://multix.jp/get-modefierkey-propety/#fn:2" rel="footnote">2</a></sup> に転写すると次のようになる。OSXで言うcommandキー、fnキーに相当するものはないが、代わりにScrollLockキーを取得することが出来る。</p>

<pre><code class="language-brush:vb gutter:true title:modefierkey.vb">Module Module1

    Sub Main()

        'OSX Cocoa
        'enum {
        '   NSAlphaShiftKeyMask  = 1 &lt;&lt; 16,
        '   NSShiftKeyMask       = 1 &lt;&lt; 17,
        '   NSControlKeyMask     = 1 &lt;&lt; 18,
        '   NSAlternateKeyMask   = 1 &lt;&lt; 19,
        '   NSCommandKeyMask     = 1 &lt;&lt; 20,
        '   NSNumericPadKeyMask  = 1 &lt;&lt; 21,
        '   NSHelpKeyMask        = 1 &lt;&lt; 22,
        '   NSFunctionKeyMask    = 1 &lt;&lt; 23,
        '   NSDeviceIndependentModifierFlagsMask  = 0xffff0000U 
        '};

        Dim intMask As Integer = 0

        If My.Computer.Keyboard.CapsLock Then
            intMask += 1 &lt;&lt; 16
        End If
        If My.Computer.Keyboard.ShiftKeyDown Then
            intMask += 1 &lt;&lt; 17
        End If
        If My.Computer.Keyboard.CtrlKeyDown Then
            intMask += 1 &lt;&lt; 18
        End If
        If My.Computer.Keyboard.AltKeyDown Then
            intMask += 1 &lt;&lt; 19
        End If
        If My.Computer.Keyboard.NumLock Then
            intMask += 1 &lt;&lt; 21
        End If
        If My.Computer.Keyboard.ScrollLock Then
            intMask += 1 &lt;&lt; 24
        End If

        Console.Write(intMask)
    End Sub

End Module  
</code></pre>

<hr>

<h4 id="nwjs">Nw.jsの場合</h4>

<p>そもそもコンソールプラットフォームであるNode.jsではModefierKeyを取得する手段は用意されていない<sup id="fnref:3"><a href="http://multix.jp/get-modefierkey-propety/#fn:3" rel="footnote">3</a></sup>が、Nw.jsではGUIウィンドウが存在するのでそちらのwindow.eventからAlt/Ctrl/Shiftの3種類のキー状態真偽値を取得することが出来る。ChromiumベースのGUIプラットフォームなのだからこれは出来て当然だ。</p>

<pre><code class="language-brush:javascript">&amp;lt;script language="javascript"&amp;gt;
switch (true) {  
  case window.event.altKey   : console.log('altKey');   break;
  case window.event.ctrlKey  : console.log('ctrlKey');  break;
  case window.event.shiftKey : console.log('shiftKey'); break;
}
&amp;lt;/script&amp;gt;
</code></pre>

<p>ただし注意が必要なのは、ウィンドウ本体を示すwindowグローバルオブジェクトはGUI内の<code>&lt;script&gt;</code>タグでロードされたコードのほうにしか継承されていない点<sup id="fnref:4"><a href="http://multix.jp/get-modefierkey-propety/#fn:4" rel="footnote">4</a></sup>だ。つまりpackage.jsonの<code>node-main</code>でバックグラウンドロードされたNode.jsネイティブなコードの方からは直接使えない。また当然のことながらウィンドウ表示前・初期化前にはこれらのキー状態を取得出来ないという制約もある。故に「Altキーを押しながらドロップダウンメニューを開いた場合は内容をかえる」といった使いドコロになる。</p>

<hr>

<h4 id="">艦板ではどうしたか</h4>

<p>艦板では結局GUI初期化前にModefierKey状態をしたかったので、外部コマンドを <code>child_process.execSync()</code> で呼び出して結果を得るようになっている。ちなみにこの時の動作はWindows版の場合；</p>

<ul>
<li>ModefierKeyを調べて押されていなければそのまま起動継続する</li>
<li>ModefierKeyが押されていた場合でも、キャッシュクリア済であったならそのまま起動継続する</li>
<li>キャッシュクリアされていなかったら外部キャッシュクリアコードにexecして自分は終了する</li>
<li>外部キャッシュクリアコード<sup id="fnref:5"><a href="http://multix.jp/get-modefierkey-propety/#fn:5" rel="footnote">5</a></sup>は自分でModefierKeyを再確認し、キャッシュフォルダを掃除したあとに艦板をexecして自身は終了する</li>
</ul>

<p>・・・などと存外面倒なことをやっている。</p>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>キーとビット値の対応とcocoaでの名称はコメントを参照して頂きたいが、AlphaShiftKeyはcaps/CapsLockキー、AlternateKeyはalt/option/appleキーのことである。 <a href="http://multix.jp/get-modefierkey-propety/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p>要コンパイル。VS Express版だと for Desktopエディションが必要。 <a href="http://multix.jp/get-modefierkey-propety/#fnref:2" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:3"><p>プラットフォーム別に全く異なる実装をビルドする必要があるし、そもそもNode.jsの主戦場はCLIやサーバホスティング用途なので、ModefierKeyを見る要件は殆ど無い。なのでこれが必要になるのはNw.jsのようなGUIフレームワークと組み合わせた場合に概ね限られるといえる。 <a href="http://multix.jp/get-modefierkey-propety/#fnref:3" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:4"><p>親ウィンドウが生成される前から動き出すインスタンスなので継承しようがないとも言える。だが単に継承されていないから使えないだけなので、知ってるほう(GUI)が知らないほう(Native)に module.exports 経由で教えてやれば利用できる。同様にNw.jsのguiオブジェクトも教えてやればバックグラウンド側から各種ウィンドウ操作ができる。 <a href="http://multix.jp/get-modefierkey-propety/#fnref:4" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:5"><p>Windows版同梱のWinRapper.exeがそれ。OSXのほうは Info.plistに登録された Bashシェル (launch.sh) が modefierkey.pl を呼び出し、必要ならキャッシュ削除処理をしてから Nw.js を起動する段取りだからずっとシンプルだ。 <a href="http://multix.jp/get-modefierkey-propety/#fnref:5" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item><item><title><![CDATA[Node.js環境を作る]]></title><description><![CDATA[<p>プラットフォーム別のNode.js環境構築メモ</p>

<ul class="index"></ul>

<hr>

<h4 id="centos6linux">CentOS6/Linux</h4>

<p>CentOSの場合、nodejsとnpmの各パッケージはEPELレポジトリに収録されている。EPELを使用可能にするには<a href="https://ghost.multix.jp/centos-addon-repos/">こちら</a>を参照のこと。これが済んでいればyumだけで基本環境のインストールが出来る。</p>

<pre><code class="language-brush:plain">sudo yum install nodejs npm  
</code></pre>

<p>ただしこれでOSにインストールされるのはやや古いバージョンである。</p>

<pre><code class="language-brush:plain">$ node -v
v0.10.33  
$ npm -v
1.3.6  
</code></pre>

<p>異なるバージョンのNode.jsが必要な場合はnvmを使用して切り替える。まずnvmコマンドをgitでダウンロードし、添付のスクリプトを実行して導入する。<sup id="fnref:1"><a href="http://multix.jp/install-nodejs/#fn:1" rel="footnote">1</a></sup></p>

<pre><code class="language-brush:plain">$ git clone https://github.com/creationix/nvm.git ~/.nvm
Initialized empty Git repository in ~/.nvm/.git/  
remote: Counting objects:</code></pre>]]></description><link>http://multix.jp/install-nodejs/</link><guid isPermaLink="false">f570ed62-aba5-4a83-81be-788b686230cb</guid><category><![CDATA[Windows]]></category><category><![CDATA[Machintosh]]></category><category><![CDATA[Linux]]></category><category><![CDATA[めもらんだむ]]></category><category><![CDATA[Node.js]]></category><dc:creator><![CDATA[朝日薫]]></dc:creator><pubDate>Thu, 07 May 2015 08:14:34 GMT</pubDate><content:encoded><![CDATA[<p>プラットフォーム別のNode.js環境構築メモ</p>

<ul class="index"></ul>

<hr>

<h4 id="centos6linux">CentOS6/Linux</h4>

<p>CentOSの場合、nodejsとnpmの各パッケージはEPELレポジトリに収録されている。EPELを使用可能にするには<a href="https://ghost.multix.jp/centos-addon-repos/">こちら</a>を参照のこと。これが済んでいればyumだけで基本環境のインストールが出来る。</p>

<pre><code class="language-brush:plain">sudo yum install nodejs npm  
</code></pre>

<p>ただしこれでOSにインストールされるのはやや古いバージョンである。</p>

<pre><code class="language-brush:plain">$ node -v
v0.10.33  
$ npm -v
1.3.6  
</code></pre>

<p>異なるバージョンのNode.jsが必要な場合はnvmを使用して切り替える。まずnvmコマンドをgitでダウンロードし、添付のスクリプトを実行して導入する。<sup id="fnref:1"><a href="http://multix.jp/install-nodejs/#fn:1" rel="footnote">1</a></sup></p>

<pre><code class="language-brush:plain">$ git clone https://github.com/creationix/nvm.git ~/.nvm
Initialized empty Git repository in ~/.nvm/.git/  
remote: Counting objects: 3595, done.  
remote: Compressing objects: 100% (20/20), done.  
remote: Total 3595 (delta 7), reused 0 (delta 0), pack-reused 3574  
Receiving objects: 100% (3595/3595), 765.49 KiB | 304 KiB/s, done.  
Resolving deltas: 100% (2060/2060), done.

$ source ~/.nvm/nvm.sh
</code></pre>

<p>nvmコマンドはエイリアスとしてシェル環境変数に組み込まれるため、新たな端末を開く度にnvm.shを再実行する必要がある。毎回使用するなら<code>~/.bashrc</code>等に追記しておくと良い。</p>

<p>初期状態ではsystemインストールされたNode.jsが使われているので<code>nvm current</code>を実行すると<em>system</em>が返る。</p>

<pre><code class="language-brush:plain">$ nvm current
system

$ which node
/usr/bin/node
</code></pre>

<p>取り敢えず最新のNode.jsを使えるようにするには次のようにするだけで良い</p>

<pre><code class="language-brush:plain">$ nvm install 0
######################################################################## 100.0%
Now using node v0.12.2 (npm v2.7.4)

$ nvm current
v0.12.2

$ node -v
v0.12.2

$ which node
~/.nvm/versions/node/v0.12.2/bin/node
</code></pre>

<p>上記のようにnvmでインストールされるnodeコマンドは、ユーザ環境毎に独立している。環境切替はシェル環境変数に依るので、systemサービスレベルでNode.jsを使用する場合は注意しなければならない。</p>

<p>なおsystemおよびnvmで導入したnodeコマンドと各グローバルnode_modulesパスは次のようになる。これはつまり<code>npm install -g</code>で書き換えられる先がsudo不要になるということでもある。</p>

<pre><code class="language-table">|＼|system|nvm|
|-:|:-|:-|
|node|/usr/bin/node|~/.nvm/versions/node/[VER]/bin/node|
|npm|/usr/bin/npm|~/.nvm/versions/node/[VER]/bin/npm|
|modeules|/usr/lib/node_modules|~/.nvm/versions/node/[VER]/lib/node_modules|
</code></pre>

<hr>

<h4 id="macosx">Mac OSX</h4>

<p>Mac OSXの場合、<a href="http://nodejs.org/">公式サイト</a>からインストーラパッケージをダウンロードしてきて実行するのがもっとも手軽だろう。だがnpmコマンドで各モジュールをインストールする段階でネイティブビルド環境（Xcode）を要求されたりすると途端に面倒なことになり、最終的な手間は以下のどれをとっても結局は大差なくなる。</p>

<ol>
<li><a href="http://nodejs.org/">公式サイト</a>からインストーラを得て導入（/usr/local/bin/node）  </li>
<li><a href="http://nodejs.org/">公式サイト</a>またはGitHubからソースを得て./configure &amp;&amp; make  </li>
<li>Mac Ports環境で port install nodejs（/opt/local/bin/node）</li>
</ol>

<p>1番以外は結局Xcodeがなければ話にならない。なおXcode（それ自体はAppStoreから入手できる）のコマンドライン・デベロッパ・ツールの追加インストールは以下のコマンドをターミナルで実行する。<sup id="fnref:2"><a href="http://multix.jp/install-nodejs/#fn:2" rel="footnote">2</a></sup></p>

<pre><code class="language-brush:plain">$ xcode-select --install
</code></pre>

<p>nvmでのバージョン切替はLinuxと同じなので前項を参照のこと。</p>

<hr>

<h4 id="windows">Windows</h4>

<p>Windowsの場合はだいたい以下のシナリオがある。</p>

<ol>
<li><a href="http://nodejs.org/">公式サイト</a>からインストーラを得て導入  </li>
<li><a href="https://www.visualstudio.com/downloads/download-visual-studio-vs">Visual Studio</a>（Expressの場合はfor Web）に<a href="https://nodejstools.codeplex.com">NTVSアドオン</a>を追加する  </li>
<li>CygwinあるいはMinGW環境でGitHunソースからmakeする  </li>
<li><a href="https://github.com/marcelklehr/nodist">nodist</a>で導入する</li>
</ol>

<p>基本は1番だが、おすすめはWindowsらしい強力なIDEと一体化できる2番を更に追加した環境だ。開発PCでは1+2番、サービスサーバでは1番だけという使い分けが良いだろう。3番は余程の物好きでない限りおすすめしかねる。4番はもはやふるいやり方だがZIP配布なのでレジストリを汚すこともなくコンパクトな環境を作れるが環境変数設定等は全て手動なのでGUIインストーラを使えない場合の代替手段と見たほうが良い。<sup id="fnref:3"><a href="http://multix.jp/install-nodejs/#fn:3" rel="footnote">3</a></sup> <sup id="fnref:4"><a href="http://multix.jp/install-nodejs/#fn:4" rel="footnote">4</a></sup></p>

<p>nvmでのnodeバージョン管理は<a href="https://github.com/hakobera/nvmw">nvmw</a>と<a href="https://github.com/coreybutler/nvm-windows">nvm-windows</a>の2通りの実装がある。 <br>
前者はPython2.7+が更に必要なので、ActivePython等のインストールが要求される。後者ならスタンドアロンインストーラ配布なので手軽だ。</p>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>git自体はCentOSの場合は標準レポジトリに属しているので、もしなくても<strong>yum install git</strong>で導入できる。 <a href="http://multix.jp/install-nodejs/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p>実行するにはかつてはApple Developer Member登録が必須だったが、いまはそんなことはない？ <a href="http://multix.jp/install-nodejs/#fnref:2" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:3"><p>自分の場合最初はnodistで環境構築したため、便宜上追記した。 <a href="http://multix.jp/install-nodejs/#fnref:3" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:4"><p>その後マルチプラットフォーム対応の Visual Studio Codeが公開されたため、環境構築の選択肢は更に増えた。 <a href="http://multix.jp/install-nodejs/#fnref:4" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item><item><title><![CDATA[Finder/Explorerのアイコン表示]]></title><description><![CDATA[<p>MacOSの.icnsファイルもWindowsの.icoファイルも復数のアイコンリソースを含むマルチ解像度対応画像アーカイブだといえる。ではどんな状況でどの解像度のアイコン画像が選択されるのかを調べてみた。</p>

<ul class="index"></ul>

<hr>

<h4 id="osxmarvericksyosemite">OSX(Marvericks/Yosemite)の場合</h4>

<p>まずはOSXでの話。テスト用には前掲<a href="http://multix.jp/create-osx-icns-for-windows/">【OSX用アイコンファイルをWindows上で作る】</a>の<code>mkosxicns.pl</code>を使って<strong><a href="https://secure.multix.jp/download/multisize.icns">multisize.icns</a></strong>という.icnsファイルを作成した。これには以下のアイコンが含まれている。</p>

<p><img src="http://multix.jp/content/images/2015/03/2015-03-16-15-38-39.png" alt=""></p>

<p>これをファインダーで表示したりアプリケーションアイコンに設定したりしてみる。OSXはMarvericksとYosemiteを使用したがどちらも結果は変わらなかった。</p>

<pre><code class="language-table title:.icnsファイルのファインダー表示">|表示サイズ|状況|
|:-:|:-|
|16x16|リスト表示&lt;br&gt;カラム表示&lt;br&gt;デスクトップ/アイコン表示(最小)|
|32x32|デスクトップ/アイコン表示(17〜32)|
|32x32@2x&lt;br&gt;(64x64)|デスクトップ/</code></pre>]]></description><link>http://multix.jp/icon-view-size/</link><guid isPermaLink="false">101287b5-ce16-4cfa-bd70-8079bc18dc5f</guid><category><![CDATA[Windows]]></category><category><![CDATA[Machintosh]]></category><category><![CDATA[めもらんだむ]]></category><dc:creator><![CDATA[朝日薫]]></dc:creator><pubDate>Thu, 07 May 2015 08:13:31 GMT</pubDate><content:encoded><![CDATA[<p>MacOSの.icnsファイルもWindowsの.icoファイルも復数のアイコンリソースを含むマルチ解像度対応画像アーカイブだといえる。ではどんな状況でどの解像度のアイコン画像が選択されるのかを調べてみた。</p>

<ul class="index"></ul>

<hr>

<h4 id="osxmarvericksyosemite">OSX(Marvericks/Yosemite)の場合</h4>

<p>まずはOSXでの話。テスト用には前掲<a href="http://multix.jp/create-osx-icns-for-windows/">【OSX用アイコンファイルをWindows上で作る】</a>の<code>mkosxicns.pl</code>を使って<strong><a href="https://secure.multix.jp/download/multisize.icns">multisize.icns</a></strong>という.icnsファイルを作成した。これには以下のアイコンが含まれている。</p>

<p><img src="http://multix.jp/content/images/2015/03/2015-03-16-15-38-39.png" alt=""></p>

<p>これをファインダーで表示したりアプリケーションアイコンに設定したりしてみる。OSXはMarvericksとYosemiteを使用したがどちらも結果は変わらなかった。</p>

<pre><code class="language-table title:.icnsファイルのファインダー表示">|表示サイズ|状況|
|:-:|:-|
|16x16|リスト表示&lt;br&gt;カラム表示&lt;br&gt;デスクトップ/アイコン表示(最小)|
|32x32|デスクトップ/アイコン表示(17〜32)|
|32x32@2x&lt;br&gt;(64x64)|デスクトップ/アイコン表示(サイズ33〜64)|
|128x128|デスクトップ(最大)&lt;br&gt;アイコン表示(65〜128)|
|256x256|アイコン表示(129〜256)&lt;br&gt;Cover Flow(最小〜256)|
|512x512|アイコン表示(257〜512)&lt;br&gt;Cover Flow(257〜512)|
|512x512@2x&lt;br&gt;(1024x1024)|プレビュー&lt;br&gt;Cover Flow(513〜最大)|
</code></pre>

<p>.icnsファイルはマルチ解像度なので必要な場面でもっとも適切な解像度のアイコンが自動的に選択される。その結果7種類の画像サイズすべてが何らかの形で出現した。Retina用@2xについても特別扱いしている様子はない。またプレビューについては常に使用可能な最大解像度が選択されるがこれはプレビューの性質からして妥当だろう。</p>

<hr>

<h4 id="osx">アプリアイコン(OSX)</h4>

<pre><code class="language-table title:アプリアイコンのファインダー表示">|表示サイズ|Retina(HiDPI)|状況|
|:-:|:-:|:-|
|16x16|16x16@2x&lt;br&gt;(32x32)|リスト表示&lt;br&gt;カラム表示&lt;br&gt;デスクトップ/アイコン表示(最小)|
|32x32|32x32@2x&lt;br&gt;(64x64)|デスクトップ/アイコン表示(17〜32)|
|128x128|128x128@2x&lt;br&gt;(256x256)|ドックアイコン&lt;br&gt;デスクトップ(33〜最大)&lt;br&gt;アイコン表示(33〜128)|
|256x256|256x256@2x&lt;br&gt;(512x512)|アイコン表示(129〜256)&lt;br&gt;Cover Flow(最小〜256)&lt;br&gt;プレビュー|
|512x512|512x512@2x&lt;br&gt;(1024x1024)|アイコン表示(257〜512)&lt;br&gt;Cover Flow(257〜最大)|
</code></pre>

<p>一方この.icnsファイルをアプリアイコンに設定した場合、同一リソースなのに使用されるファイルが5種類になる。つまり標準解像度ではRetina用アイコンが、Retina環境では標準解像度アイコンが選択されない。そしてこの5種類の中に64x64の等倍は含まれていないので、その上の128x128が使用されるようになるのだ。このため.icnsファイルと並べると、ファインダー設定のアイコン表示サイズによっては見映えが変わったり両者が混在して表示されたりする。</p>

<p><img src="http://multix.jp/content/images/2015/03/2015-03-17-14-37-05.png" alt=""></p>

<hr>

<h4 id="windows81update">Windows 8.1 Updateの場合</h4>

<p>次はWindowsでの話。こちらもOSX版と同様にマルチ解像度のマルチサイズ.icoファイルを用意した。これは以下の35種類のアイコンサイズに対応する。<sup id="fnref:1"><a href="http://multix.jp/icon-view-size/#fn:1" rel="footnote">1</a></sup></p>

<p><img src="http://multix.jp/content/images/2015/03/2015-03-17-14-56-42.png" alt=""></p>

<p>.icoファイルの場合、収録可能な最大のアイコンサイズは256x256に制限される。一方で縦横サイズは任意に指定でき、実は正方形ではない長方形画像<sup id="fnref:2"><a href="http://multix.jp/icon-view-size/#fn:2" rel="footnote">2</a></sup>も登録できる。また画像形式もVista以降はαチャンネル付透過True Color PNGフォーマットが使用できるようになった。ただしPNG形式アイコンでは表示に不具合がでる場面もあるため、旧来のDIB形式の.icoファイル <strong><a href="https://secure.multix.jp/download/multisizedib.ico">multisizedib.ico</a></strong>と、PNG形式だけを集めた <strong><a href="https://secure.multix.jp/download/multisizepng.ico">multisizepng.ico</a></strong>の2種類を用意した。</p>

<p>Windowsのアイコンの扱いについてはMSDNの該当ページ<sup id="fnref:3"><a href="http://multix.jp/icon-view-size/#fn:3" rel="footnote">3</a></sup>が一次資料となるが、Explorerでは基本的には以下のようになる。</p>

<pre><code class="language-table title:Windows Exploerでのアイコンサイズ">|96dpi&lt;br&gt;100%|120dpi&lt;br&gt;125%|144dpi&lt;br&gt;150%|192dpi&lt;br&gt;200%|状況|
|16x16|←|←|←|タスクバー（小・実行アプリ）&lt;br&gt;ウィンドウタイトル|
|16x16|20x20|24x24|32x32|タスクバー（小・ピン留め・ショートカット）&lt;br&gt;リストアイテム&lt;br&gt;Explorer（小）|
|32x32|←|←|←|タスクバー（中・実行アプリ）&lt;br&gt;ダイアログアイコン|
|32x32|40x40|48x48|64x64|タスクバー（中・ピン留め・ショートカット）&lt;br&gt;Explorer(コンテンツ)|
|48x48|60x60|72x72|96x96|Explorer（中・並べて表示）|
|256x256|←|←|←|Explorer（大・特大）|
</code></pre>

<p>このうちアプリケーションを直接起動した場合のウィンドウタイトル・タスクバー・ダイアログアイコンについてはコントロールパネルの<strong>テキストとその他の項目の大きさ</strong>設定にかかわりなく常に16x16と32x32に固定<sup id="fnref:4"><a href="http://multix.jp/icon-view-size/#fn:4" rel="footnote">4</a></sup>される。また<strong>Explorer（大・特大）</strong>表示については原則として.icoファイルに収録された最大サイズのものがアイコンプレビューに選ばれる。</p>

<p>アプリケーションでもショートカットやピン留めから起動した場合、タスクバーアイコンについてはショートカットに登録されたアイコンが使用され、その場合はマルチ解像度が有効になる。</p>

<hr>

<h4 id="windows10tecnicalpreview">Windows 10 Tecnical Preview の場合</h4>

<p>ところで、Windows10はまだ開発中ということもあるが、TP版にはタスクバーのアイコン表示に問題が有る。少なくとも以下の2点が判明している。</p>

<ul>
<li>タスクバー設定が標準の場合、アイコン表示サイズが実サイズの75%に縮小される。（32x32->24x24、48x48->36x36） <br>
ただしタスクバー表示が小アイコン設定の場合の16x16表示には問題がない。</li>
<li>ショートカット・ピン留めでPNG形式アイコンを使用した場合、マスクプレーン（透過色切り抜き）が2ピクセル右にずれる。 <br>
<img src="http://multix.jp/content/images/2015/03/SS-2015-03-19-14-23-16.png" alt="96dpi" title=""> <br>
<img src="http://multix.jp/content/images/2015/03/SS-2015-03-19-14-20-53.png" alt="120dpi" title=""> <br>
左がアプリケーション直接、右がショートカットから起動した場合でいずれもPNG形式アイコンだが、右のものには黒いゴミが付いている。これはアイコンを角丸にするためのマスクプレーン（PNG画像のαチャンネル）がずれて重ねられているためだ。DBI形式の場合はこのようにはならない。<sup id="fnref:5"><a href="http://multix.jp/icon-view-size/#fn:5" rel="footnote">5</a></sup></li>
</ul>

<hr>

<h4 id="ios">iOSアプリ用アイコンの場合</h4>

<p>iOSの場合、使われる場面によってアイコンサイズが決められているため、用意する面倒を無視すれば悩む要素はない。ただしその規定サイズはiOSのバージョンによって異なり、マルチバージョン対応とする場合は当然準備しなければならない数が増える。以下はその対応一覧表だ。概ねホーム画面・設定画面・Spotlight検索<sup id="fnref:6"><a href="http://multix.jp/icon-view-size/#fn:6" rel="footnote">6</a></sup>の3場面各々に標準解像度とRetina解像度が必要になる。iOS8の場合さらに大画面iPhone用の3倍精度が追加された。</p>

<pre><code class="language-table title:iOSアプリアイコン一覧">|サイズ|iOS6|iOS7|iOS8|主な用途|
|:-|:-:|:-:|:-:|:-|
|29x29|◯|◯|◯|iPhone Spotlight(6)&lt;br&gt;iPhone設定(6)&lt;br&gt;iPad設定(78)|
|29x29@2x|◯|◯|◯|iPhone設定(67)&lt;br&gt;iPad設定(78)|
|29x29@3x|✕|✕|◯|iPhone設定(8)|
|40x40@2x|✕|◯|✕|iPhone Spotlight(7)|
|40x40@3x|✕|✕|◯|iPhone Spotlight(8)|
|50x50|◯|✕|✕|iPad Spotlight(6)&lt;br&gt;iPad設定(6)|
|50x50@2x|◯|✕|✕|iPad Spotlight(6)&lt;br&gt;iPad設定(6)|
|57x57|◯|✕|✕|iPhoneホーム(6)|
|57x57@2x|◯|✕|✕|iPhoneホーム(6)|
|60x60@2x|✕|◯|✕|iPhoneホーム(7)|
|60x60@3x|✕|✕|◯|iPhoneホーム(8)|
|72x72|◯|✕|✕|iPadホーム(6)|
|72x72@2x|◯|✕|✕|iPadホーム(6)|
|76x76|✕|◯|◯|iPadホーム(78)|
|76x76@2|✕|◯|◯|iPadホーム(78)|
|512x512@2|-|-|-|iTunes Store&lt;br&gt;App Store|
</code></pre>

<hr>

<h4 id="">ダウンロード</h4>

<ul>
<li><a href="https://secure.multix.jp/download/multisize.icns">multisize.icns</a> MacOS用</li>
<li><a href="https://secure.multix.jp/download/multisizedib.ico">multisizedib.ico</a> Windows用(DIB)</li>
<li><a href="https://secure.multix.jp/download/multisizepng.ico">multisizepng.ico</a> Windows用(PNG)</li>
</ul>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>妙に半端なサイズがやたら沢山入っているのはFavicon調査用である。ほとんどOperaのせい。 <a href="http://multix.jp/icon-view-size/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p>もっとも正方形以外のアイコンリソースを想定・対応している表示環境があるとは考え難いのだが。 <a href="http://multix.jp/icon-view-size/#fnref:2" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:3"><p>Icons <a href="https://msdn.microsoft.com/en-us/library/dn742485.aspx">https://msdn.microsoft.com/en-us/library/dn742485.aspx</a> <a href="http://multix.jp/icon-view-size/#fnref:3" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:4"><p>この性質から16x16と32x32についてはPNG形式アイコンよりはDIB形式アイコンのほうが推奨される。 <a href="http://multix.jp/icon-view-size/#fnref:4" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:5"><p>カスタム表示500%拡大までの全てでゴミが付くので160pxまではDBI形式アイコンにしないと見映えが落ちてしまう。当然DBI形式では透過マスクのアンチエイリアス効果を得られないため別の方向で高品位は得られない。 <a href="http://multix.jp/icon-view-size/#fnref:5" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:6"><p>40x40と60x60の等倍スケールは使用されていないようだ。なおこの他にもUINavigationBar等で22x22の1〜3倍スケールがアプリ制作現場では必要になる。 <a href="http://multix.jp/icon-view-size/#fnref:6" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item><item><title><![CDATA[OSX用アイコンファイルをWindows上で作る]]></title><description><![CDATA[<p>Macintosh OSX用アイコンセットをWindows上で作ってしまう方法へ至る道。OSXの.icnsファイルフォーマットについて解説する。</p>

<ul class="index"></ul>

<hr>

<h4 id="">動機</h4>

<p>艦板-KanPan- を開発するとき、最初からMacintoshとWindows両方に対応すると決めていたが、その際両者でフォーマットが異なるアイコンリソースをどうするかという問題があった。OSXでは<mark>.icns</mark>、Windowsでは<mark>.ico</mark>というファイル形式が使われる。それぞれを他方のプラットフォーム上のコマンドラインから作成できれば、make作業を一方の上で完結できる。とりあえず資料が豊富な.icoは放っておいて.icnsについて調べてみたところ意外と簡単な方法で作成できることが分かった。</p>

<hr>

<h4 id="iconutil">iconutil ユーティリティ</h4>

<p>OSX添付の純正アイコンリソース作成ユーティリティは<code>iconutil</code>という。このCLIコマンドは以下のように使用する。</p>

<ul>
<li>以下の10個のフルカラーPNG画像(RGBA)を格納した<code>foo.iconset</code>というフォルダを作成する。アイコンファイル名は厳密にこの通りであり、フォルダ名の<mark>.iconset</mark>という拡張子もこの通りでなければならない。</li>
</ul>

<pre><code class="language-table title:iconutilが要求する画像ファイル">|ファイル名|画像サイズ|
|:-|:-:|
|icon_16x16.png|16x16|
|icon_16x16@2x.png|32x32|
|icon_32x32.</code></pre>]]></description><link>http://multix.jp/create-osx-icns-for-windows/</link><guid isPermaLink="false">f88729c6-221d-4514-bf83-8a8ffb519052</guid><category><![CDATA[Windows]]></category><category><![CDATA[Machintosh]]></category><category><![CDATA[めもらんだむ]]></category><category><![CDATA[Perl]]></category><dc:creator><![CDATA[朝日薫]]></dc:creator><pubDate>Thu, 07 May 2015 08:11:59 GMT</pubDate><content:encoded><![CDATA[<p>Macintosh OSX用アイコンセットをWindows上で作ってしまう方法へ至る道。OSXの.icnsファイルフォーマットについて解説する。</p>

<ul class="index"></ul>

<hr>

<h4 id="">動機</h4>

<p>艦板-KanPan- を開発するとき、最初からMacintoshとWindows両方に対応すると決めていたが、その際両者でフォーマットが異なるアイコンリソースをどうするかという問題があった。OSXでは<mark>.icns</mark>、Windowsでは<mark>.ico</mark>というファイル形式が使われる。それぞれを他方のプラットフォーム上のコマンドラインから作成できれば、make作業を一方の上で完結できる。とりあえず資料が豊富な.icoは放っておいて.icnsについて調べてみたところ意外と簡単な方法で作成できることが分かった。</p>

<hr>

<h4 id="iconutil">iconutil ユーティリティ</h4>

<p>OSX添付の純正アイコンリソース作成ユーティリティは<code>iconutil</code>という。このCLIコマンドは以下のように使用する。</p>

<ul>
<li>以下の10個のフルカラーPNG画像(RGBA)を格納した<code>foo.iconset</code>というフォルダを作成する。アイコンファイル名は厳密にこの通りであり、フォルダ名の<mark>.iconset</mark>という拡張子もこの通りでなければならない。</li>
</ul>

<pre><code class="language-table title:iconutilが要求する画像ファイル">|ファイル名|画像サイズ|
|:-|:-:|
|icon_16x16.png|16x16|
|icon_16x16@2x.png|32x32|
|icon_32x32.png|32x32|
|icon_32x32@2x.png|64x64|
|icon_128x128.png|128x128|
|icon_128x128@2x.png|256x256|
|icon_256x256.png|256x256|
|icon_256x256@2x.png|512x512|
|icon_512x512.png|512x512|
|icon_512x512@2x.png|1024x1024|
</code></pre>

<ul>
<li>ターミナルで以下のように実行するとカレントディレクトリに<code>foo.icns</code>というアイコンファイルが作成される。</li>
</ul>

<pre><code class="language-brush:plain">iconutil -c icns foo.iconset  
</code></pre>

<p>10個のファイル（画像サイズ自体は7種類）を用意しろというのは御無体だが、これはまあ原画をSVG形式で作成して所定サイズとファイル名のPNG画像にコンバートすればなんとかなる。ともかく出来上がった.icnsファイルを調べてみると次のようになっていた。</p>

<hr>

<h4 id="icns">ICNSファイルフォーマット</h4>

<p>ICNSファイルは次のような構造になっている</p>

<pre><code class="language-table table:ICNSファイル構造">|:-:|
|ICNSファイルヘッダ|
|アイコンヘッダ|
|アイコンデータ|
|アイコンヘッダ|
|アイコンデータ|
|:|
</code></pre>

<p>まずファイル先頭にICNSファイルヘッダがあり、その後ろにアイコンヘッダとアイコンデータの組（ブロック）が任意個数続く。</p>

<hr>

<h4 id="icns">ICNSファイルヘッダ</h4>

<p>ICNSファイルヘッダの大きさは8バイトで、以下の2フィールドを持つ。</p>

<pre><code class="language-table table:ICNSファイルヘッダ">|Offset|Length|内容|
|-:|-:|:-|
|0|4|ファイル識別子`ICNS` (リテラルバイト文字列 0x69 0x63 0x6e 0x73)|
|4|4|ICNSファイル全体のバイナリサイズ (MSB First/Big Endian)|
</code></pre>

<p>先頭の4バイトがファイル識別子なのはMachintosh系データフォークの伝統だ。</p>

<hr>

<h4 id="">アイコンヘッダ</h4>

<p>アイコンヘッダの大きさは8バイトで、以下の2フィールドを持つ。</p>

<pre><code class="language-table title:アイコンブロックヘッダ">|Offset|Length|内容|
|-:|-:|:-|
|0|4|アイコンタイプ識別子（リテラルバイト文字列）|
|4|4|ブロック長(アイコンヘッダ＋アイコンデータの合計バイト長) (MSB First/Big Endian)|
</code></pre>

<p>アイコンタイプ識別子もまた４バイトのリテラル文字列で、これがアイコンデータの画像表示サイズと画像フォーマットとを示している。続くフィールドは後続するアイコンデータのバイナリサイズ+8に一致する。</p>

<hr>

<h4 id="">アイコンデータ</h4>

<p>これのデータフォーマットはアイコンタイプ識別子によって規定されるが、iconutilが作成するファイルの場合は<strong>PNG画像ファイルデータ</strong>そのままか<strong>RGB生データ</strong>か<strong>マスクデータ</strong>である。とにかくPNG形式のアイコン識別子が付いていたならPNGファイルがそのまま埋め込まれているので、何も難しいことはない。</p>

<hr>

<h4 id="">アイコンタイプ識別子一覧</h4>

<p>iconutilが作成するアイコンファイルに含まれるアイコン識別子の一覧を次に示す。なお識別子のレターケースは区別される。</p>

<pre><code class="language-table title:iconutilが生成するアイコンタイプ識別子一覧">|Type|Length|Size|MacOS|詳細|
|:-:|:-:|:-:|:-:|:-|
|ic07|可変|128x128|10.7+|128x128 PNG/JPEG2000|
|ic08|可変|256x256|10.5+|256x256 PNG/JPEG2000|
|ic09|可変|512x512|10.5+|512x512 PNG/JPEG2000|
|ic10|可変|1024x1024|10.7+|1024x1024 PNG/JPEG2000 (1024x1024, 512x512@2x)|
|ic11|可変|32x32|10.8+|32x32 PNG/JPEG2000 (16x16@2x)|
|ic12|可変|64x64|10.8+|64x64 PNG/JPEG2000 (32x32@2x)|
|ic13|可変|256x256|10.8+|256x256 PNG/JPEG2000 (128x128@2x)|
|ic14|可変|512x512|10.8+|512x512 PNG/JPEG2000 (256x256@2x)|
|il32|可変|32x32|8.5+|32x32 24bit TrueColor RGB|
|is32|可変|16x16|8.5+|16x16 24bit TrueColor RGB|
|l8mk|1,024|32x32|8.5+|32x32 8bit MASK|
|s8mk|256|16x16|8.5+|16x16 8bit MASK|
</code></pre>

<p>ic11からic14はRetinaディスプレイ用に追加されたもので、それぞれその半分の画像サイズのアイコンと対応している。ic10はRetina対応であると同時に<strong>OSX10.7以降のデフォルトアイコン</strong>サイズである。極端な話、このic10さえあれば、OSX10.7以降のファインダー＆ドック表示はすべて可能になる。</p>

<p>一方で以下のアイコンタイプも10.7で登場したのだが iconutil では生成されないようだ。代わりに非Retina用等倍の16x16と32x32についてはOSX10.7のものではなくMaxOS8.5のアイコンフォーマットにコンバートして収録されている。これは後方互換性を維持するためだろう。</p>

<pre><code class="language-table title:その他のアイコン識別子一覧">|Type|Length|Size|MacOS|詳細|
|:-:|:-:|:-:|:-:|:-|
|icp4|可変|16x16|10.7+|16x16 PNG/JPEG2000|
|icp5|可変|32x32|10.7+|32x32 PNG/JPEG2000|
|icp6|可変|64x64|10.7+|64x64 PNG/JPEG2000|
</code></pre>

<hr>

<h4 id="macos85">MacOS8.5形式アイコンフォーマット</h4>

<p>il32とl8mk、is32とs8mkはそれぞれアイコンカラーデータとアイコンマスクデータのペアとして使用される。常にペアであるため個々に単独の画像ファイルとしては現れず、少なくとも2ブロックから成る.icnsファイルとして存在する。</p>

<p>アイコンカラーデータは1画素あたりRGB24bitだが、RGBそれぞれ別の(8bpp)プレーン毎に、連続する左上原点ビットマップデータ列をPackBitsしてまとめられている。</p>

<pre><code class="language-table title:il32アイコンブロック (32x32画素カラー)">|Offset|Length|詳細|
|-:|-:|:-|
|0|4|アイコンタイプ識別子`il32` (0x69 0x6c 0x33 0x32)|
|4|4|ブロック長 (MSB First)|
|8|可変|Rプレーン1,024バイトのPackBitsデータ|
|?|可変|Gプレーン1,024バイトのPackBitsデータ|
|?|可変|Bプレーン1,024バイトのPackBitsデータ|
</code></pre>

<pre><code class="language-table title:is32アイコンブロック (16x16画素カラー)">|Offset|Length|詳細|
|-:|-:|:-|
|0|4|アイコンタイプ識別子`is32` (0x69 0x73 0x33 0x32)|
|4|4|ブロック長 (MSB First)|
|8|可変|Rプレーン256バイトのPackBitsデータ|
|?|可変|Gプレーン256バイトのPackBitsデータ|
|?|可変|Bプレーン256バイトのPackBitsデータ|
</code></pre>

<p>アイコンマスクデータも同様に1画素あたり8bit(8bpp)の連続する左上原点ビットマップデータ列だが、無圧縮のベタデータとして定義されている。</p>

<p>これはPNG画像フォーマットのアルファチャンネルと実質同じもので、アイコン画像の背景デスクトップからの切り抜きとアンチエイリアス表現を実現する。 なお画像縦横サイズについてはアイコンタイプ識別子で一意に決定されるためデータブロック内には現れない。</p>

<pre><code class="language-table title:l8mkマスクブロック (32x32画素マスク)">|Offset|Length|詳細|
|-:|-:|:-|
|0|4|アイコンタイプ識別子`l8mk` (0x6c 0x38 0x6d 0x6b)|
|4|4|ブロック長 (MSB First)|
|8|1,024|MASKプレーンの8bppビットマップデータ|
</code></pre>

<pre><code class="language-table title:s8mkマスクブロック  (16x16画素マスク)">|Offset|Length|詳細|
|-:|-:|:-|
|0|4|アイコンタイプ識別子`s8mk` (0x73 0x38 0x6d 0x6b)|
|4|4|ブロック長 (MSB First)|
|8|256|MASKプレーンの8bppビットマップデータ|
</code></pre>

<hr>

<h4 id="packbits">PackBits連長圧縮アルゴリズム</h4>

<p>カラープレーンのビットマップは生データではなく、PackBitsと呼ばれる連長圧縮アルゴリズムでコンバートされている。これは古き良きMacintosh時代の、PICT (QuickDraw PICTure)ファイルフォーマットで用いられていたものだからとうぜん当時の資料を調べれば詳細を知ることが出来る。そのPackBitsデータ列は次のように解釈すれば元のビットマップデータへ復元・展開できる。</p>

<ul>
<li>ポインタ上の1バイトが128未満（MSBが0）であるならこのバイトが示す0〜127に1を加え、次のそのバイト数（1〜128バイト）を取り出してそのまま出力し、ポインタを進める。</li>
<li>ポインタ上の1バイトが128以上
（MSBが1）であるならこのバイトが示す128〜255から125を引き、取り出した次の1バイトをその回数（3〜130回）繰り返して出力し、ポインタを進める。</li>
</ul>

<p>このPackBitsの圧縮アルゴリズムを真面目に実装しようとするとそれなりに面倒だが抜け道はある。無圧縮でよしと妥協すれば、128バイト毎にバイトストリームを切り刻み、0x7Fを前置した129バイトブロックに整えて横流しすればすむのである。32x32画素プレーンと16x16画素プレーンのいずれも128バイトの整数倍バイト長なのだから全く不都合はない。32x32画素プレーンなら計8ブロック1,032バイト、16x16画素プレーンなら計2ブロック258バイトの固定長データとして処理してしまえる。</p>

<hr>

<h4 id="unosxicnspl">unosxicns.pl</h4>

<p>ここまで解ってしまえばあとはもう悩むことはない。<code>unosxicns.pl</code>は以上の情報をまとめて .icnsファイルから .png<sup id="fnref:1"><a href="http://multix.jp/create-osx-icns-for-windows/#fn:1" rel="footnote">1</a></sup>ファイルを抽出するように記述したものだ。ActivePerl(5.10+)<sup id="fnref:2"><a href="http://multix.jp/create-osx-icns-for-windows/#fn:2" rel="footnote">2</a></sup>と ImageMagick(PerlMagick)<sup id="fnref:3"><a href="http://multix.jp/create-osx-icns-for-windows/#fn:3" rel="footnote">3</a></sup>で動作する。OSX他でも MacPortsで同等の環境を揃えれば動作する。</p>

<p>使い方は引数に .icnsファイルを指定すると同名の .iconsetディレクトリを作成してその中に抽出した<code>icon_NNNxNNN.png</code>を生成、あるいは<code>-t</code>オプションを付加した場合は<code>アイコンタイプ.png</code>を生成する。前掲のアイコンタイプ以外は対応外として無視する。</p>

<pre><code class="language-brush:plain">unosxicns.pl -t foo.icns

ls foo.iconset  
ic07.png              ic08.png              ic09.png  
ic10.png              ic11.png              ic12.png  
ic13.png              ic14.png              il32.png  
is32.png  
</code></pre>

<pre><code class="language-brush:perl collapse:true gutter:true title:unosxicns.pl">#!/usr/bin/perl
# $Id: unosxicns.pl 122 2015-03-16 04:06:57Z askn $ ＵＴＦ８

use 5.010;  
use strict;  
use warnings;  
use File::Basename;  
use Image::Magick;  
use Getopt::Std;

my %iconset = (  
    ic07 =&gt; [128,  1],
    ic08 =&gt; [256,  1],
    ic09 =&gt; [512,  1],
    ic10 =&gt; [1024, 2],
    ic11 =&gt; [32,   2],
    ic12 =&gt; [64,   2],
    ic13 =&gt; [256,  2],
    ic14 =&gt; [512,  2],
    icp4 =&gt; [16,   1],
    icp5 =&gt; [32,   1],
    icp6 =&gt; [64,   1],
    is32 =&gt; [16,   0],
    il32 =&gt; [32,   0],
    s8mk =&gt; [16,   0],
    l8mk =&gt; [32,   0],
);

our($opt_t);  
getopts("t");

unless (scalar @ARGV) {  
    die "Usage: unosxicns.pl [-t] icon.icns [...]\n";
}

my %cache;  
my $dirname = dirname($0);  
foreach my $argv (@ARGV) {  
    foreach my $glob (glob $argv) {
        my $filename = $glob;
        my $basename = basename $filename, qw{.svg .png .ico .icns .icowin .iconset};
        my $folder = $basename . ".iconset";
        $filename = $basename . ".icns";
        next if $cache{$filename};
        die "file not found $filename\n" unless -f $filename;
        $cache{$filename} = 1;
        &amp;mkpict($filename, $folder);
    }
}
exit;

# アイコンブロックの抽出
sub mkpict {  
    my $filename = shift;
    my $folder = shift;
    my %maskset;
    mkdir $folder, 0777;
    my($FH, $GH, $buff);
    unless (open $FH, "&lt;", $filename) {
        die "Cant read input\n";
    }
    binmode $FH;

    # 先頭のアイコンヘッダ8バイトの取得
    die "Read error\n" unless sysread($FH, $buff, 8);
    my($filetype, $filesize) = unpack "A4N", $buff;
    die "Not ICNS format\n" unless $filetype eq "icns";
    die "File size unmatch\n" unless $filesize == -s $filename;
    say "$filename filesize $filesize";

    # 各アイコンブロックについて
    while (sysread $FH, $buff, 8) {
        my($set, $ext, $outname, $scale);

        # アイコンブロックヘッダ8バイト
        my($icontype, $blocksize) = unpack "A4N", $buff;
        my $readsize = $blocksize - 8;
        die "Format broken\n"
            if $readsize &lt; 1
                or $readsize != sysread $FH, $buff, $readsize;
        say "  type $icontype length $blocksize";

        # 未知のアイコンタイプ
        unless ($set = $iconset{$icontype}) {
            say "    undefined icon type";
            next;
        }

        # PNGまたはJPEG2000形式
        if ($scale = $set-&gt;[1]) {

            # PNGヘッダ確認
            $ext = ("\x89\x50\x4E\x47" eq substr $buff, 0, 4) ? "png" : "jp2";

            # -t付きの場合はアイコンタイプをファイル名にする
            if ($opt_t) {
                $outname = sprintf "%s.%s", $icontype, $ext;
            }

            # 倍密解像度の場合のファイル名
            elsif ($scale == 2) {
                $outname = sprintf "icon_%ux%u\@x2.%s",
                    $set-&gt;[0] &gt;&gt; 1, $set-&gt;[0] &gt;&gt; 1, $ext;
            }

            # 標準解像度のファイル名
            else  {
                $outname = sprintf "icon_%ux%u.%s",
                    $set-&gt;[0], $set-&gt;[0], $ext;
            }
            say "\t$outname size $readsize";

            # 画像データ書出
            unless (open $GH, "&gt;", "$folder/$outname") {
                die "Cant write output\n";
            }
            binmode $GH;
            print $GH $buff;
            close $GH;
            next;
        }

        # MacOS8.5 mask raw format
        if ($icontype =~ /(s8mk|l8mk)/) {
            die "Mask broken,  length missmatch\n"
                unless $set-&gt;[0] ** 2 == length $buff;
            $maskset{$icontype} = [unpack "C*", $buff];
        }

        # MacOS8.5 Color PackBits format
        if ($icontype =~ /(is32|il32)/) {
            my @data;
            my @input = unpack "C*", $buff;

            # PackBits unpack
            while (scalar @input) {
                my $code = shift @input;
                if ($code &lt; 128) {
                    push @data, splice @input, 0, $code + 1;
                }
                else {
                    my $next = shift @input;
                    push @data, ($next) x ($code - 125);
                }
            }
            die "PackBits broken,  length missmatch\n"
                unless $set-&gt;[0] ** 2 * 3 == scalar @data;
            $maskset{$icontype} = \@data;
        }
    }
    close $FH;
    &amp;mkpngicon(\%maskset, "il32", "l8mk", $folder);
    &amp;mkpngicon(\%maskset, "is32", "s8mk", $folder);
}

# RGBAからPNGファイルへの変換
sub mkpngicon {  
    my $maskset = shift;
    my $type = shift;
    my $color;
    return unless $color = $maskset-&gt;{$type};
    my $mask = shift;
    my $folder = shift;
    $mask = $maskset-&gt;{$mask};
    my $size = $iconset{$type}-&gt;[0];
    my $sqrt = $size ** 2;

    my $image = Image::Magick-&gt;new(magick=&gt;'png', size=&gt;"${size}x${size}", matte=&gt;"True");
    $image-&gt;Read("NULL:");

    for (my $y = 0; $y &lt; $size; $y++) {
        for (my $x = 0; $x &lt; $size; $x++) {
            my @pixcels;
            $pixcels[0] = $color-&gt;[$y * $size + $x]             / 255; # R
            $pixcels[1] = $color-&gt;[$y * $size + $x + $sqrt]     / 255;    # G
            $pixcels[2] = $color-&gt;[$y * $size + $x + $sqrt * 2] / 255;    # B
            $pixcels[3] = $mask ? 1.0 - $mask-&gt;[$y * $size + $x] / 255 : 0.0; # A (Opacity)
            my $err = $image-&gt;SetPixel(x=&gt;$x, y=&gt;$y, color=&gt;\@pixcels, channel=&gt;'RGBA', normalize=&gt;'True');
            say $err if $err;
        }
    }
    my $outname = sprintf "icon_%ux%u.png", $size, $size;

    # -t付きの場合はアイコンタイプをファイル名にする
    if ($opt_t) {
        $outname = sprintf "%s.png", $type;
    }

    say "\t$outname";
    my $err = $image-&gt;Write("$folder/$outname");
    die $err if $err;
}

1;  
__END__  
</code></pre>

<hr>

<h4 id="mkosxicnspl">mkosxicns.pl</h4>

<p>これでようやく本題に辿り着いた。<code>mkosxicns.pl</code> は<code>unosxicns.pl</code>とは逆に  .pngファイルから .icnsファイルを生成する。ActivePerl(5.10+)と ImageMagick(PerlMagick)の他、パスの通った場所に <code>PhantomJS</code><sup id="fnref:4"><a href="http://multix.jp/create-osx-icns-for-windows/#fn:4" rel="footnote">4</a></sup>がインストールされている必要がある。<code>iconrast.js</code>は <code>PhantomJS</code>スクリプトで <code>mkosxicns.pl</code>と同じ場所に置く。OSX他でもMacPortsで同等の環境を揃えれば動作する。</p>

<p>使い方は引数に<code>-b</code>オプションと .iconsetディレクトリを指定すると、iconutilと同等の動作を行って同名の .icnsファイルを生成する。</p>

<pre><code class="language-brush:plain">mkosxicns.pl -b foo.iconset  
</code></pre>

<p>もうひとつの使い方は<code>-m</code>オプションとSVGファイル<sup id="fnref:5"><a href="http://multix.jp/create-osx-icns-for-windows/#fn:5" rel="footnote">5</a></sup>を指定することで、iconutilが必要とする10個のPNGファイルを含む .iconsetディレクトリを自動的に生成する動作だ。</p>

<pre><code class="language-brush:plain">mkosxicns.pl -m foo.svg  
</code></pre>

<p>両者は<code>-mb</code>オプションを指定して実行することで同時に行うことが出来る。すなわち以下の場合 foo.svgファイルから foo.iconsetディレクトリを作成し foo.icnsファイルを生成する。</p>

<pre><code class="language-brush:plain">mkosxicns.pl -mb foo.svg  
</code></pre>

<pre><code class="language-brush:perl collapse:true gutter:true title:mkosxicns.pl">#!/usr/bin/perl
# $Id: mkosxicns.pl 122 2015-03-16 04:06:57Z askn $ ＵＴＦ８

use 5.010;  
use strict;  
use warnings;  
use File::Basename;  
use Image::Magick;  
use Getopt::Std;

my @fileset = (  
    [128,  "icon_128x128.png",     "ic07"],
    [256,  "icon_256x256.png",     "ic08"],
    [512,  "icon_512x512.png",     "ic09"],
    [1024, "icon_512x512\@2x.png", "ic10"],
    [32,   "icon_16x16\@2x.png",   "ic11"],
    [64,   "icon_32x32\@2x.png",   "ic12"],
    [256,  "icon_128x128\@2x.png", "ic13"],
    [512,  "icon_256x256\@2x.png", "ic14"],
    [32,   "icon_32x32.png",       "icp5"],
    [16,   "icon_16x16.png",       "icp4"],
);

our($opt_m, $opt_b);  
getopts("mb");  
unless (($opt_m || $opt_b) &amp;&amp; 1 == scalar @ARGV) {  
    die "Usage: mkosxicns.pl -mb icon[.svg] [...]\n";
}

my %cache;  
my $dirname = dirname($0);  
my $phantomjs = "phantomjs";  
my $rasterize = $dirname . "/iconrast.js";

foreach my $argv (@ARGV) {  
    foreach my $glob (glob $argv) {
        my $filename = $glob;
        my $basename = basename $filename, qw{.svg .png .ico .icns .icowin .iconset};
        my $folder = $basename . ".iconset";
        if ($opt_m) {
            $filename = $basename . ".svg";
            die "file not found $filename\n" unless -f $filename;
        }
        next if $cache{$filename};
        say $filename;
        $cache{$filename} = 1;
        &amp;mkpng($filename, $folder) if $opt_m;
        &amp;mkico($basename, $folder) if $opt_b;
    }
}
exit;

# SVGからPNGへの変換
sub mkpng {  
    my $filename = shift;
    my $folder = shift;
    mkdir $folder, 0777;
    foreach my $set (@fileset) {
        printf "%s/%s\n", $folder, $set-&gt;[1];
        system $phantomjs , $rasterize, $filename, $set-&gt;[0] , $folder . "/" . $set-&gt;[1];
    }
    say "complete";
}

# ICNSファイル作成
my @maskset;  
sub mkico {  
    my $basename = shift;
    my $folder = shift;
    my $FH;
    unless (open $FH, "&gt;", $basename . ".icns") {
        die "Cant write output\n";
    }
    binmode $FH;

    my $total = 0;
    my $data = "";
    my @iconset;
    foreach my $set (@fileset) {

        # PNGファイル読込
        my $path = $folder . "/" . $set-&gt;[1];
        my $blob;
        if (open my $FI, "&lt;", $path) {
            binmode $FI;
            $blob = join '', &lt;$FI&gt;;
            close $FI;
        }
        unless (scalar $blob) {
            die "Cant read $path\n";
        }

        # MacOS8.5形式への変換
        if ($set-&gt;[2] eq "icp4") {
            &amp;buildmaskset($path, "is32", "s8mk", 16, 1, 3);
            next;
        }
        elsif ($set-&gt;[2] eq "icp5") {
            &amp;buildmaskset($path, "il32", "l8mk", 32, 0, 2);
            next;
        }

        # アイコンタイプヘッダ8バイトの付加
        my $length = length $blob;
        $data .= pack("A4N", $set-&gt;[2], $length + 8);
        $data .= $blob;
        printf "%u %s\n", length($data), $path;
    }

    # 全アイコンブロック連結
    $data .= join "", @maskset if scalar @maskset;

    # アイコンヘッダ8バイトの付加
    my $output = pack("A4N", "icns", length($data) + 8);
       $output .= $data;
    print $FH $output;
    close $FH;
    printf "%u complete", length($output);
}

# 24bitカラーと8bitマスク作成
sub buildmaskset {  
    my $path = shift;
    my $name = shift;
    my $mask = shift;
    my $size = shift;
    my $idxc = shift;
    my $idxm = shift;

    # PNGファイルを読み込んで全ピクセルを取得
    my $image = Image::Magick-&gt;new(magick=&gt;'png');
       $image-&gt;Read($path);
       $image-&gt;Set(magick=&gt;'png');
    my @input = $image-&gt;GetPixels(x=&gt;0, y=&gt;0,
        width=&gt;$size, height=&gt;$size, map=&gt;"RGBA", normalize=&gt;"true");

    # カラープレーン・マスクプレーンに分割
    my @plane = ([], [], [], []);
    for (my $y = 0; $y &lt; $size; $y++) {
        for (my $x = 0; $x &lt; $size; $x++) {
            for (my $i = 0; $i &lt; 4; $i++) {
                push @{$plane[$i]}, int(255 * shift(@input));
            }
        }
    }

    # カラープレーンをPackBits
    my @encode = ("", "", "", pack("C*", @{$plane[3]}));
    for (my $i = 0; $i &lt; 3; $i++) {
        my $buff = pack "C*", @{$plane[$i]};
        while (length $buff) {
            $encode[$i] .= chr(127) . substr($buff, 0, 128, "");
        }
    }

    # 各データを連結してヘッダ8バイトを付加
    my $buff = join "", @encode[0..2];
    $maskset[$idxc] = pack("A4N", $name, length($buff) + 8) . $buff;
    $maskset[$idxm] = pack("A4N", $mask, length($encode[3]) + 8) . $encode[3];
}

1;  
__END__  
</code></pre>

<pre><code class="language-brush:js collapse:true gutter:true title:iconrast.js">// $Id: iconrast.js 121 2015-03-13 10:01:44Z askn $

var page = require('webpage').create(),  
    system = require('system'),
    address, output, size;

if (system.args.length != 4) {  
    console.log('Usage: rasterize.js URL size filename');
    phantom.exit(1);
}
else {  
    address = system.args[1];
    size = system.args[2];
    output = system.args[3];
    page.viewportSize = { width: size, height: size };
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
            phantom.exit();
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}
// End of script
</code></pre>

<hr>

<h4 id="">ダウンロード</h4>

<p>本項で述べた mkosxicns.pl unosxicns.pl iconrast.js の3点セット。</p>

<p><a href="https://secure.multix.jp/download/mkosxicns.zip">mkosxicns.zip</a></p>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>もしPNGヘッダではないアイコンブロックであった場合は JPEG2000と仮定して .jp2ファイルで出力する。 <a href="http://multix.jp/create-osx-icns-for-windows/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p>ActivePerl <a href="http://www.activestate.com/activeperl">http://www.activestate.com/activeperl</a> <a href="http://multix.jp/create-osx-icns-for-windows/#fnref:2" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:3"><p>ImageMagick <a href="http://www.imagemagick.org">http://www.imagemagick.org</a><br>・・・正直使用している機能に対してオーバースペックなのだがMachintosh/Windows両方で動作する画像操作ライブラリは希少なので困ってしまう。 <a href="http://multix.jp/create-osx-icns-for-windows/#fnref:3" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:4"><p>PhantomJS <a href="http://phantomjs.org">http://phantomjs.org</a><br>・・・CLIで動作するWebkitヘッドレスブラウザ。ここではSVGファイルから任意画素数の透過PNG画像を生成するのに使用している。 <a href="http://multix.jp/create-osx-icns-for-windows/#fnref:4" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:5"><p>SVGファイルはWidth値とHeight値が共に無指定（つまり規定値の'100%'）である必要がある。固定値が指定されていると意図した大きさのアイコン画像とはならない。 <a href="http://multix.jp/create-osx-icns-for-windows/#fnref:5" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item><item><title><![CDATA[艦板-KanPan-とそのバリアント]]></title><description><![CDATA[<p>艦板-Kanpan- とそのバリアントはDMMオンラインゲームを快適に利用するためのプレイングビューワです。フリーサイズウィンドウ・没入型フルスクリーン全画面表示・スクリーンショット撮影のほか、ログイン・ログアウト・キャッシュ消去といった基本的な機能を簡易な操作で扱えます。</p>

<p>現在フォローしているのは「艦これ」「刀剣乱舞」「城プロ」「しんけん！！」の4種でそれぞれのOSX版・Windows版があります。気が向けば対応可能なゲームは増えるかも知れません。</p>

<p>【2015/11/20 更新 Build 10054 頒布中】</p>

<ul class="index"></ul>

<hr>

<h4 id="">おことわり</h4>

<p>本ソフトウェアのサポートはありません・いたしません。ご意見・ご要望・質問等に応える義務も責務もありません。DMMオンラインゲームプラットフォームとしても推奨動作環境ではありません。その使用・利用は一切すべて利用者の自己判断・自己責任でお願いいたします。本アプリケーションを信用出来ない場合は当然使用すべきではありません。配布物の領布は告知なく停止することがあります。配布物の自由な改造・再配布については公共の利益となる限り制限はありませんが、不利益を意図しての悪意ある改造や配布は願い下げたく存じます。</p>

<hr>

<h4 id="">ダウンロード</h4>

<p>パッケージは各ゲームと対応プラットフォーム別になっているので必要なファイル<sup id="fnref:1"><a href="http://multix.jp/dmm-playing-viewer/#fn:1" rel="footnote">1</a></sup>をダウンロードしてください。</p>

<table><tr>  
<td width="30%"><img src="http://multix.jp/content/images/2015/03/compass.png"></td>  
<td><strong>艦板 -KanPan-</strong><br>  
「艦隊これくしょん-艦これ-」対応<br><br>
<a href="https://secure.multix.jp/download/KanPan/KanPan_OSX64-10054.dmg">Macintosh OSX用</a><br>  
<a href="https://secure.multix.jp/download/KanPan/KanPan_Win32-10054.zip">Windows用</a>  
</td></tr>  
</table>

<table><tr>  
<td width="30%"><img src="http://multix.jp/content/images/2015/03/gunbai.png"></td>  
<td><strong>刀盤</strong></td></tr></table>]]></description><link>http://multix.jp/dmm-playing-viewer/</link><guid isPermaLink="false">ea72333c-b4f8-4c7e-8c9e-ed819dafa263</guid><category><![CDATA[ゲーム]]></category><category><![CDATA[Windows]]></category><category><![CDATA[Machintosh]]></category><dc:creator><![CDATA[朝日薫]]></dc:creator><pubDate>Fri, 06 Mar 2015 08:06:00 GMT</pubDate><media:content url="http://multix.jp/content/images/2015/03/teitoku_1384053723673.png" medium="image"/><content:encoded><![CDATA[<img src="http://multix.jp/content/images/2015/03/teitoku_1384053723673.png" alt="艦板-KanPan-とそのバリアント"><p>艦板-Kanpan- とそのバリアントはDMMオンラインゲームを快適に利用するためのプレイングビューワです。フリーサイズウィンドウ・没入型フルスクリーン全画面表示・スクリーンショット撮影のほか、ログイン・ログアウト・キャッシュ消去といった基本的な機能を簡易な操作で扱えます。</p>

<p>現在フォローしているのは「艦これ」「刀剣乱舞」「城プロ」「しんけん！！」の4種でそれぞれのOSX版・Windows版があります。気が向けば対応可能なゲームは増えるかも知れません。</p>

<p>【2015/11/20 更新 Build 10054 頒布中】</p>

<ul class="index"></ul>

<hr>

<h4 id="">おことわり</h4>

<p>本ソフトウェアのサポートはありません・いたしません。ご意見・ご要望・質問等に応える義務も責務もありません。DMMオンラインゲームプラットフォームとしても推奨動作環境ではありません。その使用・利用は一切すべて利用者の自己判断・自己責任でお願いいたします。本アプリケーションを信用出来ない場合は当然使用すべきではありません。配布物の領布は告知なく停止することがあります。配布物の自由な改造・再配布については公共の利益となる限り制限はありませんが、不利益を意図しての悪意ある改造や配布は願い下げたく存じます。</p>

<hr>

<h4 id="">ダウンロード</h4>

<p>パッケージは各ゲームと対応プラットフォーム別になっているので必要なファイル<sup id="fnref:1"><a href="http://multix.jp/dmm-playing-viewer/#fn:1" rel="footnote">1</a></sup>をダウンロードしてください。</p>

<table><tr>  
<td width="30%"><img src="http://multix.jp/content/images/2015/03/compass.png" alt="艦板-KanPan-とそのバリアント"></td>  
<td><strong>艦板 -KanPan-</strong><br>  
「艦隊これくしょん-艦これ-」対応<br><br>
<a href="https://secure.multix.jp/download/KanPan/KanPan_OSX64-10054.dmg">Macintosh OSX用</a><br>  
<a href="https://secure.multix.jp/download/KanPan/KanPan_Win32-10054.zip">Windows用</a>  
</td></tr>  
</table>

<table><tr>  
<td width="30%"><img src="http://multix.jp/content/images/2015/03/gunbai.png" alt="艦板-KanPan-とそのバリアント"></td>  
<td><strong>刀盤 -TouBan-</strong><br>  
「刀剣乱舞」対応<br><br>
<a href="https://secure.multix.jp/download/KanPan/TouBan_OSX64-10054.dmg">Macintosh OSX用</a><br>  
<a href="https://secure.multix.jp/download/KanPan/TouBan_Win32-10054.zip">Windows用</a>  
</td></tr>  
</table>

<table><tr>  
<td width="30%"><img src="http://multix.jp/content/images/2015/03/katana.png" alt="艦板-KanPan-とそのバリアント"></td>  
<td><strong>剣番 -KenBan-</strong><br>  
「しんけん!!」対応<br><br>
<a href="https://secure.multix.jp/download/KanPan/KenBan_OSX64-10054.dmg">Macintosh OSX用</a><br>  
<a href="https://secure.multix.jp/download/KanPan/KenBan_Win32-10054.zip">Windows用</a>  
</td></tr>  
</table>

<table><tr>  
<td width="30%"><img src="http://multix.jp/content/images/2015/03/castle.png" alt="艦板-KanPan-とそのバリアント"></td>  
<td><strong>城盤 -JyouBan-</strong><br>  
「御城プロジェクト」対応<br><br>
<a href="https://secure.multix.jp/download/KanPan/JyouBan_OSX64-10054.dmg">Macintosh OSX用</a><br>  
<a href="https://secure.multix.jp/download/KanPan/JyouBan_Win32-10054.zip">Windows用</a>  
</td></tr>  
</table>

<hr>

<h4 id="">主な特徴</h4>

<ul>
<li>没入型フルスクリーン表示ができます。現状最大5Kディスプレイまで動作します。</li>
<li>ウィンドウを任意のサイズにリサイズしてプレイできます。大きくして見やすくすることも小さくして画面の隅に置いておくようなこともできます。</li>
<li>スクリーンショット（画面キャプチャ）をワンキーで取得・保存できます。</li>
<li>画面スワイプなどの誤操作によるブラウザバック事故が発生しません。</li>
<li>本来のDMMゲーム画面にはないDMMログアウト機能があります。</li>
<li>アプリケーション起動時にキャッシュを消すことも、終了時にCookieを消去することも容易にできます。</li>
<li>アプリケーション毎に独立したキャッシュ・Cookie保存領域を確保することでOS標準ブラウザにインストールされたアドウェアや悪意あるプログラムから干渉されにくくしています。</li>
<li>OS共通のネットワーク設定とは独立したプロキシ設定をアプリケーション毎に設定できます。</li>
<li>いわゆる専ブラによくある裏ステ表示機能等はありません。一般的Webブラウザよりもゲームプレイに特化した必要最小限の表示ができる単体アプリケーションです。</li>
</ul>

<hr>

<h4 id="">スクリーンキャプチャ</h4>

<p>艦これの場合のアプリケーション表示例です。他のゲームでも同様です。</p>

<p><img src="http://multix.jp/content/images/2015/03/2015-03-07-17-19-30.png" alt="艦板-KanPan-とそのバリアント"></p>

<p>等倍プレイサイズ（ゲーム画面800x480）・・・
<a href="http://multix.jp/content/images/2015/03/2015-02-01-15-11-37.png">ドロップ画面</a></p>

<p>縮小プレイ 60%（480x288）・・・
<a href="http://multix.jp/content/images/2015/03/2015-02-01-15-12-10.png">これでも普通に遊べます</a></p>

<p>拡大プレイ 160%（1280x768）・・・
<a href="http://multix.jp/content/images/2015/03/2015-02-01-15-11-52.png">この位がプレイしやすい</a></p>

<p>iMac/27in 3Kフルスクリーン 300%（2560x1440）・・・<a href="http://multix.jp/content/images/2015/03/2015-02-01-15-12-29.png">実寸表示推奨</a></p>

<p>5Kフルスクリーン 600%表示（5120x2880）・・・（自粛）</p>

<hr>

<h4 id="">動作環境</h4>

<p>少なくとも最新の<strong>Adobe Flash Player</strong>が動作し、DMMオンラインゲームの推奨動作環境に準じている必要があります。</p>

<ul>
<li>OSX 10.7(Lion)<sup id="fnref:2"><a href="http://multix.jp/dmm-playing-viewer/#fn:2" rel="footnote">2</a></sup> 以降がインストールされた<strong>64bitマルチコアCPU</strong>搭載の Machintosh コンピュータ（OSX Yosemiteで動作確認）</li>
<li>Windows 7以降で<strong>.NET Framework 4.x</strong><sup id="fnref:3"><a href="http://multix.jp/dmm-playing-viewer/#fn:3" rel="footnote">3</a></sup>がインストールされた32bitまたは64bitマルチコアCPU搭載の Windows コンピュータ<sup id="fnref:4"><a href="http://multix.jp/dmm-playing-viewer/#fn:4" rel="footnote">4</a></sup>（Windows8.1Updateで動作確認）</li>
</ul>

<hr>

<h4 id="adobeflashplayernpapi">別途 Adobe Flash Player(NPAPI)が必要</h4>

<p>プレイングビューワを使用するには別途<strong>Adobe Flash Player</strong>が必要です。必要な方は<a href="http://get.adobe.com/jp/flashplayer/otherversions/">こちら</a>から<strong>NPAPI</strong>版を選んでダウンロードし、インストールしてください。IE用やPPAPI版では動作しません。<sup id="fnref:5"><a href="http://multix.jp/dmm-playing-viewer/#fn:5" rel="footnote">5</a></sup></p>

<hr>

<h4 id="">インストールと起動方法</h4>

<p>インストーラはありません。ダウンロードしたZIPファイルを展開して適当なフォルダにコピーしてください。 <br>
初回起動時はOSのセキュリティ制限によってプログラムの起動がブロックがされる事がありますが、以下の方法で解除してください。</p>

<p><strong>Windowsの場合</strong></p>

<ul>
<li>実行ファイルを右クリックして<strong>ブロックの解除(K)</strong>ボタンを押してください。同梱のWinRapper.exeにも同様の操作が必要です。ただしこの操作にはPCの設定により管理者権限が必要になることもあります。
<img src="http://multix.jp/content/images/2015/03/2015-03-07-18-41-02.png" alt="艦板-KanPan-とそのバリアント"></li>
<li>この問題はWindows上でダウンロードし標準のZIPアーカイブ展開ツールを使用した場合に発生します。他のPCやMachintoshでダウンロードしてUSBメモリでコピーした場合や、7-Zip等のサードパーティー製展開プログラムを使用した場合には<strong>この問題は生じません</strong>。</li>
</ul>

<p><strong>Machintoshの場合</strong>
<img src="http://multix.jp/content/images/2015/03/2015-03-07-18-49-28.png" alt="艦板-KanPan-とそのバリアント"></p>

<ul>
<li>システム環境設定のセキュリティパネルで少なくとも<strong>ダウンロードしたアプリケーションの実行許可</strong>が禁止されていない必要があります。初回起動時に起動ブロックが掛かった場合はこの画面の<strong>このまま開く</strong>ボタンで実行許可を与えることができます。
<img src="http://multix.jp/content/images/2015/03/2015-03-07-18-52-27.png" alt="艦板-KanPan-とそのバリアント"></li>
<li>あるいは起動できなかったアプリを右クリックしてコンテキストメニューを出し<strong>optionキーを押しながら開く</strong>とブロック解除の確認画面を出すことができるのでここから起動を許可することができます。
<img src="http://multix.jp/content/images/2015/03/2015-03-07-18-49-41.png" alt="艦板-KanPan-とそのバリアント">
<img src="http://multix.jp/content/images/2015/03/2015-03-17-15-08-44.png" alt="艦板-KanPan-とそのバリアント">
<img src="http://multix.jp/content/images/2015/03/2015-03-07-18-49-50.png" alt="艦板-KanPan-とそのバリアント"></li>
<li>この問題は<strong>Macintosh上でダウンロード</strong>したアプリケーションの場合に発生します。Windowsや他のPCでダウンロードしてUSBメモリやNAS経由でコピーした場合には<strong>この問題は生じません</strong>。</li>
</ul>

<hr>

<h4 id="">つかいかた</h4>

<p>F1キーを押すか左上のメニューボタンをタップするとメニューを開くことができます。ほとんどの機能には簡単に呼び出せるショートカットキーが割り当てられています。 <br>
<img src="http://multix.jp/content/images/2015/03/2015-03-07-17-44-39.png" alt="艦板-KanPan-とそのバリアント"></p>

<ul>
<li><p><strong>最前面に固定</strong> command+T(OSX) Ctrl+T(Win) <br>
ウィンドウを他のウィンドウより常に前に表示できます。トグル操作でオン／オフします。</p></li>
<li><p><strong>全画面表示</strong> command+F(OSX) Ctrl+F(Win) <br>
トグル操作で没入型フルスクリーン表示をオン／オフします。なおフルスクリーン表示中は他のウィンドウリサイズ操作はできません。ディスプレイサイズが小さい場合やタブレットPCに適します。</p></li>
<li><p><strong>等倍表示</strong> command+O(OSX) Ctrl+O(Win) <br>
ウィンドウをそのゲームの等倍表示サイズに調整します。ウィンドウサイズはゲームにより異なります。</p></li>
<li><p><strong>半画面表示</strong> command+H(OSX) Ctrl+H(Win) <br>
ウィンドウをディスプレイサイズの半分の横幅になるように調整します。2K以上の大画面ディスプレイで他のアプリケーションやブラウザと並べてプレイするときに適します。</p></li>
<li><p><strong>拡大</strong> alt+右カーソルキー <strong>縮小</strong> alt+左カーソルキー <br>
10%刻みでウィンドウサイズを拡大・縮小します。</p></li>
<li><p><strong>画面キャプチャ</strong> TAB または command+S(OSX) Ctrl+S(Win) <br>
プレイ画面のスクリーンショットをキャプチャして予め指定されたフォルダにPNG画像として保存します。デフォルトではOS標準のピクチャフォルダが指定されています。 <br>
タブレットボタンモードがオンの場合は画面右上のキャプチャボタンを押しても同様にスクリーンショットを保存できます。 <br>
DMMログイン画面ではTABキーはキャプチャ機能ではなくフォームフォーカス移動キーになります。 <br>
画像サイズはウィンドウサイズに依存します。フルスクリーン表示中の画像保存には数秒かかる場合があります。撮影保存中はタブレットボタンは消えます。基本的に連写はできません。</p></li>
<li><p><strong>キャプチャ保存場所指定</strong> （メニューからのみ実行可） <br>
スクリーンショット画像を保存する場所を変更できます。変更内容は次回起動時にも反映されます。</p></li>
<li><p><strong>プロキシを使用する</strong> （メニューからのみ実行可） <br>
OSのネットワーク通信設定とは別に、任意のプロキシアドレス・ポートを設定することができます。VPNと併用して安全な通信経路を確保したい場合などに使います。設定内容は次回起動時から有効になるため、設定後はいちどアプリケーションを終了してください。</p></li>
<li><p><strong>タブレットボタン</strong> （メニューからのみ実行可） <br>
プレイ画面左上に半透明表示されるメニューボタンと、右上に半透明表示されるキャプチャボタンのオン／オフをトグル操作で表示・非表示することができます。これらのボタンはスクリーンショット画像には写りません。 <br>
<img src="http://multix.jp/content/images/2015/03/menu.png" alt="艦板-KanPan-とそのバリアント" title=""> <br>
<img src="http://multix.jp/content/images/2015/03/shot.png" alt="艦板-KanPan-とそのバリアント" title=""> <br>
ウィンドウのリサイズ状態や、タブレットPCのディスプレイアスペクトによってはタブレットボタン表示がゲームプレイのじゃまになる場合があります。その場合はこのメニュー操作で非表示とするようにしてください。ただし再度表示するにはF1キーでメニュー表示が呼び出せなければならないため、キーボードを接続していないタブレットPCでは注意が必要です。<sup id="fnref:6"><a href="http://multix.jp/dmm-playing-viewer/#fn:6" rel="footnote">6</a></sup></p></li>
<li><p><strong>再読込</strong> command+R(OSX) Ctrl+R(Win) <br>
いわゆるF5です。キャッシュとCookieは消去されません。DMMからログアウトはしません。</p></li>
<li><p><strong>ログアウト</strong><sup id="fnref:7"><a href="http://multix.jp/dmm-playing-viewer/#fn:7" rel="footnote">7</a></sup> （メニューからのみ実行可） <br>
ゲームログイン状態を終了してDMMログイン画面に遷移します。キャッシュとCookieは消去されません。</p></li>
<li><p><strong>Cookie消去して終了</strong> <br>
キャッシュとCookieを消去し、DMMからログアウトした状態でアプリケーションを終了します。</p></li>
<li><p><strong>終了</strong> command+Q(OSX) Alt+F4(Win) <br>
アプリケーションを終了します。ウィンドウを閉じるボタンを押すのと同じです。キャッシュとCookieは消去されません。DMMからログアウトはしません。</p></li>
<li><p><strong>公式コミュニティを表示</strong> （メニューからのみ実行可） <br>
別画面で公式コミュニティを表示します。OSのデフォルトブラウザを使います。DMMログイン状態は本アプリケーションとは別になります。</p></li>
<li><p><strong>build XXXXX</strong> <br>
本アプリケーションのリリースビルド番号表示です。選択するとこのサイトをOSのデフォルトブラウザで別画面表示します。</p></li>
<li><p><strong>開発ツール</strong> Alt+I（隠し機能） <br>
DOMエクスプローラ・Cookieブラウズ・デバッグコンソールを含むインスペクタウィンドウが別ウィンドウで起動します。ただしプロキシ設定が有効な場合は起動できません。またゲーム内通信を傍聴・干渉することもできません。</p></li>
</ul>

<hr>

<h4 id="">いわゆる専ブラじゃない・・・と思う</h4>

<p>ゲーム内API通信には一切干渉しません。従って裏ステ表示機能などもありません。そういう追加機能が必要な場合は、プロキシ設定と他の外部ツールを組み合わせて自己責任で環境構築・運用してください。</p>

<hr>

<h4 id="dmm">ゲーム内DMMポイント課金購入について</h4>

<p>アプリケーション内から通常通りDMMポイントを購入することができます。</p>

<p><img src="http://multix.jp/content/images/2015/03/2015-03-07-20-55-18.png" alt="艦板-KanPan-とそのバリアント"></p>

<p>ゲーム内で課金購入操作を行うとこのような画面になりますが<strong>ポイントを購入する</strong>ボタンを押すと別画面でポイントチャージ用のウィンドウが開きます。この時の別ウィンドウはOSデフォルトのブラウザ（IEやSafari）ではなく、本アプリケーションそのものが生成するサブウィンドウです。従ってこの際のキャッシュ・Cookie・操作履歴はOS側の通常のデータとしては残らず、本アプリケーションのワークエリア内にのみ保存されます。これらは後述の操作で消去・リセットすることができます。<sup id="fnref:8"><a href="http://multix.jp/dmm-playing-viewer/#fn:8" rel="footnote">8</a></sup></p>

<p>当然ですが、通信環境等にセキュリティ上の不安がある環境下での課金操作には熟慮が必要です。本アプリケーションでも悪意ある外部プログラムの侵入や高度なアドウェアの干渉をブロックしたり排除することを完全に予防することはできません。少しでも不安がある場合は何もすべきではありません。そもそも本アプリケーションを信用出来ない場合は使用するべきではありません。</p>

<hr>

<h4 id="">再起動後も維持される保存内容</h4>

<p>アプリケーションを終了・起動しなおしても以下の設定は（設定が消去されるまで）維持されます。</p>

<ul>
<li>キャプチャ保存場所</li>
<li>プロキシ設定</li>
<li>タブレットボタン表示／非表示</li>
<li>DMMログイン状態（DMMのCookie有効期間に依存）</li>
</ul>

<p>以下については維持されず再起動毎にリセットされます。</p>

<ul>
<li>最前面固定（常にオフ）</li>
<li>全画面状態（常にオフ）</li>
<li>ウィンドウサイズ（常にデフォルトサイズ）</li>
<li>ウィンドウ位置（常にディスプレイ中央）</li>
</ul>

<hr>

<h4 id="">設定クリア起動について</h4>

<p>アプリケーションを起動する時、以下の特別な方法を取ることができます。</p>

<ul>
<li><p><strong>Shiftキーを押しながら起動</strong>するとキャッシュを消去して起動できます。ウィンドウが表示されるまでキーは押したままにしてください。Cookieは削除されないのでDMMログイン状態は維持されます。ゲーム運営からキャッシュを消去して起動するように指示された場合・キャッシュが壊れていてゲームローディングが途中で止まる場合・サーバメンテナンス後の最初の起動時はこの操作を行ってください。</p></li>
<li><p><strong>CtrlキーとShiftキーを押しながら起動</strong>するとキャッシュとCookieと、すべての保存設定を完全に消去し、DMMログインもログオフされた状態で起動できます。ウィンドウが表示されるまでキーは押したままにしてください。キャプチャ保存場所やプロキシ設定はリセットされて初期状態に戻ります。通常の起動ではFlash画面がホワイトアウトして操作不能になるような場合に試してください。</p></li>
</ul>

<hr>

<h4 id="">アンインストール方法</h4>

<p>アプリケーションがOSの設定やレジストリを汚染することはありませんので何時でもアプリケーションを削除することができます。ただしキャッシュやCookieはOSのワークエリア内に保存されているため、ただアプリケーションを削除しただけではこれらが消えずに残ってしまいます。したがってアプリケーションを完全に終了したあと、ZIPパッケージに同梱の<code>deleteLocalData.sh</code>(OSX)または<code>deleteLocalData.bat</code>(Win)を必ず実行してからアプリケーションを削除してください。キャッシュ・Cookie・設定保存値をゴミ箱にも残さずに消去できます。消去内容（各ゲーム毎に異なります）はこのファイルをテキストエディタやメモ帳で閲覧することで確認できます。</p>

<hr>

<h4 id="">既知の不具合</h4>

<ul>
<li><p>Flashローディング途中にウィンドウリサイズをすると画面表示が乱れること（不要な黒帯が入る等）があります。Flashが完全に起動したあとでウィンドウリサイズし直すことで治ります。</p></li>
<li><p>極端かつ高速なリサイズ操作（特に縮小操作）を行うとFlashが勝手にリロードすることがあります。</p></li>
<li><p>DMMログイン画面以外の時にキャプチャ保存場所指定を行うとアプリケーションが異常終了する場合がまれにあります。ゲームログイン後〜Flash動作中にこれを行うことはなるべく避けるほうが良いでしょう。</p></li>
<li><p>全画面プレイ時等にキャプチャ操作をすると時間がかかることがありますが、仕様です。保存速度・連写可能な最短間隔はPCの性能に依存します。5Kディスプレイ全画面で快適に動かしたい場合16GB以上のメインメモリはある方が良いでしょう。</p></li>
<li><p>OSX版では全画面モードから通常表示に戻した時、ウィンドウタイトルが消える場合があります。実害はありませんが、これは本アプリケーションではなく使用しているライブラリにて既知のバグです。</p></li>
<li><p>ゲームによってはゲーム内音量設定等がキャッシュ消去を行ってもリセットされないことがありますが、これはそれぞれのゲームに依存した仕様です。<sup id="fnref:9"><a href="http://multix.jp/dmm-playing-viewer/#fn:9" rel="footnote">9</a></sup></p></li>
<li><p>OSX用の<a href="https://kancolle.sanaechan.net/">航海日誌</a>と組み合わせる場合、プロキシ設定を<code>http=localhost:8888</code>のように記述してください。これはHTTP通信のみをプロキシに通すという意味です。このように通信種別を制限しない場合、<strong>Network disabled</strong>となって接続できません。なお<a href="http://nekopanda.blog.jp/">航海日誌拡張版</a>については現在のところこのような問題はありません。（一般的な<code>localhost:8888</code>と普通に記述してよい）<sup id="fnref:10"><a href="http://multix.jp/dmm-playing-viewer/#fn:10" rel="footnote">10</a></sup></p></li>
</ul>

<hr>

<h4 id="usb">USBメモリ等からの起動について</h4>

<p>PCのローカルドライブにインストールせず、外部メディアからアプリケーションを起動する場合でも、デフォルト状態ではキャッシュ・Cookie・各種設定はPCのシステムワーク領域に保存されます。従ってアプリケーション終了後、外部メディアを抜く前にZIPパッケージに同梱の<code>deleteLocalData.sh</code>(OSX)または<code>deleteLocalData.bat</code>(Win)を実行してシステムワーク領域からデータを消去するようにしてください。<sup id="fnref:11"><a href="http://multix.jp/dmm-playing-viewer/#fn:11" rel="footnote">11</a></sup></p>

<hr>

<h4 id="">ソースファイルの入手</h4>

<p>Machintosh OSX版についてはZIPパッケージ内にすべてのソースファイル／リソースファイルが内包されています。Windows版についてはアプリケーション起動中に<code>C:¥Users¥&lt;ユーザ名&gt;¥AppData¥Local¥Temp</code>内にソースファイルフォルダが展開されていますので探してみましょう。<sup id="fnref:12"><a href="http://multix.jp/dmm-playing-viewer/#fn:12" rel="footnote">12</a></sup></p>

<hr>

<h4 id="">動作原理について</h4>

<p>通常のブラウザ内ゲームプレイ画面のCSSパラメータ<sup id="fnref:13"><a href="http://multix.jp/dmm-playing-viewer/#fn:13" rel="footnote">13</a></sup>を、ウィンドウリサイズ操作時に動的に書き換えることでウィンドウ枠いっぱいにゲーム画面が拡大し、またそれ例外の部分が黒く見えるようにしているだけです。同時に画面スワイプやBSキーによるブラウザバック、ドラッグ＆ドロップによる画面遷移を禁止している他は普通のWebブラウザです。DMMログイン画面とゲーム画面以外へは原則として移動も表示もできません。<sup id="fnref:14"><a href="http://multix.jp/dmm-playing-viewer/#fn:14" rel="footnote">14</a></sup></p>

<hr>

<h4 id="">開発環境・ライブラリ</h4>

<p>本アプリは以下を母体に構成されています。（2015/03/08時点）</p>

<ul>
<li>Nw.js(node-webkit) 0.12.3 -- アプリケーション全体</li>
<li>Chromium 41.0.2272.76 -- Webブラウザコア</li>
<li>v8 3.32.7 -- JavaScriptエンジン</li>
<li>Node.js 1.2.0 -- アプリケーションコア</li>
<li>openssl 1.0.1k -- SSL/TLS通信コンポーネント</li>
<li>zlib 1.2.5 -- 圧縮リソース展開コンポーネント</li>
<li>.NET Framework 4.0/4.5.2 -- Windowsキャッシュ削除機能</li>
</ul>

<p>各々の扱いはそれぞれの利用規約と領布ライセンスによります。</p>

<hr>

<h4 id="">更新履歴</h4>

<ul>
<li>build 10053 [2015/11/20] Update Nw.js v0.12.3, Flash 19.0.0.245 <br>
DMMフローティングバナーが画面上部に出てくる表示不具合に対応  </li>
<li>build 10053 [2015/05/25] Update Nw.js v0.12.2 <br>
既知の不具合に航海日誌（Mac）との接続不具合対処法を追記</li>
<li>build 10052 [2015/05/14] Update Flash 17.0.0.188対応</li>
<li>build 10051 [2015/04/28] Update Nw.js v0.12.1, Flash 17.0.0.169</li>
<li>build 10050 [2015/04/02] Fix JQuery</li>
<li>build 10049 [2015/03/30] Update Flash 17.0.0.149対応</li>
<li>build 10048 [2015/03/16] Update Flash 17.0.0.135対応 <br>
DMMシステムメンテナンス画面に追加対応  </li>
<li>build 10047 [2015/03/08] Update Nw.js v0.12.0</li>
<li>build 10046 [2015/03/03] 一般公開初版</li>
</ul>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>Linux用は提供していません。出来ないわけではなく、単にFlash Runtimeが簡単には動かないとかそもそも必要なlibが足りないとか、個別環境に依存する労力が大変面倒なためです。その説明だけで本一冊は書けるでしょう。実力のある人なら自分で改造・対応・試行錯誤されたほうが簡単です。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p>OSX/32bit用は提供していません。これは対応プラットフォームで32bit環境というのはかなり特殊ケースになるため用意する意味がほぼ無いからです。とはいえ同梱のNw.jsコンポーネントを32bit版に差し替えるだけで動きます。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:2" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:3"><p>.NET Runtimeが入ってなくても実はしれっと動いたりしますが、アプリ内からキャッシュやCookieがちゃんと消せなかったりします。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:3" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:4"><p>Windows/64bit用は提供していません。理由は多くのゲームが64bitネイティブなFlashに対応していないからです。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:4" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:5"><p>対応するFlash Playerがインストールされていない場合はDMMログイン後にこのFlash Payerダウンロードページに飛びます。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:5" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:6"><p>現状は各々画面左上と右上固定ですがバリアントによってはゲーム内操作と干渉します。この場合はウィンドウを上下または左右に広げて意図的に黒帯を出すようにすると改善します。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:6" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:7"><p>DMMオンラインゲームの画面にはログアウト機能が用意されていません。またブラウザを閉じただけではブラウザやゲームサーバ内部的には事実上ログインしたままになります。本アプリケーションでも明示的にログアウト操作をしない限り終了後もログインしたままになりますが、これはDMM側の基本仕様のため回避不可能です。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:7" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:8"><p>ようするに通信データを保存する場所がブラックボックスではなく、ユーザレベルで自己管理できるようになっています。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:8" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:9"><p>ゲームによってはF5連打監視や不正プレイ監視設定（発動すると一定時間ログインブロックされウィンドウがホワイトアウトしてしまう）も同時に消去/初期化されるようです。恒久的なものでなければCtrl+Shiftキーを押しながら起動することで解消できるはずです。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:9" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:10"><p>航海日誌拡張版はIPv4のみLISTENしますが、航海日誌はIPv4/v6両方ともLISTENするという違いがありますが、それ以上のことはわかっていません。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:10" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:11"><p>若干手を加えることでUSBメモリ内にワークエリアを設定・固定することもできます。OSX版では起動app内のlaunch.sh中の起動オプションに、Windows版ではショートカットを作成してその起動オプションに、--data-path=&lt;保存フォルダ>を追加して必ずそれから起動してください。ただしこうして設定した保存フォルダは用意されたキャッシュ消去操作方法の対象となりません。手動で削除するか、キャッシュ消去操作関係（WinRapper.iniやdeleteLocalData.*）も書きなおす必要があります。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:11" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:12"><p>アプリケーションが正常終了するときに展開コードは削除されます。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:12" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:13"><p>ゲームによってCSS書き換え内容に異なるため、ゲーム別にバリアントを用意しています。ただしこの対応箇所とアイコン以外は全ゲーム共通のコードです。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:13" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:14"><p>ただしDMM提供ページ内のセキュリティ監視関係やアナリシス外部通信等はブロックせずにそのままバックグラウンドで動かしています。これらをブロックするのはDMM利用規約やゲーム利用規約に反する可能性があります。 <a href="http://multix.jp/dmm-playing-viewer/#fnref:14" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item></channel></rss>