ブロックチェーンのカンファレンス動画 ざっくり見てみたけど面白いので時間あるときにじっくり見る
slackをrssリーダーにする
rssリーダーとしてのslack
こちらの記事を読んでみた。 今更ながら、slackチャンネルにrssを登録できることを知らなかった。 個人用にメモなどで使っているslackアカウントで気になるブログのrss登録してrssリーダーにするとかなり良さそう
slack でのrss関連の公式マニュアルはこちら get.slack.help
実際に登録してみる
やることはメチャクチャ簡単です。
チャットボックス内で/feed を先頭に下記登録したいrss urlを書くだけ
/feed http://kakts-tec.hatenablog.com/feed
すると、slackbotが反応してくれて登録Done!
GraphQLを使ってみた
最近話題になっているGraphQLについて
RESTful web api界隈で話題になっている、GraphQLが結構気になっています。 先日のnode学園#23でもGraphQLの話が上がっていて、RESTfulって運用上結構辛いところもあるよね という文脈からGraphQLを推している 発表もありました
あとは、海外の記事ですがGraphQLについて解説している記事も有名です https://0x2a.sh/from-rest-to-graphql-b4e95e94c26b#.gvddna8vv
GraphQLとは
A query language for your API
公式の説明によるとGraphQLとは、web APIのためのquery languageで、 ニーズに合わせて必要なデータだけをクエリを書いて自由に取得できるので、 かなり柔軟性の高いapiが作れるようになります。
Facebook Github Pinterestなど、大規模なサービスでも使われているのでかなり運用実績もあります
GraphQLをいじってみた
GraphQLはnode.js ruby pythonなど様々な環境で使えるので、node.jsで簡単なwebサーバを作ってみます。
express graphqlの連携
nodeのwebフレームワークであるexpressのミドルウェアとしてexpress-graphqlというモジュールがあるので、これを使って簡単にapi作ってみます。
$ mkdir test-graphql $ cd test-graphql $ npm install express express-graphql graphql
まず適当にディレクトリをつくってその配下に express express-graphql graphqlモジュールをインストールします
次にwebサーバ用のスクリプトを作ります require(''graphql'')の戻り値にbuildSchemaというものがあり、これがgraphQLのapiのスキーマを設定するために必要なため、取得します
server.js
var express = require('express'); var graphqlHTTP = require('express-graphql'); var { buildSchema } = require('graphql'); var schema = buildSchema(` type Query { hello: String } `); var root = { hello: () => 'Hello world!' }; var app = express(); app.use('/graphql', graphqlHTTP({ schema: schema, rootValue: root, graphiql: true, })); app.listen(4000, () => console.log('Now browse to localhost:4000/graphql'));
$ node server.js
server.jsを起動し、4000番ポートにアクセスするとGraphQLのUI画面が出てきます ここでクエリを書くことで求める値を取ることができます
ローカルのpcで起動している場合 http://localhost:4000/graphql でアクセスできるかと思います
GraphQL UI画面からクエリを書いてみる
画面左半分がクエリ入力画面で 右半分が結果画面になります。
ためしに、buildSchemaで設定したhelloをクエリで抽出してみると下記の通りちゃんと結果がでてきます
コンソールからapiを叩いてみる
ブラウザで色々操作できるということは、コンソールからcurlでurl叩いてももちろん取得できます GraphQLのapiは POST形式で、bodyに json形式でqueryの状態を渡してあげればちゃんとレスポンスで返ってきます ここらへんのやり方はGraphQL公式の方にも詳しく書いてあるので興味ある方は読んでみると良いかと。
先程のサーバを起動させたままの状態でcurl叩くと、、、
$ curl -X POST http://localhost:4000/graphql -H "Content-Type: application/json" -d '{"query": "{hello}"}' {"data":{"hello":"Hello world!"}}
とちゃんと返ってきます。
まとめ
GraphQLを使った感じだと、かなり導入が楽で実装自体も直感的にかけるのでかなり良いかと思います。 実サービスでの管理画面とかでうまく使えればかなり良いツール作れたりできそうです。 引き続き色々遊んでみてちゃんと使えるところまで身につけようと思います。
ただし、仕様がかなり膨大なため、本格的に使おうとするとちゃんと読まなきゃ行けないのがつらいとのことです。
macで npm install時にEACCESSエラーが出る
macでnpm install 時にEACCESSエラーが出る
macでnodeやnpmバージョンアップした後、 sudo npm install などでroot権限でインストールしたあとにnpmで以下のエラーが出るようになってしまった
npm ERR! Darwin 13.4.0 npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "babel-cli" npm ERR! node v4.6.0 npm ERR! npm v3.10.8 npm ERR! path /usr/local/lib/node_modules npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall access
この場合npm install時に毎回参照されるnpm default directoryの権限がおかしくなっていると思い、 /usr/local/lib/node_modules以下の権限を見てみると、オーナーがrootになっていた
$ cd /usr/local/lib/node_modules $ ls -Fal total 0 drwxr-xr-x 13 24561 wheel 442 10 24 23:34 ./ drwxrwxrwx 93 root admin 3162 6 2 01:01 ../ drwxr-xr-x 219 root wheel 7446 10 24 23:34 .staging/ drwxr-xr-x 8 nobody staff 272 3 14 2015 async/ drwxr-xr-x 13 nobody staff 442 1 23 2016 coffee-script/ drwxr-xr-x 13 nobody staff 442 12 15 2013 express/ drwxr-xr-x 8 nobody staff 272 9 5 2014 express-generator/ drwxr-xr-x 8 nobody staff 272 1 23 2016 generator-hubot/ drwxr-xr-x 19 nobody staff 646 1 23 2016 hubot/ drwxr-xr-x 6 nobody staff 204 7 10 2015 n/ drwxr-xr-x 27 root wheel 918 10 23 15:07 npm/ drwxr-xr-x 14 nobody staff 476 4 12 2016 request/ drwxr-xr-x 6 nobody staff 204 1 23 2016 yo/
どう対処したか
多少強引ではあるが、mac環境でsudo npm installをすると rootユーザでnpm installするなみたいな警告がでていたので オーナーを自分のユーザに戻した
$sudo chown -R testuser /usr/local
これで解決した
他のアプローチで対処できるのか
npm 公式のトラブルシューティングに対策が幾つか書いてある
その他の方法としては以下の方法があり、上記urlにまとまってます。
npm v4 v5について
npm v4 v5 について
先日のnode学園でnpm の開発者Forrest Norvellが登壇してnpmのv4 v5について語っていました。 nodejs.connpass.com
発表のスクリプトは以下にまとまっています。 Forrest Norvell曰く、v4はそんなに大きな変更点はなく、v5でdepricatedだった機能が完全廃止されたりと大きな変更があるようです。 奇数系バージョンが大きな変更あるっぽいですね https://gist.github.com/othiym23/c98bd4ef5d9fb3f496835bd481ef40ae
同じタイミングで、 npm v4のpre-releaseが正式に発表されています github.com
npm v4 の主な変更点
v4からの破壊的な変更についてだけまとめると以下のとおりになります
- npm search rewritten to stream results, and no longer supports sorting. - npm scripts no longer prepend the path of the node executable used to run npm before running scripts. A --scripts-prepend-node-path option has been added to configure this behavior. - npat has been removed. - prepublish has been deprecated, replaced by prepare. A prepublishOnly script has been temporarily added, which will only run on npm publish. - npm outdated exits with exit code 1 if it finds any outdated packages. - npm tag has been removed after a deprecation cycle. Use npm dist-tag. - Partial shrinkwraps are no longer supported. npm-shrinkwrap.json is considered a complete installation manifest except for devDependencies. - npm's default git branch is no longer master. We'll be using latest from now on.
そのうち、気になった変更だけ幾つか整理してみます。
npm search rewritten to stream results, and no longer supports sorting.
npm searchの処理についてですが、バージョンが上がるたびに処理が遅くなっているとのことで、 ストリーム形式に書き直したそうです。この変更によって、npm searchで使っているソーティングのサポートも途切れるとのことで、 あくまでも応急処置的な対応になります。
ほんとにnpm packageの検索を効率的に行いたい場合は npms.ioを使ってくれと、npmのチームが言及しています。 npms.io
npm tag has been removed after a deprecation cycle. Use npm dist-tag.
npm packageのタグ付けを行う npm tagが廃止されて npm dist-tagを代わりに使います npm dist-tag add や npm dist-tag rm でタグの追加や削除ができますね タグ関連のコマンドを一つにまとめたという感じでしょうか docs.npmjs.com
Partial shrinkwraps are no longer supported.
npm shrinkwrapsはおもにパッケージのバージョンを固定化するために使うコマンドなのですが、v4から大きく変わるようです。 特定のバージョンをインストールするように指定する、npm-shrinkwrap.jsonは、v4からインストールされなくなります。 同様にdev環境のみいれるパッケージを package.jsonのdevDependenciesに書けるのですが、これも今回のバージョンアップで挙動が変わります。
devDependenciesに書いてあるパッケージもインストールしたい場合は、 npm shrinkwrap --devと書くことで対応できるようになります。
そこまでnpmの機能を使いこなせていない状態ですが、個人環境でいろいろ使って試してみようと思います。 v5に関しては、2017/4にはリリースするかもということなので結構目まぐるしくnpm界隈は変わっていくかと思います。
yarnについて
yarnとは
yarn
インストール
使い方
npm と yarnどちらが早いか検証してみた
herokuインスタンスのタイムゾーンを変更する方法
このタイムゾーンの設定を変更する方法は以下の通りになります。
まずherokuインスタンス上の時刻を確認して、時刻が標準時になっているのを確認し、タイムゾーンをAsia/Tokyoに変更させます。
heroku config のTZ にタイムゾーンのコードを設定するだけです。
heroku上でhubotのkeepalive設定がおかしい場合はこんな感じでタイムゾーンを確認すると良いと思います。