カテゴリー別アーカイブ: Mac

MacでChrome拡張「FastestTube」が使えなくなったので、使えるようにした。

YouTubeの動画をダウンロードするChrome拡張FastestTubeが2月下旬あたりから使えなくなった。
理由は開発者のFacebookに掲載されているが、どうやらChromeのブラックリストに掲載されてしまったらしい。

回避方法が同じくFacebookに掲載されていたので、行ってみたところ、問題なく適用できたのでその方法をメモする。
なお、7Zipというアプリを使うので、手順中でWindowsを使った。
crxファイルを展開できるアプリがあればMacでもいいんだけど、ちょっち見つかっていない状態。


  1. FastestTubeのcrxファイルをダウンロードする
    公式ページから入手可能なので、crxファイルをダウンロードする。
    スクリーンショット 2016-03-01
  2. WindowsPCにcrxファイルを移動させる
  3. WindowsPCに7Zipをインストールする
  4. 7Zipでcrxファイルを展開する
    普通のフォルダになります。
  5. 展開したフォルダごとMacに移動させる
    2016-03-01
  6. Chromeで開発者モードでFastestTubeを読み込む
    Chromeを起動し、「設定」→「拡張機能」を開く。
    「デベロッパモード」にチェックを入れる。
    「パッケージ化されていない拡張機能を読み込む」をクリックする。
    移動したフォルダを選択し、「選択」をクリックする。
    スクリーンショット 2016-03-01

以上でFastestTubeが使えるようになる。
まぁ、あくまで回避方法ではあるけど、しばらくはこれで使おう。

スクリーンショット 2016-03-01

MacのBootCampでWindows10をインストール

最近、東方にハマり、とうとう原作「東方紺珠伝」を購入した。
ダメ元でVirtual Box内のWindowsにインストールしてみたが、とてもプレイできるような状態ではなかった。
そこで、止むを得ずBootcampでWindowsをインストールすることにした。
すぐにできるだろうと思っていたら、予想外に時間がかかったので、つまった部分をメモしておく。

・パ=ティションを分けるとエラーが発生

「ユーティリティ」→「Boot Campアシスタント」から
Windowsをインストールするパーティションを作成しようとしたところ、
「パーティションが作成できません」という謎エラーが発生した。
ここでエラーが発生するとは露にも思っていなかったので、色々と試行錯誤した。

・Macintosh HDのFileVault(暗号化)を解除

したほうが得だろうと、特に意味もなく暗号化をしていた。
しかし、これが原因でパーティションが区切れなくなる場合があるそうだ。
参考: http://php-fan.org/impossible-partition-disk.html
よって、
「システム環境設定」→「セキュリティとプライバシー」→「FileVault」→「FileVaultを切にする」
で暗号化を解除した。
解除にはしばらく時間がかかるが、プログレスバーが表示されるので気長に待つと解除が完了する。

しかし、僕の環境の場合はこれだけでは解決しなかったので、次に進んだ。

・Macintosh HDディスクを修復する

HDDの中で連続した空き容量が確保できていない、もしくはアクセス権がおかしくなっている箇所があると
パーティションが分けられない場合がある。
そこで、Macintosh HDを修復することにした。
通常ではMacintosh HDは修復できないので、リカバリモードから実行する必要がある。

1. Macをシャットダウンする
2. 「command + R」を押下したまま電源を入れる
3. メニューが表示されたらボタンを離し、「ディスクユーティリティ」を選択する

以上でMacintosh HDも修復できる状態でディスクユーティリティが起動する。
ここで、Macintosh HDを選択し、「First Aid」を実行すると、いくつかエラーが見つかり、修復が行われた。
なお、ここで「修復できませんでした」と表示されたが、何度も実行していると少しづつ進み、最終的には修復することができた。
何回も実行して良いのか分からないが、修復は1度エラーが発生したらそこで操作を終了してしまう仕様らしいので、何回もやればうまくいく可能性もあるんだとか。
ソースは忘れた。自己責任でお願いします。

修復後、再起動し、Boot Campアシスタントからパーティションを分けると、無事成功した。
Windows10をクリーンインストールし、Visual Studio、東方紺珠伝、そして自宅サーバーのHyper-V Server管理に活躍している。
Windows10、俺は好きなんだけど、やっぱり互換性の問題とかで評判悪いね。
あと、妙にアプリのタイトルバーが大きくなるんだけど、これはBoot Campのせいなのかね。
不便ではないのだけど、フォームアプリ作っているとサイズがおかしくなってちょっと嫌だ。

