Furyu

[フリュー公式] Tech Blog

フリュー株式会社の技術ブログです

2015年01月8日

kunihira

GitBucketでコードレビュー

GitBucketGit

明けましておめでとうございます。国平です。 久々の投稿となってしまいましたが、今年も元気に開発して、たまったノウハウをこのブログに投稿していこうと思います。

今回は、以前ご紹介したGitBucketに、みんなが渇望していた あの機能 が追加されて、嬉しさのあまりブログ記事にしてしまいました。

GitBucketのおさらい

  • GitBucketは@takezoen さんが開発してOSSとして公開されているGitHubクローンのWebアプリです
  • Scalaで書かれていて、単体のjarでも実行できるので、お試し導入が非常にしやすいというメリットがあります
  • GitHubのクローンなので、GitHubでできることは大体できます
  • ただ、version2.6までは、コミットに対してコメントする機能がありませんでした

というのが、GitBucketの主な特徴でした。 なので、社内で利用するのに最適なGitHubクローンと言えます。

ついに登場したコメント機能

つい先日、2014年12月29日にGitBucketの最新バージョン2.7がリリースされました。 @takezoenさんのブログでも目玉機能として紹介されていますが、 ついに、コミットおよびdiffへコメントを付与する機能が追加されました。

これによって、ついにGitBucket上でプルリクエストをコードレビューしてマージすることができるようになりました。

さっそく使ってみる

早速、GitBucket内のリポジトリで管理しているドキュメントをちょっと修正してプルリクエストを出してみました。 ご覧のとおりプルリクエストの画面にコメントが一覧表示されています。

PullRequest


このうち、一番下のコメントは、

InLineComment

コミットのDiff表示内にインラインで投稿したコメントでしたー


ということで、完璧です。完璧すぎます。

まとめ

というわけで、ついにGitBucketにコメント機能が追加されました。 これで、社内OSSが活性化すること間違いなしです。(ほんとか?)

GitBucketを導入されている方は早急なアップデートを、導入検討中の方は早急な導入をオススメします。 特に、既にGitBucketを導入されている方は、 MarkDownに関するセキュリティ問題の修正が含まれているそうなので、早めにアップデートした方が良さそうです。

今回のバージョンのその他の内容については、Issueの一覧にまとまっています。

おまけ

コメント機能の中身

以前は、GitBucketにコメント機能を追加するには、かなりJavaScriptでがんばる感じになるんだろうと思っていました。 実際、@takezoenさんも2.7のリリース記事内で

と、jsについて言及されています。

しかし、コメント機能のコミットを見ると、意外とJavaScriptの変更は少なかったです。

GitBucketインストールのAnsible化

インラインコメントの画像に書いてますが、GitBucketのインストール/アップデートをPlaybookにまとめようと思います。 最近、ScalaよりAnsibleのPlaybookを書いてる時間の方が多いので、勢いに任せてやってしまって、いずれここでご報告しようと思います。 (ひょっとしたらもう誰か公開されてるかもしれませんが、勉強のため自作します)

関連記事


2014年07月16日

kunihira

EMLauncher導入記 その1

お久しぶりです。
乙女ゲーム開発チームの国平です。

今回は、Android/iOSのテストアプリの社内共有のためにEMLauncherを導入したので、 そのレポートを投稿します。

EMLauncherとは

EMLauncherはKLabさんがOSSとして公開されているAndroid/iOSのベータアプリ配信ツールです。 同種のツールにはTestFlightやDeployGateなどがあります。 詳細については、KLabさんの公式情報を参照ください。

KLab ニュースリリース: http://www.klab.com/jp/press/140304.html GitHub: https://github.com/KLab/emlauncher

導入の経緯

もともとは

もともとフリューでは、AndroidアプリとiOSアプリで分けて管理・インストールを行っていました。

Androidアプリ

Androidアプリについては、Jenkinsでビルドが完了したらapkファイルをAWSにデプロイして、そこからDLしてプレイするというように配布していました。 セキュリティ的には、apkのダウンロードURLに対して、nginxの設定でIP制限を掛けて社内のwifiアクセスポイントからのみDL出来るようにして、実機に流し込みをしていました。

iOSアプリ

また、iOSアプリについては、JenkinsでビルドしたipaファイルをJenkinsからDLしてローカルPCに保存し、iTunes経由で実機に流し込んでいました。

