読者です 読者をやめる 読者になる 読者になる

Masteries

技術的なことや仕事に関することを書いていきます.

2016年の振り返り

あけましておめでとうございます. 今年もよろしくお願い致します. というわけで年始恒例の振り返りブログです. 今年もKPTを使ってやっていくことにしましょう.

Keep

「2016年にやってみてよかったこと, 2017年も継続して取り組みたいこと」

いくつかツールを公開できた

業務向けに作ったものを汎用化して公開するという流れで, CPANにAnegoをDeveloper Releaseしたり, Primusを公開したりできました.

とはいえ, いずれもちゃんとドキュメンテーションできておらず, AnegoはそのためにDeveloper Releaseのままなので, 早いうちにドキュメントを仕上げたいと思います...

Go言語にチャレンジできた

前述のPrimusは, 当初はPerlとNode.jsで実装していたのですが, GitHubで公開するにあたってGo言語で書き直しました. 2016年はGo言語にチャレンジしたい! と思っていたので, 最後の最後に成果物を出せて良かったです.

また, Go言語にチャレンジするにあたっては, 運良く(?)ご恵贈頂いた「みんなのGo言語」が非常に勉強になりました. 僭越ながら書評も書かせて頂いたので, ご興味ある方は是非読んでみてください.

papix.hatenablog.com

雑誌に記事を書く機会があった

いろいろなご縁があり, 技術評論社の「Software Design」や「WEB+DB PRESS」に記事を書く機会が4回もありました.

自分のやってきたこと, そこから得た知見や気付きを文章でまとめるという行為(?)は, これまでこのブログで延々と続けてきたことではありますが, それを「雑誌に載せる」という形で行うのは言うまでもなく始めてのことで, 本当に苦労の連続でした.

@inaoさんをはじめ, 技術評論社の皆様には本当にお世話になりました. この場を借りて, 改めて御礼申し上げます. 本当にありがとうございました.

久々にYAPCで発表できた

papix.hatenablog.com

RebootしたYAPC::Hokkaidoで, 「APIをPerlで作る時に僕達が考えたこと」というトークをしました. 「これ, 割と常識的な内容なのでは...」と尻込みしていたのですが, 予想以上に多くの方にお聞きいただいて, Twitterでもたくさん感想やご意見を頂けましたし, 何より@tagomorisさんからはYAPC::Hokkaidoの感想エントリでお褒めの言葉まで頂戴することができ, 本当に嬉しかったです.

...そういえば, YAPC::Hokkaidoの感想エントリ, まだ書いてませんでしたね. が, がんばります...

昨年に引き続き, アウトプットを続けられた

2016年は, このブログに32件のエントリを投稿しました.

また, 春から夏あたりにかけて, 一時期Qiitaを併用して, こちらにも記事を投稿したりしていました.

これは個人的な感想(?)なのですが, 何故かQiitaに記事を書く時は異様に記事を作り込んでしまう傾向があり, このブログほど気軽に投稿できず, ネタのストックが増えていく... という状況に陥ってしまいました. そのため, 秋辺りからはQiitaの併用を辞めて, 再度このブログに一本化したりしていました. そのため上記の記事も, どこかのタイミングでマスターをこのブログに移す... かもしれません.

Perl入学式の5年目も無事終わりそう

2016年は「in東京」, 「in大阪」, 「in沖縄」の3拠点での開催となりましたが, いずれもしっかりゴールを迎えられそうです. また, 年末のPerl入学式 Advent Calendar 2016も, 無事完走することができました.

2017年は, 年始にJPAのブログでお伝えしたように, JPAとの連携を深めて, 新しい施策を幾つか動かしていきたいと思っています. 引き続き, 「Perlを通じて, プログラミングの面白さを感じてもらえる勉強会」になるよう, 頑張っていきたいです.

blog.perlassociation.org

新しいチャレンジがたくさんできた

上記以外にも, 今年はいろいろなイベントやチャレンジがありました.

機動力が高いというか, 身軽にアクションしていくというところは自分の持ち味の一つ(その裏に, "飽きやすい"という弱点はあるのですが...)だと思うので, 2017年もいろいろなチャレンジをしていきたいです.

Problem

「2016年で良くなかったところ, 2017年に改善していきたいところ」

メンタル的(?)な波の振れ幅が大きかった

