【Vagrant】pacファイルを利用したプロキシ環境下でVagrantのゲストOSからインターネットへアクセスする

忘備録。OSはWindowsです。

自分の場合は下記で設定できるようになりましたが、
環境によって異なる場合もあると思います。

VagrantCentOSを立てたのですが、
プロキシ環境のためyumが使えなかったのでプロキシを設定しました。

Vagrant-pluginのインストール

Vagrantでプロキシを利用する場合は、プラグインvagrant-proxyconfを使います。

インストールコマンド

> vagrant plugin install vagrant-proxyconf

インストールしようとするとエラー。

PS D:\Vagrant\centos> vagrant plugin install vagrant-proxyconf
Installing the 'vagrant-proxyconf' plugin. This can take a few minutes...
Bundler, the underlying system Vagrant uses to install plugins,
reported an error. The error is shown below. These errors are usually
caused by misconfigured plugin installations or transient network
issues. The error from Bundler is:

Could not fetch specs from http://gems.hashicorp.com/

Warning: this Gemfile contains multiple primary sources. Using `source` more than once without a block is a security ris
k, and may result in installing unexpected gems. To resolve this warning, use a block to indicate which gems should come
 from the secondary source. To upgrade this warning to an error, run `bundle config disable_multisource true`.
PS D:\Vagrant\centos>

調べてみたところ、そもそもこのplug-inのインストール自体が、
プロキシ環境下ではうまくいかないらしい。

なので、一旦プロキシ環境から外した状態で実施。

PS D:\Vagrant\centos> vagrant plugin install vagrant-proxyconf
Installing the 'vagrant-proxyconf' plugin. This can take a few minutes...
Installed the plugin 'vagrant-proxyconf (1.5.2)'!

入ったことを確認。

PS D:\Vagrant\centos> vagrant plugin list
vagrant-proxyconf (1.5.2)
vagrant-share (1.1.5, system)

自動構成スクリプト(pacファイル)からプロキシのアドレスを調べる

自動構成スクリプト(pacファイル)の場合は、
実際にアクセスしているプロキシのURLとポートを調べる必要があります。

自分の場合はpacファイルのURLにブラウザで直接アクセスして、そこから取得しました。


http://XXXXXX/XXXX.pac

pacファイルはJavaScriptで書かれており、
return "Proxy" アドレス:ポート"となっている部分がプロキシになります。

動作確認する場合は、
Firefoxなどプロキシ設定を独自で設定できるブラウザなどでチェックします。

Vagrantfileにプロキシ設定を記入

先ほど取得したプロキシ情報をもとに、Vagrantファイルを編集します。
Vagrantfileにプロキシを設定。

設定例

  config.proxy.http     = "http://192.168.0.2:8080/"
  config.proxy.https    = "http://192.168.0.2:8080/"
  config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"

実施後、yumが利用できるようになりました。

【Google Apps Script】メーリングリストから所属するメンバーのアドレスとフルネームをスプレッドシートに表示する

概要

GoogleAppsのグループ(メーリングリスト)に追加されているメンバーは、
管理コンソールから取得することが出来るのですが、取得できるのはアドレスのみです。
出来ればユーザの氏名も一緒に表示したい。。。という場合に。

スプレッドシートのA2セルに対象のグループ入力し、
メニューの「メーリングリスト」→「メンバー表示」をクリックすると、B列にメールアドレス、C列に氏名が表示されるようにします。
A5にメーリングリストの人数を表示します。

メニューはOnOpenでスプレッドシートを開いた時に表示されるようにします。

f:id:migrantbird:20160321112742j:plain

対象者

Gooogle Apps for Workでメーリングリストを管理している人
特定メーリングリストのオーナーである人

ListGroupMembers

function AddMenu(){
  var ss =  SpreadsheetApp.getActiveSpreadsheet()
  var sheet =  ss.getActiveSheet(); 
  var menus = [{name: 'メンバー表示', functionName: 'ListGroupMembers'}];
  ss.addMenu('メーリングリスト', menus);

}
function ListGroupMembers() {
  var ss =  SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('シート名');
  sheet.getRange('B2:D1000').clear(); 
  var groupEmail = sheet.getRange(2,1).getValue();
  var group = GroupsApp.getGroupByEmail(groupEmail);
  var users = group.getUsers();
 
  if (users) {
    for (var i = 0; i < users.length; i++) {     
      sheet.getRange(i+2,2).setValue(users[i]);
      var userEmail = sheet.getRange(i+2,2).getValue();
      var user = AdminDirectory.Users.get(userEmail);
      sheet.getRange(i+2,3).setValue(user.name.fullName);
      
    }
  } else {
      Logger.log('No users found.');
  }
  sheet.getRange(5,1).setValue(users.length);
}

処理内容

GroupAppクラスのgetGroupByEmailを使って、
セルに入力したグループのメールアドレスからグループオブジェクトを取得。
グループオブジェクトに対してgetUsersで、対象グループのメンバーのメールアドレス一覧を取得します。

メンバーのメールアドレス一覧を取得できたら、forでメールアドレスをB列に設定していきます。

その際にユーザの氏名をメールアドレスの情報を元にAdminDirectory.Users.getで取得するのですが、
そのまま値を呼び出すとエラーが出るため、先に値を設定したB列のセルからユーザのメールアドレスを変数として取得しています。

一番最後でメーリングリストにいるメンバーの数を出しています。

注意事項

注意事項としてはふたつ。

このスクリプト実行時は、
グループ設定の「アクセス権限」→「メンバーリストを閲覧する」で、スクリプトを実行するユーザに権限を与えてないと、権限がないとエラーが出るので注意。

特定のドメイン内の場合は、そのグループの「アクセス権限」の「メンバーリストを閲覧する」対象を、「ドメイン内のすべてのユーザー」にしてください。
デフォルトはそのグループのオーナーやメンバーのみになっていて、グループのメンバーのメールアドレスを取得できません。

またメーリングリストドメイン外のユーザがいる場合は、上手く表示できないようです。
この辺は別途調査する予定です。

【Google Apps Script】スプレッドシートを開いた時に一番下の行に移動する

スプレッドシートを開いた時に一番下の行に移動する

下に追記していく表の場合、下までスクロールするのが面倒くさいので…

getLastRowを使って、最終行の行数を取得し、
その行にsetActiveRangeで移動するようにしています。

OnOpenでスプレッドシートを開いた時に実行します。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var lastRange = sheet.getRange(lastRow + 1,1);
  SpreadsheetApp.setActiveRange(lastRange); 
}

さらに、最終行の1つ下の行に罫線を設定する

罫線を毎回手動で入力するのが面倒くさいので、
開いた時に最終行まで移動して、その下の行に自動的に罫線を追加するようにする。

getRangeでボーダー用の範囲を最終行+1の行から、取得。
罫線を設定するセルの範囲は、この場合は8列目になっています。
setBorderで、罫線を設定。全ての設定値は全てtrueにしています。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var lastRange = sheet.getRange(lastRow + 1,1);
  var borderRange = sheet.getRange(lastRow +1, 1, 1, 8);
  SpreadsheetApp.setActiveRange(lastRange);
  borderRange.setBorder(true, true,true,true,true,true);
}

参考
Class SpreadsheetApp  |  Apps Script  |  Google Developers