Category Archives: Apple

言語ごとのiOSシミュレータを用意する

Xcodeでシミュレータが見えなくなるトラブルが発生しましたが、復旧過程で「機種ごとだけでなく、言語ごとにデバイスを用意する」ということができることに気づきました。その方法を紹介しましょう。

いろんなバージョンのXcodeを行き来しつつ、ユーザも切り替えながら使っていることもあるせいなのか、ある日、XcodeでiOS向けのプロジェクトで、iOSシミュレータがまったく選択できなくなりました。現在は、Ver.6.1.1が公開されている中で最新ですね。

shot9502

ここで見えるシミュレータは、WindowsメニューのDevicesで確認できます。やっぱりみんな消えています。なぜかはわかりません。

shot9503

シミュレータを追加するには、左下の+部分をクリックします。すると、次のようにシートが表示されて、名前や機種、iOSのバージョンなどを指定してシミュレータを追加できます。全部消えてしまっても、もちろん、こうして追加すればOKです。

shot9504

ここで、ふと「同一の機種は追加できるのか」と思ってやってみたらできました。そこで、さらに思いつきました。たとえば、iPhone 4sを2つ登録して、それぞれで、シミュレータの言語を「日本語」と「英語」にしておけば、言語の切り替えがポップアップからできるようなものではないだろうかということです。

以下のように、iPhone 4s-EnとiPhone 4s-Jaの2つのシミュレータを追加登録します。どちらもDevice TypeはiPhone 4sを選択しています。

shot9509

Xcodeでは、このように、指定した名前(Simulator Name)のポップアップメニュー項目が出てきます。

shot9506

それぞれのシミュレータでアプリケーションを起動するなどして起動し、「設定」アプリケーションで言語を日本語と英語に設定しました。そうすれば、以下のように、もちろん、それぞれの言語でシミュレータが即座に立ち上がります。シミュレータ側でのHardwareメニューのDeviceでは、名前でなくデバイスタイプが出るようで、ちょっと不便ですが、まあ、Xcode側で選択できさえすればいいので、これで、Xcode側から言語を指定したシミュレータの呼び出しができるということです。

shot9508 shot9507

ちなみに、XocdeからプロジェクトのRun等をしないでシミュレータを起動するには、Xcodeで、XcodeメニューからOpen Developer ToolのiOS Simulatorを選択すれば良いでしょう。

shot9505

以下の書籍ではこの話題は入れられませんでした。こちらの書籍もよろしくお願いします。

ios_programming_cover1

Yosemiteのmanは2本指スライドでスクロールするぞ!!

Yosemiteを入れた方、ターミナルを起動して、たとえば、「man diskutil」と入れてください。長いmanをスクロールするのは、えーっとcontrlなんだっけ〜と思う前にトラックパッドで2本指でスライドさせてください。なんと、manがスクロールします。Linuxマシンにつないでもできますよ。

ということで、manというより、Terminal.appの動作がトラックパッドに最適化されたってことですが、わかりやすいタイトルをつけてみました。

Appleの新言語Swiftは普及するのか?

もちろん、月日を経ないと結論は出ませんが、今時点では今後普及すると考えます。その理由を考えてみました。

まず、「開発言語の大きな変更」というのは、Mac OSからMac OS Xへの移行時にありました。その成り行きは非常に重要です。Mac OSは、CあるいはC++が主要言語だったと言えますが、Mac OS XはOPENSTEPからの名残でObjective-Cが開発言語になることが、当初NeXTとAppleが合流したときの事実でした。しかし、既存のMac OS開発者からは支持は得られず、AppleはMac OS Xの正式リリースが近づく頃にJavaに対応しました。1999〜2000年頃は、Javaが登場して4年程度の頃で、エンタープライズ分野で使われ始めるなど、ある意味では注目が集まっていた言語でもありました。また、その頃は、Flash vs Javaという構図でもまだ微妙に拮抗していた時期です。Appleは「Javaだとみんな納得してくれるだろうし、他のプラットフォームの開発者にもアピールできるだろう」と考えたのかもしれません。しかし、現実はそうではありませんでした。技術的な問題と、心理的な問題があったのです。