2016年は, 自分にとって良いイベントも悪いイベントもたくさん起きて, それに引きずられて精神面はだいぶ波がある1年でした. また, それに伴ってインプット/アウトプットについても, 非常に捗る時期と非常に停滞する時期が, 繰り返し来ていたように思います.

とはいえ, そうやって精神的な状態が揺れ動いている間に, 自分自身について改めて向き合う機会があり, そこでいろいろと気づけたのは非常に良かったです(この辺の"気付き"については, 振り返りを兼ねて自分の言葉で綴りたいと思ってはいるのですが, 抽象的な部分も多くて, なかなか難しいですね...).

どうしても, 人間感情を持っていて, その波を常に一定に保つのは難しい(無理?)とは思います. とはいえ, 2017年は2016年の気付きを活かして, できる範囲で自分自身のメンタルをコントロールして, 安定したアクションが出来るといいなと思います.

Mackerel User Groupの活動があまりできていない

Mackerel User Groupを立ち上げたはいいのですが, あまり活動できておらず... 申し訳ないところです. 特に, 夏に大阪で開催予定だったMeetupが, 台風の接近で中止になってしまったのは痛恨でした.

とはいえ, Mackerel User Groupが目指している「ユーザー間の情報共有」という部分は, Mackerel User GroupのSlackで実現出来ている部分が大きいので, 引き続きこれを盛り上げつつ, Mackerel User GroupのMeetupも開催していきたいと思います.

ちなみに, Mackerel User GroupのSlackはこちらのslackinからジョインすることができます: Join mackerel-ug on Slack!

Try

「2017年, 改めてチャレンジしていきたいところ」

もっとGo言語を!

言うまでもなく(?)引き続きPerlをやっていくつもりですが, 2017年は並行してGo言語もしっかり取り組みたいです. 題材として, ローカルの開発環境で使っているPerl製の「便利スクリプト」のGo言語への移植とか, (実際に公開するかはともかくとして)schemalexを利用したGo言語版のAnegoとか, ネタはいくつかあるので, ちまちまと取り組んでいきたいです.

最終的に, Primusのようなツールの公開や, mackerel-agentのようなGo言語で作られたツールへのコントリビューションが出来ると良いですね!

新しい職場で"やっていく"

papix.hatenablog.com

2016年最後の大きなトライがおおよそ2年半勤めてきたGaiaxの退職だとすると, 2017年初の大きなトライは間違いなく2月1日からの「次の職場」への入社になると思います.

詳細はここでは述べませんが, 正直に言えば今回の転職は(個人的には!)"ハイリスクハイリターン"だと思っています. 今回の転職によって得るものは多いけれども, そのためにはGaiaxにいた頃の120%, 130%の力を発揮していくことが求められてくる... と思っています. 新しい職場に慣れ, 職場での信頼関係を構築していくというところを含めて, この辺りうまく適応出来るか? というところは, ある種の"リスク"と言えるのではないでしょうか.

とはいえ, 今回はそういった職場だからこそ出来るチャレンジがあり, そこから学べることがあると自分は信じています. 今回の転職については, 経緯からしても割と「勢い」によるところが大きかったりはするのですが... なにはともあれ, 選考の結果として入社が決まり, Gaiaxを退職して2月から新しい環境へ「飛び込んでいく」のは, もう確定事項です.

明日朝起きたら, これまで出来ていなかった事が出来るようになっている... みたいな, 都合の良い出来事は起こり得ないので, まずは今やっていること, 今出来ることをしっかりこなしながら, 新しい環境に慣れていきたいと思います. 当面の目標は, 試用期間をしっかり乗り切ることですね...!

まとめ

というわけで, 2016年の振り返りでした. 本当に, 公私共々いろいろな出来事があった1年でしたね... 今年も転職を含めて, いろいろありそうな予感が現時点からしているので, へこたれず, 元気いっぱいにやっていきたいと思います.

今年もまた, ご指導ご鞭撻頂けますと幸いです. 2017年もどうぞ宜しくお願い致します!

Primusを公開しました

この記事は, 「Gaiax Advent Calendar 2016」の24日目の記事です. ...24日だぞ☆

本当は, 先日ちょうど退職エントリを書いたことですし, 「Gaiaxで学んだこと」みたいな感動超大作でも綴ろうかと思ったんですが, 終わりが見えない感じになっていたので, とりあえずPrimusを公開した件について書こうと思います.

github.com

なおPrimusについては, 先日開催された「エンジニア交流会〜マル秘?!こだわりの社内ツール大公開!~」でも紹介させて頂きました.

