Mac起動時に自動的にBluetoothテザリング接続するようにしてみた

Bluetoothテザリングに接続するのがめどい

私はほとんどの作業を出先かつMacBook Air上で行っており、インターネット環境をiPhoneからのテザリングで賄っています。

そのため、AppleScriptで簡単に接続できるようにしました。

しかし、しょせん手動なので、それすらめどくなってきました。そこで、ログイン時とスリープ解除時に自動的に接続できるようにしてみました。

以下Yosemite前提。

一発でBluetoothテザリングに接続するAppleScriptを用意する

改めて全体を掲載。以下記事から大半を流用しています。

(2015-01-02修正)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
on split(sourceText, separator)
if sourceText = "" then return {}
set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to {separator}
set theList to text items of sourceText
set AppleScript's text item delimiters to oldDelimiters
return theList
end split
on number_from(str)
try
str as number
on error
str
end try
end number_from
--click_menu_extra("AppleScript/Script Editor Scripts/About these scripts...")
--click_menu_extra({"AppleScript", "Script Editor Scripts", "About these scripts..."})
on click_menu_extra(menu_path)
if menu_path is "" then
error "menu_path が入力されていません。"
end if
set mp to split(menu_path, "/")
tell application "System Events"
tell process "SystemUIServer"
set frontmost to true
click (menu bar 1's first menu bar item whose attribute "AXDescription"'s value is (mp's item 1))
repeat with i from 2 to mp's length
click (result's menu 1's menu item (my number_from(mp's item i)))
end repeat
delay 0.1 --連続してメニューを操作する時、ひと呼吸必要
end tell
end tell
end click_menu_extra
tell application "System Events" -- Wi-Fiがオフであるか?
tell process "SystemUIServer"
exists (menu bar 1's first menu bar item whose attribute "AXDescription"'s value is "Wi-Fi、Wi-Fi が有効になっていません。")
end tell
end tell
if result is true then -- Wi-Fiがオフの場合のみ
click_menu_extra("bluetooth/mmiPhone/ネットワークへ接続")
end if

本当は以下も含めるべきですが、めどいのでとりあえず省略しました。どうせiPhoneのBluetooth&インターネット共有は常時オンだし。

  • Wi-Fi/PPPoE接続の有無確認
    • →Wi-Fiオンオフ確認を追加(2015-01-02)
  • iPhoneのインターネット共有をオンにする

ログイン時に自動実行

スクリプトエディタを使ってアプリケーション形式(.app)で書き出し(osacompileでもいいけど)、ログイン項目に登録します。

なお、メニューバーにBluetoothアイコンが表示される前に実行されて失敗するパターンがある(のか?)ので、先頭にdelay 20とか入れておくといいかもしれません。

「システム環境設定>ユーザとグループ>(ユーザを選択)>ログイン項目」で「+」をクリックして上記アプリケーションを選択。

さらに、補助装置へのアクセスを許可する必要があります。「システム環境設定>セキュリティとプライバシー>プライバシー」でカギをクリックしてログインパスワードを入力、「+」をクリックして上記アプリケーションを選択。チェック。

(2014-12-31訂正)

作成したアプリケーションを編集すると、補助装置へのアクセス許可がリセットされるようです。編集した場合、再度上記の方法でチェックする必要があります。

スリープ解除時にも自動実行

SleepWatcherを利用します。

私はHomebrewでインストールしました。

1
$ brew install sleepwatcher

基本的な設定方法は上記記事を参照していただくとして。

plistの内容はこうしました。スリープ前の処理が不要なので削除してあります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>de.bernhard-baehr.sleepwatcher</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/sbin/sleepwatcher</string>
<string>-V</string>
<string>-w /Users/catfist/scripts/AfterWake</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>

AfterWakeスクリプトは、さっきのAppleScriptをまんま実行します。

1
2
3
4
#!/bin/bash
osascript << _EOB_
(以下略)
_EOB_

さっきのAppleScriptを実行するだけですね。別にこんなんでもいいのですが、

1
2
#!/bin/bash
osascript ~/Library/Scripts/BluetoothConnect.scpt

うっかりスクリプトファイルを削除しても動くように、全部書いちゃいました。

ちなみに、こんなんはなんかうまくいきませんでした。

1
2
#!/usr/bin/osascript
(以下略)

これで、ログイン時&スリープ解除時に自動的にBluetoothテザリングに接続します。

Alfred2の謎キーリマップ現象について色々調べてみた

Alfred2の謎キーリマップ現象

以前記事にしましたが、Alfred2(Powerpack入り)起動中に、「⌥⌘]」が「⌘C」にリマップされるという不具合がありました。

この問題がYosemiteでも引き続き発生したので、少し本気出して調べてみました。

すでに判明している条件は以下の通りです。

  • Alfred2でのみ発生(Alfred1では発生しない)
  • Powerpack有効時のみ発生
  • アクティブなアプリを問わず発生

試したこと一覧

  • 他の常駐アプリとの干渉ではないか?
    • その他の常駐アプリを全て終了させた状態でも、同様に発生しました。
  • IMEとの関係はないか?
    • ことえり、Google日本語入力、かわせみ2の、英語および日本語入力モードの全てで発生。
  • 自分でリマップしたらどうか?
    • Karabinerで「⌥⌘]」を「⌥⌘]」にリマップしたが、「⌘C」になる。

なおKarabinerのprivate.xmlはこんなん。(MacBook Air JISキーボード)

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
<root>
<list>
<item>
<name>Alfred2 Bug measure</name>
<identifier>alfred2.bug.measure</identifier>
<autogen>--KeyToKey-- KeyCode::JIS_BRACKET_RIGHT, VK_COMMAND, VK_OPTION, KeyCode::JIS_BRACKET_RIGHT, VK_COMMAND, VK_OPTION</autogen>
</item>
</list>
</root>

どうしようもありません。リマップ先が頻出もいいところの「⌘C」だというのがまたどうしようもなく、「⌘C」を「⌥⌘]」にリマップするわけにもいきません。

というか、改めてぐぐってみても私以外の発生例が見当たらないんですが。どう考えても環境依存だろ、なんなんだこれ……。

(2014-12-27追記)ついに原因判明

きっかけはある古いツイートでした。

どう考えてもコレだーーーーー!

というわけで、言語環境を英語のみにして再起動してみました。すると、見事に⌘⌥]が利くではありませんか!