MacでScriptを定期実行する方法

以前、Macでファイルを定期的にバックアップする設定で、
Scriptを定期実行するために、Macの標準カレンダーを使って擬似的に実現していた。
だけど、本当ならcronとか、まともな方法でやりたい。

Macではcronでなくlaunchdというものが推奨されているようなので、
これで実行するように仕込んだ。

上記のようなファイルを
/Users/UserName/Library/LaunchAgents
に保存し、ターミナルから以下のコマンドを実行する。

以上でタスク登録完了である。
タスクの登録状況は以下のコマンドで確認できる。

(本当は実行権限とか色々あるけど俺の使用範囲ではないので割愛します)

ただ、launchdはイチイチコマンドでやるので分かりにくい。
GUIで使えないのかな、と思っていたが、Lingonというツールがあった。
タスク内容の編集には有料ライセンスが必要だが、内容の確認は無料でもできる。
むしろLingonでタスクの内容を確認し、そのplistファイルを見比べることでplistファイルの書き方を勉強することができたのが、自分にとって大きな収穫だった。

参考
OS XのLaunchdデーモンをGUIで編集できるMac用ユーティリティ「Lingon X 2.0」を使ってみた。
launchdをcronの代わりに使うための簡易メモ
launchd.plistの書き方


Windowsならタスクスケジューラで一発なんだけどな。
Macはシステム的なことは極力見せない方針っぽいし、今後も実装される予定はないだろうな。

MonoでC#のコンパイル

C#で簡易的なツールを作ったとき、Xamarin Studioとかでコンパイルはできる。
できるが、ソリュージョンとして作るほどのものでもないしなぁ・・・ということが多い。

コマンドからMonoでコンパイルできないかな、と思ったら案の定できることがわかった。

ちなみに、参照追加が必要なコードの場合はオプションで追加できる。
例えば、僕はSystem.Xml.Linqをusingするコードをコンパイルしたかったので、以下のようにした。

何という内容の無さ。

Macでファイルを定期的にバックアップする設定

僕はiTunesのメディアファイルを始め、動画、画像ファイルを全て外付けのHDDに保存して管理している。
昔はNASだったんだけど、引っ越してから無線の速度が遅くなったので単純な外付けHDDに回帰した。

で、それはいいんだけど、最近ファイルが壊れていたりすることに気付いた。
古いHDDのせいだろうか。
幸か不幸か、大して重要じゃないファイルなのでよかったが、流石にこの大容量の資産にバックアップがないこの状況が少し怖くなってきた。
今までもたまに気が向いたときに別の外付けHDDにバックアップを取ったりしていたが、気が向いた時だけじゃ心もとなさ過ぎる。
バックアップを毎晩、自動実行しようと思うに至った。

で、Windowsのようにrobocopyコマンドを使おうとしたけど、当然Macにはrobocopyなんてコマンドは無い。
その上、定期実行しようにもWindowsで言うタスクスケジューラが無い。Windows脳の僕はこれで少しパニックになった。

そんな色んな障害を乗り越えた(乗り超えるほど大きい壁じゃない)作業メモを残そうかなと思う。
なお、前提として僕はシェルスクリプトなんて書いたこともない素人である。
cron?良くワカンネ」というレベルである。
実際、良くわからなくて今回使わなかった。今度また挑戦する。


1. バックアップを行うコマンド(シェルスクリプト)を書く

最悪手動でも、バックアップを1クリックで行えるコマンドファイルを作成できれば、
Macでバッチファイル的なものを作成する
のようにして1クリックバックアップシステムが作れるはず。
まずはバックアップを行えるようなコマンドを探した。

2秒で見つかった。

rsync

差分更新まで行ってくれるイカした奴。
僕の望む同期の形を考え、以下のようなオプションを設定した。

-a…元の権限を保持する
-t…元のタイムスタンプを保持する
-u…追加、更新されたファイルだけをコピーする
-v…処理中の経過ファイルを表示する(後述のログ出力のため)
–delete…コピー元にないファイルがコピー先にあった場合、削除する