Primusについて

Primusが生まれた経緯などについては, 以前Fukuoka.pmでお話した「僕たちはどうしてもLINEのBotをローカルで開発したかったんだ」のスライドをご覧頂くと良いと思います:

要するに, LINE Messaging APIを利用したWebサービス開発をしている際, LINEのサーバから飛んでくるWebhookをローカルのマシンで受けて, いい感じにローカルの開発環境で開発したい! という要望を叶える為に開発したツールです.

LINE Messaging API専用ではない汎用的なツールに仕上げていますので, 例えばMackerelやFacebookのWebhookを受けたりすることもできます.

PrimusのGo言語化

Primusの初期バージョンは, とりあえずさっくりと試すため, PerlとNode.jsで実装していましたが, もっとお手軽に導入して使いたい! という声に答えるべく, 今回公開するにあたってGo言語で実装しなおしています.

ちょっと苦労したのはSocket.io周りで, ServerとClientの連携にあたって, 当初はWebSocket用のライブラリで愚直に実装していたのですが, Socket.ioにおける「ルーム」の概念を導入するのが非常に面倒で, 最終的にGo言語で実装されたSocket.ioライブラリを利用することにしました.

なお, Go言語で実装されたSocket.ioライブラリについては, いくつか公開されていますが, Primusではgithub.com/graarh/golang-socketioを利用しています.

まとめ

PrimusをGo言語化した上で公開しました. 初期バージョンのPerl+Node.jsよりは導入しやすくなったと思いますが, ドキュメントが全然整備できていないので, 次はそこですね...

割と, 「Webhookを受けたい」という場面は多いとおもっていて, 似たようなSaaSもあるそうですが, とはいえそういった時にPrimusは有用なツールの1つになると思うので, 引き続きメンテナンスを続けていきたいと思っています.

SocketIO::Emitterとsocket.io-redisに関する最近の状況

これは「Perl5 Advent Calendar」の23日目の記事... 記事です. まず最初に, 更新が23日の72時頃になってしまったことをお詫び致します*1. やっていけませんでした...

今日のお題

というわけで改めてやっていきたいと思います. 今日は, 以前「SocketIO::EmitterがCPANで公開されました!」という記事で, PerlのSocketIO::EmitterモジュールとNode.jsのsocket.io-redisパッケージのバージョンは気をつける必要があるというお話をしたのですが, それの続報(?)についてやっていこうと思います.

papix.hatenablog.com

ふりかえり

これまでの問題をさっくりまとめると, 以下のようになります.

  • Node.jsのsocket.io-redisが利用しているMessagePackのライブラリは, 古い仕様に基づいて実装されている
  • そのため, PerlのSocketIO::Emitterを利用する場合, (古い仕様に基づいて実装されている)Data::MessagePackの0.49以前を利用しなければならなかった

...という感じです. Data::MessagePackをSocket.ioのEmitのみに利用するのであれば, Data::MessagePackの0.49以前を利用するようにcpanfileなどで指定しておけば良いのですが, 言うまでもなくSocket.io以外で新しい仕様に基づいて実装されているData::MessagePackの0.50以上を使いたい! という場合に併用できない, という問題点がありました.

最近の状況

socket.io-redisは, 12月8日にmasterブランチへマージされたPull Requestで, msgpack-liteを利用するようになりました.

github.com

このNode.js用のMessagePackのパッケージは, 新しい仕様に基づいてMessagePackを処理するようになっています(ちなみに, このパッケージは古い仕様のMessagePackにも対応しているみたいです). これで, めでたくData::MessagePackの0.50以上でSocketIO::Emitterを使えるようになる... のですが, 残念ながらこのPull Requestが反映されたバージョンは, まだリリースされていません.

もし, どうしてもsocket.io-redisとSocketIO::Emitterを使いながら, Data::MessagePackの0.50以上を利用したい場合, 当面はpackage.jsonでsocket.io-redisのGitHubのリポジトリを使うように指定してあげると良さそうです:

qiita.com

しばらくしたら, 恐らくmsgpack-liteを利用するsocket.io-redisがリリースされると思われます. そうなると, SocketIO::Emitter + Data::MessagePack 0.49以下の環境からうまくEmitできなくなりますので, 上記で紹介したようにsocket.io-redisの最新版を利用するようにするか, 或いはsocket.io-redisのバージョンを現状の最新版である2.0.1に固定しておいた方が良さそうです.