よーし、じゃあ改めて言語環境に日本語を追加して→再発

はい、100%再現でした。言語環境のリストに日本語があることが条件なので、入力ソースに日本語系を登録する場合回避不可です。一番上を英語にして、メニューバーとかが英語表記の状態でもアウト。

レポート送っておきます。

(2015-01-03追記)フォーラムで返信あった

When setting a hotkey, Alfred saves the keycode position provided by OS X (e.g. Cmd + Opt + the 6th key position in the top row of the keyboard) rather than Cmd + Opt + Y. As a result, if you change keyboard layout, the same position will work, rather than the same letter Y if it has moved on the different keyboard layout.

If the keys move around between your English and Japanese keyboards, set the key combination in the keyboard layout you use most frequently and remember the key position of your hotkeys :)

……えっ? えっ?

全く意味が分からないのでいろいろ検証中。

(2015-08-20追記)なんか解決した

しらんうちに解決していました。全く理由がわかりません。

2.7のこの部分でしょうかね?

Workflow Improvements

  • Track keyboard layout changes for Alfred dispatched keycodes, making commands more reliable

Alfred Workflowで引数の入力を促す

引数の入力を促したい

YosemiteでSpotlightの強化などがありつつも、やはりAlfred Workflowの便利さには変え難く、相変わらずAlfredばかり使っています。

で、Alfred Workflowにおいて、Script Filterを利用して、入力テキストの内容によって処理を変えたりすることがあります。

この場合、キーワードに続くテキストの一部がオプションになるわけですが、WorkflowとしてはArgument Optionalであっても、オプションによってはArgument Requiredにしたいことがあります。

例えば、catfist/Alfred-MyHexoの場合、hxコマンドのオプションがb/nの場合はタイトル入力が必須となるため、通知センターで警告を出すようにしていました。

しかし、どうせ入力必須なら、すぐにAlfredを開いて入力を再開したいところです。

というわけで、少し改良

従来の引数がない場合の処理は以下の通りです。

1
2
3
4
5
if [ -z $arg ];then # 入力テキストがない場合
echo -n "ERROR: Input title" # エラーを標準出力にエコーして通知センターに渡す
else # それ以外の場合
Create # Create関数を実行して記事ファイルを作成
fi

これを、以下のように改良しました。詳細は前回の記事をご参照ください。

1
2
3
4
5
6
if [ -z $arg ];then
echo -n "ERROR: Input title"
osascript -e "tell application \"Alfred 2\" to search \"hx$cmd \"" # Alfredを起動してテキスト入力を促す
else
Create
fi