問題点

しかし、この方法ではAndroid・iOSでインストール手順が異なりますし、特にiOSのインストールは一度ローカルPCにapkをダウンロードするなど手順が面倒という問題がありました。
特に、フリューの乙女ゲームも着々とタイトルが増えてきて、関係者の人数も増えてきたので、手軽にテストアプリを配布できる仕組みが必要になってきました。

そこでEMLauncher

そこで何か方法がないかと検討を始めたタイミングで、EMLauncherがOSS化し、さらに、KLabさんの社内での運用などをヒアリングする機会に恵まれたので、フリューでも導入することになりました。

環境構築

EMLauncherをもっとも簡単に利用するには、公開されているAMIを元にEC2インスタンスを立ち上げるのが非常に楽です。
DSAS 開発者の部屋| Android/iOS向けテストアプリ配信ツール 「EMLauncher」を公開しました
特に、アクセスが集中したり、マシンリソースを必要とするようなことはないので、フリューではt1.microで運用しています。 この点は、KLabさんでも同様だそうです。

バージョンアップ

ただ、AMIに載ってるEMLauncherのバージョンが古かったりするので、EMLauncherのソースフォルダ /home/ohoflight/emlauncher に移動して、git pull して最新版に更新して利用するのが良いでしょう。

データベースの更新

バージョンアップによって一部MySQLのテーブル定義なども変更になっています。
テーブルの追加や変更のSQLは /home/ohoflight/emlauncher/data/sql/ においてあります。 alter_XXXX.sqlのようなファイルをMySQLに流し込んでやれば、EMLauncherのバージョンにあった状態にDBを更新することができます。

AMIを利用しない場合

用意されているAMIを利用しない場合は、READMEにしたがって環境構築を行う必要があります。 また、README以外にも、こちらの記事も非常に参考になります。

Qiita| EMLauncherをVagrant/CentOS環境で試してみる(未完成)

注意が必要かもしれないのは、PHPのバージョンが5.3以上である必要がある点です。 なんらかの事情で古いOSを利用される場合には注意してください。

ユーザ登録

EMLauncherはユーザの認証に、Googleアカウントを利用するか、メールアドレスとパスワードを登録して認証するかを選択することができます。 KLabさんでは、Googleアカウントを利用しているようなのですが、フリューではメールアドレスとパスワードを利用してユーザ認証を行っています。

よくよく設定ファイルなどを読むと、ちゃんと使い方が書いてあるのですが、ユーザ認証にメールアドレスとパスワードを設定する場合に、そもそもユーザ登録はどうしたらいいのか…という問題があると思います。 EMLauncherではユーザ登録の画面などは用意されていないので、MySQLで直接下記のようなinsert文を発行してユーザ登録を行います。

このようにして、メールアドレスの登録を行った後、EMLauncherにブラウザでアクセスして、ログイン画面を開きます。
Loginボタンの横に「forget password」というリンクがあるので、そこからパスワードリセット画面を開いて、先ほど登録したメールアドレスを入力します。
「送信」ボタンを押すと、パスワードの再設定URLが埋め込まれたメールが届くので、パスワードを設定してください。

パスワードの設定ができれば、改めてログイン画面に進んで、メールアドレスとパスワードでログインすることができます。

EMLauncherRegister

ユーザを追加するたびに、MySQLに接続してInsert文を発行するのは面倒なので、EMLauncherのユーザ登録を行うツールを開発しました。
本当は、EMLauncher上で登録画面を作るなどして、PullRequestを送れればよかったのですが、残念ながら私はPHPは読めるものの、ロクにかけないので、EMLauncherとは別のアプリケーションとしてRubyで実装しました。

EMLauncherRegister Kuchitama Tech Note | EMLauncherのユーザ登録システムを公開しました

READMEにしたがって、インストールし起動しておけば、ブラウザでメールアドレスの登録画面を開くことができます。
メールアドレスを入力すれば、データベースにアドレスが登録されて、EMLauncherからパスワードのリセットメールが届くので、パスワードを設定することができます。

おわりに

今回の記事では、EMLauncherの導入について、環境構築周りについてまとめました。 EMLauncherは非常にシンプルで使いやすくまとまっています。 次回の記事では、アプリのデプロイから配布について、Jenkinsとの連携など、フリューでのやり方についてご紹介しようと思っています。