おそらく、いちばんの見込み違いは、これまでNeXTの世界でObjective-Cで開発して来た人たちよりも、Javaだから参入しようと思った人たちの方が少なかったからでしょう。いまでこそ当たり前のOS Xですが、移行時は「Mac OS Xは失敗してMac OSに戻すだろう」みたいな発言を堂々と公言する人たちも多く居たので惑わされたのでしょう。WWDCに当時参加していた人は、Mac OSへの逆戻りはあり得ないことは理解していたと思います。しかし、プラットフォーム外の人はそうした変な噂にも惑わされて、言語以前にMac OS X自体への注目がされなかったのでした。この点が大きく、AppleもMac OS X発売直後くらいからObjective-Cにフォーカスし、Java対応は順次縮小して現在に至ります。

技術的な側面でも、Javaでは参照渡しという仕組みがないと言えばなく、Objective-Cで培われたAPIに微妙にマッチしていませんでした。そして、メモリモデルが異なる2つの言語では、思わぬ落とし穴がどこかにあって、「なぜか動かない」という箇所に当たってしまうこともあり、安心して使えなかったことも事実です。また、Javaは遅いという世間の意識にもマイナス方向の力が働きました。

そして年月が経過しました。魅力的な製品iPhone/iPadで稼働するアプリケーションを作りたいために、それまでAppleに見向きもしなかったたくさんの人が、Objective-Cの学習をしたのです。これは、Mac OSからOS Xへの移行時とはすでに状況が違います。Appleは、OS Xリリース前のJava対応の混乱から、「他の世界のプログラマに魅力がある」ということよりも、「今現在プラットフォームにコミットしている人たちの満足度」がより重要であるということを学習しているのだと思います。

しかし、Objective-Cへの不満はいつもどこかでつぶやかれていました。そこで、まず取り組んだのが、複雑なメモリ管理へのテコ入れであり、ARC対応です。同時に、ブロック対応した点でも、コンピュータの世界の基準に追いつくことをしたということです。そして、今回のSwiftがあります。iPhoneアプリを作りたいことで、Objective-Cを学習するような人なら、Swiftの学習をすることくらいはさほど難しくないと言えます。しかも、文字列を+でつなげられるわけで、JavaScriptなど多くの人たちがObjective-C以外で経験して来た言語に近い訳です。Objective-Cが理解できるプログラマなら、Swiftは理解できるでしょう。しかも、?によってよりシンプルに記述できるとか、プロパティがオブザーバブルといったより良い特徴も目立ちます。

さらに、「すでに有名である言語である必要はない」という意識も、Appleには現在のObjective-Cプログラマの増加から出ているのでしょう。既存の言語、ruby/Python/JavaScript等ではない理由としては、すでにコミュニティがあって色が付いた言語だと、その世界のしきたりに引っ張られるのですが、「新言語」と言い切ってしまえば、Appleは独自にその中身を構築できるのです。これは、もちろん、Appleにとって有利に働きますし、そういうことでないと、Cocoaとの完全な統合はできないと言えます。Javaのときの技術的な問題に対する対処も、Appleの手中に最初からあるということです。

Mac OS X初期の頃と違い、たくさんの開発者がすでにコミットしている上では、新しい言語は十分に受け入れられるだろうと判断したのでしょう。また、iOSのアップデートがきわめて順調である点も追い風になるでしょう。これから開発するアプリケーションは、iOS 8以上対応という決定がなされるのがおそらく普通かと思われます。そうなら、思い切ってSwiftでやるぞという結論になる確率も高いということです。

そういうことで、Swiftは昔のJava for Mac OS Xのようにはならないと思います。OSのバージョンアップのスピードを考えれば、来年のWWDCの頃にはSwift率はけっこう高くなっているのではないでしょうか。半々くらいになるかな?(数字は出したくないのだけど〜笑)また、プログラミングと言えばいまだに「言語の理解」という間違った意識がありますが、実際には「フレームワークの理解」ということの方がよほど大変です。SwiftになってもCocoaの諸概念を理解して利用するという点では、Objective-Cと違いはありません。現在のiOS開発者にとっては、「ちょっと書き方が変わる」くらいの話であり、今までがんばって学習してきたCocoaの知識は十分に活かせるし、むしろそれらが必要なのです。Appleはきちんとレールを敷いた上で、新しい言語を持ち出したのです。

OS X Mavericksとdocdiff 0.5.0