これで、$cmd変数がb/nかつタイトル未入力の場合、通知を出しつつAlfredウインドウが起動して、タイトル入力をすぐ受け付けられるようになります。

Alfred WorkflowからAlfred Workflowを起動することで連続的に入力を受け付ける

Alfred WorkflowからAlfredを起動したい


ver. 1.2 - 無料( 仕事効率化 )
Running with Crayons Ltd

Alfred Workflowで、「何かを入力/選択」した後、さらに「リストから何かを選択」したい時があります。

実際にこのような処理をしているWorkflowとしては、ajgon/alfred2-html-entity-lookupなどがあります。

このWorkflowの場合、まず記号を入力し、次にエンティティの種類を選択すると、エンティティがクリップボードにコピーされます。

で、どうやっているかというと、「入口」のアクションと「出口」のアクションが、それぞれにキーワード付きで設定されており、「入口」のアクションからAppleScriptで、「出口」のキーワードを入力した状態でAlfredを起動しているのです。

具体的に

「入口」がRun Script(/usr/bin/osascript)またはAppleScriptアクションの場合、以下のようにします。

1
tell application "Alfred 2" to search "entity {query}"

このようなスクリプトにより、entity(キーワード)と{query}(引数)を入力した状態でAlfredを起動しています。

Run Script(/bin/bash)で置き換えると、以下のようになります。

1
osascript -e "tell application \"Alfred 2\" to search \"entity {query}\""

スクリプト文(-eに続く部分)全体をシングルクォートで囲ってもいいですが、変数を含める場合は、上記例のように、文中のダブルクォートをバックスラッシュエスケープする必要があります。

この方式の利点はなんといっても「出口」でScript Filterが使えることで、「インクリメンタルサーチからのインクリメンタルサーチ」とかが簡単にできます。

(2015-01-03追記)External Triggerを利用する

完璧に忘れてたので追記。

External Triggerとは、AppleScriptで指定のWorkflowアイテムを起動する機能です。

この機能を利用するためには、ふたつの前提が必要になります。

  1. Workflow自体にBundle IDが指定されている
  2. Workflow内のアイテムにExternal Triggerが連結している

構成例はこんな感じです。

スクリーンショット

Bundle IDは、「com.alfredapp.<作成者>.<WorkflowID>」というフォーマットが推奨されているようです。

External TriggerからWorkflow内のScript Filter/Keywordを起動すると、こんな感じで、キーワードなしで入力に移ることができます。

スクリーンショット

こちらのほうがフィールドが広く使えていい感じですね。

Yosemiteクリーンインストールした(始末編)

前置き

からの続き。ひと通りの環境構築を終え、平和を手にしたかに見えた世界だったが——!

始末1:Extended Attributes

こっちは軽いほう。

環境構築が終わったので、色々と作業に取り掛かろうとしたところ、ターミナルでファイルの作成や移動がうまくいきません。なんじゃらホイ、と思ってls -lして眺めていたところ、妙な表示に気がつきました。

要するにこれです。

Dropboxからコピーしたファイル・フォルダに、com.dropbox.attributesというExtended Attributesが付いていたのでした。素直に全部Gitでやれば良かった。

なんか気持ち悪いので、上記記事を参考に片っ端から削除していきましたが、やっぱりいろいろうまくいきません。

始末2:root権限

またls -lを眺めてみると、多くのファイル・フォルダの所有者がrootになっています。

以下のようにすると再現されます。

1
2
3
$ sudo touch sudo.txt
$ ls -l
-rw-r--r-- 1 root staff 0 12 19 21:51 sudo.txt

環境構築の際に、めんどくさがって区別せずにsudoで実行しまくったせいでしょう。このために通常のユーザ権限ではアクセスできない領域がおちこちに発生しているのです。

これを解消するには、所有者をrootから通常のログインアカウントに変更する必要があります。そのために、chownコマンドを用います。

これで片っ端から変更しまくって、ようやくまともに作業できるようになりました。再帰的実行の-Rオプションが助かる。

教訓:sudoは本当に必要なときだけ使う。

Yosemiteクリーンインストールした(実行編2:パッケージ管理システム)

前置き

からの続き。今回はHomebrew等のパッケージ管理システムによる環境構築です。

Homebrew+homebrew-file

まずは、Homebrew環境の構築です。

この時点ではiTerm2のインストールや.bashrcの復旧などが済んでいないので、素のターミナル.appで作業しています。

最初に、sudo必要な時に毎回やるのが面倒なので、sudo -sをしました。巨大な間違いでした。これについては後ほど。

