糸電話式のアレ

プログラミングのこと。毎日のこと。書いています。

最近の自分の記事の紹介とか君お仕事何やってんの?とかをね

どうもえいやです。

適当にいろいろやってる感じのプログラマーです。

以前はブログとかの選択肢って限られていたので、はてダやはてブロで記事を書くことが多かったんですが、ここ最近(数年単位で)はめっきりでした。

最近は、技術関係であればQiitaとか会社ブログで(これははてなだけど)、個人的な内容だとInstagramとか、Facebookでの共有(記事じゃないけど)やらで書くことが多くて、自分のはてなブログでは書くことがあまりありませんでした。

なので、一旦ここらで最近の記事とか、やってることをまとめておきますね。

投稿が古い記事でも、最近も引き続きやっている内容であれば紹介しておきます。

それぞれの記事の背景とか、仕事と関係があれば会社ブログで他の人が書いたものも合わせてまとめてみます。

適当にいろいろやってる感じのプログラマーのスキルセットとかどうなってんのという参考になる気もしています(いちいち書いてると紙面にキリがないので一部だけど)。

仕事/技術 関係の記事まとめ

相変わらずお仕事のメインはJVM系のWeb開発を行っているんですが、それに関連する記事が以下です。

  1. NginxのTCP Proxy機能とMail Proxy機能を使って常にSMTPをlocalhost:25で受けられるようにする - Qiita
  2. 18080でJMX接続を待つ踏み台越しの複数のJavaApplicationサーバにローカルマシンから同時に接続する - Qiita
  3. Gradle3.4のIDEプラグインがバグっていてIntelliJでデバッグが不可になる - Qiita
  4. Java8になってから開発者は色々と楽になった、のだろうか?Spring BootでWebアプリを作って検証してみた - astamuse Lab
  5. KotlinでJVMのWebApplication開発は楽になるのだろうか。検証してみている。 - astamuse Lab
  6. Elasticsearchをメモリの足りない環境で動かしているとDisk Fullになる。 - Qiita
  7. Elasticsearch 2.0 + Kibana 4.2使ってみてるよ - Qiita
  8. Kibana4でnot analyzedなFieldに対してフィルタをかけたいときの注意点 - Qiita
  9. Web画面自動テストフレームワーク「Geb」の紹介 - astamuse Lab
  10. Groovyのちょっとしたこと「Gebによるテストについて」 - Qiita
  11. Groovyのちょっとしたこと「gebでhtmlUnitのオプションを設定する方法」 - Qiita
  12. SonarQube - sonar-pmd-pluginのアップグレード(2.2->2.3)でエラー - Qiita

さて、記事を書くに至った背景ですが、1と2はほぼ同時期に書いた記事です。 この記事を書いたとき、自社サービスのインフラ環境を一括してオンプレからGCPに移行するということをやっていました。

記事の背景 1)NginxによるMail Proxy機能の設定

qiita.com

1の記事は、GCP移行の途中でメールサーバのIPやドメイン名が変わるということがあったときにやった内容を記事にしました。メールサーバの設定を素直にアプリケーションに書いていた場合、いちいちアプリケーションの(設定ファイルの)再デプロイとか再起動とかをやらなきゃいけなくて面倒だなぁ、と思ったのでやってみたことです。

なにをやったのかというと、NginxのTCPプロクシを使ったメールプロクシを設定してみたという話です。詳細は記事を参照していただきたいので割愛します。

とりあえず、この設定を行うことで、アプリケーションサーバからは常に自身の25番ポートでSMTPサーバが立ち上がっているように見えます。

なので、アプリの設定が簡単になります。

それに加えて、Proxy側でログを取ることでアプリケーションがメールを送信する場面でいちいちアプリケーションログを書き出したりしなくても、アプリがいつどこにメールを投げようとしているのかのログが残る仕組みになっています。

あと、うちでは行っていませんが、メールサーバを複数台運用している場合、このProxy設定がそのままロードバランサーの設定としても使えます。

比較的お勧めできるNginxの利用方法です。

記事の背景 2)NginxのTCP Proxy機能を用いた、複数台JVMの監視設定

qiita.com

2の記事も、同じくNginxのProxy機能を使って実現している内容です。

こちらはGCP移行の前後でGCPに載せたアプリケーションが本番利用に耐えうるのか負荷試験および実動の調査を行う目的で、JMX監視を入れた際に行った設定です。

詳しくは記事の中身を見てほしいのですが、監視側となるローカルマシン上に立てたNginxでTCP Proxyを行うことで、ローカルマシンの一つのポート番号を用いて複数のアプリケーションサーバに対してJMX接続を行えるようにしたという話です。

Nginxの設定だけではなく、SSHポートフォワード、Hostsの設定などを組み合わせて実現しています。

監視に用いるポート番号が一つになることで、FWや踏み台サーバ経由などの環境においてインフラに穴を開けてもらう依頼が減るため便利です。

記事の背景 3)Gradleのバージョン検証

qiita.com

こちらはGCP移行とは関係ありません。僕のお仕事の一つとしてアプリケーションのビルド環境の整備というのがあるんですが、その時にバグを踏み抜いた話です。