単語単位での2つのファイルの相違点をカラー表示してくれるdocdiffは非常に重宝します。wdiffだと日本語がうまくいかないということで、rubyで作られているdocdiffを使っていますが、Mavericksにアップデートしたら動かなくなるとか、インストーラが以前はあったけど現在のシステムで動かないといろいろあり、困ってしまいました。ソースから動かす方法を、ほとんど自分の備忘録として書いておきます。

まず、githubにあるdocdiffのサイトから、ソース一式を「Download ZIP」ボタンでダウンロードします。Makeとかあるのだけど、Ver.1.8 onlyとあります。MavericksはVer.2.0がデフォルトです。それで、最低限の作業を考えた結果このような流れでできることが分かりました。ダウンロードしたファイルを展開したdocdiff-masterフォルダを基準に説明します。

  1. bin/docdiffを/usr/local/binにコピーする(あるいは/usr/binにコピー)
  2. libにある1フォルダ3ファイルを、Rubyのライブラリフォルダにコピーする

ライブラリフォルダとは、以下のパスになります。

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0

これで、1でコピーした先にパスが通っていれば、docdiffコマンドとして稼働します。つまり、

docdiff --format=tty file1 file2

とすれば、カラーリングした結果でファイルの違いを文字単位で表示します。

なお、これをsvn上で使いたいので、次のようなことをしています。まず、上記、ダウンロードしたdocdiffファイルを/usr/local/binにコピーしたとして、/usr/binに以下のようなスクリプト「docdiff」を作ります。もちろん、実行権限を与えておきます。

#/bin/sh
/usr/local/bin/docdiff --format=tty $6 $7

こうすれば、svnでのコマンドで

svn diff -r PREV --diff-cmd=/usr/bin/docdiff file

とすることで、たとえば、こんな感じに見えます。このコマンドだと、現在のファイルとRevision 15のファイルを比べていて、赤は消えたもの、青は追加されたものです。黄色の代わりに緑になるという感じです。

shot0180

Mavericksでは通知センターをスクリプトから使えるようになった

Mountain Lionで登場した通知センターは賛否ありますが、まあ、慣れてくると別に気にならないというか、逆にシステム側で便利につかえるようにどんどんなってきているので、今となってはなくなると不便な人も多いかもしれません。挙動は以前よりシステム環境設定の「通知」で変更はできますが、10.8では、コマンドラインから通知を出せなかったということがあります。しかしながら、それができるようになりました。スクリプトから通知ができます。

そのためのベースの機能は、AutomatorとApple Scriptでの通知のサポートです。それぞれ、次のようなアクションおよびコマンドが追加されています。display notificationコマンドはStandard Additionsにあるので、常に使えるものです。ご覧のように大量にパラメータがある…と思ったら、次のsayコマンドでした。パラメータは4つですね。

スクリーンショット 2013-10-23 13.44.59

スクリーンショット 2013-10-23 13.46.29

このdisplay notificationコマンドをosascriptコマンドで実行してやれば、コマンドラインから通知が可能です。たとえば、こんな感じです。osascriptコマンドの標準入力にAppleScriptのプログラムを送り込めばOKです。

echo ‘display notification “I am a command-line.”‘|osascript

上記のコマンドで、以下のような通知が出てきます。UTF-8での日本語もOKです。

4

パラメータを付けてみます。

echo ‘display notification “コマンドだ!” with title “Terminal” subtitle “ダークサイド”‘|osascript

5

 

通知センターでの表示は、システム環境設定の「通知」で、「AppleScriptエディタ」に対する設定となります。/bin/shとかいった項目が出るのではないということですね。

スクリーンショット 2013-10-23 13.59.29

ともかく、コマンドから通知を出せるようにできるようになるのはうれしいですね。

Mavericksでエネルギー消費をアクティビティモニタで監視

アクティビティモニタが少しすっきりした画面になっていますが、「エネルギー」というタブが追加されていて、エネルギー消費のインパクトになるものが分かります。簡単に言えば「電池を食うアプリケーション」を燻り出すツールでしょうか。

スクリーンショット 2013-10-23 12.50.36

ここでApp Napの列を見ると、App Napの状態に入っているかどうかを確認できるようです。刻一刻と変化するので、「対応しているか」ということではなく、App Napの状態かどうかを示していることになります。