2012年10月9日

kunihira

play-velocity-plugin公開!

皆様、お久しぶりです。

国平です。

さてこの度、弊社で開発し実際のプロダクト上で利用されているplay-velocity-pluginをオープンソース化することができました。

play-velocity-plugin

弊社では初のOSSプロジェクトとなります。

play-velocity-pluginはその名の通り、Play!Framework2 上で動作するVelocityTemplateプラグインです。

今日は、このプロジェクトのメイン開発者直々の押し付…ぢゃない、指名を受けてプラグインの紹介をさせて頂きます。

前回の記事にあります通り、弊社では現在ソーシャルゲーム開発において、Play!Framework2とScalaを用いた開発を行なっています。

そのことについては、粕谷がPlay!Framework勉強会第3回で導入事例を発表させていただきました。

Play勉強会 第3回 from Daisuke Kasuya

この資料でも、play-velocity-pluginの公開については言及されていますが、ついに実現しました。

今回は、このプラグインを導入によるメリットについて宣伝させていただこうと思います。

なぜScalaTemplateをやめたのか

Play!Frameworkは基本的にはフルスタックのWebフレームワークです。

そのため、テンプレートエンジンについてもデフォルトでScalaTemplateを利用することができます。

Play! The template engine

このScalaTemplateの特長として、

  • Scalaの強力な構文が利用できる
  • コンパイルされることによりバグが回避される

といったメリットがあります。

特に、コンパイル時にきっちりと変数がセットされることや、変数の型、メソッドやフィールド呼び出しの記述ミスがチェックされるので、バグの入り込むスキを少なくしてくれます。

しかし、粕谷の資料でも言及されているとおりトレードオフとして、

  • Scala構文がデザイナによる変更の容易性を下げている 
  • HTMLのちょっとした変更でもコンパイルが要求される

という問題が発生してしまいます。

その他にも、ScalaTemplate採用プロジェクトがある程度進行した時点で起こった問題として、テンプレートファイルがすべてコンパイル対象となってしまうので、コンパイルの際に非常に多くのマシンリソースが要求されてしまいました。

3年前のPCのマシンスペックではコンパイルに10~15分かかることもあったようです。

更には、デフォルトのJVMへのメモリ割り当てでは容量が足りずコンパイルが失敗するため、ビルドスクリプトを直接編集して利用メモリを増やすという対応も必要となりました。

このような問題があり弊社で以前から利用実績のあるVelocityをテンプレートエンジンとして採用することとなりました。

Velocityの特長

VelocityはApacheFoundationで公開されているJavaベースのテンプレートエンジンです。

Apache Velocity

もともと、弊社ではPlay!Frameworkの採用以前からS2ファミリーを利用しており、テンプレートエンジンとしてS2Velocityを利用していました。

このVelocityなのですが、特長として

  • スクリプト言語ライクに動作する(コンパイル不要) 
  • Webデザイナにも変更がしやすい(構文がわかりやすい)

という特長があります。

もちろん、トレードオフとして、

  • バグチェックが難しい
  • 記述が冗長になる

という問題点もあります。

また、Velocityはレンダリング速度が遅いのではないのかという懸念もありましたが、Velocityを採用する際のベンチマークからも十分な速度でレスポンスを返せることが証明されていますし、サービスを運営している中でレンダリング速度が問題になったことはありません。

VelocityとScalaTemplateの比較

今回は、ソーシャルゲームというサービスの特性上、リリースサイクルの短縮が大きな課題となります。

そのため、変更からリリースまでの時間と、デザイナーの作業の行いやすさという点から比較します。

デザインの変更から反映までのステップを下の図に示しますが、これだけでリリースサイクルという観点からはVelocityのメリットが充分に感じられると思います。

まとめ

このように、play-velocity-pluginはデザイナとの協業、リリースサイクルの短縮という点において利点があります。

既にOSSとしてGitHubおよびMavenリポジトリに公開してありますので、Play!Framework2をご利用の方は、ぜひ試してみていただきフィードバックをいただければと思います。

社内だけでなく、皆様のご意見も頂いた上で、今後このplay-velocity-pluginを育てていきたいと思っています。

また、近いうちにplay-velocity-pluginを実際に利用するノウハウなどもこのブログで紹介していきたいと思います。