Blogフリュー株式会社の技術ブログです2015年01月8日GitBucketでコードレビューGitOSS明けましておめでとうございます。久々の投稿となってしまいましたが、今年も元気に開発して、たまったノウハウをこのブログに投稿していこうと思います。追加されて、嬉しさのあまりブログ記事にしてしまいました。さんが開発してOSSとして公開されているGitHubクローンのWebアプリですScalaで書かれていて、単体のjarでも実行できるので、お試し導入が非常にしやすいというメリットがありますGitHubのクローンなので、GitHubでできることは大体できますただ、version2.6までは、コミットに対してコメントする機能がありませんでしたというのが、GitBucketの主な特徴でした。社内で利用するのに最適なGitHubクローンと言えます。登場したコメント機能つい先日、2014年12月29日にGitBucketの最新バージョン2.7がリリースされました。コミットおよびdiffへコメントを付与する機能が追加されました。これによって、ついにGitBucket上でプルリクエストをコードレビューしてマージすることができるようになりました。使ってみる早速、GitBucket内のリポジトリで管理しているドキュメントをちょっと修正してプルリクエストを出してみました。ご覧のとおりプルリクエストの画面にコメントが一覧表示されています。このうち、一番下のコメントは、コミットのDiff表示内にインラインで投稿したコメントでしたーということで、完璧です。まとめというわけで、ついにGitBucketにコメント機能が追加されました。これで、社内OSSが活性化すること間違いなしです。(ほんとか?)GitBucketを導入されている方は早急なアップデートを、導入検討中の方は早急な導入をオススメします。MarkDownに関するセキュリティ問題の修正が含まれているそうなので、早めにアップデートした方が良さそうです。今回のバージョンのその他の内容については、Issueの一覧にまとまっています。以前は、GitBucketにコメント機能を追加するには、かなりJavaScriptでがんばる感じになるんだろうと思っていました。実際、@takezoenさんも2.7のリリース記事内で<code>これはGitBucketの開発開始当初からやりたいと思っていたのですが、見るからに面倒そうな機能だったのと、diffの表示にjsdifflibというJavaScriptを使っており、将来的にこれをどうするのかということに結論を出せずにいたため手つかずのままここまで来てしまっていました。</code>12<code>これはGitBucketの開発開始当初からやりたいと思っていたのですが、見るからに面倒そうな機能だったのと、diffの表示にjsdifflibというJavaScriptを使っており、将来的にこれをどうするのかということに結論を出せずにいたため手つかずのままここまで来てしまっていました。</code>と、jsについて言及されています。コメント機能のコミットを見ると、意外とJavaScriptの変更は少なかったです。GitBucketインストールのAnsible化インラインコメントの画像に書いてますが、GitBucketのインストール/アップデートをPlaybookにまとめようと思います。最近、ScalaよりAnsibleのPlaybookを書いてる時間の方が多いので、勢いに任せてやってしまって、いずれここでご報告しようと思います。その1OSSツールお久しぶりです。乙女ゲーム開発チームの国平です。そのレポートを投稿します。EMLauncherとはEMLauncherはKLabさんがOSSとして公開されているAndroid/iOSのベータアプリ配信ツールです。同種のツールにはTestFlightやDeployGateなどがあります。詳細については、KLabさんの公式情報を参照ください。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インスタンスを立ち上げるのが非常に楽です。「EMLauncher」を公開しました特に、アクセスが集中したり、マシンリソースを必要とするようなことはないので、フリューではt1.microで運用しています。この点は、KLabさんでも同様だそうです。最新版に更新して利用するのが良いでしょう。pop`データベースの更新バージョンアップによって一部MySQLのテーブル定義なども変更になっています。alter_XXXX.sqlのようなファイルをMySQLに流し込んでやれば、EMLauncherのバージョンにあった状態にDBを更新することができます。用意されているAMIを利用しない場合は、READMEにしたがって環境構築を行う必要があります。README以外にも、こちらの記事も非常に参考になります。EMLauncherをVagrant/CentOS環境で試してみる(未完成)注意が必要かもしれないのは、PHPのバージョンが5.3以上である必要がある点です。なんらかの事情で古いOSを利用される場合には注意してください。ユーザ登録EMLauncherはユーザの認証に、Googleアカウントを利用するか、メールアドレスとパスワードを登録して認証するかを選択することができます。KLabさんでは、Googleアカウントを利用しているようなのですが、フリューではメールアドレスとパスワードを利用してユーザ認証を行っています。設定ファイルなどを読むと、ちゃんと使い方が書いてあるのですが、ユーザ認証にメールアドレスとパスワードを設定する場合に、そもそもユーザ登録はどうしたらいいのか...という問題があると思います。EMLauncherではユーザ登録の画面などは用意されていないので、MySQLで直接下記のようなinsert文を発行してユーザ登録を行います。'');このようにして、メールアドレスの登録を行った後、EMLauncherにブラウザでアクセスして、ログイン画面を開きます。password」というリンクがあるので、そこからパスワードリセット画面を開いて、先ほど登録したメールアドレスを入力します。「送信」ボタンを押すと、パスワードの再設定URLが埋め込まれたメールが届くので、パスワードを設定してください。パスワードの設定ができれば、改めてログイン画面に進んで、メールアドレスとパスワードでログインすることができます。EMLauncherRegisterユーザを追加するたびに、MySQLに接続してInsert文を発行するのは面倒なので、EMLauncherのユーザ登録を行うツールを開発しました。本当は、EMLauncher上で登録画面を作るなどして、PullRequestを送れればよかったのですが、残念ながら私はPHPは読めるものの、ロクにかけないので、EMLauncherとは別のアプリケーションとしてRubyで実装しました。EMLauncherのユーザ登録システムを公開しましたREADMEにしたがって、インストールし起動しておけば、ブラウザでメールアドレスの登録画面を開くことができます。メールアドレスを入力すれば、データベースにアドレスが登録されて、EMLauncherからパスワードのリセットメールが届くので、パスワードを設定することができます。おわりに今回の記事では、EMLauncherの導入について、環境構築周りについてまとめました。EMLauncherは非常にシンプルで使いやすくまとまっています。次回の記事では、アプリのデプロイから配布について、Jenkinsとの連携など、フリューでのやり方についてご紹介しようと思っています。frameworkScala皆様、お久しぶりです。この度、弊社で開発し実際のプロダクト上で利用されているplay-velocity-pluginをオープンソース化することができました。play-velocity-plugin弊社では初のOSSプロジェクトとなります。上で動作するVelocityTemplateプラグインです。今日は、このプロジェクトのメイン開発者直々の押し付...ぢゃない、指名を受けてプラグインの紹介をさせて頂きます。前回の記事にあります通り、弊社では現在ソーシャルゲーム開発において、Play!Framework2とScalaを用いた開発を行なっています。そのことについては、粕谷がPlay!Framework勉強会第3回で導入事例を発表させていただきました。Kasuyaこの資料でも、play-velocity-pluginの公開については言及されていますが、ついに実現しました。今回は、このプラグインを導入によるメリットについて宣伝させていただこうと思います。ScalaTemplateをやめたのかPlay!Frameworkは基本的にはフルスタックのWebフレームワークです。そのため、テンプレートエンジンについてもデフォルトでScalaTemplateを利用することができます。engineこのScalaTemplateの特長として、Scalaの強力な構文が利用できるコンパイルされることによりバグが回避されるといったメリットがあります。コンパイル時にきっちりと変数がセットされることや、変数の型、メソッドやフィールド呼び出しの記述ミスがチェックされるので、バグの入り込むスキを少なくしてくれます。HTMLのちょっとした変更でもコンパイルが要求されるという問題が発生してしまいます。その他にも、ScalaTemplate採用プロジェクトがある程度進行した時点で起こった問題として、テンプレートファイルがすべてコンパイル対象となってしまうので、コンパイルの際に非常に多くのマシンリソースが要求されてしまいました。3年前のPCのマシンスペックではコンパイルに10~15分かかることもあったようです。デフォルトのJVMへのメモリ割り当てでは容量が足りずコンパイルが失敗するため、ビルドスクリプトを直接編集して利用メモリを増やすという対応も必要となりました。このような問題があり弊社で以前から利用実績のあるVelocityをテンプレートエンジンとして採用することとなりました。Velocityの特長VelocityはApacheFoundationで公開されているJavaベースのテンプレートエンジンです。Velocityもともと、弊社ではPlay!Frameworkの採用以前からS2ファミリーを利用しており、テンプレートエンジンとしてS2Velocityを利用していました。Webデザイナにも変更がしやすい(構文がわかりやすい)という特長があります。トレードオフとして、バグチェックが難しい記述が冗長になるという問題点もあります。Velocityはレンダリング速度が遅いのではないのかという懸念もありましたが、Velocityを採用する際のベンチマークからも十分な速度でレスポンスを返せることが証明されていますし、サービスを運営している中でレンダリング速度が問題になったことはありません。今回は、ソーシャルゲームというサービスの特性上、リリースサイクルの短縮が大きな課題となります。そのため、変更からリリースまでの時間と、デザイナーの作業の行いやすさという点から比較します。デザインの変更から反映までのステップを下の図に示しますが、これだけでリリースサイクルという観点からはVelocityのメリットが充分に感じられると思います。まとめこのように、play-velocity-pluginはデザイナとの協業、リリースサイクルの短縮という点において利点があります。OSSとしてGitHubおよびMavenリポジトリに公開してありますので、Play!Framework2をご利用の方は、ぜひ試してみていただきフィードバックをいただければと思います。社内だけでなく、皆様のご意見も頂いた上で、今後このplay-velocity-pluginを育てていきたいと思っています。近いうちにplay-velocity-pluginを実際に利用するノウハウなどもこのブログで紹介していきたいと思います。