株匏䌚瀟ZOZOのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟ZOZO

株匏䌚瀟ZOZO の技術ブログ

å…š1025ä»¶

VASILYでは、より良いアりトプットをするためにも デザむンむンプットの時間を週1回蚭けおいたす。 画面遷移であったり、ちょっずしたアニメヌションなど優れたUIをチヌムで共有し、 実際にiQONのUIやUXずいう郚分に反映しようず日々、詊行錯誀しおおりたす。 今回はその䞭で、VASILYデザむナヌチヌムが2月に デザむンむンスピレヌションを受けたアプリ をいく぀かご玹介したいず思いたす。 1. Spring Apple Design Award 2014にも遞ばれおいる、NY発の新コマヌスファッションアプリ。 ナヌザ発信のコンテンツをブランドが䞊手く掻甚する ずいう手法を取り入れおいたす。 買い物本来の楜しさを味わっおもらえるよう、あえおシンプルな構成 にしおいるそうで、党䜓的に 繊现で䞊品なアプリ ずいうむメヌゞを受けたした。 2. Storehouse 写真、映像、テキストを織り亀ぜながら1぀のストヌリヌを䜜るこずができたす。 自由にレむアりトやトリミング可胜なため様々な芋せ方が可胜です。 CEOが元AppleのUX゚バンゞェリスト ずいうこずもあり、公開されおいるストヌリヌは、どれも矎しく、 思わず自分も投皿したくなるのがこのアプリの魅力 です。 たた、ロヌディングアむコンの芋せ方もきちんずデザむンされおいたした。 Storehouseは Apple Design Award 2014 にも遞ばれおいるアプリ でもありたす。    3. Nat Geo View National Geographicが新しくリリヌスしたダむゞェストアプリです。 曜日ごずに厳遞されたNational Geographicの高画質な写真や映像を玹介しおくれたす。 厳遞されおいるずいうこずもあり、芋入っおしたう䜜品ばかりで、スクロヌルしたずきの パララックス感や、フォント遞び、マヌゞンの取り方などずおも参考になりたす。 たた、動画のサムネむルの芋せ方もただの静止画ではなく、 キャプチャヌ画像をアニメヌションで芋せ、再生しなくおも映像の内容が楜しめる ずいう郚分は他のアプリではあたりない手法だず感じたした。   4. YPlan 盎近にある楜しそうなむベントを玹介しおくれるアプリ。気になるむベントがあれば詳现情報を芋るこずができ、その堎でチケットも賌入可胜。 デザむンは 操䜜系のボタンたでアニメヌションを䜿甚 しおいたり、アクションシヌトたでもきちんずデザむンされおいお现かい郚分のデザむンにもこだわりを感じるアプリでした。 5. Timeline 歎史をたどるこずでコンテクスト文脈がわかるニュヌスアプリで、さたざたなゞャンルのニュヌスを幎衚でたどっおいけるのが特城です。 最近目にするカヌド圢匏のデザむンを採甚しおいるアプリ でもありたす。たた、ロヌディングアむコンのアニメヌションや、 コンテンツ間の切り替わりなどなめらかで䜿っおいお心地よいず思うアプリ でした。   6. August  音楜、写真、動画、テキスト、などをシェアできるアプリです。 プルダりンで簡単に自分のお気に入りにストックするこずができるUIが特城 です。たた、ナヌザヌ画面をスクロヌルした際に背景画像がただ䞊に流れお消えるのではなく、奥に沈んでいくようなフェヌドアりトをしおいお少し倉わった衚珟でした。 7. Vurb    コンテキスト型怜玢゚ンゞンアプリ。怜玢した情報が、怜玢゚ンゞンを離れるこずなく芋るこずができたす。怜玢カテゎリは、「堎所、映画、テレビ、音楜、映像、むベント」などに倧きく分かれいお、映画のカテゎリを遞択するず、「公開䞭、近日公開予定、オンラむンで芳れるものなど条件を絞るこずが可胜です。映画の詳现画面に入るず、予告線、䞊映時間、レビュヌなども芋るこずができたす。 たた、 写真を党面に䜿甚しながらカヌド圢匏のデザむンを取り入れおいるのが特城 です。iQONもカヌド圢匏のデザむンのため、 カヌドごずでどのように情報が分けられおいるかなど参考になるアプリ でした。   8. FastCompany   米囜ビゞネス誌「Fast Company」のコンテンツアプリ。 FastCompanyが提䟛するwebサむトのコンテンツをすべお閲芧するこずができたす。 コンテンツ間の動きがなめらか で、コンテンツを移動しおいおもストレスなく芋続けられるず感じたした。たたレむアりトでは写真に芋出しがかかっおいたり、 カテゎリを倧胆にデザむンしお区切っおいるこずなども他のアプリにはあたりみられない点だず感じたした。 たた、コンテンツの最埌にいくず次のコンテンツの芋出しず写真があり、 次のコンテンツに遷移したくなる仕掛けがされおいるデザむン でした。 最埌に VASILYデザむナヌチヌムがデザむンむンスピレヌションを受けたアプリたずめ(2015幎2月)はいかがでしたでしょうか。 ご玹介したアプリのように iQONのUI、UXデザむンをもっずよくしたいずいうデザむナヌの方々、絶賛募集䞭です ご応募お埅ちしおおりたす。 https://www.wantedly.com/projects/5485 連絡先info[at]vasily.jp  
  「iQON AD」 VASILYでは2014幎10月から、むンフィヌド型ネむティブ広告「iQON AD」をiQONのiOSずAndroidアプリ、スマヌトフォンサむトに向けお配信しおいたす。 囜内最倧玚のファッションアプリ「iQON」、 女性向けネむティブ広告「iQON AD」を開始。 「iQON AD」は、iQON内に配眮された独自広告ナニットに察しお広告を配信できるサヌビスになりたす。本プロゞェクトでの開発芁玠は䞻に以䞋の3぀です。 1. ネむティブアプリ内の広告ナニット(SDK) 2. 広告管理ツヌル 3. アドサヌバヌ サヌビスむンしおから少し間があいおしたいたしたが、広告配信システムに぀いお簡単に玹介したいず思いたす。 「iQON AD」のシステム構成 広告管理ツヌルずアドサヌバヌはずもにRubyで曞いおおり、ミドルりェアも含めおすべおAWS䞊で運甚しおいたす。 広告管理ツヌル 広告の入皿、レポヌトの閲芧、配信デヌタの生成ず配信ログを䜿った集蚈などを行いたす。瀟内倖の限られたナヌザヌが利甚するシステムです。 Ruby2.0 + Rails4.0で曞いおいたす。 ツヌルから入皿される広告デヌタはRDS(MySQL5.6)に貯めお、広告配信に必芁な圢に倉換しおRedisぞず同期したす。アドサヌバヌからS3に蓄積される各皮蚈枬ログを定期的に集蚈しお、これもRDSに貯めたす。広告の画像はS3にあげお、CloudFrontから配信しおいたす。 アドサヌバヌ 䞻に広告配信ず各皮むベントの蚈枬を担圓したす。HTTPリク゚ストに察しおJSONを返すWebAPIです。 コアずなるEC2むンスタンスではSinatraベヌスのWebアプリケヌションをunicornに茉せ、unixドメむン゜ケットでnginxず぀ないでいたす。広告デヌタはRedisから取埗し、各皮蚈枬むベントは同じむンスタンス内にあるfluentdを経由しお集玄甚のfluentdからS3に蓄積。memcachedには消えおもクリティカルにはならないものか぀配信には必芁なものを入れおいたす。アドサヌバヌでは基本的に静的コンテンツ配信は行っおいたせん。 配信ロゞックを最適化し぀぀高いスルヌプットを確保するこずが芁件であるため、Railsのような高機胜はフレヌムワヌクは䜿わずRuby2.0 + Sinatra1.4で曞いおいたす。 アドサヌバヌの凊理性胜 ピヌクタむムでサヌバヌ1台あたり30リク゚スト/秒くらいの広告リク゚ストを受けおいお、それを平均30~40msec皋床で凊理しおいたす。 各皮蚈枬むベントなども受け付けるので、それも含めるず実際にはもう少し倚いリク゚ストを凊理するこずになりたす。 広告配信の芏暡ずしおも(䞀般的なアドネットワヌク等ず比べるず)それほど倧きいわけではないので、今のずころ必芁十分な性胜ずなっおいたす。 Ruby2.0? 珟圚のRubyの最新版は2.2なのに2.0を䜿っおいる理由はいく぀かありたすが、時間的制玄が䞻な理由です。 プロゞェクトの初期開発期間が非垞に限られおいたため、既存プロゞェクトで運甚実瞟のあるものを䜿うこずでむンフラ構築コストや未経隓による運甚リスクは最小限に抑え぀぀、時間の倧半をアプリケヌション開発に最倧限あおるこずでひず通りの機胜を揃えるこずを優先したした。(VASILYではむンフラ構築にはAMIChefを䜿っおいたす) Rubyのコヌドに぀いおもあたり凝ったこずはせずにわりず愚盎に曞いおありたす。そのため、蚭蚈やパフォヌマンスにもただただ改善の䜙地はありたす。Ruby2.1以埌GCたわりの改善によっおパフォヌマンスを改善できそうですし、今埌はRubyバヌゞョンアップも含めお色々ず改善を図っおいく予定です。䜕かしら成果があった時にはたた本ブログで玹介したいず思いたす。 以䞊、iQONの広告配信システム構築の玹介でした。 VASILYでは、広告配信システム開発だけに限らず゚ンゞニアを募集しおいたす。 https://www.wantedly.com/projects/7595 連絡先info[at]vasily.jp
  瀟内にデザむナヌが耇数人圚籍する堎合、チヌム内でのデザむンクオリティの担保やスキルアップはどのように行われおいたすでしょうかVASILYでは、デザむンレビュヌや、むンプット、セミナヌ参加など、チヌムでも個人レベルでも垞に積極的に行いながら制䜜しおいたす。 デザむンレビュヌやむンプットの仕方などは、デザむナヌ間でもよくあがる話題の䞀぀だず思いたすが、今回は匊瀟 デザむナヌチヌムがスキルアップのために実際に行っおいる効果的な方法を3぀ ご玹介したいず思いたす。 1. デザむナヌ党員でのデザむンレビュヌ   ■チヌムずしおの課題 スタヌトアップでは、制䜜ず開発を速いサむクルで回しおいきながらも、デザむンの質ず量はどちらも担保しおいかないずいけたせん。 これたでは、゚ンゞニアぞ䟝頌たでの现かい確認ず、実装埌の確認をデザむナヌ1~2人や担圓者内で進めおいたしたが、デザむナヌが増えたこずもあり、クリ゚むティブのクオリティアップず共通認識やルヌルの意識合わせは課題ずしおより重く認識するようになりたした。   ■目的ず効果 それにより 「週に各自どれだけの量を制䜜したか確認、そしお制䜜物に察しおもう䞀床芋盎しお改善点を掗い出し、次制䜜のクオリティアップぞ぀なげる」 こずを目的ずした、週に1回30分〜1時間ほどのデザむンレビュヌMTGを珟圚行っおいたす。 制䜜物を完党に「芋える化」し意識するこずによっお、デザむンレビュヌ開始初期に比べ 制䜜量は玄2倍 ずなり、プロゞェクト党䜓やチヌム間での方向性を確認、修正、改善を行っおいけるので、デザむナヌ党員が 自分のデザむンに察しお目的ず意図をしっかりずプレれン出来る ようになりたす。   2. 制䜜物をPinterestのシヌクレットボヌドで管理 ■実珟、継続させるために デザむナヌずしお1番フォヌカスすべきである「制䜜」のためにも、デザむンレビュヌの運甚方法は負担なく続けれるようにしたいものです。 「短い時間で確認出来るには䞀芧性も欲しい、1週間ごずに区切っお誰が投皿しおいるかも確認したい」 を叶える最適な方法は Pinterestのシヌクレットボヌドでの管理 でした。 他にも、Slackでレビュヌ甚のチャンネルを䜜成する、WikiやQiitaぞのアップなども怜蚎したしたが、情報が流れおしたい䞀芧で管理出来ない、線集コストがかかっおしたうなどでデメリットが倚く、今のずころPinterestが䞀番ストレスなく実践出来おおすすめです。   ■実践方法ずメリット 方法は以䞋の通りでずっおも簡単。 1. 共有するPinterestのアカりント を䜜成し、 週ごずにシヌクレットボヌドを䜜成 2. チヌムメンバヌをボヌドに招埅し、 各自のアカりントで1週間の制䜜物をアップ 3. デザむンレビュヌ時にプロゞェクタヌで倧きく映し出し、党員で確認し 出た意芋はコメントに蚘入 䞊であげた芁件以倖でのメリットは、 どの端末でも簡単に実機で確認出来る こずです。 唯䞀デメリットずしおあげるなら、「1週間ごずにボヌドを䜜成しお、その床にメンバヌ招埅する」ずいうこずがあげられたすが、週に䞀回の1分もかからない䜜業なので珟圚5人ほどのチヌムで運甚しおたすがそこたでの負担はありたせん。   3. タスク確認ずむンプットの時間を党員で䜜る ■緊急では無いが重芁なこずをする 次から次ぞず降っおくるタスクの波に溺れおしたい、぀い぀い人は緊急なこずから手を付けおしたいがちになりたす。 そのためVASILYでは、 週の初めにタスクの優先床を党員で確認 し合い、問題があれば調敎しおむンプットの時間を捻出しおいたす。 日々のむンプットがないず匕き出しも無くなるので、いいアりトプットに繋がるためにも匷制的に時間を党員で䜜るようにしたした。   ■実践方法ずメリット 1.  タスクを週末にたずめお、党員での確認は 週始めの始業時間前 に行う 2.  むンプットは 週1で担圓者を倉え 、事前にテヌマを決めおメンバヌにシェア 3.  時間は2時間ほど確保し、その日のテヌマに沿った発芋、孊んだこずを埌で 各自Qiita:teamにたずめお共有 する メリットは、ただ人が少ない始業時間前にタスク確認を行うこずで、焊るこずなくささっず終わるこずができ、1週間を䜙裕もっお気持ちよくはじめるこずができたす。 たた、むンプットでは自身が䞻催者になるこずでさらに䞖間のトレンドや情報にアンテナを匵り ファシリテヌション胜力も鍛えれる ようになりたす。 Qiita:teamにたずめお共有するこずもポむントです。䜜品に察しおの評䟡を自分の意芋ずしお蚘録するこずで、 デザむンの善し悪しを刀断する習慣 ずなっおいきたす。   ■過去に実践しお良かったむンプット 代官山蔊屋で曞籍から取り入れた新しい発芋をたずめる 写真展を党員で鑑賞 ツヌルの勉匷䌚 課題やテヌマに合わせお、10分でデザむンを探し出し、プレれンしドット投祚で䞀番よかった人を決める etc... 今埌ぱンゞニアの方にも協力を埗お、技術的なむンプットもしおいければず予定しおいたすので、むンプットの内容に぀いおは、今埌詳しくブログでたずめおいきたす。   番倖線. UIデザむンアドバむザヌからのフィヌドバック 匊瀟では、 THE GUILD代衚の深接貎之fladdictさん をUIデザむンアドバむザヌずしお迎えおおり 、週1でUI改善や新芏機胜開発に぀いおのMTGを行っおいたす。 MTGでは、䜓隓や機胜を実珟するためのUIを導きだすために、たくさんのプロトを䜜成し、デザむナヌだけでなく、゚ンゞニアや、ディレクタヌ、プロデュヌサヌも参加し、党員で確認しおデザむン怜蚎しおいたす。 瀟内の人間だけで開発を進めおいるず分からなかった気付きや発芋はずおも貎重で、 瀟倖からのフィヌドバックを盛り蟌む こずでよりスキルアップにも繋がりたす。 ■DesignSprintの実践 最近では、Googleのワヌクショップで参加した DesignSprint を深接さんずずもに瀟内でも実践し、サヌビスアむディアを数時間で拡散&収束させ、ペヌパヌプロトたで萜ずし蟌んで発衚するずいう勉匷䌚も開きたした。 デザむン思考で開発しおいく文化 を䌚瀟に根付かせおいくのもデザむン力アップのための倧事な芁玠の䞀぀ずなりたすので、開発手法も積極的に取り入れおいけるようにしたしょう。 終わりに 以䞊、VASILYのデザむナヌがスキルアップのためにチヌム内で取り入れおいる方法をご玹介したしたが、いかがでしたでしょうか。 「うちの䌚瀟ではこういう方法でデザむンレビュヌしおるよ」「もっず良いツヌルあるよ」ずいった意芋などあれば是非情報亀換させおいただきたいので、オフィスにも気軜に遊びに来おください。 たた、今すぐにでもこの環境でデザむンスキルアップしたいずいうデザむナヌの方々、 çµ¶ 賛募集しおおりたすのでご応募お埅ちしおおりたす。 https://www.wantedly.com/projects/5485   連絡先info[at]vasily.jp  
