年末に1年分の振り返りやってみたんですが,まとめるのがクソ面倒(&記憶が吹っ飛んでる)ので,月次でまとめることにしました.
何ヶ月続くか不明ですが,とりあえず今月分を.
やったこと
Apache & Nginx
- サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design p.../技術評論社

- ¥3,129
- Amazon.co.jp
- ハイパフォーマンスHTTPサーバ Nginx入門/アスキー・メディアワークス

- ¥3,150
- Amazon.co.jp
- マスタリングNginx/オライリージャパン

- ¥3,150
- Amazon.co.jp
年末に宣言していたとおり,ApacheとNginxの本を購入.
さらっと読み流すものの,Nginxの理解はまるでできていません.
AWSのインスタンス立てて,マスタリングNginxの始めのページの方をちょろちょろっといじって,location, serverディレクティブの階層関係はとりあえず理解しました.
なにげに初AWSで,アクセスログ&セキュリティログみるとおびただしい量のログ流れてて,マジ怖ぇーって体験をした感じです.
うかつにポート開けれなくて,はじめはRabbitMQとか建てようと思ってたんですが,AWSでやるの諦めました
(社内クラウドやVagrantで建てたVMにRabbitMQサーバ建ててます)
Spring 4 & Spring Boot
1月に日本オラクル本社で開催された【東京】JJUG ナイトセミナ 「Spring Framework 特集」 に参加してきました.
最近のSpring関係で話題なのが,Spring 4のリリースで,なんとiBatisとStrutsのサポートを終了するという話を聞いてきました.
社内では Spring + Struts + ibatis というプロジェクトもちらほらあり,Spring 4移行は結構骨が折れそうなイメージを持ちました.
Spring的には「Hibernate使え」とのことなので,そういう流れになるといいなぁ・・・
もうひとつの目玉がSpring Bootで,これは自分的に結構気に入ってます.
というのも,ウェブアプリケーションをスタンドアローンで起動できるというヤバい機能を持っているところに惹かれました.
通常,JavaでWebアプリケーションプロジェクトを開発して動作確認するには,Eclipseを使い(すでにここでイケてない),Tomcatサーバを設定し,プロジェクトとサーバを紐付けて,サーバを起動する,という手順が必要です.
最近では,Intellijもボチボチ普及し始めてきてるのですが,上記のような手順は解消できず,「Intellijで開発」→「Eclipseを立ち上げてサーバ起動して動作確認」という,なんとも頭の悪い方法で開発せざるをえません(実際やった)
ところが,Spring Bootを使うとこの問題が解決されます. エントリーポイントのクラスを用意しておき,mainメソッドを実行するだけでデプロイ済みのTomcatサーバが立ち上がってしまいます!!!
@ComponentScan(basePackages = {"my.springboot.sample"})
@EnableAutoConfiguration()
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
これは非常に便利で,サーブレットコンテナ自体もバージョン管理システムで共有可能になる(Mavenの依存関係として保持)上,「このmainメソッド実行したらTomcatサーバ立ち上がるしー」とだけ言えばいいので,引き継ぎが楽になるという利点があります.
社内でSpring Boot広めていきたいのですが,残念ながらSpring BootはSpring 4以上にのみ対応しており,上記で述べたとおりiBatisが使われている以上,移行できないという問題に直面しています.
新規Springプロジェクトでは,ぜひともSpring Bootを採用してほしいです(切実).
余談ですが,社内で数少ないiBatis & Strutsを使っていないプロジェクトをブランチ切ってSpring Bootに適応させてみました.
ロギングプラグイン周りの依存関係やSpringのApplicationContextを読み込ませる辺りでかなり骨が折れましたが,一応動作するようになりました.
AMQP and MQTT, with RabbitMQ
最近のはてダでMQTTの話がボツボツ出始めたので,流行りに乗っかって勉強しました.
まーやっぱアレです.既に実装されたものがあるなら,使って体系的に覚えるほうが理解が進みますね.
今回本当にそう痛感した理由が,MQTTプロトコルでRabbitMQをBroker(メッセージ仲介役.キューとかを持ってる)としてメッセージパッシングやってみたとき,Brokerでどういう挙動をしているか観察したことによります.
デフォルトでAMQPをサポートしているRabbitMQでは,プラグインを利用することでMQTTプロトコルも利用できるようになります.
そのとき,RabbitMQでは,AMQPの仕組みを利用してMQTTプロトコルを処理するように実装されているため,見かけ上はMQTTプロトコルを捌くブローカーですが,内部ではAMPQを処理しています.
プラグインがうまいことやってくれてる感じですね.
そのため,MQTTプロトコルで通信したときの様子をrabbitmqctlコマンドで状態を確認したところ,AMQPの仕組みについて理解が深まりました.
なんとも不思議な順序ですが,AMQPの理解が進んでとても満足しています
半分ぐらいは理解したので,あとは疑問に思ったところを実際動作させて結果を見て仕組みを知る,という流れで理解を深めていきます.
ちなみに,この辺は日本語ドキュメントが非常に少ないので,実際AMQP/MQTTのクライアントのコード追ったほうが早いと思ってます.
来月に向けて
プログラミング言語 Erlangの習得
「RabbitMQでMQTT動作させてるときって内部ではAMQPとして動いてるのかなー」ってつぶやいたら,「RabbitMQのMQTTプラグインに書いてるやろ.読めや」みたいな感じでリプライ飛んできたので(大幅な誇張表現あり),Erlang製のRabbitMQの仕組みの理解を深めるためにも,Erlangの習得は不可欠だと感じました.
飛行機本を本日Amazonで購入したので,明日の月初から触り始めていきます.
- プログラミングErlang/オーム社

- ¥4,620
- Amazon.co.jp
目標は.「え???今どきLisp???wwwwwwマジウケルwwwwww」とLisperの皆さんを煽るレベルにまで使いこなせるようになるところです.
Serverspec & Chef
今月から,サーバの移設タスクがどっと来るので,いい機会なのでServerspecのテスト&実行環境と,Chefのレシピをゼロから作ります.
Chefは社内でも実績多いですが,Serverspecはまだ1プロジェクト程度なので,これを気にどんどん広めていくつもりです.
NWの制約的に難しくなる可能性もあります(インフラチームのポリシー)が,Jenkinsからserverspecのテストを叩ける状態にまで持っていければ,おそらく万全でしょう.