UZABASE Tech Blog

株式会社ユーザベースの技術チームブログです。 主に週次の持ち回りLTやセミナー・イベント情報について書きます。

エンジニア向けMeetupイベントレポート 第2回:『Java開発最前線』

SPEEDA Techチームの清水です。

先日レポートいたしましたユーザベースMeetup、第2回目のレポートをお届けします。
第1回レポートはこちら↓ tech.uzabase.com

開催内容:『Java開発最前線』

第1回目Meetup開催の1ヶ月後、ユーザベースのメイン開発言語であるJavaをテーマとして第2回を開催しました。
uzabase-meetup.connpass.com

第2回目も大盛況で、前回から応募枠を大幅に増やしたにも関わらず、すぐに満員となりました。ありがとうございます!
ユーザベースでは開発に使用するJavaのバージョンはすべて最新のJava8に更新済みで、その中で最新の機能をどのように活用しているかという点にスポットをあてた発表となりました。
また、もともとRubyをこよなく愛していた弊社エンジニアが、いかにJavaを(も?)愛するようになったかという発表もあり、これもなかなか興味深い内容でした。

第1回の「ちょっと発表が多すぎて疲れるかも」という反省をいかし、今回から発表枠は基本3つまでというスタイルにしました。
終わった後はピザとビールで乾杯!(そして写真を撮り忘れる・・・)
ご参加頂いた方、ありがとうございました!

今後の予定

前回のレポートでもお伝えしましたが、ユーザベースでは定期的にMeetupイベントを開催しています。
次回は7月7日の七夕、「大規模サービスを支えるインフラ」というテーマで開催します!
uzabase-meetup.connpass.com 6月30日現在、すでに枠は埋まっていますが、まだいけるかも・・・ぜひお気軽に参加ボタンを押してください!

エンジニア向けMeetupイベントレポート 第1回:『NewsPicks/SPEEDA「高速」成長の秘密』

こんにちは、SPEEDA Techチームで新規機能開発を担当しています清水です。

ユーザベースでは今、定期的にエンジニア向けにMeetupイベントを開催しています!
3月に開催をした第1回目から、ほぼ月1回のペースで開催しており、すでに開催数は3回を数えています。

今回はMeetupイベントの目的と、第1回の開催内容をレポートします。
(追って第2回・第3回のレポートもアップしますのでお楽しみに!)

目的

弊社では、様々な先進的な取り組みをしているにも関わらず、なかなか「技術の会社」として認識をしてもらえていなかったりします。
なかには「サービスは外注していると思っていました」とおっしゃる方も・・・。
さすがにこれはまずいということで、もっとユーザベースという会社やカルチャー、雰囲気、そして社員のことを知ってもらうため(さらに言えば優秀なエンジニアの採用に繋げるため)、Meetupイベントを企画することになりました。

開催内容:『NewsPicks/SPEEDA「高速」成長の秘密』

記念すべき第1回目は「高速化」をテーマに開催しました。
uzabase-meetup.connpass.com

正直、「本当にみんな来てくれるんだろうか・・・」と不安でいっぱいでしたが、最終的には参加枠を大幅に上回るお申し込みをいただきました!
第1回ということでユーザベースのチーフテクノロジスト竹内やNewsPicksのCTO(ちょうどこの日就任した)杉浦らが登壇。
「高速化」という幅広いテーマも手伝って、ユーザベースで採用している全文検索エンジンElasticsearchの話から自動テスト、高速開発の話まで、バラエティに富む内容で発表させていただきました。
なかには当時開発中だったNewsPicksの新機能に関する発表もあり、盛りだくさんの内容となりました。

また、ユーザベースの外部パートナーでありClojureのContributorでもある株式会社シェルフ代表の矢野さんより、『オープンソース開発のすすめ』という内容でLTも行っていただきました!
オープンソース開発のすすめ

発表後のお楽しみ

ユーザベースMeetupでは、発表の後に参加者の皆さんと親睦を深める目的で懇親会を開催しています。
懇親会では、ピザとエビスビール(もちろんお茶もあります)をご用意しています!
こちらは懇親会の様子。
f:id:kaonash:20160627165330j:plain けっこう多めにピザをご用意しているはずなんですが、無くなるのが早い早い・・・現在ピザの増量を検討中です。

