npmのtunnel-sshを利用してSSHポートフォワーディングする

SSHでポートフォワードするのをNode.jsだけで行うことを試してみたのでその際のメモ。

下の例では、local(127.0.0.1)の13306番にアクセスするとSSH接続先のホストから接続できる mysql***.heteml.jp の3306番にフォワードしている。

npmで公開されている tunnel-ssh を利用するとシンプルにできる。

$ npm install tunnel-ssh --save

SSH接続するための設定とポートフォワードする先の設定、ローカルで接続待ちをするポート番号を指定する。

// tunnel.js
var tunnel = require('tunnel-ssh');
var config = {
username: 'ssh-hideack',
port: 2222,
host: 'ssh***.heteml.jp',
privateKey:require('fs').readFileSync('/Users/hideack/.ssh/id_rsa'),
passphrase: '******',
dstPort: 3306,
dstHost: 'mysql***.heteml.jp',
localHost: 'localhost',
localPort: 13306
};
var server = tunnel(config, function (error, result) {
if (error) {
console.log(error);
process.exit();
}
console.log('connected');
// これ以降にMySQLクライアント等でlocalhostの13306番に接続する処理を書けばよい
});

というメモエントリでした。

greenkeeper.io を利用してプロジェクトが依存するnpmを最新の状態で保つ

プロジェクトで依存しているnpmを最新に保つのにgreenkeeperというサービスを見つけたので試してみました。

まずはcliツールをインストール。このサービスのカッコイイのがOAuthの部分を除いてコマンドラインで完了するというところ。

$ npm install -g greenkeeper

まずはgreenkeeperにログインします。コマンドラインでログインを指定。

$ greenkeeper login

そうするとGithubOAuth認証用にブラウザが立ち上がって認証を求められます。

f:id:hideack:20151002210341p:plain

その手続が済むとgreenkeeperを利用可能な状態になっているので、greenkeeperでpackage.jsonで管理されているnpmパッケージを最新に保ちたいプロジェクトのルートでgreenkeeperを有効にします。

☁  remp-api [master] greenkeeper enable
🌴  info enable The GitHub slug is: remp-team/remp-api

そうすると該当リポジトリ内にある package.json の監視が始まり、最新のnpmパッケージがあれば自動的にプルリクエストが作成されます。

f:id:hideack:20151002210518p:plain

github側で連携していれば当たり前ですが自動的にSlackに流れてきて, CI走って便利感ある。

f:id:hideack:20151002210650p:plain

例によってプライベートリポジトリだと課金が必要なのですがパブリックなリポジトリであれば無料で利用できる様なのでぜひお試しください。


greenkeeper

http://greenkeeper.io/

2015年9月に読んだ本を振り返る

先月は11作品。

村上龍と坂本龍一 21世紀のEV.Cafe (SPACE SHOWER BOOks)は2000年前後の対談が多く含まれて改めて2011年以後に収録され発刊されたもの。コンテンツに対する考え方や社会問題等、あまり大きく変わっていないことが良いことなのか。悪いことなのか。

廃駅ミュージアムは刹那系。それぞれの駅の歴史的経緯も写真に添えてある。終わりは始まりであり始まりは終わりでもある*1


hideackの本棚 - 2015年09月 (11作品)
くいしんぼう
松浦弥太郎
読了日:09月26日



powered by booklog

*1:先日終了したブラタモリの始点・終点のコーナーの締めのナレーション

Instagramのフォロワー数をevacで通知する

サービスで運用しているInstagramのフォロワー数をパラメータとして注視する様になってきたので、弊作のevacInstagramのフォロワー数を定期的にSlack上へIkachan(takosan)を経由して通知させられる様にしてみた*1のでその際のメモです。

Instagram API のアクセストークン取得

以下の記事が手順を詳しく記載されているので参照ください。

qiita.com

APIを利用するために必要な access_tokenuserのID を控えます。

evacのレシピ作成

以下の様なレシピを作成します。先に控えたuserのIDとアクセストークンを指定します。

in:
jsonRequest:
targetProperty: data.counts.followed_by
url: https://api.instagram.com/v1/users/*****/?access_token=*****
out:
ikachan:
url: http://〜
join: false
channel: "#hideack"
message: ":instagram: フォロワー数 = __word__ 人"

これをevacのレシピとして指定して実行すると今回の場合は以下の様にtakosan通知することができます。

f:id:hideack:20150927115253p:plain


www.npmjs.com

*1:基本、自分が使う機能しか拡張していかない

過去作成したloopbackアプリのloopback-component-explorerへの対応