本来は、何はともあれXcode commandline toolのインストールをすべきなのですが、すっかり忘れていました。あとでGit使うときにインストールしていい?と訊かれたのでインストールしてもらいましたが。

1
$ xcode-select --install

以下コマンドでHomebrewをインストールし、正常に機能することを確認します。

1
2
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew doctor

次に、homebrew-fileパッケージをインストールします。

1
$ brew install rcmdnk/file/brew-file

どうやらGitは最初から入っているので、そのままBrewfileをcloneします。SSH環境を作り直すので面倒だったので、httpsでcloneしました。

1
2
$ brew file set_repo catfist/brewfile
$ brew file update

これで全てのHomebrewおよびHomebrew Casksパッケージがインストールされるので、ボーッと待ちます。

……が、思いの他エラーで停止するので、途中から以下のようなコマンドを繰り返していました。

1
$ brew file update && say ok || say ng

これで、終わったとき/止まったときは声で教えてくれます。止まったら、brew file edit(Vimで開く)でBrewfileを修正します。

これで、私の場合、以下のパッケージ管理システム(みたいなもの)がインストールされます。あと、Dropboxですね。

  • rbenv
  • python(pip)
  • node(npm)
  • ghq

Dropboxから各種設定ファイルをコピー

まあこれは普通に。ただし、後で以外と厄介な問題が待ちかまえているのですが……。

この際、SSH関係のファイルもコピーしたのですが、これは別の理由があって、結局作り直しました。Dropboxに置いておくのは別に問題ないと思います。

Homebrew以外のパッケージ管理システムでインストール

まずは、シェル環境を復旧します。iTerm2のインストール&設定復旧は済んでいるので、次はdotfilesの復旧です。

私はDropboxからコピーしてしまいましたが、git cloneを強く推奨します。

1
2
$ git clone <dotfileリポジトリ> ~/dotfiles
$ ln ~/dotfiles/.bashrc ~/.bashrc

こんな感じですね。他にも.vimrcとか色々です。

ともあれシェル環境が整ったので、他のパッケージ管理システムを動かしていきます。

これはシェルスクリプトを作ってありました。こんな感じです。

RubyGemのインストールにsudoが必要なので、前述の通りsudo -sしたセッションで実行しましたが大間違いです。gem installコマンドにのみsudoを付けることを強く推奨します。

その他補足。

  • シバンに-vxオプションが付いているのは、進行状況をターミナルに表示させるためです。
  • Homebrew CasksでインストールしたアプリをAlfredで検索するには、brew cask alfred linkが必要です。
  • ghqのルートディレクトリを.gitconfigに追記していますが、.gitconfigが復旧済みなら要らないです。
  • Gitパッケージでインストールが必要なものは、サブプロセスでインストールしています。
  • Geeknoteで手入力によるログインが必要なので、通知を出して入力要求しています。sayもさせたほうがよかったですね。
  • RubyGemはHomebrewにもあるので、そっちの方が楽かも。

これで、大方の環境構築は完了したのですが……余計なことをしたツケを払うのにもう少し手間をとられることになります。

続く

次回は、2大やらかしの解決編です。

  • Dropboxからコピーしたディレクトリ・ファイルををls -lした時に、謎の@が!
  • なんかあちこちroot権限でしかアクセスできなくなってる!

Yosemiteクリーンインストールした(実行編1:OS Xアップデート)

前置き

からの続き。

前提条件

なお、ハードはMacBook Air (11-inch, Late 2010)です。

普段、MacBook Airのネット環境はiPhoneからのテザリングなのですが、さすがに転送量的にそれでアップデートするわけにはいきません。

また、自宅のWi-Fiルーターも死んでいるのですが、LANアダプタがあるので光回線に直結できます。

これでイケるやろー、と思って以下記事を参考に取り掛かったのですが……

あれ、PPPoE接続できないぞ。

OS Xインストール前にはPPPoE接続できない!

MacBook AirのPPPoE接続機能はOS Xが提供するものなので、ストレージを消去してYosemiteをダウンロードする際にはPPPoE接続ができません。

この状態で光回線に接続するには、別途ルーターを用意する必要があります。が、残念ながらそれがない。Time Machineで復元することは可能ですが、それは今回の趣旨に反する。

じゃあどうする。

別に、インストールするのはYosemiteじゃなくてよくない?

Snow Leopardをクリーンインストールした上でYosemiteにアップデートする