今後について

今後も定期的にMeetupイベントを開催していく予定です。
取り急ぎ、次回は7月7日の七夕、「大規模サービスを支えるインフラ」というテーマで開催します!
uzabase-meetup.connpass.com

今回も(大変ありがたいことに)すでに席が埋まってしまっていますが、直前で一定数キャンセルが出ることを考えると、まだギリギリ入れるはず・・・ぜひふるってご参加ください!

Hinemos5.0.1移行記(その2:保守サービスとエンタープライズオプションを契約)

ユーザベース インフラチームの小林です。

だいぶ時間が空いてしまいましたが、「Hinemos5.0.1移行記(その1:理想と現実の葛藤)」の記事から引き続き、Hinemos5.0.1への移行のお話です。



前回のおさらい

Hinemos環境をバージョンアップするために、以下の流れで行うことを考えていました。

  1. Hinemos5Managerを新規構築 、動作検証

  2. Hinemos3のデータをHinemos5に移行

  3. Hinemos3からHinemos5への順次切り替え

しかし、実際には思っていた通りにいかないことが判りました。

具体的には、3番目の「Hinemos3からHinemos5への順次切り替え」の部分で、以下の問題がでてきたというお話でした。

  • Agent用にサポート対象バージョンのOpenJDKを入れるか、OracleJDK1.8を使い続けるか。

  • Hinemos3とHinemos5のAgentが同居できるといっても、どちらかのインストールディレクトリを変えないといけない。



救世主が現る

前回の記事にも書いてありますが、アトミテックさんが上記の問題を解決してくれました。
もともと、Hinemos5が出る前から、データ移行の相談を何回かしておりました。 その際に、すごく頼りになりそうだったので
「データ移行+移行時のトラブルサポート」という形で、今回依頼をいたしました。
結果的にそれが大正解で、本当にいろいろなことをサポートしていただきました。

特に、OpenJDKを入れるかOracleJDK1.8を使い続けるかという問題を解決するうえで、非常に助かりました。 既存の環境で使用しているOracleJDK1.8を使い続けたかったのですが、これを短時間で動作検証するのは私達には不可能でした。
しかし、快くアトミテックさんにご対応いただけたおかげで、OracleJDK1.8でもHinemos5.0の動作が一通り問題ないことが判りました。
当然ながら自己責任の上で、弊社環境ではOracleJDK1.8でHinemos5.0のAgentを動かしてます(今のところ不具合はありません)。

OracleJDK1.8でHinemos5.0のAgentを動かすにあたって、何個か落とし穴がありましたが、そこら辺もご対応をいただいてます(起動shellにJavaのバージョンチェックがあったりなど)。

移行できたよ!

問題を踏まえた上で、HinemosのAgentは以下の手順で切り替えることになりました。

  1. Hinemos3.1のAgentのインストールディレクトリ変更

  2. Hinemos5.0のAgentをOracleJDK1.8で起動

  3. Hinemos3.1からHinemos5.0への順次切り替え


Hinemos3.1のAgentの変更に当たっては、Agentの再起動が入るのでできるだけ既存のジョブに影響が出ないように調整しながら行いました。 Hinemos5.0のAgentは既存のジョブがないので、一括で作業をしました。
ジョブの順次切り替えは、前回書いたように各ジョブネットは簡単な仕組みで連携していたため、一つのジョブネットがうまくいったら、Hinemos3側のスケジュールを無効化、Hinemos5側のスケジュールを有効化しながら、代替1ヶ月くらいかけて切り替えることができました。

その途中でもいろいろとあったのですが(Nagiosの監視用スクリプトのVerUpや、エラー時のジョブの挙動が変わってた事など)、一つ一つ真摯にご対応いただけたおかげで、非常にスムーズに作業が進みました。

結果、保守サービスとエンタープライズオプションの契約を結ぶ事に

おかげで、無事にHinemos5への移行ができたのですが、あまりにも真摯に対応していただいたので、アトミテックさん経由でHinemosの保守サービスとエンタープライズオプションの契約を結ばせていただきました。

