こんにちは!
昨日、入社 7 年目を迎えました共同開発部 開発担当の図子です。
Fenrir Advent Calendar 2014 の 5 日目を担当します。
私の「2014 年にグッときたコレ」というか 2014 年に 1 番緊張したのが一昨日弊社で開催された「フェンリルプロダクト技術勉強会」でのプレゼンです。
当日私から発表させていいただいた「iOS アプリのチーム開発における自動化」の内容と「フェンリルプロダクト技術勉強会」の様子をご紹介させていただきます。
フェンリルプロダクト技術勉強会
Fenrir Advent Calendar 「2014年にグッときたコレ」の1日目を担当した 金内 が中心となり、フェンリルで開発しているプロダクトに関する技術についてお話させていただき、フェンリルのことをもっと知っていただくために開催されました。アジェンダは以下の通りです。
- Sleipnir とレンダリングエンジン
- Picky-Pics を支える技術
- iOS アプリのチーム開発における自動化
- Xamarin によるクロスプラッフォームアプリ開発の実際
- 秘密の新プロダクトをちょっとだけ
- フェンリルエンジニアぶっちゃけ話
Sleipnir とレンダリングエンジン
宮本からは「Sleipnir とレンダリングエンジン」と題してお話をさせていただきました。Windows 版でいかにして Chromium を扱っているかや Sleipnir Mobile for iPhone / iPad の苦労話などを紹介させていただきました。特に宮本は iPhone / iPad 版 を担当していることもあり、iOS 8 から導入された WKWebView に関するノウハウの紹介は貴重だったのではないでしょうか。
Picky-Pics を支える技術
本岡からは「Picky-Pics を支える技術」ということでお話をさせていただきました。Picky-Pics の肝である SVG についての説明、ラスタライズの話、セキュリティについての話をさせていただきました。個人的には TypeSquare の利用に関する話がとても興味深かったです。
iOS アプリのチーム開発における自動化
こちらは私、図子が担当しました。私の所属する部署は自社プロダクトの開発をメインにしていないのでチーム開発における自動化をテーマにお話をさせていただきました。このエントリの後半にその時の内容をご紹介させていただきます。
Xamarin によるクロスプラッフォームアプリ開発の実際
宇佐見からは「Xamarin によるクロスプラッフォームアプリ開発の実際」と題してお話をさせていただきました。Xamarin の概要説明から MVVM などの実装の話もありました。技術面だけでなく Xamarin を取り囲むコミュニティについても話がありました。"Xamarin といえばフェンリル" と呼ばれるような存在になっていきたいという熱意に溢れた内容でした。
秘密の新プロダクトをちょっとだけ
木戸からは現在鋭意開発中の新プロダクトについて会場にお越しいただいた方々だけにその内容についてお話しさせていた来ました。このエントリでもその内容については残念ながら書くことが出来ません。近いうちに皆様にお披露目できそうですのでそれまでのお楽しみとさせてください。
フェンリルエンジニアぶっちゃけ話
金内からは「フェンリルエンジニアぶっちゃけ話」と題して、改めフェンリルってどんな会社なんだろう?エンジニアにとってのフェンリルとはどんな会社だろうか?という目線でお話しさせていただきました。デザインや開発環境の話がありましたが、
- 開発中の画像リソースのない素っ気ないアプリがデザインが入ることで作っててもテンションがあがる
- たくさんの人に使ってもらえるプロダクト開発に関われる喜びと誇り
これらは個人的にすごく共感しました。
勉強会を開催してみて
フェンリル主催で弊社内で勉強会というのはほぼ初めてだったかと思います。会場のキャパシティの関係上あまり多くの方にお越しいただくことができなかったのが残念ではありますが、お越しいただいた方にフェンリルはどんな事をやっている会社なのか?というのが少しでも知っていただけたのかなぁと思います。今後もフェンリルをより知ってもらうため、関西の IT 業界を盛り上げるためにも勉強会を開いていきたいと思います。今回参加いただけなかった方々もぜひ次回に参加いただければと思います。
iOS アプリのチーム開発における自動化
ここからは私が勉強会当日にお話させていただいた内容について詳しく紹介していきたいと思います。私が行っている自動化の中から 4 つほどピックアップしていきます。
アプリバイナリ作成
iOS アプリのバイナリ作成を Jenkins で行っています。これはとても一般的な自動化対象のひとつだと思います。私の所属する共同開発部では QA チームが開発チームとは別に存在しています。QA チームのテスターがテスト対象となるアプリを簡単にインストールできるように自動化の仕組みを用意しています。Jenkins の画面からボタンをクリックするだけで最新のアプリバイナリが作成できるのでテスターだけでなくデザイナーにとっても開発中のアプリのデザインチェックが行えます。工夫しているところをあげると以下のような感じになります。
- ビルドのパラメータ化を使って任意のブランチをビルドできる
- ブランチの指定以外にもサーバの向き先の切り替えなども
- ipa ファイルに日付等の情報が入っているのでバグレポしてもらいやすくなる
- Redmine や Backlog にバグチケットをあげてもらう時に問題のアプリがわかりやすくなります
- アプリアイコンの画像変更
- 開発版のアプリとの混同を避けるために Jenkins 側でアプリアイコンに文字を被せるなど書こうしてパット見てわかるような差別化をしています。
アプリインストール専用ツールも用意しています。このアプリに Jenkins 上のアプリバイナリへのリンクをこのツールに与えると接続してるデバイスに簡単にインストールできるので開発者以外のチームメンバーにとって便利なツールとなっています。余談ですがこのツールは MonoMac で書かれています。
納品用ソースコードをまとめる
共同開発部ではクライアントによってはソースコード納品をすることがあります。ソースコードを納品可能な状態にまとめる作業も Jenkins で出来るようにしています。
- CocoaPods を使っている場合には pod install && pod update を実行して適切なライブラリ のソースコードも含める
- .git の削除
- その他デバッグ専用のライブラリなどの不要な記述を削除
最近では iOS アプリ開発で CocoaPods を使わないことはないという状況です。納品先であるクライアントが CocoaPods に詳しいとは限らないのでソースコードに適切なバージョンのライブラリをいれられるようにしています。
機能仕様書生成
機能仕様書のようなドキュメントを納品物として含めることがあります。過去には以下のような点で作業的にツライ感じでした
- Word や Excel だと差分・バージョン管理がつらい
- 個人的に使い慣れて無くてスピード Down
- フェンリルではほぼ全エンジニアが Mac
- Microsoft Office はいろいろつらい
そこで Markdown で記述したテキストを PDF 化できるような仕組みを Jenkins 側に用意しました。
- Pandoc を使って PDF 化
- LaTeX 環境を個々人で準備するのが大変なので Jenkins 側に集約
- TeX のテンプレートを使うことで共通フォーマット化
- 表紙やヘッダー、フッターなど
- 仕様書感の演出
仕様書感の演出というのは地味に重要です。Markdown 向けのエディタアプリには PDF エクスポート機能がありますがそれらは単純に HTML にレンダリングしてものを出力しているだけなので表紙もなければ目次もないことがあります。この仕組みだと表紙などがちゃんと生成されるのできっちりとしたドキュメントの体裁が整います。
Markdown で機能仕様書を書く利点として以下が挙げられます。
- プレーンテキストなので Git 管理でしやすい
- Diff みれる
- バージョン管理できる
- 記法も複雑ではないので誰でもかける
- もはや現代のエンジニアのたしなみ
- 好きなエディタでかける
- 画像のレイアウトも良い感じにやってくれる
もちろん良いところだけではなく欠点もいくつか挙げられます。
- Word みたいな細かい装飾は苦手
- 表の表示に難あり
- セル内の改行
- 横に長い表は紙面幅の問題で限界あり
- クライアントから Word か Excel を求められる場合もある
iOS ユーザシェアのスクレイピング
こちらはチーム開発とは関係ないかも知れませんがおまけ的に組み込んで使っています。最近では Apple が iOS のユーザシェアを公開してくれています。これを毎朝定期的にチェックしにいき更新があれば差分を一枚の画像にまとめてメールを流すようにしています。
余談ですが、このチェックツール自体は Objective-C で CLI ツールとして作っています。最近では Swift だと CLI ツールのような小物は作りやすくなっていますし、普段アプリ開発に使っている技術を生かして iOS アプリ以外のツールを作るのも楽しいです。
まとめ
紹介したものは自動化としては序の口レベルかも知れませんが、少しでもチームの個人が手作業でやっていることを共通で使えるように自動化することでチームでの開発業務の効率化を図っています。“作業” は単純化して機械にやらせてしまい、エンジニアやデザイナーはクリエイティブな事に集中できるようにしましょう。
また、チームでなくても自動化は便利ですので個人でもトライしてみるとおもしろいと思います。
普段の開発と離れてたまには息抜きがてら、自動化はいかがでしょうか?
フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!