要するに、バックアップ元と寸分たがわぬ構成をコピーする、という趣旨だ。
それで、最初は単純に以下のような1行コマンドで済ませていた。

だけど、あんまり好きじゃない点が一つあった。
Macで外付けHDDに接続した場合、”.”から始まる不可視ファイルが作成されるが、これらまでバックアップ先にコピーされてしまう。
なので、バックアップ元の外付けHDD内の通常フォルダのみに対してrsyncを行うようなコマンドに修正した。
ついでにrsyncの出力をログとしてファイルに残すようにした。

これでバックアップ元HDD直下のフォルダについて、全てバックアップ先にコピーされる。
ただ、上記スクリプトの欠点は、バックアップ元HDD直下にスペースを含むフォルダが有る場合、上手く動作しないことだ。
つまり、”test folder”というフォルダがあると、”test”と”folder”という2フォルダと認識されてしまう。
工夫すればどうにでもなると思うけど、スクリプトをシンプルにしたかったのでこのままにしておいた。
工夫する知識も気力も無いです。

2. シェルスクリプトを定期実行する

さて、スクリプトはできたが、定期実行はできるのか。
ちゃんとやるならcronやlaunchで設定するのが良いらしい。
でも、よくわからないので、原始的な方法を採った。
Macの標準カレンダー(旧iCal)とAutomatorを用いる方法だ。

MacのAutomatorで新規作成を行う。
書類の種類は「カレンダーアラーム」にする。(アプリケーションでも良い。その場合は後述の設定が必要)
アクションで、「ユーティリティ」→「シェルスクリプトを実行」を選択する。
上記のスクリプトを記述し、保存する。

以上により、Macの標準カレンダーにイベントが登録される。
時刻や繰り返しの設定を適宜変更すれば、定期タスクの設定が簡単に可能だ。

ちなみに、「カレンダーアラーム」でなく、「アプリケーション」を作成した場合、appファイルが作成される。
このappファイルを開くと、シェルスクリプトが実行されるので、後はこのappを定期的に実行するように、手動で標準カレンダーに登録すれば良い。
カレンダーで普通にイベントを追加し、
「通知」→「カスタム」を選択する。
初期状態では通知が「メッセージ」となっていると思うので、ここを「ファイルを開く」にする。
ファイルの種類がカレンダーになっているので、ここで「その他」を選択し、先程のappファイルを選択する。
2015-03-02 22.53.29
ちなみに、GoogleカレンダーやiCloudのカレンダー等、クラウド上のカレンダーではこの通知の設定が保存されなかった。
未検証だが、クラウド上と動機する過程で「ファイルを開く」通知が消えてしまうのだろう。
ローカルのMac上のイベントとして設定したほうが確実だ。

後は時刻や繰り返しを設定することで、定期的にスクリプトが実行できる環境が完成する。

基本的に「カレンダーアラーム」で設定したほうが簡単だと思う。
ちなみに「カレンダーアラーム」で作成した場合、そのappファイルは以下の場所に保存されている。
/Users/UserName/Library/Workflows/Applications/Calendar
appファイルを常に手元においておきたい場合は「アプリケーション」で作成するのもありだと思う。

・参考にしたページ
rsync – 高速なファイル同期(バックアップ) – Linuxコマンド
iCalで指定時刻にアプリを呼び出す
【Linux】bashで指定したディレクトリ内のファイルを取得する
lsでディレクトリのみ,ファイルのみ,表示する


追記(2015/05/30)

定期実行でカレンダーを使うのは負けた気がしてきたので結局launchdを使うことにしました。
MacでScriptを定期実行する方法

Monoのアンインストール方法

さて、前回書いたように、Monoがインストール済みの状態ではHomebrewの導入が上手くいかない。
そこで、Monoのアンインストール方法を備忘のためにメモする。

以下のスクリプトをターミナルで実行する。
その際、管理者権限で実行する。
この「管理者権限で」というのが英語の読めない僕は気付かなかった。

ターミナルで管理者権限、即ちrootユーザーになるには、suコマンドを実行すればいい。
もし一度もrootユーザーになったことがないなら、以下の操作を行う。

  1. ターミナルでsudo passwd rootを実行する
  2. 「Changing password for root.New password:」と表示されるので、rootにログインするためのパスワードを設定する。勿論任意のパスワードで良い。
  3. 「Retype new password:」と表示されるので、同じパスワードを入力する。
  4. 「su -」を実行する。
  5. 先ほど設定したrootのパスワードを設定する。
  6. カーソル左の「$」が「#」に変わったら管理者権限への変更完了。