まとめ

SocketIO::Emitterとsocket.io-redisを利用する際の注意点について, 最新の情報をお伝えしました. SocketIO::Emitterや, Node.jsのsocket.io系のパッケージを利用すれば, 非同期双方向通信なアプリケーションが簡単に作れますので, この機会に(?)皆さんも是非試してみては如何でしょうか!

スペシャルサンクス

*1:引っ越しとかしていました...

株式会社ガイアックスを退職します

いろいろありまして, 2014年4月から2年と9ヶ月程働いていたガイアックスを退職することになりました. 一応, 本日が最終出社日*1となっていて, 暫くの間有給消化になります.

どうして辞めるの?

いろいろと, 今回の転職に至る経緯とか, ガイアックスでの思い出などを書いていたのですが, 分量が増えてきて止まらない感じになってきたので, また別エントリで, じっくり綴らせて頂ければと思っています...

次はどうするの?

次の会社, すなわち転職先は既に決まっていて, 2月頃から働き始める予定です. これに伴い渋谷区への引っ越しなどもやっていて, 退職に向けた手続きなども含めて, 非常に慌ただしい年末を過ごしています...

最後に...

だいぶさっくりではありますが, いつもお世話になっている皆様への第一報ということで, よろしくお願いします.

なお, こちらいつものやつです. ご査収下さい: https://www.amazon.co.jp/registry/wishlist/207LWIVX9Y04Q

*1:正確に言えば引き継ぎやPCの返却などで1月もちまちまと出社するのですが, 大規模な有給消化が来週月曜日から始まり, 年内最終出社が今日になったので, 今日を最終出社日としています.

Mackerelを使って踏み台サーバを更に便利にしてみた話

この記事は, Mackerel Advent Calendar 2016の19日目の記事です.

「踏み台サーバ」とMackerel

以前, 「サーバにログインした時に任意のメッセージを表示する 〜Mackerelで管理しているホスト一覧を出す〜」という記事を書いたことがあります.

papix.hatenablog.com

この記事では, いわゆる「踏み台サーバ」にログインしたタイミングで, MackerelのAPIを使って「踏み台サーバ」に紐づくサービスのホスト一覧を取得して, 次のように表示してあげる便利! というTips? を紹介しました.

-----------------------------------------------------------------
    My Service Host Information
-----------------------------------------------------------------
App
        10.0.xxx.xxx (instance-size) ... working
        10.0.xxx.xxx (instance-size) ... working
                      :
                      :
-----------------------------------------------------------------

今回もまたまた小さいTipsなのですが, これを改良(?)する機会があったので, そのお話をしたいと思います.

IPアドレスをちまちま入力するのは面倒じゃないですか?

...と思った訳です.

ここから, 実際に各サーバに接続しようとすると, ssh 10.0.xxx.xxxのように, 手動でIPアドレスを入力していく必要があります. ちょっと面倒ですし, 例えば10.0.123.456とするべきところを, 10.0.124.456とタイポしてしまうことも多々ありました.

補完を効かせたい!

...と思うのは, 自然なことだと思います.

やり方はいろいろありますが, 今回は「任意のサーバに接続するコマンド」を用意して, これを補完させるというアプローチを取りました.

具体的には, 「ホストの一覧を表示」するスクリプトの中で, ホストごとに次のようなファイルを生成するようにします.

#!/bin/sh
ssh [user]@[ip address]

これを, 例えば/usr/local/bin/ssh/[ip address]というファイルに設置して, 実行権限を与えた後, /usr/local/bin/sshにパスを通せば良いでしょう.

なお, Mackerelで管理しているサーバが入れ替わるなどしてIPアドレスが使われなくなる事は多々あると思うので, 「ホストの一覧を表示」するスクリプトが実行される度に/usr/local/bin/sshの中に存在するファイルを全て削除して, 都度生成しなおすようにしています.

結果

こうすることによって, 例えば「踏み台サーバ」から10.0.123.456というホストに接続したいのであれば, 10.0.123.456とタイプするだけで接続することができるようになりました.

更に, 10.0.辺りまで入力して「TAB」キーを押せば, よしなに補完してくれるので, 「踏み台サーバ」から目的のサーバに移動するのが非常に簡単になりました.

非常に細かいTipsではあるのですが, チームメイトからの評判? は非常に良くて, 便利だと思ったので紹介させて頂いた次第です.