App NapはAppleのサイトよると、バックグランドにあるアプリケーションのCPU使用をぐっと減らしてバッテリーの消費を伸ばすという仕組みです。パフォーマンスも少しは向上するかもしれませねんが、背後で作業をする場合には普通に作業するので、パフォーマンスの向上はわずかになるでしょう。

Appleのサイトでも唱われているSafariの効率化で、背後に回ったタブもApp Napの対象になるとなっています。つまり、Safariのタブは1つ1つ別のプロセスになっているので、事実上、タブ1つが1つのアプリケーションのようなものと思ってもいいでしょう。それらが、別々のプロセスで見えていて、表示していないページの一部はApp Napが機能します。ただし、全部ではないようです。

スクリーンショット 2013-10-23 12.56.42

 

一方、ChromeもGoogle Chrome Rendererというプロセスがアプリケーションの子プロセスになっているので、ページごとに別々のプロセスが描画を担っているようです。しかし、ChromeのRendererは単独でApp Napには入らず、アプリケーション自体だけが背後に回ったときにApp Napに入るのみです。アプリケーションがApp Napに入り、子プロセスがそうでない場合、子プロセスも省電力動作をするかどうかは判断できないところですが、実行機会はすべてのプロセスが持つのですから、親がApp Napだと子供もApp Napということではないと思います。

となると、やはりSafariの方がChromeよりもエネルギー効率は高いのかもしれませんが、よく考えると、ブラウザの種類に限らず、バッテリーを長持ちさせたいのならブラザの余分なウインドウを閉じる方が効果は高いということでしょう。また、使わないアプリケーションも落とすというのが基本ですね。

アクティビティモニタを見ていると、末尾にグレーのアプリケーションがあります。起動しているものもありますが、起動していないものもあります。App Storeアプリケーションがそうなのですが、これはもしかすると、アプリケーション自体が監視のためのデーモンを動かしていることの印なのかもしれません。また、この一覧には原則としてアプリケーションとその子プロセスが見えています。つまり、デーモンはApp Napとは関係ないという事でしょうか(だからAppか!)。

ヘルプを見ると、「高性能 GPU 必要」という項目もアプリケーションごとに出るようで、複数のグラフィックカードがある場合に、高パフォーマンスGPUを使用する必要があるかどうかを示すようですが、私のMacBook Air 2012ではこの列は出せないようです。「表示」メニューの「表示項目」では選択できません。

開発関連の情報を見る限りは、「App Napを有効にする」みたいなフラグがアプリケーションにあるわけではなく、Cocoa Frameworkを使ったアプリケーションには適用されるようなシステム機能と言えます。バックグランドでなるべく何もしないとか、タイマー処理の間隔を広めに取るなどの対策をすることで、よりApp Napに入りやすくなるということのようです。ただ、手元にある比較的古いアプリほど、グレーになっていたりするので、単にCocoaということではなく、一定以上あたしいフレームワークでビルドしないと、App Nap適用されないのではないでしょうか。

[Mavericks] AppleTVデスクトップ拡張でサウンド切り替えに困る

(追加情報)もっと簡単な方法がありました。末尾に追加しました。

OS X Mavericksで便利になった点にAppleTVにAir Playで画面を送る事ができることです。ミラーリングなら前からできましたが、デスクトップを広げる拡張先として、Air PlayのApple TVを使えることです。拡張ディスプレイを、いわばワイアレス接続できるわけです。外部のディスプレイを追加するためにUSBのアダプタを買ったのですが、このアダプタは使わなくなってしまいました。ちなみに、アダプタのUSBドライバはMavericksでは互換性がないとしてメッセージが出てはじかれているので、使えなくなってしまいました。

いずれにしても、Apple TVをAir Play対応にして、Macとペアリングすると、Apple TVをディスプレイとして利用できます(詳しい方法はきっと多くのサイトで紹介されているでしょうから省略)。メニューバーでAppleTVを選択すれば、少し待つと切り替わります。トラフィックの少ないワイアレスネットワークならそこそこ使えますが、せっかくなので、AppleTVもEthernetでつないでしまいました。表示に関する遅れはほとんど感じませんが、時々、微妙な表示途中の状態がチラっと見えることもあります。

pic2