保守サービスとエンタープライズオプションを契約すると、以下のメリットがあります。

  • 修正パッチを提供してもらえる
    →今回で言うと、Hinemos5.0.2のリリース前に、Hinemos5.0.1のメモリリークの修正パッチが提供されて、事前にその不具合を解消する事ができました。
  • エンタープライズオプションが使えるようになる

  • Hinemosでわからない事を相談できる

分からない事を相談できるという点が有難く、Hinemosの情報を検索しても出てこないことが多いのですが、何が起きても聞ける環境があると思えるだけで大きな安心感があります。

個人的に嬉しいのは、エンタープライズオプションを使って、更にHinemosの使える幅が広がりそうなので、いろいろ試していきたいと思ってます。
Hinemosの情報が意外と少ないので、弊社ブログでもHinemosユーザーの皆さんに有益な情報を発信できればと思っています。


今回の移行で思った事

今回移行をしてみてすごく実感したのが、「やはり、あまり一つの製品で凝った仕組みを作らない方が良いな」ということでした。
Hinemosの機能を試したいと言っておきながら矛盾する話ではありますが、うちはHinemosを使いこなしていなかったおかげで、移行に大きな工数がかからずに済んだと思っています。
Hinemosは確かに便利でまだまだ使いこなせる余地があると思っていますし、他の有償版のジョブ監視ツールももっと細かいところができるかもしれません。
この「細かいところ」が肝で、このせいで移行が大規模や製品選定のネックになる事が多い気がしています。

弊社のジョブの組み方は、最低限のジョブネットを作って、各ジョブネット間はファイル連携という単純な仕組みを用いています。
このファイル連携も、shellでファイル作成とファイル監視をしているので、Hinemosからみたらジョブの実行をしているだけになります。
おかげで、ジョブの切り替えタイミングに余裕を持たせることができたので、私を含めて2~3人程度でも余裕を持って切り替えることができたと思っています。
もし、この組み方がジョブ監視ツールの機能で、全部ジョブの前後関係を組んでいた場合、異なるHinemos間での先行条件はできないので、一括で変更をしないといけない状態でした。

極端な話をすれば、Hinemosから別製品に載せ替えることもできたと思います(ジョブデータの変換できればですが)。

そこら辺の自由度は最大限残しておくためにも、あまり凝った機能を使わずに、できるだけ単純な部分を組み合わせるのが良いのではないか、と実感した次第です。

そうはいっても、便利な機能は使うべきだと思うので、そこら辺を意識しながら、あまり依存しすぎることのないように使っていくことが大事かなと考えています。

今後の要望

上でいろいろ書きましたが、私自身はHinemosと末永く付き合うつもりでいます。
今後も長くおつきあいする上で、今回の移行で引っかかった以下の点を実現してもらえると、次回(何年後か判りませんが)のHinemosバージョンアップ作業のハードルがだいぶ下がるはずなので是非お願いしたいところです。

  • インストールディレクトリを/opt/hinemos_XXXみたいなバージョンごとに分けてほしい
  • Agentをインストールするときに、OpenJDKを/opt/hinemos_XXX以下に一緒に入れてほしい



エンタープライズオプションのExp/Imp機能の画面紹介

簡単に、エンタープライズオプションで使いたかったExp/Impについて紹介します。
このおかげで、ジョブの修正の工数が大幅に縮小されました。

オプションをインストールすると、こんな感じでメニューが増えます。 f:id:manabu-kobayashi:20160420202629p:plain
エクスポート・インポートの設定は、クライアント設定の画面から確認や変更ができます。
f:id:manabu-kobayashi:20160420202656p:plain
実際の画面はこんな感じ。ここらへんで、エクスポート・インポート・差分比較ができます。
f:id:manabu-kobayashi:20160420202707p:plain
変更用のExcelの画面はこんな感じで、
f:id:manabu-kobayashi:20160420202717p:plain
出力した内容との差分比較は、このようなCSVファイルで出力されて、変更されたところが一目でわかります (自分の作業が想定通りか一目でわかって便利です)。
f:id:manabu-kobayashi:20160420202911p:plain