この状態で、上のスクリプトをコピペして実行すればMonoのアンインストールができる。


最近、プロジェクト管理ツールの「asana」が割と気に入っている。
使いやすい。その一点だけで素晴らしい。
しかも軽い。
仕事で使ってたけど、個人用でも使おうか考えている。

Homebrewを入れたという日記

今更というべきか、Macにパッケージ管理ソフトのHomebrewを入れてみた。
まぁ、一年前までは「そもそもパッケージ管理ソフトってなんだよ」って感じだったのにね。何だか不思議。
パッケージ管理ソフトってのは、簡単に言うとソフトのインストールやアンインストールを簡単にできる凄いやつ。
だいぶ違うけど、例えるならMacAppStoreみたいなもん。
だけど、CUI、つまり「インストールボタンをクリック・・・」とかじゃなくて、コマンドを打ち込んで操作するところがかなり違う。
例えば「brew install 超ウルトラすごいアプリ」って打ち込むと”超ウルトラすごいアプリ”がインストールされるのだ。
いちいち「アプリのHPに行って、インストーラをダウンロードして・・・」みたいなのが一気に省略できるのがいいところ。

で、そのHomebrewを導入するには以下の2条件が必要。

  1. Javaがインストールされている。
  2. Xcodeがインストールされている(正確には違うけど)

自体のインストールは凄く簡単。
HomebrewのHP(http://brew.sh/index_ja.html)に行き、画面最下部にあるコマンドをMacのターミナルに張り付ける。

・・・そんだけ!

この導入しやすさが流行っている秘訣なのかな。

インストール後はターミナルで”brew doctor”コマンドを実行することで、正しく動作するか確認することができる。
ちなみに、僕は何回やっても正しくインストールできませんでした。
理由はMono(C#や.NETをMacやLinux上で動かせるやつ)が入っていたから。
こいつをアンインストールすることでHomebrewを正しくインストール出来ました。
(実はそれに少し苦労したんだけど、それは別の機会に)
ちなみに、Mono自体はHomebrewからインストールすることは可能です。
なので、Monoをアンインストール→Homebrewをインストール→HomebrewからMonoをインストール、というプロセスでHomebrewとMonoの共存は可能です。

・・・まぁ、導入したところで必要なアプリはあらかたもう入っているので、使う機会無いんだけどね。
今度クリーンインストールしたときにフル活用しよう。

Macでバッチファイル的なものを作成する

仕事上、Windowsのbatファイルを作成することがよくある。
パソコンをまともに触るまではコマンドラインすら使いもしなかったが、
意外といろんな操作を自動化できて楽しい。
で、batファイル的なものをMacでも作ろうかと思ったが、意外と落とし穴があったのでメモ。


  1. シェルスクリプトで実行内容をテキストに記述
    以下の様なスクリプトを任意のテキストエディタで記述する。

    このとき、改行コードをUNIX(LF)にする。
    そのため、テキストエディタは何でも良いが、改行コードを設定できることにすること。
    記述したら、このファイルの拡張子を”.command”として保存する。
  2. ターミナルからコマンドファイルの実行権限を付ける
    上記のファイルをそのまま実行しようとしても、「適切なアクセス権限がないため実行できません。」となり、実行できません。
    そこで、ファイルを実行できるようにアクセス権を設定します。

    1. ターミナルを開き、先ほど作成したファイルを保存したディレクトリに移動する。
    2. 以下のコマンドを実行し、実行権限を付ける。

後は.commandファイルを実行するだけでターミナルが開かれ、記述した操作内容が実行される。
実行後、ターミナル画面がそのまま残ると味が悪いので、終了後画面が閉じるようにターミナルを設定すると良い。

  1. ターミナルから、「ターミナル」→「環境設定」を開く
  2. 「設定」→「シェル」タブで、「シェルの終了時」を「シェルが正常に終了した場合は閉じる」にする

以上。
僕はC#で作ったファイル整理系コンソールアプリをmonoで実行させるのによく使っています。
コマンド内容は以下の通り。


来月には帰国できる・・・はず。