事前にYosemiteのインストールメディアを作成する方法もあるようですが、今回は楽してMacBook Air付属のSnow Leopardインストールメディアを利用しました。

これをUSBポートに接続し、以下記事を参考にストレージ消去の上インストールしました。

その後、Mac App StoreからYosemiteをダウンロードしてアップデート。

直接Yosemiteをインストールした場合と若干の違いはあるでしょうが、ほぼクリーンなYosemite環境が構築できました。(なお、Shellshock対応済み。)

続く

次回はある意味本題、各種パッケージ管理システムによるパッケージインストールについて書きます。

Yosemiteクリーンインストールした(準備編2:Dropbox同期)

前置き

からの続き。

全開はHomebrewを中心としたパッケージ管理システム関係の準備をしました。

今回できるだけクリーンな状態で環境構築したかったので、TimeMachineからの復元はしません。となるとアプリケーションの設定も保存する必要があります。

Sublime Textの設定だけはバージョン管理したいのでGitリポジトリにプッシュしましたが、その他のアプリケーションに関しては特に必要ないので、普通にDropboxに同期します。

実際に行った内容は以下の通りです。TextExpanderとか、何も考えなくても普通に同期してるようなのは除きます。

Alfred2

Powerpack導入済みの場合、設定をDropboxで同期することができます。

Alfredpreferences > Advanced > Set sync folder…

ここをクリックして、設定をDropboxで同期します。指定したディレクトリにsetting/Alfred.alfredpreferencesが保存されます。今回は、~/Dropboxを指定しました。

これにはWorkflowも含まれるため安心です。

iTerm2

Preferences… > General > Preferences > Load prefernces from a custom folder or URL:

ここをチェックすると、指定ディレクトリ以下にiTerm/com.googlecode.iterm2.plistが保存されます。今回は、Alfredに合わせて~/Dropbox/settingを指定しました。

XtraFinder

(メニューバーのXtraFinderアイコンをクリック) > ツール > 環境設定を書き出す

これでplistファイルが生成されるため、Dropboxに保存します。

BetterTouchTool

Preferences > Gestures > Export

これでエクスポートできるので、適当な名前を付けてDropboxに保存します。

ことえりユーザ辞書

Macの日本語入力システムはかわせみ2なので、ことえりというか、実質iPhoneのユーザ辞書。iCloud同期あるけど(同期死んでるので)念のため。

システム環境設定 > キーボード > ユーザ辞書

登録単語を全選択、ドラッグアンドドロップするとユーザ辞書.plistが生成されます。これ、毎度アホじゃないかと思う。

特にそういう機能のないアプリ

普通にコピーします。

かわせみ2

~/Library/kawasemi2/

Karabiner

~/Library/Application Support/Karabiner/

FoldingText

~/Library/Containers/com.foldingtext.FoldingText/Data/Library/Application\ Support/FoldingText

その他

~/Library/Preferences

ここから適当に。

そして間違いの第一歩:dotfiles/ブログ

ここでやめておけばよかったのですが、Gitの環境構築に手間取るかもと思い、念のためdotfilesリポジトリとブログデータ(Hexoプロジェクト/Gitリポジトリ)もDropboxに入れておきました。

これが後で微妙に厄介のタネになるのですが、それは後述。

続く

続いてはいよいよアップデート編です。ルーターがない時のTips的な内容になります。

Yosemiteクリーンインストールした(準備編1:パッケージ管理システム)

前置き

スーパー今更ネタですが。

Yosemiteじゃないと使えないアプリがちょこちょこ出てきたので、とうとうMavericksからアップデートすることにしたのですが、せっかくなのでクリーンインストールして環境の再構築をしようとしたらえらい時間かかりました。

やりたいこととしては、

  • 使ってないアプリをまるっと削除
  • MacPortが入ってるので全面的にHomebrewに移行
  • ついでに可能な限りHomebrew Caskに移行
  • ついでに入れたいパッケージをまとめてインストール

homebrew-fileでパッケージのリストアップ

上記のパッケージを利用します。

1
$ brew install rcmdnk/file/brew-file

まずはインストール。

BrewfileをGithubで管理するので、Githubにリポジトリを作っておきます。

Brewfileを新規作成します。

1
$ brew file init

リポジトリ名を聞かれるので、この場合はcatfist/brewfileと言っておきます。