過去に作成したloopbackアプリの場合、slcコマンドでscafoldすると loopback-explorer と呼ばれるloopbackで作成したAPICRUDするUIが含まれた形でアプリが作成されますが、今回この loopback-explorer に大きな変更が加えられて単純に npm update するとアプリの起動が行えなくなるのでその際の対応方法のメモです。

loopback(2.22.0)以降だとslcコマンドでscafoldされた際に新しいAPI explorerに対応しているので問題はないので、既にアプリを作っている人向けの内容です。

package.jsonの修正

これまで利用されていた loopback-explorer を削除。新しく同じ役割をするコンポーネントとして追加された loopback-component-explorer を追加します。

$ npm install loopback-component-explorer --save
$ npm uninstall loopback-explorer --save

修正後のpackage.jsonは以下の様な形になります。

  "dependencies": {
(snip)
"loopback-component-passport": "^1.5.0",
+   "loopback-component-explorer": "^2.1.0",
"loopback-connector-mongodb": "^1.13.0",
(snip)
},
- "optionalDependencies": {
-   "loopback-explorer": "^2.0.1"
- },

component-config.json を追加

loopback-component-explorer をlooopbackアプリにマウントさせてやるために server/component-config.json を新規に追加します。

explorer呼び出すパスをJSON内で記述します。

{
"loopback-component-explorer": {
"mountPath": "/explorer"
}
}

以上の操作で http://localhost:5000/explorer/ へアクセスすることで従来通りのAPI Explorerを利用することができます。

参照

StrongLoop | What’s New in the LoopBack Node.js Framework – July & August 2015


全く蛇足ですが、StrongloopのロゴにIBMのクレジットが入っていた。

6回休み

先のことを考えながらゆっくりしていた。

白い雲、青い空、青い海。

2015年8月に読んだ本を振り返る

8月に読んだのは14作品。

テイクダウン―若き天才日本人学者vs超大物ハッカー〈上〉は1996年の刊行で19年前の出来事であることに驚き。そういえばアメリカの暗号輸出規制とかあったな...。エンジニアの方であればかなり面白く読めると思うので一度読んでみることをお薦めする。

他は相変わらずいろいろ読んだ。もっといろいろ読んで知らないといけない。


hideackの本棚 - 2015年08月 (14作品)
カレー食堂
枝元なほみ
読了日:08月11日


即答力
松浦弥太郎
読了日:08月11日



powered by booklog

slack-winstonでログをSlack通知する

Node.js でloopbackを使ってAPIを書くことをここ最近ずっとしていて、winstonでアプリケーションのログを取る様にする際にした際、ついでに一定レベル以上のログ(エラーログ)の場合は内容をSlackにも通知できないかなと調べると由ななwinstonのプラグインを見つけたので使ってみた。

github.com

お約束。npmコマンドでインストール。

$ npm install slack-winston --save

以下の様な形で利用できます。

var winston = require('winston');
var slackWinston = require('slack-winston').Slack;
var options = {
domain: 'remp',
token: '******',
channel: '#remp',
username: 'REMP API winston',
message: '[{{level}}] {{message}}',
level: 'warn'
}
winston.add(slackWinston, options)

なお、token の部分には、Slackの"Incoming WebHooks"の設定で得られるWebhook URLの末尾の文字列を渡します。

あとは、winstonでログ出力をする要領で記述を行うと

winston.warn("Winston test");

winstonのログは出力されつつ...

f:id:hideack:20150816114012p:plain

Slackの指定したチャンネルにも通知されます。

f:id:hideack:20150816114005p:plain

先の例に書いた通り、メッセージ内容や通知レベルも個別で指定できるので便利。

読書の夏

今年の夏休みはひたすら本を読んだり、コード書いたりして過ごしています。*1

毎年夏休みは必ず文藝春秋読んでいる気がする。移動することが多いので一冊とビール500ml缶とあたりめがあれば、移動時間も時間の使い方に不自由しない。

*1:あれ、普段とあまり変わりない

2015年7月に読んだ本を振り返る

7月読み終えたのは13作品。比較的今回は読めたほうかな。

特に印象深かった本は、システム障害はなぜ二度起きたか みずほ、12年の教訓は他山の石以て玉を攻むべしで何らかのシステムに携わっている人が読むと得るところ多いので一度読んでみることをお勧め。

あとゲーム音楽史も面白かった。

2015年7月に読んだ本

hideackの本棚 - 2015年07月 (13作品)


私の本棚
読了日:07月25日


楽天流
三木谷浩史
読了日:07月31日


powered by booklog