hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

fishシェルでnvmをインストールするときにはomfで

あっと言う間に4月ですね。 ブログに書いてなかったのですが、転職しまして4月からスタートアップ企業で働くことになりました。 最近すこし怠けてるので、新しい会社で少し不安です。

それはさておき、 fishシェルにして初めてnvm をインストールして少しハマったので備忘録に brew で インストールできるので インストールしたのですが、 brew install nvmすると

You should create NVM's working directory if it doesn't exist:

  mkdir ~/.nvm

Add the following to ~/.config/fish/config.fish or your desired shell
configuration file:

  export NVM_DIR="$HOME/.nvm"
  . "/usr/local/opt/nvm/nvm.sh"

You can set $NVM_DIR to any location, but leaving it unchanged from
/usr/local/opt/nvm will destroy any nvm-installed Node installations
upon upgrade/reinstall.

Type `nvm help` for further information.

と情報が出ますね。これはbrew info nvm と同じなのですが、 そのまま設定すると nvm.shの読み込みでコケてしまいます。 まぁfishなので当たり前ですね。

そこで omf install nvm してあげると

nvm をラップしたfishを作ってくれます。 omfインストール時に foreign-env が入っているのですが この子がfenv コマンドになっていて、shを変換してくれるようです。 便利ですね。

内部で

fenv source $nvm_prefix/nvm.sh\; nvm $argv

と呼び出しています。

無事読み込まれるとnvmがうまく動きました。 いいですね。

rails server の 引数備忘録

気づけばもう3月ひな祭りですね。

デバックのため、ステージングのサーバを手で上げたくなったときに引数がわからなくなったので ほぼドキュメントなのですが、備忘録として残しておきます。

rbenv exec bundle exec rails s -e staging -p 8080

みたいにして起動することがたまにあるので、
起動スクリプトでポート確認したりして、置き換えて起動、デバッグなどで重宝しますね。

オプション 説明
-p ポート番号
-b バインドするIPアドレス
-c rackupファイルを指定
-d デーモン起動
-u デバックモード
-e 環境(test/development/production)を指定
-P PIDファイルパス
-h ヘルプを表示

railsコマンド(rails) - - Railsドキュメント

多段sshで踏み台サーバのドメインが同一の場合のssh confの書き方

本題通りですが、 特定のドメインへのsshを踏み台サーバ経由が必要になった場合 毎回踏み台サーバにsshするのは嫌気が差すのでsshconfigにまとめて記載する方法になります。 以下のように 踏み台サーバをHostに別名をつけてあげて踏み台の先のサーバのドメインをまとめて記載できるのでサーバが増えたときにも楽にsshすることができるようになります。

Host proxy
  HostName proxy001.hogehoge.com

Host *.hogehoge.com
  ProxyCommand ssh proxy -W %h:%p

GoogleスプレットシートにGoogleアナリティクスのリアルタイムアクティブユーザー数を日別シートに書き出す

最近までちゃんとスプレットシートを活用してなかったのですが 、APIで呼び出しできるとアプリ同士で連携すると結構色々できて便利ですね。

まずはリアルタイムアクティブユーザーを取得するためのスプレットシートを作成します。  

メニューから ツール > スクリプトエディタ を選択
スクリプトエディタを立ち上げます。

メニューのリソース > Googleの拡張サービス を選択します。

以下のようにAnalyticsをONにしてその下のGoogleディベロッパーコンソールのリンクからAPIを有効にしておきます。
f:id:hotoolong:20170208013736p:plain

設定が完了したら空のスクリプト myFunctionがありますが、 以下のようにスクリプトを作成してみます。

view_idにはアナリティクスから取得します。
アナリティクスの管理 > ビュー設定にある ビューIDを設定します。

var view_id = 'xxxxxxxxx';

// 日付シートを取得なければ作る
function getSheet() {
  if (getSheet.cache) { return getSheet.cache; }
  var today = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd");
  getSheet.cache = SpreadsheetApp.getActive().getSheetByName(today);
  if (!getSheet.cache) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.insertSheet(today, 0);
    getSheet.cache = ss.getSheetByName(today);
  }
  return getSheet.cache;
}

function myFunction() {
  var activeUserCount = Analytics.Data.Realtime.get('ga:' + view_id, 'rt:activeUsers').getRows() || 0;
  var yyyymmddhhmmss = Utilities.formatDate(new Date(), "JST", " yyyy/MM/dd HH:mm:ss ");
  var sheet = getSheet();
  var last = sheet.getLastRow();
  // 最後の行の次に出力
  sheet.getRange(last + 1, 1).setValue(yyyymmddhhmmss);
  sheet.getRange(last + 1, 2).setValue(activeUserCount);
}

次に関数を選択でmyFunctionを選択して▶ の実行ボタンを押します。
スプレットシートに戻って、日付、アクティブユーザー数が表示されていればOKです。
最後にトリガーの設定です。スクリプトエディタに戻ってもらって時計のマークの 現在のプロジェクトのトリガーからトリガーを設定します。
myFunctionを1分ごと実行するには以下のように設定すればOKです。 f:id:hotoolong:20170208015110p:plain

これで1分ごとのアクティブユーザー数を取得できます。
今回のスクリプトは1日ごとにシートを作る用になっているので日別の管理はやりやすいかと思います。
スクリプト自体はjsでできているのでファイル名を日から月などに変更することでいろいろ使いやすく加工することもできるので便利ですね。

「⌘英かな」でキー設定をカスタマイズ

USキーボードを使っていると
英数、ひらがなの変換がキー配置になくて少し苦労しますね。
Ctr-Spaceでも切り替えることができるのですが、 少しタイムラグがあって作業が中断してしまいます。

Karabiner というソフトがあったのですがmacOS Sierra になってサポートが外れてしまい開発中となっています。
Karabiner - OS X用のソフトウェア

そこで
⌘英かな
です。

⌘英かな

現在のバージョンが2.2.0で 左右のcommandキーにキーバインドするだけでなく他に変更したいキーがあれば設定できる状態です。

KeyRmapの設定画面で 右下の+ で設定したい項目を追加できます。

私の場合はHHKBも使っていてノートMacとdeleteのキー配置が違うので
「delete」と「\」を入れ替えておきたいなと思って設定していたのですが
しばらく「\」を連打しているとcommandキーで英かなの変換ができなくなってしまい 何度か試してるのですが、おかしくなってしまうようです。
何かバグを踏んでいそうです。
バージョンが上がったらまた試してみたいです。

あとfnはinputに設定できるのですが、outputに登録できないないので
どこかで設定できるようになったら快適なキーボードライフを送れそうです。 バージョンアップを期待してます。

iTerm2越しにコマンドラインの単語で戻る進むのショートカットを追加する

新しいMacを構築中です。
気づいたことをメモっておこうかと思っています。

bashなどのコマンドラインでEsc+f Esc+b で単語移動できますが、 押しづらいのでiTerm2で接続するときに Command+f と Command+b に置き換えています。

iTerm2のPreferences > Keys の Key Mapings の下の + を押して
追加する項目を設定します。

Keyboard Shortcut で Command+f を押して Actionで Send Escape Sequenceを選択して Esc+fなどに設定すればOKです。
他にも設定可能なので見ておくといいかもしれないですね。

f:id:hotoolong:20170127011553p:plain