Masteries

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

「mackerel-plugin-nature-remo」がmkr plugin installに対応しました

Mackerel UGとIDCFクラウド UGの合同イベントで, id:Songmu さんから「mackerel-plugin-nature-remo, 使いたいからplugin対応してよ」的なことを言われたので, 「やってみるか!」ということでやってみました. 成果物はこちら:

github.com

最初は「結構面倒そう?」と最初は思っていたのですが, 思っていた以上に簡単でした. というのも, サンプルリポジトリを使った丁寧な解説が用意されているので, それに沿って準備していけば準備については1時間もかかりません.

mackerel.io

今回は, ドキュメントを参考にして, このようなMakefileを作りました. ここまで用意すれば, あとはgitでタグを打って, make dist & make release でリリースが完了します. 見どころとしてはlinux/mipsleのバイナリも生成しているところで, 要するにEdgeRouter X用です.

...というわけで, これでmkr plugin install papix/mackerel-plugin-nature-remo というコマンド一発で, 「mackerel-plugin-nature-remo」のプラグインを簡単にインストール出来るようになりました. 次はmackerelio/plugin-registryに登録するところまでやってみたいと思っています(Pull Requestを送ってマージされるかどうかはわからない...).

「アジャイルな見積もりと計画づくり」読んだ

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~

  • 作者: Mike Cohn,マイクコーン,安井力,角谷信太郎
  • 出版社/メーカー: 毎日コミュニケーションズ
  • 発売日: 2009/01/29
  • メディア: 単行本(ソフトカバー)
  • 購入: 74人 クリック: 764回
  • この商品を含むブログ (226件) を見る

ここ半年くらい, スクラムマスターとして「アジャイルサムライ」や「カイゼンジャーニー」なども参考にして, チームにスクラムの導入を試みています. ある程度, チームの開発がうまく進んできていると思うのですが, とはいえ"見積もり"に関する部分について, もっとうまくやっていけるのでは? という気がしていました. そのときに, 確か id:daiksy さんに紹介頂いて読み始めたのが「アジャイルな見積もりと計画づくり」でした.

内容としては, 「アジャイルサムライ」や「カイゼンジャーニー」でも紹介されていた"見積もり"に関する内容を, 懇切丁寧に書かれている... という感じで, 特にユーザーストーリーに関する話題は, 今チームでも試行錯誤している部分だったので非常に参考になりました.

あとは, 「2週間 = 1スプリントを6回繰り返した後, 1週間を開発メンバーが自由なアクションをできる時間にするとバランスが良い」, といったやり方が紹介されていて, その辺りを参考にして会社の期末に1週間程度各々がやりたい事に取り組める時間を作る提案をしたところ, うまくOKが出て, コードの整備や実験的な機能の追加などに取り組めたので良かったです.

チームで開発していくにあたって, 「見積もりをして, 計画を作る」という所は結構根幹を担っていると思っていて, そういう意味ではチームが動き出す段階でしっかりした仕組み(フロー)ができていた方が良いし, それが定着してきた段階でガラッと変えるのは難しい(再び定着するまで時間がかかってしまう)ので, もしまた1からスクラムの仕組みを整える機会があったら, その時はこの本に目を通してからやり方を組み立てたいですね. そう考えた時に今のチームを見ると, 最初に組み立てたやり方が定着してきている状態なので, この本で得た知見を反映させるためにも, チームの変化(人事異動等)のタイミングなどを見計らいつつ, ちょっとずつ改良していくと良いのかなーと思ったりしています.

Perlで, あるクラスの親(継承元)を調べる

妙に詰まってしまったので備忘録的に書き記しておきます. さて, 次のような継承をしているPerlのクラスがあるとします:

My::Lib1 <- My::Lib2 <- My::Lib3

My::Lib3My::Lib2を, My::Lib2My::Lib1を継承している感じです. この時, 例えばMy::Lib3の親(継承元)はどこかを得るにはどうすればよいでしょうか?

解法1: ISAを見る

My::Lib3の継承元は, My::Lib3@ISAに入ります. なので, @ISAを無理やりに見るという手があります.

no strict 'refs';
my @isa = *{"My::Lib3::ISA"}{ARRAY};

@isaを見ると, このようになります(Data::Printerでダンプ):

[
    [0] [
        [0] "My::Lib2"
    ]
]

My::Lib3の継承元であるMy::Lib2が得られました.

解法2: mro::get_linear_isaを使う

id:akiym さんに教えてもらった方法ですが, mro::get_linear_isaを使う手もあります.

my @isa = mro::get_linear_isa("My::Lib3");

@isaを見ると, このようになります(Data::Printerでダンプ):

[
    [0] [
        [0] "My::Lib3",
        [1] "My::Lib2",
        [2] "My::Lib1"
    ]
]

こちらだと, My::Lib3の継承元であるMy::Lib2に加えて, その継承元であるMy::Lib1も得られるので, より便利ですね.

MySQLでテーブル名やカラム名に予約語を使うには?

最高の夏ことはてなサマーインターン2018が今年も開催されています. いろいろあって今年も講義を担当させて頂いており, 今回は何故かデータベースの講義をすることになりました.

その講義の途中, インターン参加者の方から, 「MySQLのテーブル名やカラム名に予約語は使えますか?」と質問をもらったところ, 「アー... どうでしたっけね...?」となってしまい, きちんとお答えできなかったので, 調べました.

結論としては,

にあるように, 引用符(`)で囲まれている場合は, 予約語もテーブル名やカラム名として使えます. MySQL 8.0.12で試すと, こういう感じなります:

mysql> create table int (i int);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int (i int)' at line 1

mysql> create table `int` (i int);
Query OK, 0 rows affected (0.11 sec)

EdgeRouter Xでsardineを動かす

Edgerouter Xにmackerel-agentを入れて, 家のNasneやNature Remoを監視しています. 特段不満はないのですが, 唯一挙げるとすれば mackerel-agent.conf にプラグインの設定を書いているので, NasneやNature RemoのメトリックがEdgeRouter Xのカスタムメトリックとして扱われる, というのがあります. 出来ればHomeなどのサービスを用意して, そのサービスメトリックとして投稿したい...

そういう時に使えるのが, fujiwaraさん謹製のsardineです. Mackerelのプラグインによって取得したメトリックを, CloudWatchに蓄積したり, Mackerelのサービスメトリックとして投稿したりすることができます.

github.com

次のような設定ファイルを書いて...

[plugin.metrics.NatureRemo]
command = "/path/to/mackerel-plugin-nature-remo -access-key=..."
destination = "Mackerel"
service = "Home"

次のようなコマンドで, 設定ファイルを読み込みつつ実行すると, serviceで指定したMackerelのサービスにプラグインの実行結果がサービスメトリックとして登録されます.

$ MACKEREL_APIKEY=... sardine -config /path/to/sardine.conf

こういう感じ. いかにも便利ですね.

f:id:papix:20180809120010p:plain

というわけで, sardineをEdgeRouter Xでも動くようにビルドしてみましょう. 結論から言えば, 次のようにビルドしてあげればOKです.

$ GOOS=linux GOARCH=mipsle go build -o sardine ./cmd/sardine/main.go

sardineという名前で, GOOS=linuxかつGOARCH=mipsleなバイナリが生成されるので, あとはscpなどでEdgeRouter Xに転送して実行すれば大丈夫でした.