システム環境設定の「ディスプレイ」を見ると、以下のような感じです。このAppleTVは、3rd Generationつまり現行機種です。外見がまったくそっくりな2nd GenerationのApple TVだと、最大解像度が720pまでだったので、Macのディスプレイとして使うためにAppleTVは買い直しました。とは言え、2nd Gen.の方はリビングで使っています。

pic3

こうしてUSBアダプタを使わずに、ネットワーク接続で「画面が広くなる」ということを標準機能だけで実現できるようになったわけです。ただ、ログインの度にApple TVへの接続を手作業でやらないといけないですが、まあ、それくらいはいいとしましょう。起動の度、つまり、毎朝、Apple TVを選択する事になります。

しかしながら、Air Playの送信先を切り替えるため、画面だけでなく、サウンドの出力先も同じApple TVに切り替わってしまいます。私が持っているいちばん音がいいのは、USB接続している初代のSoundSticksなんですが、音を鳴らしながらApple TVに接続すると、サウンドの出力先はSoundSticksから勝手にApple TVに切り替わります。「勝手」じゃなくて「仕様だ」といわれそうな気もますが不便です。なお、Apple TVからさらにAir Playで別のスピーカーを選択していても、Apple TVのサウンド出力、つまりHDMIケーブルで出力された先のディスプレイ等で音が出てきます。Air Playのカスケードはできないということですね。

そこで、Apple TVに切り替えた後、SoundSticksに切り替えたいわけですが、サウンドの出力先の切り替えはシステム環境設定を使う必要があります。メニューアイコンでの切り替えができません。それで、ちょっと不便だなーと思って、メニューアイコンで出力先を切り替えられないか、フリーソフトをあさって見ました。いっぱいあるのですが、比較的シンプルそうなのはこれらです。

SoundSourceは、Mavericksでは起動しませんでした。また、開発元のサイトでもリストアップされていないので、開発はやめているのかもしれません。Audio Switcherは2010年とやや古いのですが、Marvericksでも起動でき使えています。ただし、署名されていないアプリケーションなので、システム環境設定の「セキュリティ」の設定によっては起動しないかもしれません。いずれもアプリケーションなので、利用するには単にダブルクリックだけです。ログイン時に常に使いたい場合には、システム環境設定の「ユーザとグループ」にあるログイン項目への登録を自分で行います。

起動確認できたのは最初の2つで、左側がSound Switcher、右側はVTAudioSwitchです。Sound Switcherは、入力の切り替えができる点と、Preferencesから起動時に選択する項目を指定できることです。出力先の変更はどちらもできますね。右側のVTAudioSwitchはショートカットが割り当てられていますが、アプリケーションのショートカットと当たるのであまり当てになりません。

pic1

ということで、サウンド切り替えもメニューバーからできるようになり、手作業が必要だとは言え、システム環境設定を呼び出すより手軽です。

純正機能でサウンドの出力先を変更できる

標準の機能でできないと思っていたら、メニューバーにあるサウンドのアイコンをoptionクリックしてできることを教えていただきました(ありがとうございます>Miyuki Imaizumi)。左が通常の状態ですが、optionクリックすると、入出力の選択ができますね。悩む必要がなかった(笑)。

2

Byte誌を創刊した人が亡くなられたという記事を読み…

PragPubの最新号(Oct 2013)を読んでいたら最後のページに訃報が掲載されていた。Wayne Green、1975年にBytes誌を創刊、いっしょにビジネスをしていた元妻と即トラブって後々の同誌の栄光時代はともに歩んでいないとはいえ、PragPubはMr.Greenの最大の功績としてByteの創刊を挙げている。日本だと、私と同世代を中心に「日経バイト」の読者も多いだろうし、その隣の編集部で私は何年か過ごしただけに関係者とも今でもFacebookでつながっている。日本で発行する遥か前に関わった人ではあるけど、こうして雑誌で紹介されるのは、Byte誌の存在感はすでに廃刊している今も大きいということだ。

日本で日経バイトが発行されたのは80年代、私は高校→大学→就職→転職とめまぐるしい10年だったが、コンピュータ雑誌は情報を得る最も先端的な手段だと皆が思っていた。研究室では当然ながら誰かが買って来た1冊を回し読みをする。みんなお金がないので、特定の雑誌を買っている研究室にわざわざ読みにも行く。そんな研究室で、日経バイト購買担当は自分だった。「日経バイト」を読んでいたら、コンピュータに疎い同級生が「いいの載っているか?」と聞いてくる(そのバイトやない…)。「すごいよー」と言って見せると、ひー!と言いやがった。その日経バイトの翻訳記事でMacintoshはよく掲載されていた。毎日自分が見ているコンピュータのあまりの違いにショックであり、すごく高価だけどアメリカではこんな先を走っているのかと印象付けられた。そして現在がある。