会社ではビルドツールとして、Gradle、MavenScalaのプロジェクトではsbtを使っています。そのGradleの新しいバージョン(当時3.4)が出たので試してみたときの話です。

ちなみに会社ではGradleでビルドしているプロジェクトではIDEは主にEclipseを用いています。しかし、会社として開発環境には制限は特にありませんので、次点で使う可能性が高いIntelliJでも3.4のGradleプロジェクトのビルドを評価してみたところ、Gradle3.4プロジェクトがまともに開発出来ないということがわかりました。

追跡調査はしていないのですが、現在最新のGradleのバージョンは4.0なのですが、大丈夫になったのか気になるところです。

記事の背景 4,5) 開発言語の検証

lab.astamuse.co.jp

lab.astamuse.co.jp

こちらは会社ブログのために書いた記事ですね。開発およびデザインのメンバーでブログの順番と投稿期日というのが決まっているのがつらいところではあるのですが、検証の一部でできたところだけの報告というやや情けない記事になっています。

ブログの記事のために、キャッチ―なことをやろうとして普段使慣れてないフレームワークに手を出したりしてるのもよくないですね。

とりあえず、僕の仕事の中には、ビルド環境の整備というのが含まれていますが、その中には言語の選定も含まれています。まあ、別にみんな自由に好きな言語で書いていいんですが、一応、調査して導入したりするので、その調査の過程を記事にしたものです。

Scalaのプロジェクトもありますが、基本的にはJavaです。

Java8の場合は、選定もへったくれもなく不可避のバージョンアップなのですぐに対応したため、記事の時点で既に導入済みでしたが、KotolinについてはJavaを置き換えうるものとして検討の価値があったので調査していました。

なお、Kotlinについては引き続き注視していますが、一旦は採用を見送っています。

記事の背景 6,7,8) Elasticsearch/Kibanaの整備

会社では、アクセスログの記録と分析にElasticsearch/Kibanaを使っています。

その面倒を見ている折にいろいろあったことを記事にしたやつですね。これらの記事は随分古くなりましたが、役に立つこともあるかもしれません。

アクセスログの収集や解析が僕のお仕事で、いまも継続して面倒を見ているのですが、いろいろと厄介ごとが溜まってきたので、そろそろ仕組みを一度検討しなおしたい今日この頃です。

記事の背景 9,10,11) インテグレーションテストの整備

lab.astamuse.co.jp

qiita.com

qiita.com

会社のメンバーには専門のテストエンジニアがいません。なので、文字通りの意味で「ワタシハテストチョットデキル」僕が、テストフレームワークの導入や指標の分析やらもお仕事にしています。

僕のお仕事の範囲では、単体テストはGroovyで記述しています。テストフレームワークはSpockです。そして記事で紹介している通り、インテグレーションテストのフレームワークとして、同じくGroovyで記述するGebを用いています。

また、Gebのコードをテストコード化するため、Geb-Spockも導入しています。

記事では、Gebの基本的な記述方法なんかを紹介しています。

記事の背景 12) 静的/動的コード解析・テスト指標の分析

qiita.com

前述のとおり、テストをお仕事にしていますが、同じくコード品質の分析やらも仕事にしているので、指標の分析収集ツールであるところのSonarqubeなんかも整備していたりします。

Jenkinsと合わせて、CIのサイクルに取り入れて運用しています。

もっとコード品質とか分析とかの記事は書いているような気がしてましたが、これしか見つかりませんでしたね。

ほかの記事

Qiitaとか眺めてくれれば、適当にやってたことの痕跡が残っています。

上記以外にフロントエンドでもなんかやってますが、サーバーサイドのエンジニアなもんで、あんまりまともな記事はないです。(上のもまともかどうか怪しいもんだが)

関連の書籍とか

上のような内容を自分で本を買って勉強したい人もいるかもなので、関連書籍も紹介しておきますね。

Webアプリケーション構築

JVMでWebアプリケーションを構築する場合の定番となる技術を身につけられるのは。

ログ分析・アクセス解析

ログ可視化なんかは普通インフラエンジニアのスキルなんだけどね。

定番の本といえば、養成読本。これさえ読めば大体大丈夫。

Elasticsearch/Kibanaで収集・解析しているのでその最新を。Webのドキュメントでも十分だけどね。

CI関係(ビルド・テスト)

ビルドツールの学習と、継続的インテグレーションの関連書籍です。コード品質のための本とかも。

ビルドツール入門は、JVM系の言語でのビルドツールの選択肢を網羅的に学習できます。Gradleの定番書籍はやや内容が古くなってきたので紹介から漏れています。

Jenkinsの本はわりと定番ですね。

他、品質のためにはある程度知識がいるので、いろいろ読んどくといいんじゃないかな。

他のお仕事

まぁ、人手がないんでね。上記のほかにも植木の手入れとか、いろいろやってます。

とりあえず、最近はこんな感じかな。

ブログを仕切り直しますね

古くなってむしろ有害になってきた内容も多いので、ブログを一旦リセットして仕切り直します。