すると、/usr/local/Library/catfist_brewfileにBrewfileができています。一部省略。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# tap repositories and their packages
## caskroom/cask
tap caskroom/cask
install brew-cask
## rcmdnk/file
tap rcmdnk/file
install brew-file
...
# Other Homebrew packages
install autoconf
install automake
install cmake
install cscope
install fontconfig
install freetype
install gettext
install git
...
# Below applications were installed by Cask,
but not corresponding casks were found.
#cask install Warning: nothing to list

この時点で、Brewfileにはインストール済みのHomebrewパッケージがインストールされています。

Homebrew Caskでインストールできるアプリのリストアップ

1
$ brew file casklist

このコマンドを実行すると、インストール済みのアプリの中から、Homebrew Caskでインストール可能なものをリストアップしてくれます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Cask applications
# Please copy these lines to your Brewfile and use with `brew file install`.
# Main tap repository for brew-cask
tap caskroom/cask
install brew-cask
# Apps installed by Cask in brew-cask
# Apps installed directly instead of by Cask in brew-cask
#cask install onepassword #/Applications/1Password 4.app
#cask install accessmenubarapps #/Applications/AccessMenuBarApps.app
#cask install alfred #/Applications/Alfred 2.app
#cask install #/Applications/Bitcasa.app
...

すると、こんな感じのファイルCaskfileが生成されます。たしかBrewfileと同じディレクトリだったと思う。

これらを、コメントの#を外してBrewfileの最下部に追加します。いらないのは省きます。

一部、なぜかCask名抜きで検出されるアプリがあるので、以下のようにして調べます。

1
$ brew cask search bitcasa

Brewfileの編集

ついでに、未導入のパッケージも追加することにします。

Brewfileは、以下のコマンドで編集できます。

1
$ brew file edit

以下のようにすると、導入可能なHomebrewパッケージ、およびCaskパッケージの一覧を得ることができます。

1
2
$ brew search
$ brew cask search

これをgrepなりpecoなりファイルに書き込みなりして、気になるパッケージを調べて追記していきます。

最後にBrewfileをGithubにプッシュしますが、brew file updateとすると追記したパッケージがOS X アップデート前にインストールされてしまうので、普通にgitコマンドでやります。

1
2
$ git commit -m "Add package"
$ git push

その他のパッケージ管理システム

その他のパッケージ管理システムのリストも取っておきます。

1
2
3
4
$ gem list
$ pip list
$ npm list
$ ghq list

私の場合、これらは大した数ではないので、普通にテキストファイルとして保存しておきました。

また、ghqで管理下リポジトリにはドットファイルを管理するdotfilesリポジトリが含まれています。この中にはさらに.vimrcが含まれており、そこにはNeoBundleのリストも含まれています。

管理を簡単にするために、まず、以下の記事を参考に、.vimrcを分割しました。

そして、bundle-init.vimにも、ついでに導入したいパッケージを追加しておきます。

これらのリストは、それ自体dotfilesリポジトリに突っ込んでおきました。念のため、インストールしないものも含めたCaskfileも。

当然、その他のGitリポジトリも最新の状態をプッシュしておきます。AppleScriptや、Sublime Textの設定ファイルなどは、この方法で保存しました。

(関連:分散したローカルリポジトリをhln+ghq+pecoで管理する | 豆腐メンタルは崩れない

続く

これでパッケージ管理システムの準備は完了ですが、まだ各種アプリケーションの設定が残っています。これらはDropboxで同期しておきましたが、それは次の記事で書きます。

横着しないでGitでブランチ切ってフォークしてみた

完全に自分用メモ。

あるいは以下記事の反省。

目的

Alfred Workflowの開発で、スクリプトをGUIウインドウ(データ的にはinfo.plist)に入力したものと、スクリプトファイル化したものを分ける。

実は両方のバージョンを別のWorkflowとして残してあるので、ひとつにしたい。どっちで作業したかわかんなくなりがちだし。

手順

プロジェクトディレクトリに移動。

1
cd (プロジェクトディレクトリのパス)

まず、現在の状態が失われないよう、コミットしておく。

1
2
git add -A
git commit -m "modify"

次に、新規ブランチを作成し、そのブランチに切り替える。

1
2
3
4
git checkout -b plistonly
# 以下でも良し
# git branch plistonly
# git checkout plistonly

ここはFinderで作業。.gitディレクトリを除いて現バージョンのファイルを削除し、旧バージョンのファイルをコピペ。

次に、旧バージョンの内容を’plistonly’ブランチにコミットする。

1
2
git add -A
git commit -m "re-init plistonly"

最後に、’master’ブランチに切り替え、元の状態が保存されているか確認する。

1
git checkout master

無事に元の状態が復元された。