出版や雑誌の存在感が大きな時代は、もはやなつかしいものになった。そんな時代に短いながらも出版社で雑誌を作る仕事ができたことは、得難い経験になった。自分のキャリアのベースはそこにある。雑誌は特にチームプレイであり、「映画を作るような熱狂」(映画を作った事はないので想像だけど)を年がら年中やっていたような高揚感があったことを思い出す。時代は移り、インターネットの発展でメディアの立ち位置は大きく変わったが、Byte誌という言葉を聞くとなんだかワクワク感が戻ってくると同時に、はるか昔のさまざまなことを思い出させてくれる。Mr.Green、享年91歳。

ディスプレイを追加

そういうわけで、BenQの24インチGL2450、USB to HDMI Adapterが到着して、こんな状態になりました。写真がヘタですみません。右が、AppleのLED Cinema Display 27″、左がBenQの24″、右端はMacBook Air、左端はiPad 3rdです。AppleのDisplayの下にはNexus 7とCloud Communicatorなんかもあります。アダプタのドライバは古いものしか製品にはなかったのですが、こちらから最新版がダウンロードできました。

IMG_0018

それで、大画面2台の見え方がけっこう違います。当然、Appleの方がきれいなんですが、まあ、そいういう用途ではなく、ドキュメントなどを開いておくためのものなんで、あまり気にはしていません。ただ、BenQの方はまぶしい…。輝度0にしても、まだまぶしいです。

最初、「システム情報」のシステムレポートで見てみると、2項目は見えたのだけど解像度がおかしいと思ったのですが、ここに見えるのは、MacBook Airのディスプレイチップから接続されている、内蔵の液晶パネルと、Cinema Displayだけのものでした。小さい方の解像度は内蔵ディスプレイです。

ScreenSnapz001

アダプタ+BenQは、システムレポートとしては、USBのカテゴリにしか見えません。これは、「システム情報」がUSBアダプタのディスプレイなどには対応していないということですかね。

スクリーンショット 2013-02-19 11.44.57

 

大画面が2枚欲しい

今の私のメインマシンは、MacBook Air 11″(2012) + Apple LED Cinema Displayです。ディスプレイは前の機材の頃から使っているのです。この数年、だいぶんと視力が悪くなってきて、画面の文字を大きめにしています。XcodeはPresentationの設定がちょうどいい。ということで、大画面でも文字を小さくすると、実質的に「狭い」わけで、ディスプレイの追加を考えました。

AppleのThunderbolt Displayだと2台接続ができるらしいけど、Apple LED Cinema Displayは2台のうちの1台になれないらしい。1台8万円超のディスプレイを2台買うと、いいお値段であり本体より高い。これがいちばん理想的なんだろうけど、ちょっとぜいたくかな。

で、MacBook Airは、Apple製品以外に外付けディスプレイを複数使う方法がないかと思ったら、USBアダプタでどうも可能なようです。まず、これが1つ選択肢。メモリをたっぷり搭載しているので、そんなに重くはならないと思われますが、メーカ保証はないというところ。

別の選択肢は、iPadでAir Displayを使って、iPadからディスプレイにつなぐこと。これを2台目の外付けにするということです。ただ、これはいいアイデアだと一瞬思ったのですが、iPadにディスプレイアダプタをつけたら充電ができない。となると、毎晩、作業が終われば充電のためにつなぎ変えないといけないってことになりますね。さらに、Air Display + Apple TVという回りくどい、けど、ノンケーブルみたいなことを一瞬考えましたがどうだろう。なお、この方法だと、解像度が1080pになるけど、ドット数的にどこまでいけるかですね。直接接続の場合はいいとして、Apple TV経由だと解像度が中途半端になりますもんね。

外付けディスプレイは、Dellの24インチが2万円を切っているけど、21〜24インチだと、量販店でも2万円前後とそんなに高いものではないです。つまり、Apple製品でなければとりわけ安い。ということで、please give me your advices.