dynamicsoar's log

主に研究関係のメモ

Git と Atom 用、プロキシ環境(大学)と非プロキシ環境(自宅)を切り替える方法 (Mac OS X El Capitan)

This entry illustrates how to automatically switch proxy settings between "behind-proxy" environment and "no-proxy" environment for Git and Atom editor on Mac OS X El Capitan.

↑ いちおう検索用に…

前提

想定する環境

  • 大学(プロキシ利用 behind proxy): 「proxy.FOOBAR.ac.jp:NUMBER」を使ってね、と言われていることを想定。
  • 家(非プロキシ no proxy): プロキシ設定使いたくない。

mac での設定

前提として、mac で Network Location*1 を複数作って切り替える、というところまではできているものとする。その上で、 git と atom(のパッケージのインストール・アプデ)を使うには、以下のような切り替えようスクリプトが必要になる。

以下のスクリプトは、 Macのネットワーク環境に合わせてHTTP_PROXYを切り替えるシェルスクリプト - Qiita をコピペ改変させてもらっただけ(多謝)。このページで git は問題ないが、atom はまた別の設定が必要だったのでそこを調べた。忘れそうなのでメモしておく。

やること

~/ に .switch_proxy というファイルを作る。その中身を以下のようにする。プロキシ情報と Location は自分の環境に合わせて書き換えること。

スクリプト

# 何度も出てくるので、プロキシ情報を proxy という変数に代入しておく
proxy=proxy.FOOBAR.ac.jp:NUMBER

# mac の Network Location をトリガにする
switch_trigger_location=University

# 大学用
function set_proxy() {
  export http_proxy=$proxy
  export ftp_proxy=$proxy
  export all_proxy=$proxy
  export https_proxy=$proxy

  ## for git
  git config --global http.proxy $proxy
  git config --global https.proxy $proxy
  git config --global url."https://".insteadOf git://

  ## for Atom editor
  apm config set proxy http://$proxy
  apm config set http-proxy http://$proxy
  apm config set https-proxy http://$proxy
  apm config set strict-ssl false
}

# 自宅用
function unset_proxy() {
  unset http_proxy
  unset ftp_proxy
  unset all_proxy
  unset https_proxy

  ## for git
  git config --global --unset http.proxy
  git config --global --unset https.proxy
  git config --global --unset url."https://".insteadOf

  ## for Atom editor
  apm config delete proxy
  apm config delete http-proxy
  apm config delete https-proxy
  apm config delete strict-ssl
}

# if [ "`networksetup -getcurrentlocation`" = "$switch_trigger_location" -a "`networksetup -getairportnetwork en0 | awk '{print $4}'`" = "$switch_trigger_network" ]; then
if [ "`networksetup -getcurrentlocation`" = "$switch_trigger_location" ]; then
  echo "Switch the settings for behind proxy network"
  set_proxy
else
  echo "Unset proxy settings"
  unset_proxy
fi

挙動

Atom に関しては、Network Location を切り替えるたびに、~/.atom/.apmrc ができたり消えたりする(プロキシセットすると生成され、アンセットすると消える)。なのでちょっと重い気がする。たぶんもっと頭いい方法ありそうなのだが、これで動いてるからいいや…

詰まったところ

http://$proxy というところ、これで正しいのだが、最初 http:// が必要だと思っていなくて、 $proxy だけにしていて、ダメだった。これだけで30分くらい無駄にした…

atom での unset のしかたは、ターミナルで $ apm config --help と打ったら set, get, delete, ... が使えるよ、と言ってたので、まぁ delete だろ、と思ってやっただけ。

参考にしたページ

*1:OS言語が日本語だと「ネットワーク環境」らしい。