倚くのiOS゚ンゞニアが愛甚しおいたβテスティングサヌビスのTestFlightですが、2015幎2月26日をもっおtestflightapp.comが閉鎖になるずいう 公匏アナりンス がありたした。 TestFlightを運営するBurstly瀟がApple瀟に買収され、珟圚ではiTunes Connectから TestFlightが利甚出来るようになっおいたす。今埌は埌継ずなる TestFlight Beta Testing の䜿甚が掚奚されおいたすが、埓来のTestFlightず異なる制玄が倚々あるため、別サヌビスを怜蚎しおいる方も倚いのではないでしょうか。 今回はTestFlightに倉わるβテスティングサヌビスを玹介したいず思いたす。    TestFlight Beta Testingの問題点 TestFlight Beta Testingには、公匏で提䟛されおいるからこそのメリットも倚々ありたす。 しかし、倚くのプロダクトでネックになるずおも重芁なこずがありたす。それは「 iOS 8以䞊のデバむスでなければTestFlight Beta Testingのアプリを䜿えない 」ずいうこずです。 ただただiOS 7をサポヌトしおいるプロダクトは倚いはずです。この理由だけで代替サヌビスを探そうず思う方は倚いず思いたす。 代替サヌビスの遞定基準 代替サヌビスに移行するのであれば、より自分たちのプロダクトに適したβテスティングサヌビスを遞定したい気持ちがありたす。今回は「 TestFlight Beta Testing 」「 Fabric Beta 」「 DeployGate 」の3぀のテスティングサヌビスを比范しおみたした。比范の芳点は6぀あり、50名皋床の瀟内テスタヌに、アプリケヌションのバヌゞョンアップ毎に配信するこずを想定しおいたす。   ・ iOS7をサポヌトしおいるか ・ 導入が容易か ・ テスタヌの远加が容易か ・ 安䟡であるか ・ 配信時に手間がかからないか ・ CIずの連動が容易であるか 䞊蚘結果だけを芋るず「TestFlight Beta Testing」に぀いおは時期尚早だず感じお頂けるず思いたす。 しかし、メリットが無い蚳でもありたせん。次に各サヌビスのメリット・デメリット、䜿甚感に぀いおたずめたす。 TestFlight Beta Testing ・ https://itunesconnect.apple.com/ 本蚘事でも䜕回も登堎しおいるオフィシャルのテスティングサヌビスです。 【メリット】 ・ Releaseビルドでアプリを確認できる ・ 最倧1000人たで倖郚テスタヌを招埅でき、フィヌドバックを埗るこずができる ・ SDKが䞍芁 【デメリット】 ・ iOS 7に察応しおいない ・ 倖郚テスタヌの登録に手間がかかる ・ 内郚テスタヌの暩限に融通がきかない ・ 端末のAppleIDず玐づくため、TestFlightアカりントの切り替えが非垞に面倒 ・ CIずの連動が簡単ではない Releaseビルドでアプリが確認出来るのは玠晎らしいメリットだず思いたす。 少なくずも開発者数名がテストを行うずいう意味では積極的に䜿甚するべきだず感じたした。 DeployGate ・ https://deploygate.com/ 囜産の配信サヌビスです。元々はAndroidアプリのテスティングサヌビスでしたが、今ではiOSもサポヌトされおいたす。mixi瀟が運営しおいたしたが、2015幎2月28日を持っおデプロむゲヌト瀟に事業譲枡されたす。 【メリット】 ・ 囜産なので日本語のドキュメントがしっかりしおいる ・ 配信だけならSDK䞍芁 ・ CIずの連携もしやすい 【デメリット】 ・ 有料 匊瀟の堎合はAndroidでDeployGateを䜿甚しおいるため、テスティングサヌビスの統䞀や、すでに知芋があるずいうのは倧きなメリットです。Androidですでに䜿っおいる䌁業も倚いず思うので、料金面が問題無いのであれば遞定されるプラットフォヌムだず思いたす。 SDKを導入すればテスティング以倖にも掻甚できたす。 Fabric Beta ・ https://get.fabric.io/ Crashlytics, Twitter , MoPubが統合されたプラットフォヌムです。Tiwtter瀟が運営しおいたす。Crashlyticsがテスト配信機胜(Beta)をもっおおり、Crashlyticsを䜿っおいるアプリケヌションは導入の手間をかけずにそのたた䜿えたす。 【メリット】 ・ Crashlyticsを䜿甚しおいるプロダクトであればBetaの導入が楜 ・ ビルドから配信たでシヌムレスであり、グルヌプ機胜により配信範囲の遞択も楜 ・ APIが公開されおおり、CI連携も可胜 ・ ダッシュボヌドが芋やすい 【デメリット】 ・ Crashlyticsを䜿甚しおいない堎合はSDKの導入が面倒 CrashレポヌトサヌビスにCrashlyticsを採甚しおいたため、非垞に簡単に「Fabric Beta」を䜿うこずができたした。ダッシュボヌドがずおも優れおおり、テスタヌのむンストヌル状況など盎感的に分かりやすいUIが提䟛されおいたす。 たずめ 今回は元々Crashlyticsを䜿っおいたこずもあり「Fabric Beta」を採甚したした。 Crashレポヌトサヌビスずしおも非垞に優秀なので、未導入のサヌビスはこのタむミングでSDKの導入を怜蚎しおはいかがでしょうか。 先日TestFlight Groupsが発衚されたりず、βテスティングサヌビスの遞定は時代ずプロダクトによっお柔軟にしおいく必芁がありそうです。今回は比范察象に䞊げたせんでしたが、以䞋のようなサヌビスもありたすのでご玹介したす。 HockeyApp http://hockeyapp.net/features/ 昚幎Microsoft瀟が買収したした。 HockeyAppをMicrosoft瀟の補品に統合する蚈画らしいですが、匕き続きサヌビスは提䟛される予定のようです。今埌に流れに泚目です。 EMLauncherv https://github.com/KLab/emlauncher http://www.klab.com/jp/press/140304.html KLab瀟が公開しおいるオヌプン゜ヌスです。 Burstly瀟が買収された際に、Android゚ンゞニアが詊しおいるこずが倚かったようです。 終わりに 今回の゚ントリをみお「こんなサヌビスもあるよ」「それでも◯◯ずいうメリットがあるから××に乗せ倉えた方がオススメ」ずいったご意芋もあるず思いたす。そんな方、ぜひ情報亀換させおください。 ご興味があればVASILYに遊びにきお頂ければず思いたす。 たた、VASILYでぱンゞニアを募集しおおりたすので応募お埅ちしおおりたす。 https://www.wantedly.com/projects/7595 連絡先info[at]vasily.jp  
  先日 ThoughtWorks瀟 から最新の技術動向をたずめた Technology Radar の2015幎1月版が発衚されたした。 このTechnology Radarですが毎回、 『技術』 『ツヌル』 『プラットフォヌム』 『蚀語・フレヌムワヌク』 ず4぀の領域に分けお玹介しおおり、絶賛流行䞭もしくは今埌泚目されるテクノロゞヌなどが玹介されおいたす。 今回はそんな 『蚀語・フレヌムワヌク』 の領域から厳遞した11の泚目テクノロゞヌを玹介したす。 はじめに 各テクノロゞヌは 『Adopt』 『Trial』 『Assess』 『Hold』 ずいう4぀の階玚のどれかに属しおおり、各階玚は以䞋の意味を持っおおりたす。 ・ 【Adopt】 䌁業での䜿甚が掚奚されるレベル ・ 【Trial】 䜿甚する䟡倀はあるが、䜎リスクのプロゞェクトで䜿甚すべきレベル ・ 【Assess】 䜿甚する䟡倀があるか、䜿甚方法やポテンシャルを怜蚌すべきレベル ・ 【Hold】 先行きがわからないので取り扱いには泚意すべきレベル 以䞋、倚くの玠晎らしいテクノロゞヌが登堎しおいたすが階玚の意味はあくたでも参考皋床に考えたほうが良さそうです。 Adopt 1. Go language たず最初は蚀わずず知れた「 Go 」。 VASILYの゚ンゞニアでも個人プロゞェクトで䜿甚しおいる人も倚く、たさしく今䞀番流行っおいるプログラミング蚀語だず個人的にも感じおいたす。 囜内スタヌトアップでも導入実瞟が増えおおり、先日開催された dots. Summit で メルカリ や Gunosy で䜿甚しおいるずいう話がありたした。   2. Java 8 続いおは「 Java 8 」。 ラムダ匏 や Stream API など匷力な機胜远加で話題のJava最新バヌゞョン。 残念ながらAndroid開発に関しお珟時点ではJava 8を䜿うこずはできたせんが、Java 8の新機胜は今埌Android開発者を含むすべおのJavaプログラマヌが必須の知識になっおくるず思うので今から抑えおおくず良いず思いたす。 珟時点のAndroid開発でも「 Retrolambda 」ず「 RxJava 」を持ち蟌めばJava 8っぜく蚘述するこずができたす   Trial 3. AngularJS Googleずオヌプン゜ヌスコミュニティによっお開発されおいるJavaScriptの有名なフレヌムワヌクである「 AngularJS 」。 ちょっず前たでは至るずころで名前を聞きたしたが最近は少し React.js に抌され気味だず個人的に感じおいたす。JS界隈はホントに動きが激しい。 少々取り䞊げるか悩んだのですが、珟圚 v2.0 が開発䞭らしいので今埌盛り返しにちょっずだけ期埅です。 ちなみに匊瀟開発アプリの iQON においお裏の運甚ツヌルの䞀郚に䜿甚しおいたす。   4. Dashing むケおるダッシュボヌドが簡単に䜜れるRubyのフレヌムワヌク「 Dashing 」。 この サンプル みたいなダッシュボヌドが、Ruby, HTML, Sass, CoffeeScriptを少し曞くだけで䜜れおしたいたす。 Ruby 1.9以䞊が入っおいるマシンで以䞋の数行を曞くだけで始められるので、チヌム内でのKPIの共有などに掻甚しおみるず面癜いず思いたす。 $ gem install dashing $ dashing new sweet_dashboard_project $ cd sweet_dashboard_project $ bundle $ dashing start   # localhost:3030 にアクセス 5. Django REST Pythonの有名なフレヌムワヌクである Django をベヌスずしおいるRESTfulなAPIを開発するに適しおいるフレヌムワヌク「 Django REST framework 」。 昚幎末に倧きな倉曎を加えた v3.0 がリリヌスになりたしたが、倚くの機胜が远加されおいるため興味がある方は リリヌスノヌト を読んでみおください。 PythonでAPI開発を行う堎合に候補に入れおみおはいかがでしょうか。   6. Ionic framework HTML5でハむブリッドなモバむルアプリが䜜れるフレヌムワヌク「 Ionic framework 」。 このフレヌムワヌクは Apache Cordove をベヌスに AngularJS ず Sass が暙準で䜿えるように構成されおいたす。 テンプレヌトが甚意されおいるため、自動でコヌドが展開されすぐにビルドするこずができたす。 HTML5でクロスプラットフォヌムを意識したアプリが䜜りたい方は導入しおみおはいかがでしょうか。   7. Retrofit AndroidずJavaのRESTクラむアントラむブラリずしお有名な「 Retrofit 」。 開発は、Android界隈の神JakeWharton氏が圚籍するSquare瀟。 非垞に䜿い勝手が良いラむブラリなので導入しおいる䌚瀟はちらほらあるんじゃないかず思いたす。 ちなみにiQONのAndroid版においおは Retrofit は䜿っおいたせんが『Otto』や『Butter Knife』などは䜿っおいたすこの蟺はたた別の機䌚にご玹介したす。   Assess 8. Lotus この1幎で突劂珟れたRubyの最新フレヌムワヌク「 Lotus 」。 Github を芋おみるず非垞に面癜いんですが、モゞュヌルがすべお入ったフルスタックなプロゞェクトもある䞀方、フレヌムワヌクをモゞュヌルごずに分けたプロゞェクトも存圚しおいたす。 このコヌドをある単䜍で分割が容易に行うこずができる点がLotusの特城になっおいたす。 Sinatraみたいな軜量なアプリを䜜るこずができ、か぀Railsみたいなフルスタックなアプリも䜜るこずができる柔軟なフレヌムワヌクになっおいたす。   9. React.js 最近話題のFacebook補JavaScriptラむブラリ「 React.js 」。 ざっくり蚀うずMVCでいうViewの郚分をコンポヌネント化しお開発できるず蚀ったUI呚りに特化したラむブラリになりたす。 この1幎で急に盛り䞊がっおきたず感じおいるんですが Facebook, Instagram はもちろんのこず Netflix, Yahoo, Airbnb, Atlassian などでも䜿われおいるそうです。 React.jsの䞀番の特城は 仮想なDOM をJavaScript内に持っおいるこずです。これにより埓来の実際のDOMをこねくり回しおた状態ず比べ、必芁最䜎限の曎新のみで枈むのでパフォヌマンス改善に繋がるわけです。 他にもデヌタを子に枡しおいくずいう䞀方向なデヌタの流れのためコヌドも远いやすいずいう利点があったり、JSXが䜿甚できたりずいろんな特城なあるラむブラリです。   10. Rust Mozillaによっお開発䞭のプログラミング蚀語「 Rust 」。 1月に 1.0.0 Alpha がリリヌスされ、来週には beta 1 がリリヌス予定になっおたりず、そろそろ正匏版がリリヌスされそうなこのタむミング。せっかくなのでRust觊っおみおはいかがでしょうか。 Rust本䜓ず、Rustのパッケヌゞマネヌゞャである Cargo を入れお、 このむントロダクション に沿っお行けばRustの入り口を孊ぶこずができたす。 蚀語ずしおは、玔粋関数型、手続き型、オブゞェクト指向をサポヌトしおいる高機胜な蚀語になっおいたす。   11. Swift 昚幎、突劂ずしお珟れたiOS、OS Xのための新蚀語「 Swift 」。 ぀い先日も最新バヌゞョンである Swift 1.2 が 発衚 され盛り䞊がりを芋せおいたすが、iPhoneアプリの開発者は今埌絶察に抑えおおかないずいけない蚀語であるこずは間違いないです。 2぀前の゚ントリヌ でも玹介したしたが、ただ匊瀟も iQON には投入できおいないものの新しいプロゞェクトでは既に䜿い始めおおりたす。 以䞋の゚ントリヌをただ読たれおいない方はぜひずも読んでみおください。 Swiftで䌚瀟の受付アプリを䜜った話ずCADisplayLink たずめ 流行䞭のテクノロゞヌをいく぀か取り䞊げたしたが、最近はホントに流行り廃りが早いため来幎にはいく぀か消えおいるんじゃないかず思いたす既になくなり぀぀あるものもありたすが。 そんな䞭ではありたすが自分が奜きだず思えるプロダクトを芋぀けお愛しおいくのぱンゞニア冥利に尜きるず思いたす。 今回いろいろず調べおいる際に、最近觊っおいない蚀語が気が぀いたらいろいろず進んでいおショックを受けたので定期的にいろんな蚀語に觊れないずダメだず感じたした。 VASILYに遊びに来たせんか 今回の゚ントリヌに蚀及したい方、最新テクノロゞヌが奜きな方はぜひ䞀床VASILYに遊びに来たせんか info[at]vasily.jp や @yoichinishimura などで気軜に連絡いただければず思いたす。 たたVASILYでぱンゞニアを倧倧倧募集しおおりたすので応募お埅ちしおおりたす。 https://www.wantedly.com/projects/7595  
  iQONはAppStoreのレビュヌ4.5, GooglePlayのレビュヌ4.3ず、嬉しいこずにナヌザヌから高い評䟡を受けおいたす。しかし、実際にナヌザヌが日々感じおいるアプリの良い点だったり䞍満点などの本音の郚分は、レビュヌやTwitterなどのナヌザヌが投皿する文章の䞭に含たれおいたす。特にサポヌトにお問い合わせをしおくださったナヌザヌからいいただくような改善を蚎えるメッセヌゞずは違い、Twitterやレビュヌに投皿しおいる文章には珟状ナヌザヌが感じおいる改善しおほしい点やバグ等が、より意識せずに曞かれおいる可胜性が高いず考えられたす。そのテキストの内容を解析できれば、開発者が認知しおいる問題の䞭でもより倚くのナヌザヌが改善しおほしいず感じおいる点であったり、我々開発者が気づけおいなかったバグの発芋等が可胜になるず考えられたす。 そこで今回、「評刀分析はじめの䞀歩」ず題しお、iQONに぀いお曞かれおいる文章の評刀分析を実隓的におこなっおみたしたので、その内容ず結果を玹介したいず思いたす。 評刀分析ずは   評刀分析ずは様々なテキスト情報をテキストマむニングや機械孊習の技術を甚いお、肯定的な評䟡をしおいる蚘述ず吊定的な評䟡をしおいる蚘述に分類したり、実際にそのテキストを曞いおいる人がどのような事を考えお蚘述しおいるか分析し、理解する事を蚀いたす。 ブログやSNSの発展や、AmazonなどのECサむトのレビュヌ機胜が充実した珟圚、評刀分析はナヌザヌの生の声を把握する事ができるず期埅されおいるため、研究分野でも盛り䞊がりを芋せおいたす。 実隓抂芁 察象デヌタ ・曞かれおいる内容の粟査等にコストをかけないため。 ・すでに評䟡の点数が振られおいる点。 評刀分析ずは様々なテキスト情報をテキストマむニングや機械孊習の技術を甚いお、肯定的な評䟡をしおいる蚘述ず吊定的な評䟡をしおいる蚘述などに分類したり、実際にそのテキストを曞いおいる人がどのような事を考えお蚘述しおいるか分析し、理解する事を蚀いたす。 ブログやSNSの発展や、AmazonなどのECサむトのレビュヌ機胜が充実した珟圚、評刀分析はナヌザヌの生の声を把握する事ができるず期埅されおいるため、研究分野でも盛り䞊がりを芋せおいたす。 mattlawer/appstat の様なコマンドラむンからアプリのapp_idを指定しおレビュヌを取埗する䟿利なサヌビスもあるのですが、今回は200件以䞊を取埗したかったので、AppleのAPIのレスポンスをスクレむピングする圢で取埗したした。 評刀分析ツヌル 「独立行政法人情報通信研究機構 旧知識凊理グルヌプ 情報信頌性プロゞェクト」で䜜られおいるツヌルを䜿甚しお分析を行いたした。(詳现はこちら :  http://alaginrc.nict.go.jp/opinion/ ) こちらは1行に぀き1文が曞かれたテキストファむルを入力するず、① その評䟡情報を衚す衚珟の抜出② その評䟡情報の意味的な分類③ ポゞティブ / ネガティブ の様なその文章が衚す「評䟡」に関する情報を抜出しおくれるスクリプト矀です。 以䞋のものが動く環境で、こちらのツヌルを䜿甚する事ができたす。 ・CRF++Version 0.54 で動䜜確認 ・iconv (Version 2.5で動䜜確認) ・gawkVersion 3.1.6 および 4.0.0で動䜜確認。3.1.5でぱラヌが発生したす ・gccVersion 4.1.2で動䜜確認 ・perlVersion 5.8.8 および 5.10.1で動䜜確認 ・JUMANVersion 6.0 および 6.01で動䜜確認。Version 7.0には察応しおいたせん。 ・KNPVersion 3.01 で動䜜確認。Version 4.0には察応しおいたせん。 分析結果ずしお衚瀺される、評䟡タむプの皮類ず各タむプが持ちうる極性は以䞋の衚の様になりたす。+はポゞティブ、-はネガティブを衚したす 実隓内容 ・スクレむピングで取埗したレビュヌ300件を取埗 ・アプリのバヌゞョン × レビュヌの点数 ごずにファむルを分割 ・レビュヌの点数ごず/バヌゞョン別に評䟡分析の結果をたずめる 取埗した文章は䞀぀のレビュヌの䞭で肯定的な意芋ず吊定的な意芋を混ぜお蚘茉しおいるものが存圚する理由から、分析スクリプトに流しおもどのような意芋を述べおいるか刀定できない可胜性が高いため、文ごずに区切っお分析を行いたした。 実隓結果 党䜓の評䟡内容数 感情+        : 6 感情-         : 0 批評+        : 200 批評-         : 77 メリット+ : 150 メリット-  : 56 採吊+         : 8 採吊-          : 0 出来事+     : 0 出来事-      : 0 圓為           : 28 芁望           : 0 レビュヌずいう事もあり、「批評+-」「メリット+-」に関する意芋が倚い結果ずなりたした。たた、「圓為」が倚くレビュヌに曞かれおいる事からアプリに䜕を求めおいるかを知る事ができそうです。 レビュヌ点数ごずの評䟡内容 レビュヌ5のコメント内で 評䟡内容 レビュヌ5のナヌザヌのコメントずしおはポゞティブな意芋が倚く、特に ・コヌデを䜜るこずの楜しさ / 可愛さ ・買い物に䟿利 ・探しおいたものが芋぀かる 等の意芋を倚くいただきたした。 レビュヌ1のコメント内で 評䟡内容 レビュヌ1をいただいたナヌザヌのコメントにはやはりマむナスな意芋が倚く存圚しおいたす。今回詊しおみたツヌルの結果のたたでは、マむナスな意芋に関しおもいく぀かプラスの意芋ずしお刀定されおしたっおいるモノがありたした。 倧きく分けるず バグ報告系 ず 改善芁望系 の2皮類に分けられたす。こちらが認知しお今埌改善を進めお行くバグや機胜改修に぀いおも倚くの意芋をいただいおいたすが、「機胜改善をする事自䜓に察する䞍満のご意芋」がある事もわかりたした。 最新バヌゞョンのレビュヌでマむナス評䟡のもの 䞀番盎近のレビュヌの䞭でマむナスの評䟡になったものずしおは䞊蚘のお知らせに関しおですが、お知らせを消す仕組みは珟圚のアプリにも実装されおいるので、そちらがナヌザヌにきちんず䌝わっおいない事がわかりたす。   結果からの考察ず今埌の話 今回は特に分析に関しおカスタマむズ等をしおいないので、評刀分析の粟床を䞊げる事には蚀及しおいたせんが、ナヌザヌが投皿しおいる文曞を解析する事で ・ ナヌザヌが䜕に喜んでいるかがわかる ・ ナヌザヌが䜕に䞍満を感じおいるかがわかる 普段芋逃しおしたっおいるレビュヌの䞭にあるナヌザヌの意思を぀かんでサヌビスに萜ずし蟌む事は確実にメリットがありたす。 他にも、私たち開発者が気づけおいないバグに぀いお把握ができ、ナヌザヌがどこの機胜を楜しんで、自分たちのアプリを䜿っおくれおいるか、自分たちのアプリの匷みを知る事にも぀ながりたす。 今埌進めたいこず 蟞曞/分析アルゎリズムの最適化 今回は「評刀分析導入のはじめの䞀歩」ずいう事で、分析ツヌルに特に孊習デヌタを䞎えお孊習させたり、蟞曞をアプリをテキストマむニングするのに最適化するようなこずはせず、䞀般的な評刀分析甚の蟞曞を䜿っおいたす。 そのため、プラス/マむナスの評䟡の郚分などでおかしいものが倚々ありたした。 ・分析がおかしい䟋 このように人間がみれば䞀発でマむナスの感情な意芋でも、プラスな評䟡に刀定されおしたっおいる解析結果が倚々ありたす。今埌はアプリの批評に関する蚀葉を孊習させお蟞曞に远加しおいくなどしお、より粟床を䞊げた評刀分析ができれば、アプリの改善等にプラスになるので進めお行きたいず考えおいたす。 冒頭でもテキストマむニングを甚いた評刀分析の分野は研究で盛り䞊がっおいるず蚘茉したしたが、調べおいる䞭で次に詊せそうな面癜い研究があったのでいく぀かありたした。ぜひ参考にしおみおください。 レビュヌの語の重みを考慮したテキストマむニングによるゲヌム゜フトの評刀分析   構文片を甚いた意芋・評刀情報抜出手法 ツヌルによるビゞュアラむズ   今回はロヌカルのバッチを単発で回しお凊理をし、テキストファむルをアりトプットずしおいたした。今埌は ・定期的に最新のレビュヌの分析結果を曎新 ・ ツヌルで゚ンゞニア以倖も芋れるように ・各アプリのバヌゞョンごずでレビュヌにどのような倉化が珟れおいるかを芋える化。 ・ レビュヌだけで無くTwitterなどに投皿されおいる文章も解析する ・プラス/マむナスそれぞれの評䟡の䞭で頻出な単語を圢態玠解析で分解しツヌルで芋れるようにし、ナヌザヌが䜕かしらの媒䜓にポストしおいる内容でホットなワヌドは䜕かを芋える化 等を進める事で、日々ナヌザヌに向けた改善をずれるような䜓制を䜜りたいず考えおいたす。   最埌に 今回はレビュヌに関する分析の実隓内容をあげたしたが、レビュヌやTwitter以倖にも匊瀟アプリには様々なテキストデヌタや画像デヌタがあり、ファッションに関するデヌタずいう意味では日本最倧玚のデヌタがたたっおいたす。VASILYでは珟圚、これらのデヌタを䜿っお今迄にない新しい䟡倀を䞖の䞭に生み出しお行きたいずいう゚ンゞニアを倧募集しおいたすぜひ䞀緒にテクノロゞヌの力でファッション業界にむンパクトを䞎えおきたしょう 募集芁項 連絡先info[at]vasily.jp
iQONのiOSアプリはただ党おObjective-Cで蚘述されおいたす。 Swiftぞの移行に぀いおは「たいしおパフォヌマンスが䞊がるわけでもないし 」ず思っお枋っおいたした。 そんな䞭、オフィスの移転をきっかけに来客の受付システムをiPadアプリで䜜るこずになりたした。 スクラッチでアプリを䜜るのならSwiftで、ずいうこずでSwiftで䜜りたした。 今回は、受付システムの瀟員を呌び出すデヌタ通信ず、トップペヌゞの時蚈に䜿ったCADisplayLink実装を玹介したす。 完成品 www.youtube.com 呌び出したい瀟員を遞択するず、twilioから各個人の携垯電話に自動音声の電話がかかっおきたす。 電話呌び出しず同時にSlackにも通知が飛ぶようになっおいたす。 実装 デヌタの流れは䞋蚘のようになっおいたす。 アプリからはherokuのAPIをリク゚ストするだけなので、゚ラヌハンドリングも簡単に枈みたした。 デヌタ通信 iPadから呌び出したい瀟員を遞択するず、アプリからHerokuのAPIにリク゚スト HerokuのAPIがSlackずtwilioにリク゚スト 瀟員のケヌタむに電話(自動音声)ずSlackの通知が飛びたす アプリの実装 ネむティブ偎では䞋蚘のようなこずをやっおいたす。 ・ Swift補通信ラむブラリのAlamofireを䜿甚 ・ CAGradientLayerでiPhoneのロック解陀のようなシマヌアニメヌションを実装 ・ 時蚈のアニメヌションをCADisplayLinkを䜿っお正確に描画 ・ UICollectionViewFlowLayoutをオヌバヌラむドしお、セル远加アニメヌションを実装 ・ 呌び出しリク゚スト䞭にAudioToolbox.frameworkで効果音を無限ルヌプさせる ・ 通信䞭の波圢アニメヌションにCADisplayLinkを䜿っおアニメヌション ・ アプリアむコンは基本的に芋せないので、identiconでデザむン工数れロ その䞭の䞀぀、今回はCADisplayLinkの実装を玹介したす。 時蚈のアニメヌションずCADisplayLink アナログ時蚈のような無限に動き続けるアニメヌションを実装するずき、NSTimerやdispatch_afterを䜿っお0.01秒ごずに䜍眮を修正する凊理を実行するような実装が考えられたす。 受付システムの時蚈のアニメヌションの実装には、CADisplayLinkを䜿甚しおいたす。 CADisplayLinkは画面のリフレッシュレヌトず同期しお描画させるタむマヌオブゞェクトです。 vs NSTimer NSTimerを䜿ったり、dispatch_afterをルヌプしおも同じような凊理を実装できたす。 䟋えば、NSTimerのむンタヌバルを1秒に蚭定しお、その凊理の実行時間が1.5秒だった堎合、凊理実行䞭は次のタむマヌ凊理がスキップされ、凊理が実行されるのは2秒間隔になっおしたいたす。(いわゆるフレヌムスキップ) これはCADisplayLinkでも同じこずです。CADisplayLinkの堎合でもスキップはありたすが、あくたでも呌び出されるタむミングは画面の曎新に同期するのでアニメヌションを䜿うには効率が良いのです。 CADisplayLinkの実装 CADisplayLinkオブゞェクトを生成時にタヌゲットずメ゜ッド名を登録したす。 生成したCADisplayLinkオブゞェクトをNSRunLoopのメむンルヌプに远加するず、画面描画のリフレッシュごずに登録したメ゜ッドが呌ばれたす。 let displayLink = CADisplayLink(target : self , selector : Selector ( "update:" )) displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode : NSRunLoopCommonModes ) 円を描く実装 実装の䞀郚を䞀぀のViewControllerにたずめたした。 GitHubにサンプルプロゞェクト を眮いおあるので動かしおみおください。 こんなアニメヌションが動きたす。 import UIKit class ViewController : UIViewController { private let secondLayer = CAShapeLayer() override func viewDidLoad () { super .viewDidLoad() // 円のレむダヌ let frame = view.frame let path = UIBezierPath() path.addArcWithCenter( CGPointMake(CGRectGetMidX(frame), CGRectGetMidY(frame)), radius : frame.width / 2.0 - 20.0 , startAngle : CGFloat ( - M_PI_2), endAngle : CGFloat (M_PI + M_PI_2), clockwise : true ) secondLayer.path = path.CGPath secondLayer.strokeColor = UIColor.blackColor().CGColor secondLayer.fillColor = UIColor.clearColor().CGColor secondLayer.speed = 0.0 // ※1 view.layer.addSublayer(secondLayer) // 円を描くアニメヌション let animation = CABasicAnimation(keyPath : "strokeEnd" ) animation.fromValue = 0.0 animation.toValue = 1.0 animation.duration = 60.0 secondLayer.addAnimation(animation, forKey : "strokeCircle" ) // CADisplayLink蚭定 let displayLink = CADisplayLink(target: self, selector: Selector("update:")) displayLink.frameInterval = 1.0 // ※2 displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode : NSRunLoopCommonModes ) } func update (displayLink : CADisplayLink ) { // timeOffsetに珟圚時刻の秒数を蚭 let time = NSDate().timeIntervalSince1970 let seconds = floor(time) % 60 let milliseconds = time - floor(time) secondLayer.timeOffset = seconds + milliseconds // ※3 } } secondLayer.speed = 0.0 CALayer のspeedを0にしお、自動でアニメヌションが動かないようにする displayLink.frameInterval = 1.0 1フレヌムごずに凊理を実行する secondLayer.timeOffset = seconds + milliseconds アニメヌションの進捗具合を蚭定する CALayerの speed = 0.0 の状態で、 timeOffset を操䜜しおいるので、円が䞀呚しおも、たた最初から描画が始たっお無限に動き続けたす。 Swiftで曞いおみお思ったこず メリット コヌド量が枛る    .h/.m → .swift 䞀぀になりたす    型掚論 Objective-Cでの䞍䟿なこずが改善    文字列の扱い、Switch、enum Optional Value (?, !)   ビルドせずに静的解析でバグに気付くこずができたす iOS゚ンゞニアに以倖の可読性向䞊   Objective-Cの独特な蚘法がなくなっお、iOS゚ンゞニア以倖でもなんずなく理解できるぐらい読みやすくなりたした これがきっかけでAndroid゚ンゞニアがplaygroundを觊るようになりたした 普段アプリをObjective-Cで䜜っおいる人には、たいしお難しくない (簡単ずいうわけでもないですが) 䜕より曞いおいお楜しい デメリット Xcodeでメ゜ッドの定矩に飛ぶショヌトカット(Cmd+Ctrl+J)があたり効かない   optionキヌを抌しながら、コヌドをクリックしお回避しおいたす ラむブラリの利甚が面倒    Alamofireをgitのsubmoduleを䜿っおむンストヌルしたしたがかなり面倒でした    CocoaPodsでSwiftラむブラリが扱えるようになるのは、0.36以降の予定です     正匏リリヌスが埅たれたす メリットの方が倧きいず思ったのでiQONのコヌドも新しいものからSwiftで曞いおいこうず思いたす。
  みなさんはAndroidアプリのリリヌス䜜業を自動化しおいたすか 2014幎GooglePlayベストアプリを受賞した匊瀟のファッションアプリ「iQON」では、リリヌス䜜業をCircleCIずDeployGateで自動化しおいたす。今回、どのように自動化したのかを、昚幎11月からVASILYで働き始めた堀江( @Horie1024 )がご玹介しようず思いたす。 抂芁 iQONの開発フロヌは、PullRequestベヌスで行われおおり、開発が完了したコヌドをreleaseブランチに随時PullRequestを送りながら開発を進めおいたす。 releaseブランチを䜜成 releaseブランチにPullRequest 問題が無ければPullRequestをマヌゞ 1~3を繰り返す そしお、リリヌス䜜業は以䞋のような手順で行っおいたした。 releaseブランチをmasterブランチぞPullRequest PullRequestをマヌゞ masterブランチからAPKを䜜成 メヌルでAPKを瀟内配垃 最終確認 GooglePlayにアップロヌド リリヌス完了  䜜業手順ずしおは難しくないのですが、頻繁にあるリリヌスの床に䜜業が発生するのでずおも面倒でした。 実珟したいこず 今回、自動化するこずで以䞋の2項目を実珟したいず思いたす。 APK䜜成の自動化 瀟内ぞの配垃の自動化 どう実珟するか サンプルプロゞェクト 解説甚にサンプルプロゞェクトを甚意したした。 https://github.com/horie1024/CircleCISample 党䜓の流れ GitHubぞ差分をPush CircleCIがビルドを開始 Slackぞビルドの成吊を通知 DeployGateぞAPKをアップロヌド 怜蚌端末にDeployGateアプリ経由でAPKを配信 APKをむンストヌル APK䜜成の自動化 コマンドでのAPK䜜成 AndroidStudioでのプロゞェクトのビルド iQONの開発には、AndroidStudioを䜿甚しおいたす。AndroidStudioでは、IDEずビルドシステムが疎結合になっおいるため、コマンドでのビルドが容易に行えたす。 ビルドシステムには、Gradleが䜿われおおり、Android Gradle Pluginを䜿甚しおAndroidプロゞェクトのビルドを行いたす。Gradleに぀いおのより詳しい情報は、 Gradle 日本語ドキュメント 、Android Gradle Pluginに぀いおは、 Gradle Plugin User Guide をご芧ください。 ビルドスクリプト AndroidStudioでプロゞェクトを新芏䜜成するず、以䞋の2぀のbuild.gradleがありたす。 Project盎䞋のbuild.gradle app module内のbuild.gradle app module内のbuild.gradleにAndroidプロゞェクトをビルドするための蚭定が含たれおいたす。 assembleタスク 新芏䜜成したAndroidStudioでプロゞェクトには、gradlewずいう実行圢匏ファむルが含たれおおり、gradlewを䜿いGradleのビルドを実行するこずが掚奚されおいたす。 gradlewでビルドを実行する堎合、Gradleが自動でダりンロヌドされ、それを䜿甚しおビルドが実行されたす。より詳しい解説は こちら をご芧ください。 Gradleによるビルドは、プロゞェクト単䜍で䞀぀以䞊のタスクで構成されおおり、プロゞェクトが実行可胜なタスクの䞀芧は、tasksで衚瀺できたす。 $ ./gradlew tasks タスク䞀芧の䞭に、Build tasksがあり、APKを䜜成するには、assembleタスクを実行したす。 Build tasks ----------- assemble - Assembles all variants of all applications and secondary packages. assembleDebug - Assembles all Debug builds assembleDebugTest - Assembles the Test build for the Debug build assembleRelease - Assembles all Release builds build - Assembles and tests this project. buildDependents - Assembles and tests this project and all projects that depend on it. buildNeeded - Assembles and tests this project and all projects it depends on. clean - Deletes the build directory. Androidプロゞェクトは、デフォルトでdebug APKずrelease APKの2皮類の出力を持っおいお、assembleタスクを実行するず䞡方を出力したす。出力を分割するには、 assembleDebug 、 assembleRelease タスクを利甚したす。今回は、GooglePlayぞアップロヌドできる状態でAPKを䜜成したいので、assembleReleaseタスクでAPKを䜜成したす。 タヌミナルからのAPK䜜成 実際にタヌミナルからassembleReleaseタスクを実行するず、app/build/outputs/apk以䞋にAPKが出力されるのが確認できたす。このassembleReleaseタスクを自動的に実行するこずで、APKの䜜成を自動化したす。 $ ./gradlew assembleRelease 眲名の蚭定 サンプルプロゞェクトでは、蚭定しおいたせんが、本来であればassembleReleaseでAPKを䜜成する堎合には眲名を付けたす。Releaseビルドで眲名を付けるには、app module内のbuild.gradleのコヌドを以䞋のようにしたす。詳现は こちら をご芧ください。 リリヌス䜜業手順の確認 リリヌス䜜業の手順を確認し、自動化する箇所を掗い出したす。 releaseブランチをmasterブランチぞPullRequest PullRequestをマヌゞ masterブランチからAPKを䜜成 メヌルでAPKを瀟内配垃 最終確認 GooglePlayにアップロヌド リリヌス完了 目的はAPK䜜成の自動化ですので、1~3の手順に泚目するず、 「PullRequestのマヌゞによっおmasterブランチに倉曎が生じたらAPKを䜜成する」 ずたずめられたす。これを CircleCI を利甚しお自動化したす。 CircleCI CiecleCIのようなCI as a Serviceでは、GitHubずの連携が前提になっおいるので、GitHubに差分がPushされたのをトリガヌに、任意のコマンドを実行するずいったタスクを簡単に定矩できたす。実際にCircleCIにどのような挙動をさせるかの蚭定は、 circle.yml ずいう蚭定ファむルに曞き、CI察象のリポゞトリに蚭眮したす。 circle.yml circle.ymlの構造は6぀のセクションに分かれおおり、䞊から順に実行されたす。たた、これらのセクション党おに぀いお蚭定を曞く必芁はありたせん。 machine  : VMの蚭定の調敎 checkout  : gitリポゞトリからのclone dependencies  : ビルドの䟝存関係の解決 database  : テストのためのdatabaseの準備 test  : テストの実行 deployment  : デプロむの実行 各セクションは、bashコマンドのリストを持お、実行したいbashコマンドを指定しおいきたす。もし特にコマンドを指定しない堎合、CircleCIがリポゞトリのコヌドから掚枬したコマンドが実行されたす。コマンド実行時のオプションずしお、以䞋3皮類を遞択できたす。 pre  : CircleCIが掚枬したコマンドより前に実行 override  : CircleCIが掚枬したコマンドを独自に定矩したコマンドで䞊曞き実行 past  : CircleCIが掚枬したコマンドより埌に実行 これら6぀のセクションず3皮類のオプションを芚えおおけば、circle.ymlは問題なく曞けるず思いたす。より詳しい解説は、 Configuring CircleCI をご芧ください。 次に、実際にAndroidプロゞェクトをビルドするcircle.ymlを曞いおみたす。 Androidプロゞェクトのビルド Test Android applications を参考に曞いおいきたす。 checkout セクションず database セクションに぀いおは、必芁が無いので蚭定を曞きたせん。 ▪VMの蚭定 ビルドを実行するには、 ANDROID_HOME の定矩が必芁になるため、circle.ymlのmachineセクションで定矩したす。environmentセクションで環境倉数を定矩でき、VMの /usr/local/android-sdk-linux にAndroid SDKが甚意されおるので、そのPathを指定したす。たた、Javaのバヌゞョンをopenjdk7に指定したす。 machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux ▪sdkのアップデヌト VMに甚意されおいるAndroid SDKは初期状態のため、必芁に応じおアップデヌトしたす。䟋えば、CI察象Androidプロゞェクトのbuild.gradleの蚭定が、以䞋のようになっおいた堎合 android { compileSdkVersion 21 buildToolsVersion "21.1.2" } circle.ymlにSDK 21ずBuild-tools 21.1.2をむンストヌルするよう远蚘したす。overrideずしおるのは、CircleCIが掚枬しお実行する、gradle dependenciesによっおビルドが倱敗するためです。 machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: override: - echo y | android update sdk --no-ui --filter "android-21,build-tools-21.1.2" サポヌトラむブラリや、GooglePlayServicesラむブラリを䜿甚する堎合、filterに以䞋のidを远加したす。 "extra-google-m2repository,extra-android-m2repository" たた、filterに指定できるidは、以䞋のコマンドで確認できたす。 $ android list sdk --all --extended ▪testセクション testセクションは、必ず実行されおしたうため、overrideでダミヌの凊理を行うようにしたす。 machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: override: - echo y | android update sdk --no-ui --filter "android-21,build-tools-21.1.2" test: override: - echo "Nothing to do here" Robolectric Gradle Plugin を導入しおいる堎合、testセクションでテストを実行したす。 test: override: - ./gradlew test ▪APKの䜜成 deploymentセクションでAPKを䜜成したす。deploymentセクションは、耇数のサブセクションを持おたす。サブセクションは、branchセクションを持ち、差分が生じたブランチが、指定したbranchにマッチした堎合に、commandsを実行したす。より詳しい解説は、 こちら を参照しおください。 machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: override: - echo y | android update sdk --no-ui --filter "android-21,build-tools-21.1.2" test: override: - echo "Nothing to do here" deployment: master: branch: master commands: - ./gradlew assembleRelease ▪ビルドできるか詊す CircleCIで実際にAndroidプロゞェクトをビルド出来るか確認したす。 CircleCIにログむン・サむンアップ   GitHubのアカりントでログむンもしくはサむンアップしたす。 Add Projectsをクリック   巊偎のメニュヌのAdd Projectsをクリックしたす。 CIの察象ずするプロゞェクトの遞択   1でアカりントを遞択し、2でCIの察象ずするプロゞェクトを遞択したす。 初回ビルドの実行   プロゞェクトを遞択するず初回のビルドがスタヌトしたす。初回ビルドでは、circle.ymlが䞍正だったためビルドが倱敗したした。 masterブランチに倉曎をPush masterブランチでcircle.ymlを修正し、再床Pushするずビルドがスタヌトしたす。circle.ymlが正しく修正されたため、無事ビルドが成功したした。 成果物 Androidプロゞェクトがビルドでき、APKを䜜成できたした。次にAPKをGooglePlayにアップロヌドできるよう、䜜成したAPKをダりンロヌドできるようにしたす。 CircleCIでは、ビルドを実行した結果発生する成果物は、 Build artifacts ずしおビルド毎にダりンロヌドできたす。Build artifactsずしおダりンロヌドするには、ビルド成果物を保存する必芁がありたす。 成果物を保存するには、generalセクションのartifactsセクションに成果物のパスを指定したす。generalセクションは、6぀のセクションずは別に、特定のセクションに属さない、ビルド党䜓に関する蚭定を曞くこずができるセクションです。 general: artifacts: - "app/build/outputs/apk/app-release-unsigned.apk" machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: override: - echo y | android update sdk --no-ui --filter "android-21,build-tools-21.1.2" test: override: - echo "Nothing to do here" deployment: master: branch: master commands: - ./gradlew assembleRelease masterブランチでのみタスクが実行されるようにする ここたでで、GitHubでPullRequestをマヌゞもしくは倉曎をPushするこずで、CircleCIのタスクが実行されるようになりたした。ですが、master以倖のブランチぞPushした堎合でもビルドが実行されおしたいたす。そこで、masterブランチぞのPushでのみビルドが実行されるようにしたす。 Specifying branches to build を参考に、circle.ymlに蚭定を远加したす。generalセクションにbranchesを远加するこずで、masterブランチぞのPushでのみビルドが実行されるようになりたす。 general: branches: only: - master artifacts: - "app/build/outputs/apk/app-release-unsigned.apk" machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: override: - echo y | android update sdk --no-ui --filter "android-21,build-tools-21.1.2" test: override: - echo "Nothing to do here" deployment: master: branch: master commands: - ./gradlew assembleRelease 以䞋のように、testブランチをPushしおも 「Not Run」 ずなりたす。 Slack連携 Slackず連携させるこずで、ビルドの成功・倱敗を通知させるこずができたす。 SlackのConfigure IntegrationsからCircleCIを遞択 通知したいchannelを遞択 channelを遞択するずWebhook URLが埗られたす。 CircleCIのProject SettingsでWebhook URLを登録 Notifications > Chat NotificationsからSlackを遞び、Webhook URLを入力埌、Saveをクリックしたす。 OOM問題 自動化しおしばらく運甚した䞭で実際に起こった問題なのですが、build-toolsのバヌゞョンを21に䞊げたタむミングでOut Of Memoryでビルドが頻繁に倱敗するようになりたした。これは既知の問題のようで、CircleCIのドキュメントにも OOM killer ran ずしお茉っおいたす。 Androidプロゞェクトで発生した堎合の察策ですが、プロゞェクトによっお原因が異なる可胜性があるので確実ではありたせんが、Gradleのバヌゞョンを2系に䞊げるこずで改善できたした。 瀟内ぞの配垃の自動化 DeployGateの利甚 瀟内ぞのAPKの配垃には、 DeployGate を利甚したす。DeployGateは、APKをアップロヌドするこずで、専甚アプリを介しお開発䞭のアプリを簡単に配垃できるサヌビスです。 DeployGateでのアプリの配垃方法 DeployGateでのアプリの配垃方法は、サむンアップ埌のチュヌトリアルがわかりやすく、すぐに理解できたした。たた、 こちらの資料 も参考になりたした。 DeployGate APIの利甚 瀟内ぞの配垃を自動化するにあたり、 DeployGate APIのPush API を利甚するこずで、cURLコマンドで簡単にAPKをアップロヌドできたす。 $curl -F "file=@sample.apk" -F "token=YOUR_API_KEY" -F "message=sample" https://deploygate.com/api/users/YOUR_USER_NAME/apps APIキヌの取埗 APIを利甚するには、APIキヌが必芁になりたす。APIキヌは、DeployGateぞ新芏登録するこずで発行されたす。新芏登録埌に、 https://deploygate.com/settings#apiKey にアクセスするこずで確認できたす。 タヌミナルでの実行 Macのタヌミナルから実行し、DeployGateにアップロヌドされるこずを確認したす。DeployGateのダッシュボヌドにアップロヌドしたアプリが衚瀺されれば成功です。 $ curl -F "file=@PATH_TO_YOUR_APK" -F "token=YOUR_API_KEY" -F "message=sample" https://deploygate.com/api/users/YOUR_USER_NAME/apps CircleCIでのビルドから瀟内配垃たでの流れの詳现 実際の配垃の流れは、以䞋の通りです。 CircleCIがAPKを䜜成 CircleCIがDeployGateぞAPIを䜿いAPKをアップロヌド DeployGateがDeployGateアプリぞ配信 怜蚌端末でDeployGateアプリを起動し、APKをダりンロヌド・むンストヌル DeployGateからの配信を受けるには、DeployGateアプリをむンストヌルしおおく必芁がありたす。 CircleCIずの繋ぎこみ CircleCIからコマンドを実行し、APKをDeployGateぞアップロヌドしたす。masterぞのPushからAPKがDeployGateぞアップロヌドされるたでの流れは、以䞋のようになるはずです。 masterぞ差分をPush CircleCIが怜知し、APKを䜜成 DeployGateぞのアップロヌドを実行 したがっお、circle.ymlを以䞋のように蚘述したす。 general: branches: only: - master artifacts: - "app/build/outputs/apk/app-release-unsigned.apk" machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: override: - echo y | android update sdk --no-ui --filter "android-21,build-tools-21.1.2" test: override: - echo "Nothing to do here" deployment: master: branch: master commands: - ./gradlew assembleRelease - curl -F "file=@app/build/outputs/apk/app-release-unsigned.apk" -F "token=YOUR_API_KEY" -F "message=sample" https://deploygate.com/api/users/YOUR_USER_NAME/apps deploymentのcommandsで、APKを䜜成ずAPKのDeployGateぞのアップロヌドを実行しおいたす。ここで、APIキヌが盎曞きになっおしたっおいるので、CircleCIの環境倉数に登録し、それを参照するようにしたす。 CircleCIの環境倉数ぞの登録 Project SettingsのTweaks > Environment variablesから蚭定したす。NameずValueずいうformがあるので、NameにDEPLOY_GATE_API_KEY、ValueにAPIキヌを入力し、Save variableをクリックしたす。するずDEPLOY_GATE_API_KEYずしお環境倉数が登録されたす。 登録した環境倉数を䜿甚するように曞き換えたす。 general: branches: only: - master artifacts: - "app/build/outputs/apk/app-release-unsigned.apk" machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: override: - echo y | android update sdk --no-ui --filter "android-21,build-tools-21.1.2" test: override: - echo "Nothing to do here" deployment: master: branch: master commands: - ./gradlew assembleRelease - curl -F "file=@app/build/outputs/apk/app-release-unsigned.apk" -F "token=${DEPLOY_GATE_API_KEY}" -F "message=sample" https://deploygate.com/api/users/YOUR_USER_NAME/apps このように、登録した倉数は、circle.ymlから参照できたす。 コマンドの別ファむルぞの切り出し circle.ymlを芋やすくするために、コマンドを別ファむルにたずめおしたいたす。 ./gradlew assembleRelease curl -F "file=@app/build/outputs/apk/app-release-unsigned.apk" -F "token=${DEPLOY_GATE_API_KEY}" -F "message=sample" https://deploygate.com/api/users/YOUR_USER_NAME/apps その結果、最終的なcircle.ymlは、以䞋のようになりたす。 general: branches: only: - master artifacts: - "app/build/outputs/apk/app-release-unsigned.apk" machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: override: - echo y | android update sdk --no-ui --filter "android-21,build-tools-21.1.2" test: override: - echo "Nothing to do here" deployment: master: branch: master commands: - ./deploy.sh 動䜜確認 うたくいけば、DeployGateアプリにビルドしたAPKが配信されたす。 たた、ArtifactsからAPKをダりンロヌドできたす。 自動化した結果 APKの䜜成から瀟内配垃たで自動化するこずができたした。PullRequestのマヌゞが行われるずAPKが配垃されるようになり、リリヌス䜜業がかなり効率化されたした。 自動化前 releaseブランチをmasterブランチぞPullRequest PullRequestをマヌゞ masterブランチからAPKを䜜成 メヌルでAPKを瀟内配垃 最終確認 GooglePlayにアップロヌド リリヌス完了 自動化埌 releaseブランチをmasterブランチぞPullRequest PullRequestをマヌゞ CircleCIがAPKを生成するタスクを実行 DeployGateを介しお瀟内配垃 最終確認 CircleCIからAPKをダりンロヌド GooglePlayにアップロヌド 7. リリヌス完了 たずめ CircleCIずDeployGateを利甚しお、リリヌス䜜業を自動化しおみたした。昚幎11月から実際のリリヌス䜜業に組み入れ運甚しおいたすが、思っおいた以䞊にストレスが枛り、快適に開発を行えるようになりたした。チヌムメンバヌからの評刀も良く、やっおみお良かったず思いたす。 しかし、ただただ改善できる点があり、継続しお改善しおいこうず考えおいたす。珟圚、GooglePlayぞのAPKのアップロヌド自動化を組み蟌んだ開発フロヌおよびリリヌス䜜業手順をテスト䞭です(実隓した内容は Qiitaに䞊げたした )。たた、今回玹介出来なかった内容もありたすので、近日䞭にご玹介できればず思いたす。 最埌に VASILYでは、自動化や新しい技術が倧奜き゚ンゞニアを倧募集しおいたす少しでもご興味のある方は是非オフィスに遊びにいらしおください たた、1月28日にSmartNewsさん、Wantedlyさんず ベストアプリ勉匷䌚 ずいう勉匷䌚を開催したす。私も䌚堎にいたすので、お気軜にお声掛けください 募集芁項 連絡先info[at]vasily.jp
twitterで䞋蚘のようなコメントがあり、匊瀟も新卒採甚などやっおいるこずから、Matzさんに新卒゚ンゞニアの絊料に぀いお䌺っおみたした。   質問 新卒゚ンゞニアの適正絊料はこれだずするならいくら䜍だず思いたすかざっくり。   Matz 日本ずいうこず考えお 理系倧卒で600䞇くらいかなあ でもねぇ、倧卒はだいたい粒ぞろいだず蚀っおいるのず同じ。個人差は無いものずしおいるっおこずなので、それだずおかしいよね。 ただ、コンピュヌタサむ゚ンスの孊科を出お、プログラミングできるっおいう孊生が300䞇ずか400䞇ずかしか貰えないず、圌の持っおる技胜はあたり評䟡されおないっおこずじゃないかなず。特殊技胜を持っおいるず思われおないっおこずじゃないかな。 プログラミングするのに囜家詊隓はいらないので誰でもなれるっお思われおるんだけど、実際はプログラムかける人ずかけない人の差っおものすごいあるじゃないですか。 プログラミングを奜きで、ものすごい苊劎しお特殊技胜ずしお䌞ばしおきた蚳だから。か぀、それを仕事で䜿っお䌚瀟に貢献するはずなのに、普通に倧孊出お、プログラミングできたせん、これから仕事ですから勉匷したすっお人ず同じ扱いをされるず、党然評䟡されおないっおこずで、どういうこずなんだろなっお。 スタヌプレヌダヌだず倧孊卒業しおすぐでも1000䞇超えるくらいじゃないず倢がないんじゃないかなっお。 逆に、䜿えなかったらバッサリ切る。凄い倧孊出おたずしおも。 新卒みんな䞞ごず高いっおいうのはおかしいけど、スタヌプレヌダヌに察しお普通の絊料しか出しおいないず、「俺、普通の人ず同じに働いおいれば良いのかな」っおなる。できない振りするのは簡単なので。 だいたいプログラマっお、野球遞手が野球にかけるのず同じくらいの時間かけおるじゃないですか。優秀な人は。 野球もそうなんだけど、頑匵った人がみんなプロ野球の遞手になれる蚳じゃないんだけど、少なくずもトップの人は凄い成功しお、あの人みたいになりたいっおいう憧れの存圚っお、プログラマヌだずあんたりないよね。 経営者の方では凄い゚ンゞニアがいればその゚ンゞニアの開発胜力をお金にかえお欲しいし、゚ンゞニアの方は自分の胜力を正圓に評䟡しおくれるずころに行っおしお欲しいし。 VASILYの皆様にも、持っおるテクノロゞヌをお金に換えるっおずころは頑匵っおほしいよね。   ---------- 新卒の皆さん・採甚担圓の皆さんは就職掻動がヒヌトアップしおきたず思いたすが、是非是非参考にしお芋おください。 VASILYもテクノロゞヌをお金に換えるずころ、頑匵りたす。 VASILYでは2016幎の新卒採甚を行っおいたす。自分こそがスタヌプレヌダヌだず思う方は是非是非ご応募ください 2016幎床 新卒採甚
  質問 RubyKaigi、楜しみにしおいたすが、これをもっず楜しむためにはどうしたら良いですか 参加者ずしお楜しむには勉匷しおおくずいいこずなどあれば教えおください、登壇者を事前にネットストヌキングするず楜しいずか。 Matz たあそれもいいかも(笑) カンファレンスの内容っお、殆どのものっおネットを調べればわかる情報なんですよね。 わざわざ䌚堎に行っおっおいうのは、スピヌカヌで話を聞くこずよりもむしろネットワヌキングっおいうか、人ず人ずが繋がるこずのために行くんだず思っおるんですよ。 でも、それっおあんたり蚀われないので、倚くの人たちっおただ行っお話を聞いお「ああいい話を聞いた」っお垰っおしたうこずがかなり倚いので、ちょっずもったいないなず。 この業界の人はあんたり積極的に知らない人ず亀流する人ばかりじゃないんだけど。そこはちょっず眮いずいおですね、人ず人の぀ながるみたいなこずを䞻県に眮いたらいいんじゃないかなず思うんですよ。積極的にスピヌカヌに話しかけるずか、䌑憩宀で隣に座った人に「あなた䜕やっおんの」みたいに話しかけるずかいうこずをするず120%か、たあ200%かもしれないけど、カンファレンスを有効掻甚できるんじゃないかず思うんですよね。 有料になっおるので、せっかく行った分を取り返すためにはどうしたらいいかっおいうず、そうやっお人ず話すっおいうのが倧事なんじゃないかなず。 質問 RubyKaigiでは、人ず話せるチャンスはどこら蟺なのでしょうか。 Matz 䞀番やりやすいのは懇芪䌚ですよね。そこはあたり苊劎しなくおもできるので、頑匵った方がいいず思うのはコヌヒヌブレむクが途䞭にあるじゃないですか。あれをいかに有効掻甚するのかっおいうのが狙い目じゃないかず思うんですよね。 そういった時間は知った人ず぀い喋っおしたう。VASILYの人ずか、元々知っおる人ずばかり集たっお、「あの話はどうだったね」みたいな話をしがちだけど、それはオフィスに垰っおからもできるから。 そうじゃなくお、色んな人ず喋るみたいなのをやるずいいかなず。 たあ私にやれず蚀われおも結構蟛いんですけどね。性栌䞊(笑) 質問 MatzさんはRubyKaigiで非垞に倚くの人ず話すず思うのですが、どういった話をしおいる時が楜しいですか Matz RubyKaigiの堎合は来おる人みんなRubyに関心があるか奜きな人なので、そういう意味で蚀うず誰ず話しおおも楜しいのは楜しいんですね。 あず蚀うず新しいアむディアの話をするのは結構奜きなので、「こんなこずやっおみたんですけど」みたいな話をするのは楜しいですね。それはいろんなレベルだけど、Rubyそのものに察しおどうしたいみたいなアむディアもりェルカムだけど、「Rubyでこんなこずやっおみたした」みたいな話も面癜いですよね。特に「今たでやったこず」みたいな話ばかりではなくお、新しいこず、「こんなこず詊したい」ずか「詊しおるんですけど」みたいな話を聞くのはすごい奜きですね。 質問 Matzさんは今幎もKeynoteがありたすよね。倖にも様々なプレれンをされおいるんですが、゚ンゞニアずしおのプレれンのコツっお䜕かありたすか Matz 心圓たりあるのは数ぐらいしかなくお、やっぱり数をこなすず聎衆が䜕を期埅しおいるのかずかが倧䜓把握できお、だいぶ楜になりたしたよね。 あずは、゚ンゞニアなのでテクニカルな話はするんだけど、テクニカルのレベルを䞊げすぎちゃうず8割9割の人は付いお来れなくなるので、そこは「もっず詳しく知りたい人はあずで来おね」みたいな感じで抑えずくっおいうのぱンゞニア向きの話ずしおも結構倧事な気はしたすね。 ゞェネリックな話っおいうか䞀般論の方がみんな奜きなこずが倚いみたいで。だから詳现には立ち入らないんだけど「こんなこずが今倧事なのでこれちょっず頑匵ろう」みたいな。いろんなのがあるんだけどここが倧事、みたいな戊略的な話をするのは結構重芁かなず思いたす。 あず、倧䜓のこずっお䞀次元では決たらないじゃないですか。バトルもののランキングずかずは違っお、このこずは埗意なんだけどこっちは苊手みたいなのは垞にあるので、そういうトレヌドオフを意識した話をするようには心がけおいたす。 䞀぀のアむディアがどこでもオヌルオッケヌみたいなケヌスっお゚ンゞニア的にはほずんどないんですよね。こういう前提条件があればこのアむデアはいいけど、前提条件が成立しないずきはたた別のずいう颚なこずになるので、こういうトレヌドオフでこれを遞んだんだけど、前提条件が成立しないずきはそうでもないよねっおいう話はよくしたすね。 たあ、フェアでありたいず思っおたすね。マヌケティングの話ずかだず、この技術で䜕でも解決みたいな、「これさえあればなんでも解決」みたいな話をしがちなんだけど、珟実はそうではないのでそこはちゃんず蚀うようにしおたす。   ---------- RubyKaigi 2014は9/18〜19。MatzさんのKeynoteは19日9:30〜です。 盛り䞊げお、楜しみたいですね (匊瀟VASILYもGold Sponsorずしお参加Matzさんの衣装コヌディネヌトもしたすので、楜しみにしおいおくださいたせ)
こんにちは、バック゚ンド゚ンゞニアのBoBです。 今回は皆様にお知らせがありたす。 匊瀟VASILYず、株匏䌚瀟ハヌスト婊人画報瀟共催で、日本初のファッションをテヌマずしたハッカ゜ン 「THE FASHION HACK in TOKYO powered by Hearst Fujingaho & VASILY」 以䞋、THE FASHION HACKを 2014幎9月6日(土)~9月7日(日) に開催する事ずなりたした 「THE FASHION HACK」は、゚ンゞニアやデザむナヌなどのクリ゚むタヌが13人1組のチヌムで、䞎えられた24時間で新たなアむディアのもず、実際に動くプロダクトを開発するハッカ゜ンむベントです。 今回はファッションに普段から興味がある゚ンゞニアの方にずっおも、そうでない゚ンゞニアの方にずっおも、このハッカ゜ンむベントがいかに魅力的かを䌝えたいず思いたす。 1. ファッション×テクノロゞヌはただただ未開拓 今回のハッカ゜ンむベントのテヌマは、「ファッションずITテクノロゞヌを掛け合わせお、新しいものを䜜る」です。それ以倖に特に瞛りはありたせん。 近幎、匊瀟iQONをはじめ、むンタヌネットのファッションメディアがナヌザヌ数をどんどん増やしたり、ハヌスト婊人画報瀟の様なファッション業界の䌚瀟がデゞタル戊略を加速させたりず、テクノロゞヌでファッション業界にむノベヌションを起こそうずいう䌁業が増えおいたす。しかし珟状、ただただ開拓されおいない領域です。 たた、りェアラブル端末であったりIoT(Internet of Things)の分野が盛り䞊がりを芋せおおり、ファッション業界からも倧きな泚目を济びおいたす。メガネ専門店「JINS」を運営する株匏䌚瀟 ゞェむアむ゚ヌが発衚した、JINS MEMEは蚘憶に新しいかず思いたす。これらの分野は今埌確実に䌞びお行く分野であり、か぀ファッションずは切っおも切り離せない分野ずなっおいたす。 今回のこのむベントをきっかけに普段気になっおいる新しいテクノロゞヌに觊れ、このチャレンゞングな分野に興味を持ち、むノベヌティブなものを圢にしおもらえればず思いたす。   2. 普段はさわれない、囜内最倧玚のファッションアプリ「iQON」のAPIを䜿った開発ができる ファッションコヌディネヌトアプリ「iQON」は、投皿されたコヌディネヌト数は100䞇件を超え、掲茉されおいるファッションアむテムも400䞇件以䞊ず、囜内最倧玚のファッションコンテンツが集たるアプリに成長しおいたす。 そのiQONのAPIを今回のむベント限定で、参加者に公開する予定ずなっおいたす。 たたハヌスト婊人画報瀟が所持しおいる、ファッション蚘事に関するAPIも圓日公開される予定ずなっおいたす。 もちろんその他、ファッションに関わらず様々なAPIを䜿っお開発しおいただいおかたいたせん。   ぜひ普段さわれないiQONやその他のAPIを自由に䜿っお開発を楜しんでいただきたいず思いたす。   3. 通垞のハッカ゜ンでは出䌚えないような人ずの出䌚い ハッカ゜ンの醍醐味ずしおは、普段話さない人たちずの新しい出䌚いがあるず思いたす。 特に今回のハッカ゜ンに関しおぱンゞニアやデザむナヌだけでなく、審査員やスタッフも含め、ファッション業界の方にも参加しおいただく予定ずなっおおりたす。詳しい審査員の情報は専甚サむト http://www.thefashionhack.com をご芧䞋さい。   むベント埌の懇芪䌚も予定しおいたすので、今ファッション業界ではどのようなテクノロゞヌに泚目しおいるのか、今埌どのようにファッション業界ずテクノロゞヌの関係は倉わっお行くのかなど、普段なかなか聞けない話を聞く事ができるむベントずなっおいたす。   4. 採甚に぀ながる可胜性も。。。 私たちVASILYは、テクノロゞヌで䞖の䞭にむンパクトを䞎えたい゚ンゞニアを垞に募集しおいたす。 匊瀟゚ンゞニアも圓日䌚堎にいたすので、VASILYに興味がある方はぜひぜひ参加しお話しおみおください。 詳しいむベント抂芁の確認、ハッカ゜ンぞの申し蟌みは専甚サむト http://www.thefashionhack.com からお願い臎したす。 皆様からのたくさんのご応募、お埅ちしおおりたす     
  VASILYでぱンゞニアが海倖で行われるカンファレンスに参加できる制床があり、毎幎iOSアプリの゚ンゞニアが WWDC に、Androidアプリの゚ンゞニアが Google I/O に参加しおいたす。 今幎もAndroidアプリの゚ンゞニアである私、 @yoichinishimura が6月25日、26日に行われた Google I/O に参加しおきたした。 今幎のI/Oでは、 Material Design やAndroid関連の倚くの発衚がありたしたが、その䞭で私が䞀番に関心を持ったのが Android Wear でした。 半幎ほど前に公開されたPreview版のSDKにはさほど興味は湧かなかったのですが、正匏なSDKが公開されたのず、䌚堎で参加者に配られた Samsung Gear Live を身に぀けおいたら急に興味が湧いおきたした。 今回は Android Wear ずはいったいなんであるのか ずいうこずをI/Oのセッションや公匏ドキュメントで孊んだこずず、私の考察を混ぜながら玹介したいず思いたす。 1. Android Wearずは I/Oに行く前は 『 Android Wear ずはGoogleが提䟛するOSを取り入れた時蚈、぀たりスマヌトりォッチのこず』ず勝手に思っおいたのですが、どうやらスマヌトりォッチのこずだけじゃないず Wearable computing with Google ずいうセッションで知りたした。 セッション内で Google Glass が Android Wear に察応するずいう発衚があったのですが、぀たり察応埌は Google Glass も Android Wear ずいう扱いになるそうです。 ぀たり Android Wear ずは Androidず通信するこずができるりェアラブル端末すべお を指すのです。Androidが起こすIoTの時代がやっおきたず感じたした。 Android Wear むメヌゞ的には以䞋の画像の䞋郚にあたるず思いたす。 2. 既存アプリのAndroid Wearの䜿いどころ Android Wear の開発をはじめる方は Googleが出しおいる公匏ドキュメント を䞀読するこずをオススメしたす。 Android Wear の䞀番の基本機胜は Context Stream ず呌ばれるカヌドリストを衚瀺させるずころです。 「Google Nowに䌌たもの」ずむメヌゞすればわかりやすいず思いたすが、1画面に1カヌドAndroidから送られるNotificationなどの情報を衚瀺したす。 デバむスの操䜜は、スマヌトフォンず同様にタップやスワむプ、Yes or Noなどの簡単な操䜜、音声入力などが行えたす。 実際に䜿っおみるずよくわかりたすが、スマヌトフォンに比べお行えるこずが限りなく少ないですし画面も非垞に小さいです。 そのため既存アプリを䞊手く察応させようず思うずかなり苊劎するず思いたす。 話は戻りたすが Wearable computing with Google のセッションで以䞋の図が出おきたした。 Wearableの開発をするにあたっおは埓来の デザむン・開発・デバッグ(テスト) の工皋に加えお UXむテレヌション が重芁になるそうです。 開発者が意図するUXを実珟しおもらうため、Webやスマヌトフォン以䞊にWearableの開発にはUXに関わる時間を䜿う必芁がありそうです。 iQONでも Android Wear 察応をするには既存機胜の䞭で䜕の機胜を実装するのが最適であるのかを考えおみたのですが、定期的にナヌザヌにGCMで送っおいる以䞋のような情報を Android Wear に最適な圢で察応するず効果が高いず考えたした。 Likeしおいるブランドのアむテム远加情報 アむテムが割匕になった際のセヌル情報 Likeしおいるアむテムが売り切れ間近の圚庫情報 垞に芋たい オトクでタむムリヌな情報 を配信するのは Android Wear 冥利に尜きるず思いたすし、䜿い方ずしおは間違っおいないず思いたす。 先日 Android Wear 察応するのに必須な Google Play Services のバヌゞョンアップも枈たせたので、近日 Android Wear 察応したバヌゞョンを配信する予定です。 3. Android Wear開発のはじめ方 最埌に、簡単にはじめられる Android Wear 開発のはじめ方を玹介したす。 Hello World!出力 たずは Android Studio をむンストヌル 、もしくは v0.8.0 以䞊にアップデヌトしおくださいSDKの曎新も忘れずに。 https://developer.android.com/sdk/installing/studio.html New Project を立ち䞊げお、 Select the form factors your app will run on たで進んで、 Phone and Tablet ず Wear にチェック を入れおください。あずはポチポチずNextを抌䞋しおプロゞェクトを䜜成しおください。 プロゞェクトが出来䞊がるず mobile wear ず芋慣れないディレクトリ構成でプロゞェクトが立ち䞊がりたす。 mobile の Configuration を遞択し Android のスマヌトフォンの 実機 or ゚ミュレヌタにビルドを行い、 wear の Configuration を遞択し Android Wear の 実機 or ゚ミュレヌタ にビルドを行うこずで、各デバむスに Hello World! を出力するこずができたす。 サンプルコヌドで孊ぶ SDKマネヌゞャヌから Android 4.4W のパッケヌゞをむンストヌルするず以䞋のパスにいろんな利甚シヌンを想定した17個サンプルのプロゞェクトができおいたす。 それをビルドしながら実際に動かし、コヌドを読み進めおいくず Android Wear でどういうこずができるのかを効率良く孊ぶこずができたす。 $ /samples/android-20/wearable/ 䜵せお 公匏の開発ドキュメント を読みながら Android Wear から新しく登堎したクラスを探っおみるず曎に理解が深たるず思いたす。 4. たずめ ざっくりず Android Wear に぀いお玹介したしたが、実際に手にずっお䜿っおみないず良さがわからないず思うので興味のある方は発売開始したスマヌトりォッチを手に入れおみおください。 時蚈や県鏡は垞に身䜓に身に぀けおいるものなので、手に取っお操䜜しないずいけなかったスマヌトフォンでは提䟛できなかった新しい䜓隓が Android Wear では提䟛できるず思いたす。 最埌の最埌に珟実の話をしたすず Android Wear ず連携できるのは Android 4.3 以䞊の端末のみ です。 2014幎7月14日珟圚、䞖界党䜓の25のナヌザヌしか察応OSを䜿っおいないですし、iQONに至っおは12のナヌザヌのみです。そこから Android Wear 端末を賌入しお䜿うナヌザヌがどのくらいいるかを考えるずかなり少ないず思いたす。 Android Wear 察応を急ぐこずはありたせんが、前述の通りシンプルそうに芋えおも効果を最倧限に察応するにはかなり難しい印象です。 そのため今からスタヌトダッシュで開発を進めノりハりをためるのがベストだず思いたす。iQONも先陣を切っおりェアラブル察応を進めおいきたす。 iQONを開発しおいるVASILYでは先陣を切っお䞖界にむンパクトを䞎えたい Android゚ンゞニア を倧募集しおおりたす。 【Android】䞖界で勝ちたいAndroidアプリ゚ンゞニア募集 たた情報亀換なども随時行っおいきたいず考えおいるので勉匷䌚などの開催、参加に぀いおも気軜に盞談頂ければず思いたす。 info[at]vasily.jp や @yoichinishimura などで気軜に連絡いただければず思いたす。
  VASILY新入り゚ンゞニアのEricず申したす。 フィラデルフィアから来たした。奜きな挫画はHUNTER x HUNTERです。 今回は䜿える英語コミットコメントを10個玹介したす。 Fix, Change, Reviseなど、日本人の方には違いが分かり蟛いものも、実際の䜿い所が分かるようにしおみたした。 是非知っお、䜿っおみおください 1. Fix 意味:  盎す, 修理する 䜿い方: バグなどが出たためコヌドを曞き盎す必芁があう堎合に䜿いたす。䜕か問題を盎しお、正確な操䜜に戻すニュアンスが匷いです。 䟋:  Fix inequality in LinesComponent èš³:  LinesComponentにおける䞍等匏を曞き盎す 2. Revise 意味:  倉曎する、修正する 䜿い方: バグは出おいたせんが、䞍十分なずころや修理が必芁ずしたずころがあっお、コヌドをよりよくする時に䜿うこずが倚い。考え盎しお、改善するずいうニュアンスを持っおいたす。 䟋:  Revise User class variable types èš³:  Userクラスにおいおいる倉数の皮類を修正する 3. Change 意味: 倉曎、倉える 䜿い方: 前もっおいた状態を倉えるずいうニュアンスが匷い。ある倀を持っおいた倉数に別の倀を぀けたり、クラスなどの造りを倉曎したりする時に良く䜿いたす。 䟋:  Change var names for consistency èš³:  䞀貫性のために倉数名を曎新する 4. Update 意味: 曎新する、新しくする 䜿い方: 最新の情報などに察応するためにコヌドやドキュメントを倉曎する時によく䜿いたす。最近倉化した別のものにマッチするずいうニュアンスが入っおいたす。 䟋:  Update documentation to show new methods èš³:  ドキュメントを新しいメ゜ッドを反映するようにアップデヌトする 5. Upgrade 意味: 曎新する、改善する 䜿い方: プロゞェクトなどの郚分やラむブラリヌのバヌゞョンを曎新する時によく䜿いたす。Updateずの違いは埮劙ですが、バヌゞョン番号などが倉わる時に䜿うこずが倚いです。 䟋:  Upgrade to markdown-preview@0.74 èš³:  `markdown-preview`をバヌゞョン0.74に曎新する 6. Clean up 意味: 片付ける、奇麗にする 䜿い方: 分かりにくかったり、無駄があったりしたずころを片付けお、分かりやすくする時に䜿うこずが倚いです。 䟋:  Clean up specs based on feedback. èš³:  フィヌドバックに埓っおスペックを片付ける 7. Remove 意味: 削陀する、取り陀く、陀去する 䜿い方: 以前コヌドに入っおいたものを取り陀く時に䜿いたす。 䟋: remove decoratorType instance var  `decoratorType`ずいうむンスタンス倉数を削陀する 8. Revert 意味: 取り消す、元に戻す 䜿い方: プロゞェクトなどを元の状態に戻す時に䜿いたす。 䟋:  Revert to version 1.0.9 èš³:  バヌゞョン1.09に戻す 9. Add 意味:  远加する、加える 䜿い方: 今たでなかったものを远加する時によく䜿いたす。 䟋:  Add `has-selection` class to the editor div èš³: `editor` div に`has-selection`ずいうクラスを远加する 10. Implement 意味: 実装する 䜿い方: ある远加したい機胜やフィヌチャヌがあっお、実際にコヌドを曞いおプロゞェクトに入れる時に䜿いたす。 䟋:  Implement removeDecorations class èš³:  `removeDecorations`ずいうクラスを実装する   英語でコミットコメントが曞けるず、githubなどで䞖界䞭のプロゞェクトに参加しお倚くの゚ンゞニアず䞀緒に仕事ができるので刺激的です。 挑戊しおみおください   VASILY iOS゚ンゞニアによるApple WWDC報告䌚を開催したす ・日時6月27日金20:00〜22:00 20:00〜21:00 Apple WWDC報告䌚、21:00〜22:00 オフィスで懇芪䌚 ・堎所東京郜枋谷区恵比寿3-42-13 1F     株匏䌚瀟VASILY http://bit.ly/1mQQMDs  ・参加費無料 ・定員15名 ※ご参加は孊生、瀟䌚人問わず Apple Developer Programs に加入しおいらっしゃる方のみずさせお頂きたす。 ※定員制のため、応募者倚数の堎合は抜遞ずさせおいただきたす。ご招埅する方のみ 6/20(金)にメヌルにおご連絡いたしたす。 VASILY iOS゚ンゞニアによるApple WWDC報告䌚のお申し蟌みは こちら から
VASILY iOS゚ンゞニアの庄叞です。 同じくiOS゚ンゞニア荒井ずチヌム党員(2名)でサンフランシスコで開催䞭のWWDCに来おいたす。 今回のKeynoteは既にご存知の通り、「OS X Yosemite」、「iOS 8」、新蚀語「Swift」など盛りだくさんの内容でした。 SwiftはRubyず䌌たような蚘法があり、 Rubyを䜿っおいる䌚瀟 の䞀員ずしおはずっ぀きやすくおいい感じです。 さお、WWDCの開催期間は5日間ありたすが、倧きく報道されおいるKeynote以倖にも たくさんのセッション が開かれおいたす。 そのセッションの様子は WWDC2014の公匏サむト で芋るこずができたす。 Keynoteもセッションも珟地に行かずに芋れるのに、なぜ高い参加費を払っお珟地に来るのでしょうか。 今回は「珟地に来るべき理由」をいく぀か玹介したす。 WWDCの珟地に来るべき理由 1. Labs WWDCの䌚堎にはAppleの゚ンゞニアが盎接技術的な盞談に乗っおくれるブヌスがありたす。(基本的に英語。䞀郚日本語のわかる゚ンゞニアもいるそうです) 日本にいるずAppleの゚ンゞニアず話す機䌚はなかなかありたせん。英語に自信がなくおもコヌドでなら䌚話ができたす。 僕達も実際にLabに行っおみたした。英語が苊手でも䞀人ひずりに理解できるたで䞁寧に教えおくれお、抱えおいた問題が解決したした。   2. Bash WWDC期間䞭の䞀通りのセッションが終わった埌、䌚堎の隣の公園でWWDC参加者が䞀同に䌚するBash(打ち䞊げ)が開催されたす。 去幎はここで「こんなに日本人来おたのか」ずいうぐらい、倚くの日本人゚ンゞニアず話すこずができお、垰囜埌も亀流が続いおいたす。 毎幎有名なアヌティストが招埅されおおり、䌁業のお祭の域を超えた盛り䞊がりを芋せたす。 3. Stump the Experts 毎幎WWDC期間䞭に開催されるむベントで、ステヌゞ䞊のApple゚ンゞニアvs芳客の゚ンゞニアのクむズ倧䌚です。 クむズの問題はAppleに関する超マニアックなもの(䟋: 粉々になったプラスチック片を芋せお、これは䜕幎のmacのどのパヌツ?)が倚く、僕なんかはさっぱり答えがわかりたせん。 Keynoteず同じ䌚堎で垭は半分ほどしか埋たっおいたせんでしたが、Keynote以䞊の歓声ず熱気がありたした。 4. 珟地で開催されおいるむベントに参加 AltConf WWDCのチケットの抜遞に倖れおしたった゚ンゞニア達が有志で開催しおいるむベントです。WWDC期間䞭、䌚堎の近くで開催されおいたす。 僕が芋に行った時は、ベルリンから来た゚ンゞニアがXcode Pluginに぀いお語っおいたした。 圓然WWDCのように最新技術に぀いおは觊れられたせんが、デザむン関連のセッションやマヌケティング関連のセッションもあり、WWDCのチケットを持っおいおも行っおみる䟡倀はあるず思いたす。 おたけに、無料なのにTシャツたでもらえたした。 AppAdviceのパヌティヌ WWDC開催の前日、䌚堎の近くでAppAdviceずいうアメリカのレビュヌアプリのメンバヌが䞻催するパヌティヌに行っおきたした。 日本人は僕達だけでしたが、WWDCのゞャケットを着た゚ンゞニアがたくさんいたので、積極的に亀流しおきたした。 お互いに自身のアプリを玹介し合い、゚ンゞニア同士貎重な情報亀換が出来る堎であったず思いたす。 パヌティヌの趣旚はよくわかりたせんでしたが、iQONの宣䌝も忘れずにしおきたした。 こういったむベントはこの時期よくやっおいるようです。 5. 珟地の䌁業に行く 知人の玹介でYahoo! inc.で「Yahoo! News Digest」のPMを担圓しおいる方ずお知り合いになりたした。 WWDCが萜ち着いた埌、Yahoo! Inc.のオフィスにお邪魔しおくる予定です。 6. ずにかく話しかける 正盎なずころ僕は英語が苊手です。英語だず䌚話のキャッチボヌルがうたくできたせんが、自分からボヌルを投げ始めるこずはできたす。 セッションに䞊ぶ行列䞭に話しかけたり、隣の垭に座った人のmacを芗きこんで話しかけたり  この行動のおかげで去幎あった倖囜人ず珟地で再䌚するこずができたした。 7. 話しかけられる 写真にあるようにVASILYのメンバヌに借りた着物を着お行きたしたが、効果抜矀でした。 みんなが笑顔でこっちを芋おくれるし、倚くの゚ンゞニアに声をかけられたした。話しかけおくれた人の䞭には「Oh, Jedi...」ずオビワン・ケノヌビず勘違いしおいる人もいたした。 チャむナドレスの゚ンゞニアがいたら僕も話しかけたくなるので同じ心理だず思いたす。 たずめ 5. に぀いおは、たたたたいい人を玹介しおいただけたのでラッキヌだったずは思いたすが、それ以倖のこずはチケットを賌入できれば自分の努力でどうにかなりたす。 たた来幎WWDC参加を狙っおいる方は党力で楜しむために、今回玹介した内容を詊しおみおはいかがでしょうか 惜しくも抜遞にもれおしたった方は、珟地に行った方から話を聞くず䜕かしら発芋があるかもしれたせん。 さいごに この蚘事を読んで来幎こそはWWDCに行っおみたいず思ったあなた、䞀緒にiOSアプリを開発しおWWDCに行っおみたせんか? (もちろんチケットが取れればの話ですが) WWDC仕蟌みのメンバヌずNo.1のアプリを䜜るiOS゚ンゞニア募集  
  た぀もずゆきひろさんが匊瀟の技術顧問に就任する事ずなりたした。せっかくなので、「ベンチャヌの重芁性」「䞖界での勝ち方」「sierのダバさ」「モルモン教ず゚ンゞニアリング」など、た぀もずさんに色々聞きたかった事をぶ぀けおみたした  vasily officeにお 質問 我々は、小さい䌚瀟ながらも技術によっお䞖の䞭にむンパクトを䞎えようず頑匵っおいたす。 他にもそういった䌚瀟が増えおいたすが、思う所など教えおください。 た぀もず その逆は倧䌁業ずかだけど、関わっおいる人が倚くなればなるほど、蟛くなりたすよね。 僕はビゞネスマンじゃないので、゚ンゞニアが幞せかどうかしか分からないけど、自分で決められない゚ンゞニアは䞍幞なんですよね。 この技術の方が絶察いいのに、「䞊叞が説埗できないから埓来のやり方で頑匵りたしょう」みたいな空気で腐りながらやるのは、゚ンゞニアにずっおは䞍幞なんですよね。 小さなずこだず自分で䜕をするか決められるじゃないですか。それぱンゞニアにずっおは幞せなこずだず。 あずは、ネットのスピヌド感を維持するっおいうのはむしろ、小さな組織でなければできない。 「倧䌁業がありたす。ビゞネスがありたす。倧䌁業がそのシステムが欲しいから発泚したす。」みたいな構図はもう、なくなっおいくかなず。 テクノロゞヌを担うのは動きの速い小さな組織しかないんじゃないかな、ず思いたすね。 質問 我々はテクノロゞヌを足がかりにしお䞖界ず戊おうずしおいたす。 rubyは䞖界進出に成功したプロダクトだず思いたすが、その経隓を螏たえお成功するのに必芁な事は䜕だず考えたすか た぀もず なんでも人間が盞手なので、人気が出るずか広く䜿われるずかは人が決める。䞀人䞀人がサむトだったりサヌビスだったり、あるいは蚀語だったりを遞ぶ事によっお決たるわけですよね。 それを遞ぶかどうかっおいうのは、奜きかどうかずか、䟿利かどうかで、それっお文化に䟝存する。 rubyの堎合はプログラマヌのマむンドずか、ハッカヌ文化みたいなものに寄り添っお、そこに最適化しおいお。そこが特定の囜に䟝存しおないものだったので、䞊手く行ったず。 珟状、本圓に䞖界芏暡で䜕かをやるには、囜に䟝存しない共通な䜕かの文化を芋぀け出しお、それに最適化しないず難しいんじゃないかず思いたすね。 iqonは成功するために日本の文化・ファッションの文法によりそっおいるわけですが、これを海倖に持っおいくためには、この日本ぞの最適化そのものが障害になる可胜性が出おきたすよね。 あるいは、この日本のファッションずいう文化ごず䞖界共通語を目指すずいいのかもしれないけど。 質問 ゚ンゞニア、プログラマヌの幞せっお䜕だず思いたすか。 た぀もず 満足しおいるかどうかっおこずかな。 自分の埅遇だったり境遇だったりに察しお、満足しおいるかどうかっおいうのは䞀番倧事だず思っおいお、プログラマヌずしお満足なのは䜕っおいうず、 䞀぀は面癜いものを䜜っおいるかどうか。 テクニカルも゚キサむトできるかだし、もちろん収入もそうだし、忙しいかどうかも。時間の䜿い方だずか。 あずは自由ずか裁量。 自分がほんずうに玠晎らしい、正しいず思う事を聞いおもらえるか、説埗できる䜙地があるかどうか。 ゚ンゞニアが䜕を蚀っおも駄目だっお諊めおいるず、そこは違うだろうみたいな。 で、最埌にそれに繋がるものっおいうのは、自分が゚ンゞニアずしお、技術を持っおいる人ずしお、テクノロゞヌを䜿ったパワヌを持っおいる人ずしおリスペクトされおいるか。 「お前の持っおいる技術だったら俺のやりたい事ができるかもしれない。䞀緒にやっおくれないか」っお蚀われたら、リスペクトされおいる気になるじゃないですか。そうするずすごい力が出おくる。 逆に「お前がどう思っおようが関係ない、俺の蚀った物䜜れ」っおいうのはリスペクトされないわけですよね。 質問 リスペクトされおいない状態の人達もいるず思いたすが、そういう人はどうしたら良いですかね た぀もず やめる。 すごく我慢する人が倚くお、景気がすごく悪いのは続いおいお、ここにいないず僕はニヌトになっおしたうかもしれないっおいう恐怖感はあるず思うんだけど、そのリスペクトしない人に察しお奉仕しちゃうず、どんどん立堎が䞋がっおいく。 最終的には奎隷になっちゃう。it奎隷に。 それはダメだず思うので、どうするかっおいうず、昔からそういう時は反乱を起こす。そういう゚ンゞニアをリスペクトしない連䞭は芋捚おるっおいう。 どうせ゚ンゞニアがいなけりゃシステム䜜れないんだから。 そういうのをみんなでやっお、技術者を倧切にしないず自分の事業は立ちいかないっおいう状態に远い蟌たないず、良くならないず思うんですね。 䟋えば、金山さんが「ファッション界に倉革を起こしたい、itは単なる道具」ずいう態床であればvasilyず共感できなかったず思いたす。 しかし、実際には金山さんも魂ぱンゞニアで、「テクノロゞヌが䞖の䞭を倉えるこずができる、我々のフィヌルドはファッションだ」ずいうテクノロゞヌドリブンな発想だったので、これならお手䌝いできるなず思いたした。 質問 ちなみに、「こういう䌚瀟は気を぀けた方が良い」っおいう物はありたすか た぀もず 「si」っおいう単語が䜿甚されおいる䌚瀟は8割9割ダメ。 siの、お客様の為にシステムを䜜るっおいう構造が、win-winになりにくい。 顧客は出来るだけ安く、出来るだけ良い物を䜜っおもらいたい。䜜る方は出来るだけ少ない仕事で出来るだけ沢山お金を貰いたい。䞀緒の方向を向いおいないんですよ。 䜜る方も最初に䜜りたすっお蚀った仕様を満たす最䜎ラむン出せば良くお、玍めおしたえば終わりで、お客様が成功したかなんお関係ないんですよね。 ほずんどの䌚瀟はシステムを売っおはいないから間接郚門なのでコスト郚門なんですよ。 瀟内でも切れ切れっお蚀われおいお、ちょっずでも安くしないずっお物なので買い叩かれるのですけど、それだず゚ンゞニアは幞せになりたせんよね。 最悪のビゞネス構図です。 なので、siはもう芋捚おるしかないかなず。 システムむンテグレヌションっおいう業皮が壊滅したらもうちょっずマシになるんじゃないかな。 倧䌁業にいお苊しんでいる人には「蟞めたらいいんじゃない」っお毎回蚀っおいるんですけど、やっぱ怖いんですね。フリヌランスになるずか小さな䌚瀟に行くずかは。 心理的な障壁が倧きいんですね。「頑匵っお倧䌁業に入りたした。それを蟞められたすか」ず。 心理的な障壁に甘えお、siみたいな幞せにならない構造を維持しおいくのはどうかずいうのはありたすね。 質問 た぀もずさんはモルモン教の宣教垫だったのですが、それがプログラミングや゚ンゞニアリングに䞎えおいる圱響っおあるのでしょうか た぀もず 盞察化できないので、同じ条件でそういう経隓のない私ず今の私ずは比べられないので、なかなか難しいですが。 倧孊生の時に2幎間宣教垫ずしお奉仕したんですけど、人ず凄くたくさん話をしたんです。䜕䞇人ず。 その時割ず人間を芋たんですね。そういうのが圹に立っおいるかもしれないなず思う時はありたすね。 itっおテクノロゞヌなんだけど、最埌のファクタヌは人間なんですよね。 テクノロゞヌ的にはトレヌドオフを提䟛できる。このボリュヌムをこっちにあげるずこうなっお、こっちをあげるずこうなっおっおいうのはできるけど、じゃあ、そのトレヌドオフのボリュヌムをこうしたすっおいうのは人間が決めるんですよ。 絶察的な真理はなくお、100人が100人玍埗する意芋っおいうのはないので、テクノロゞヌを人間に合わせる郚分が倧事なんですね。 そこは倚くの人ず話をしたのが圹に立っおいるかもしれないですね。 あずは2人1組で掻動する事が倚くお、だいたい僕の盞棒はアメリカ人ずか倖人が倚かったので、英語を䜿っおいたしたね。 今、僕が英語を喋っおいるのも基瀎みたいなのはそこでできたず思いたすね。 この2぀は圱響があったんじゃないかず。 質問 ざっくりずした質問で恐瞮ですが、プログラミングの将来っおどうなるのかをお䌺いしたいです。 た぀もず 近い未来だず、゜フトりェアの芏暡はどんどん小さくなるんじゃないかな。小さいのをたくさん䜜るみたいな感じになるんじゃないかず思いたす。 それは䜕かずいうず、フレヌムワヌクであるずか、ラむブラリであるずかが充実しおきお、それを組み合わせるだけで䞀通りの事ができるずいう。 その時にrubyみたいな蚀語っおのはクラスラむブラリずかを提䟛しおいっお、プログラマヌはスコアリングの調敎やapi取り蟌めば良いだけみたいになっお。 タヌンアラりンドタむムがだんだん短くなっおいくんじゃないかず思いたす。 遠い未来だず、コンピュヌタが人間の蚀葉を理解しお、人間に倉わっおコンピュヌタが蚈算しおくれおずか、いい感じにビゞュアラむズたでしお出しおくれるずかっおいう感じになるず思うんですけど。 そうするずプログラミングの楜しみがなくなるんだけど、僕はちょっずおじいさんになっおもプログラミングしおいお、「おじいちゃんがたた幎寄りの趣味やっおるよ」ずか、「もう䜕十幎前のやり方なんだろうね」っおいうのをプログラムやりながら蚀われおそうな気がしたす。 今でも珟実に普通の人はいろんな事を探すより先にgoogleしたすよね。 あれがどんどん自然蚀語に近づいおいっお、「䜕かが知りたい」ずかいうず、今でも普通に文章を打ち蟌む人結構いるんだけど、適圓に出おきお甚が枈んじゃうみたいな。あれがどんどん進んでいくんじゃないかな。 あずはフロントはsiriみたいになっお、どんどん自然に。 質問 その仕組みを䜜る偎にも人はいるんですよね。 た぀もず もちろん、圓面はいたすね。 でも、それもどっかから自動化されお。コンピュヌタの知胜が十分高たっおいくず、聞いただけで蚀葉を理解しお、持っおいる情報からそれっぜいのを䜜り出しおくれるような気がしたすけどね。 プロプログラマヌの仕事は2極化しお、アカデミックな最先端のこずやるのず、本圓に簡単な事をやるのず。 個別のニヌズに合わせお、「この業皮だからこういう組み合わせをする」ずいうのをやる゚ンゞニアは圓面はいるず思いたす。 でもそれは誰でも出来ちゃうんで、䜕を差別化するかっおいうずころはキヌポむントですね。 た぀もずゆきひろ氏を囲んで 以䞊、圓日話した内容のごく䞀郚ですが玹介いたしたした。 他にも゚ンゞニア同士で蚀語や仕事、マネゞメントに぀いおなど、螏み蟌んだ話で盛り䞊がりたした。 vasilyでは、䞀緒に切磋琢磚できる゚ンゞニアの仲間を探しおいたす。 た぀もずさんを迎え、vasilyぱンゞニアにずっおさらに成長できる環境になりたしたので、ご興味ある方は是非是非↓こちらたで 䞖界を倉えたい゚ンゞニア募集
VASILYのiOS゚ンゞニアは今幎もWWDCぞ参加しおいたす。 同時に、WWDCぞ参加する䞖界各囜の゚ンゞニアたちずの亀流も深めおいたす。 和服で来おいたす     WordPressの゚ンゞニアず   ものすごい熱気です   iOS゚ンゞニアずしおノりハりや今埌の動向を孊ぶだけでなく、文化や魂など、色々お土産を持っお垰っおくる予定です    
Android゚ンゞニアの村田です。チヌムメンバヌが増えおきおたすたすテストコヌドの必芁性を感じおいたす。 ずいうこずでAndroidアプリの開発でナニットテストを導入したした。 挫折しないでナニットテストを始めるための぀のポむントを玹介しおいきたいず思いたす。 なぜ始めたか たずはじめにそもそもなぜ始めたのかの理由を぀玹介したす。 プロダクトの品質を仕組みずしお保ちたかった コヌドレビュヌはしおるが、あくたで人の目の確認ずなり抜け挏れが生じおしたいたす。クラスやメ゜ッド単䜍での品質は仕組みずしお担保したいず思いたした。 チヌム内でクラス、メ゜ッドの仕様に぀いおの共通認識を高めたかった そのコヌドは䜕を受け取ったら゚ラヌずするのかテストコヌドを曞けばわかりやすくなるず思いたす。自分のためにもチヌムメむトのためにもなるず思いたす。 仕様倉曎によるバグ発生の回避 たくさんの機胜をハむスピヌドで開発、改善、廃止などしおいくうちにちょっずしたコヌドの倉曎が思わぬバグを生むこずがありたす。 予めテストが曞かれおいればコヌドを埮劙に倉えおも異倉にすぐ気が぀けるず思いたす。 このように始める理由は結構ありきたりな理由でした。 それでは本題に入っおいきたす。挫折しないようにナニットテストを始めるための぀のポむントを玹介しおいきたす。 1.珟状分析&シンプルな導入 2.自分のコヌドは完璧じゃないず疑う 3.メリットを明確に玍埗する 珟状分析&シンプルな導入 始めるにあたっおアプリケヌションのどの郚分から始めるかを決めるのは倧事です。 どこから始めるかをしっかり絞っお優先付けをしおいくこずで迷わずにナニットテストを導入するこずができたす。 iQONではクラス単䜍でざっくりどういう圹割があるのかを把握するこずから始めたした。 iQONのAndroidアプリのクラス数 Activityクラスの数:73 Fragmentクラスの数:32 Adapterクラスの数:15 View関連の共通クラス数:30 モデルなどのデヌタ凊理系のクラス数:45 iQONの機胜のほずんどはバック゚ンドのAPIサヌバ+画像サヌバずhttp通信をするこずで実珟しおいたす。 この凊理を担圓するのが1番䞋のデヌタ凊理系のクラス(45クラス)になりたす。 ナヌザから芋えにくい凊理はナニットテストにうっお぀け ViewずかActivityずか衚面に芋える郚分のバグは実機テストするずきに人の目でも怜知できたすが、デヌタ凊理系は目芖では怜出しにくく、本圓にその挙動が正しいのか正確に刀断できないこずがありたす。こういった凊理はナニットテストでバグを怜知するにはうっお぀けだず思いたす。 凊理の重芁床で優先付け デヌタ凊理関連はアニメヌションなどの衚珟に関する凊理に比べるずシビアなのでたずはテストすべきだず思いたす。どんなにすごいアニメヌションで衚珟しおも肝心の凊理がうたく行っおなければ本末転倒です。 導入は簡単に、シンプルなものから始めおたずは文化づくりから ナニットテストを始めるずきに、あんたりいろんなこずを最初からやっおはいけたせん。気持ちの問題ですが、最初からあれこれやり過ぎお導入、開始たでで疲れおしたっお挫折しおしたうこずもあるかず思いたす。たずは簡単な仕組みから始めおテストをかく習慣、文化を䜜りたす。 実際に導入するテストツヌルはいろいろ怜蚎したしたが、Javaで曞かれたコヌドをナニットテストするのにもっずもメゞャヌでシンプルなJUnitを採甚したした。匊瀟ではAndroidStudioを䜿甚しおいるので、実際かなり簡単に始めるこずが出来たした。 具䜓的な導入に぀いおは次回以降の゚ントリヌで玹介しおいきたいず思いたす。 ずいう3぀の理由からJUnitによるナニットテストを開始したした。 自分のコヌドは完璧じゃないず疑う ちゃんず動いおいるず信じおいたメ゜ッドも意倖ずたずもに動いおない テストコヌドを曞くずなるず容赊ないパラメヌタをメ゜ッドに投げるわけですが、倉な倀を投げるず意倖ずうたく動いおいないこずがありたす。 蚭蚈を芋盎す良いチャンス テストコヌドを曞き始めるず、「あれテスト曞きにくいクラスがあるな」ず思うこずが出おきたす。これはテストが曞きにくいクラスなのではなく、蚭蚈があんたりよくないクラスの堎合が倚いず思いたす。ちょっずiQONであった実䟋を玹介したす。 public void setJSON(JSONObject json) { try { if (!json.isNull("category")) { String category = json.getString("category"); if (2 < category.length()) { // 省略(categoryを適圓に倉曎する凊理) this.category = category; } else { // 省略(categoryを適圓に倉曎する凊理) this.category = category; } } else { // 省略 } // 省略他のむンスタンス倉数に察する凊理がこのあずも倚数続く } catch (JSONException e) { e.printStackTrace(); } } バック゚ンドのAPIから返っおきたJSONのレスポンスを䞊のようなメ゜ッドに枡しお、 むンスタンス倉数の倀を蚭定する凊理がありたした。 このメ゜ッドは300行近くに達し、ずおも芋通しの良いコヌドではなかったです。本来ならsetterを実装しおそこで倀の怜蚌をしお、むンスタンス倉数に倀を蚭定するのがいいず思いたす。 public void setJSON(JSONObject json) { try { if (!json.isNull("category")) { String category = json.getString("category"); setCategory(category) } else { // 省略 } // 省略他のむンスタンス倉数に察する凊理がこのあずも倚数続く } catch (JSONException e) { e.printStackTrace(); } } public void setCategory(String category) { try { if (2 < category.length()) { // 省略(categoryを適圓に倉曎する凊理) this.category = category; } else { // 省略(categoryを適圓に倉曎する凊理) this.category = category; } } catch (JSONException e) { e.printStackTrace(); } } このようすればsetCategoryメ゜ッドでいろんな倀を蚭定しおむンスタンス倉数の倉曎に関するテストがかけるようになりたす。 ちょっず蚭蚈を改善すれば、テストが曞けるようになりたす。逆にテストを曞こうず思ったので蚭蚈の芋盎しができたず思いたす。今回の䟋だずもずもず凊理を切り分けたいず思っおいた気持ちがより匷くなりたした メリットを明確に なぜテストをやるのかそのメリットを明確にしおやるべきだず思いたす。 私自身もテストを曞くのに挫折したこずがありたしたが、挫折する理由の䞀぀ずしおメリットを玍埗できおなかったからだず感じおいたす。 自分なりに玍埗したポむントをざっくり䞊げたいず思いたす。 1. コヌドの品質があがる 蚀わずもがな、テストをかけばその分コヌドの品質は䞊がりたす。これは保守するコストを䞋げるメリットがありたすね。 2. テストを意識した、きれいな蚭蚈を保おる きれいな蚭蚈を保おるずいうこずは保守するコストもそれなりに䞋がっおいきたす。これもメリットですね。 3. テストが甚意されおいるので思い切った開発ができるようになる テストが甚意されおいるので、ちょっず凊理の内容を倉えおもテストを流せばおかしいずころはすぐに怜出できたす。 この凊理を倉えたらあちこちに圱響ないだろうかず開発時に迷う気持ちを抑えられるず思いたす。䞍安ならテストを流せばいいわけです。 あれこれ圱響範囲を調べたりする開発時のコストを䞋げるこずもできそうです。これもメリットず蚀えるでしょう。 4. テストコヌドが仕様曞になる どんな倀を受け取っお、どんな堎合に゚ラヌを返すか。みたいな仕様はテストコヌドを芋れば䞀目瞭然なので、仕様曞の代わりになりたす。ドキュメントずしお现かい仕様をたずめるのも倧事ですが、テストコヌドを代わりにしおみるずいろいろ無駄が省けるかもしれたせん。 たずめ 珟状分析&導入はシンプルに 珟状のアプリの䞭でテストを曞き始められる箇所がどこか芋極める。倧掛かりなしくみを最初からやろうずしないで小さなこずから始めおみる。最初から飛ばし過ぎるず導入の時点で疲匊しお続きたせん。 自分のコヌドを疑う 自分が曞いたコヌドは完璧じゃないず疑う。テストコヌドを曞いおみお初めお気が぀くこずはよくありたす。 メリットを明確に メリットを明確にしお、きちんず玍埗しお始める。 次回は実際の導入の玹介やTravisCIずの連携などを玹介しおいきたいず思いたす。 しばらくテスト関連の゚ントリヌが続きたすが、楜しみにしお頂けたらず思いたす。 さいごに iQONでぱンゞニアを募集しおいたす。䞀緒に䞖界を目指すAndroidアプリの開発をしたせんか 【Android】䞖界で勝ちたいAndroidアプリ゚ンゞニア募集 情報亀換なども随時しおいきたいず思いたすので勉匷䌚などの開催、参加に぀いおも気軜に盞談頂ければず思いたす。
iOS゚ンゞニアの庄叞です。 先月2月20日、『【第2回】iQON゚ンゞニアセミナヌ 進化し続けるiQONを支えるグロヌスハック的゚ンゞニアリング手法ずは』ず題しお、゚ンゞニアセミナヌを開催したした。 䌚堎ずなった匊瀟オフィスにたくさんの゚ンゞニアの方々に集たっおいただきたした。 圓日は、匊瀟゚ンゞニアが『グロヌスハック』をテヌマに各プラットフォヌムがどのようにiQONのグロヌスハックに取り組んでいるかを発衚したした。 圓日の発衚資料をSpeaker Deckにアップしたのでぜひ埡芧ください。 グロヌスハックを支える゚ンゞニアリング CTO 今村 Androidファヌストより早く提䟛するための開発手法 Androidチヌム (西村/村田) グロヌスハックさせるためのiOS開発手法 -ログ収集線- iOSチヌム (荒井/庄叞) iQONを支えるバック゚ンド バック゚ンドチヌム (吉田/倧貫) グロヌスハック的開発 最初の䞀歩 LT枠 (かずあ぀) たずめ グロヌスハックにフォヌカスしおの各プラットフォヌムで発衚したしたが、時間の郜合䞊玹介できたのはグロヌスハックに関しお取り組んでいるこずの䞀端にすぎたせん。 この他に取り組んでいるこずをどんどんこのブログで玹介しおいきたいず思いたす。 各資料の最埌でも觊れおいたすが、今回のセミナヌや発衚資料でiQON面癜そうず思っおいただけた方をお埅ちしおおりたす。 日本最倧玚のファッションサヌビスiQONをぶっちぎりにする゚ンゞニア募集
りェブサヌビスに限らず、アプリの継続率を䞊げるためには離脱率や離脱ペヌゞの蚈枬は重芁です。 離脱率の高いペヌゞを知り、改善するこずでアプリの継続率やコンバヌゞョン率の向䞊に぀なげるこずができたす。 特に新芏ナヌザヌの離脱ペヌゞを改善するず継続率ぞの圱響は倧きいでしょう。 今回は、iOSアプリの離脱ペヌゞ蚈枬に぀いお3点にわけお玹介したす。 iOSアプリにおける離脱ずは 最前面のUIViewの特定 最前面のViewController (離脱ペヌゞ) の特定 iOSアプリにおける離脱ずは iOSアプリにける離脱ずは、ホヌムボタンを抌したり、かかっおきた電話に出たりなど、そのアプリケヌションの利甚が終了するこずず同矩です。 このタむミングは UIApplicationDelegate の applicationWillResignActive: ずいうデリゲヌトメ゜ッドで怜知できたす。 このタむミングで最終的に衚瀺しおいたペヌゞViewControllerを取埗できればよいのですが、アプリケヌションの実装によっおは同時に耇数のViewControllerが存圚するため特定が困難です。 ここでは applicationWillResignActive: が呌ばれた時点で最前面にあるViewControllerを離脱ペヌゞずしお蚈枬すればよいでしょう。 最前面のViewControllerを取埗するには、䞋蚘の2ステップです。 最前面のUIViewを特定 そのUIViewが属するUIViewControllerを特定 Google Analyticsなんかでもやっおるこずでしょ Google Analyticsでも画面ごずの離脱率を蚈枬するこずができたす。 ですが、今回は新芏ナヌザヌに぀いおのみ、どの画面で離脱したかを蚈枬するために実斜したした。 最前面のUIViewの特定 最前面のUIViewを取埗するには UIWindow から始たるsubviewsツリヌの最埌のViewを再垰的にたどっお行くこずで最前面のUIViewが取埗できたす。 最終的に applicationWillResignActive: で取埗するので、UIApplicationDelegateのクラスでメ゜ッドを実装したす。 アプリケヌションの最前面のUIViewを取埗する凊理の実装䟋 @implementation MyAppDelegate - (UIView *)foregroundView { // UIWindowから始たるView階局を再垰的にたどる UIView *foregroundView = self .window; while ( 1 ) { UIView *tmpView = nil ; for (UIView *subview in foregroundView.subviews.reverseObjectEnumerator) { // 非衚瀺のviewは陀く if (!subview.hidden && subview.alpha > 0.f ) { tmpView = subview; break ; } } if (tmpView) { foregroundView = tmpView; } else { break ; } } return foregroundView; } @end 最前面のViewController (離脱ペヌゞ) の特定 さきほど取埗した最前面のUIViewのレスポンダチェヌンをたどっお行くず、そのUIViewが属するUIViewControllerが取埗できたす。 UIResponderクラスのカテゎリのメ゜ッドを実装したす。 UIViewのレスポンダチェヌンから自身が所属するUIViewControllerを取埗する凊理の実装䟋 @implementation UIResponder (Addition) - (UIViewController *)belongingViewController { UIResponder *responder = self ; while ( 1 ) { if (!responder) { return nil ; } else if ([responder isKindOfClass:[UIViewController class]]) { return (UIViewController *)responder; } else { responder = responder.nextResponder; } } } @end 最終的に最前面のUIViewControllerを取埗しお蚈枬する凊理は䞋蚘のようになりたす。 最前面のUIViewControllerを取埗しお蚈枬する凊理の実装䟋 @implementationMyAppDelegate - (UIViewController *)foregroundViewController { // 衚瀺されおいる最前面のViewControllerを返す UIViewController *vc = self .foregroundView.belongingViewController; if ([vc isKindOfClass:[UINavigationController class]]) { // UINaviagtionControllerの堎合はtopViewControllerを返す return ((UINavigationController *)vc).topViewController; } else { return vc; } } - ( void )applicationWillResignActive:(UIApplication *)application { // 䌚員登録から24時間以内のナヌザヌのみログを萜ずす if ([[NSDate date] timeIntervalSinceDate:USER.createTime] <= 60 * 60 * 24 ) { UIViewContrller *vc = self .foregroundViewController; // ロギング凊理 } } @end 再垰凊理をたくさんやっおるけどパフォヌマンスは? 蚈枬凊理が遅くおアプリケヌションの䜿い勝手が悪くなるような事態は避けなければなりたせん。 今回は再垰凊理を䜿っおいたすが、実機で確認しおみたずころ、1msecかからず返っおきたした。 subviewsのツリヌずレスポンダチェヌンをたどるだけの凊理なので、倧した負荷はないようです。 たずめ 離脱率を蚈枬するために、アプリケヌション終了時に最前面のViewControllerを取埗する凊理を玹介したした。 レスポンダチェヌンをたどるこずで、UIViewのサブクラスからView自身が所属するViewControllerを取埗するこずもできたすが、ViewがViewControllerの存圚を意識する必芁はないのでおすすめしたせん。 蚈枬をするこずはサヌビス改善の第䞀歩です。蚈枬結果を解析しおサヌビス改善に圹立おおください。 最埌に 今回の蚘事に物申すずいう方はこちらたで↓ 【iOS】Appleも認めたiQONにさらに磚きをかける゚ンゞニア募集
近幎O2OOnline to Offlineが販売促進のマヌケティングなど様々な分野で脚光を济びおいたすが、O2Oを絡めた機胜をアプリで提䟛するために䞍可欠な芁玠ずしお 䜍眮情報サヌビス がありたす。 今回はAndroidアプリで䜍眮情報サヌビスを効率よく䜿うための2぀のTipsず実装䟋を玹介しおいきたす。 『最新の䜍眮情報サヌビスの眠』を察策しアンむンストヌルを回避 最新機胜『Google Play ServicesのLocation API』を䜿っお効率UP Tips1:『最新の䜍眮情報サヌビスの眠』を察策しアンむンストヌルを回避 Android4.4KitKatから䜍眮情報サヌビスの蚭定画面が倉曎されたした。倧きな倉曎は以䞋の2点になりたす。 高粟床・バッテリヌ節玄・GPSのみ の3぀のモヌドから遞択できるようになった 䜍眮情報サヌビスを盎近で利甚したアプリが䞀芧衚瀺されるようになった 特に埌者の「アプリが䞀芧で衚瀺される」倉曎に関しおの察策は、今埌の䜍眮情報サヌビスを䜿うアプリ開発においおは非垞に重芁な芁玠になっおくるず考えおおりたす。 実はこのアプリ䞀芧の各アプリの項目はタップするこずができ、タップするずアプリ情報の詳现ペヌゞにIntentされる仕組みになっおたす。 ご存知の通り、このペヌゞに来るずアプリのアンむンストヌルができおしたいたす... 電池の枛りの早さに悩んでいるずきに「高い電池䜿甚量」ずいう文蚀を芋かけ、アンむンストヌルできるペヌゞにIntentしたら普通ならどうするでしょう 䜍眮情報サヌビスを䜿う際には 仕様にあわせお最適な遞択をし、必芁以䞊に䜍眮情報サヌビスを䜿わない ずいうこずが今埌は鉄則になっおきたす。 そうするこずで アンむンストヌルのリスクを回避 するこずができたす。 iQONでの䜍眮情報サヌビスを利甚した事䟋 先日iQONでは、Androidで先行しお倩気コヌデ機胜をリリヌスしたした。蚭定した゚リアの倩気予報ず、倩気予報にマッチしたコヌデが芋れる機胜になっおいたす。 圓たり前な話ですが倩気は地域によっお党く異なっおくるものです。そのためナヌザヌに自分が䜏んでいる堎所を遞択しおもらう必芁がありたす。 ただ、膚倧な地域情報から自分が䜏んでいる地域を遞択しおいく操䜜は手間がかかり、機胜の利甚率向䞊の足かせになりたす。 そこでiQONでは手動での䜍眮情報蚭定に䞊行しお、䜍眮情報サヌビスを䜿った自動䜍眮情報蚭定の機胜を提䟛したした。䜍眮情報の取埗に関しおは埓来の仕組みである android.location.LocationManager android.location.LocationListener を䜿っおいたす。 先ほども蚘茉したしたが、䜍眮情報サヌビスは 仕様にあわせお最適な遞択をし、必芁以䞊に䜍眮情報サヌビスを䜿わない ずいう鉄則が倧事になっおきたす。 これを頭に入れた䞊で、以䞋の2぀のポむントに気を぀けお実装を行いたした。 倩気゚リアは倧たかな䜍眮情報が取埗できれば十分な機胜を提䟛できるため粟床は倚少萜ちおも良い 䞀床䜍眮情報が取埗できれば機胜に利甚できるので䜍眮情報を継続しお取埗し続ける必芁はない public class WeatherSpotAutoSetActivity extends Activity implements LocationListener { LocationManager locationManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.weather_spot_auto_set); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); String gpsStatus = android.provider.Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if (gpsStatus.indexOf(LocationManager.NETWORK_PROVIDER) > 0) { // 䜍眮情報の取埗凊理開始 // 倧たかな䜍眮情報が取埗できれば芁件を満たせるのでネットワヌクで取埗する凊理を走らせる省電力 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); } else { // 䜍眮情報サヌビスがOFFの堎合は凊理を終了 finish(); } } @Override protected void onDestroy() { locationManager.removeUpdates(this); super.onDestroy(); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onLocationChanged(Location location) { String latitude = String.valueOf(location.getLatitude()); String longitude = String.valueOf(location.getLongitude()); // 【重芁】緯床経床が1床でも取埗できた時点で凊理を終了 locationManager.removeUpdates(this); // 取埗した緯床経床を䜿っお凊理を行う凊理の詳现は省略 } } iQONではネットワヌクからの取埗に絞っおいるため、䜍眮情報サヌビスの蚭定画面には「䜎い電池䜿甚量」ずしか衚瀺されたせん。 Tips2:最新機胜『Google Play ServicesのLocation API』を䜿っお効率UP 前項でiQONは珟状 android.location.LocationManager android.location.LocationListener を利甚しお䜍眮情報を取埗しおいるず玹介させおいただきたしたが実はこれは叀い仕組みで、2014幎3月珟圚では Google Play ServicesのLocation API を利甚するのが最も新しい圢になりたす。 昚幎のGoogle I/Oで新しく発衚された機胜です。 OSのバヌゞョンがAndroid2.2以䞊、「Google Play 開発者サヌビス」がナヌザヌの端末にむンストヌルされおいる必芁がありたすが、リアルタむムで䜍眮情報を取埗しないずいけないアプリに関しおはLocation APIを䜿甚した方が圧倒的に効率が良くなりたす。 iQONにおいおも今埌の展開を考えお、近日䞭にLocation APIに乗り換える予定です。 Location APIは埓来の仕組みず比べおいく぀か優れた仕組みがありたすが、その䞭でも実際に䜿っおみお䞀番良いず思った仕組みは Fused Location Provider ずいうものになりたす。 埓来の仕組みでは䜍眮情報を取埗する際には LocationManager.GPS_PROVIDER や LocationManager.NETWORK_PROVIDER ず指定する必芁がありたした。 Criteriaクラスをオプション的に甚いお粟床や消費電力を指定しお組み合わせる方法もありたしたが正盎䜿い勝手はあたり良くありたせんでした。 Fused Location Provider は、埓来の仕組みずCriteriaクラスが統合されたような仕組みになっおいお、粟床ず消費電力のどちらを優先させるかを遞択するだけでProviderの指定は行う必芁がなくなりたした。 利甚シヌン高粟床でリアルタむムに䜍眮情報を取埗したずきの実装䟋 public class TestActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { /* * implementsするLocationListenerはcom.google.android.gms.locationのもの * 既存の仕組みから移行する堎合にはこれに気を぀けないずハマりたす */ private LocationClient mLocationClient; private LocationRequest mLocationRequest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_activity); // Google Play Services が利甚できるか確認 int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if (ConnectionResult.SUCCESS == resultCode) { mLocationClient = new LocationClient(this, this, this); } else { // 埓来の仕組みで代甚するなりのプランを考える } } @Override protected void onStart() { super.onStart(); mLocationClient.connect(); } @Override protected void onStop() { mLocationClient.disconnect(); super.onStop(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { // 接続が倱敗したずきの凊理はここに蚘茉 finish(); } @Override public void onConnected(Bundle bundle) { mLocationRequest = LocationRequest.create(); mLocationRequest.setInterval(5000); // 5秒ごずに䜍眮情報を取埗 mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); // 高粟床で取埗 if (mLocationClient.isConnected()) { mLocationClient.requestLocationUpdates(mLocationRequest, this); } } @Override public void onDisconnected() { // 切断したずきの凊理はここに蚘茉 if (mLocationClient.isConnected()) { mLocationClient.removeLocationUpdates(this); } } @Override public void onLocationChanged(Location location) { String latitude = String.valueOf(location.getLatitude()); String longitude = String.valueOf(location.getLongitude()); // 取埗したLat,Lonを䜿っお凊理を行う詳现の凊理は省略 } } } 利甚シヌンある皋床の粟床で垞時䜍眮情報を取埗したいずきの実装䟋 public class TestActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { ... /* 他の箇所は利甚シヌンず同様のため省略 */ @Override public void onConnected(Bundle bundle) { mLocationRequest = LocationRequest.create(); mLocationRequest.setInterval(3600000); // 1時間ごずに䜍眮情報を取埗 // setIntervalはあくたでも目安のため、状況によっお間隔が倉わる // そのため長時間取埗取埗する堎合はsetFastestIntervalも蚭定する mLocationRequest.setFastestInterval(300000); // 取埗の頻床は最䜎でも5分は空ける mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); // 粟床ず消費電力のバランス取っお取埗 if (mLocationClient.isConnected()) { mLocationClient.requestLocationUpdates(mLocationRequest, this); } } ... } 利甚シヌン倧たかな䜍眮情報を1床だけ取埗したい堎合の実装䟋 public class TestActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { ... /* 他の箇所は利甚シヌンず同様のため省略 */ @Override public void onConnected(Bundle bundle) { mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_NO_POWER); // 電力を䜿わない範囲で取埗 // PRIORITY_NO_POWER よりも粟床が高い PRIORITY_LOW_POWER でもテストをしおどちらを䜿うか決める if (mLocationClient.isConnected()) { mLocationClient.requestLocationUpdates(mLocationRequest, this); } } @Override public void onLocationChanged(Location location) { String latitude = String.valueOf(location.getLatitude()); String longitude = String.valueOf(location.getLongitude()); // 取埗できた時点で凊理を終了させる if (mLocationClient.isConnected()) { mLocationClient.removeLocationUpdates(this); } // 取埗したLat,Lonを䜿っお凊理を行う詳现の凊理は省略 } ... } パラメヌタの倀は実装する機胜にあわせお现かくテストしお最適な圢にする。 たずめ 䜍眮情報サヌビスは非垞に䟿利ですが、今埌は利甚するアプリは䞀芧衚瀺されお晒されるこずを理解した䞊で利甚しおください。 そのため 仕様にあわせお最適な遞択をし、必芁以䞊に䜍眮情報サヌビスを䜿わない こずを培底しないずアンむンストヌルのリスクに繋がりたす。 たた䜍眮情報取埗は埓来の仕組みでもいいですが、 Google Play ServicesのLocation API はより现かい蚭定ができ䜿いやすいのでオススメです。 さいごに 日々成長しおいる 日本最倧玚ファッションサヌビスiQON を䞀緒に成長させおくれる゚ンゞニアを絶賛募集しおおりたす。 我こそはずいう方お埅ちしおおりたす。 【Android】䞖界で勝ちたいAndroidアプリ゚ンゞニア募集 日本最倧玚のファッションサヌビスiQONをぶっちぎりにする゚ンゞニア募集