TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

色々なサービスを組み合わせる「化学式」の発想

お手伝い所の会社で、新しくやろうとしてることがあって、必要最低限というのがそもそも何なのかという話をしながら、開発を進めています。

議論しながら作ってる過程でふと「化学式」の発想って大事だなぁと自分の中で気づきがあったのでちょっとブログにまとめておこうと思います

クラウドの時代にはクラウド間を結合させる化学式を知っていることのほうが大事(By サーバーワークスの大石さん)

前職で技術セミナーとかキャリアセミナー系の運営を一時期やっており、その主幹はマーケティング部門で自分は部門外だったのですが、それなりに人脈が合ったこともあり、イベントの趣旨を踏まえつつ、先方にとってメリットがありそうな人とか会社の方を紹介するというこんな↓社内向けにマッチングサービスみたいなこともやってました^^

  マーケティング部門 ⇔ 自分 )⇔ これまでの社外活動で得た人脈通じて社外のエンジニアの方など

そういう活動の中で、サーバーワークスさんに2,3回ほどお話しいただいたり、ワークショップをやってもらったことがあるのですが、サーバーワークスの大石さんのお話しの中で、クラウドの時代にはクラウド間を結合させる化学式を知っていることのほうが大事というニュアンスのことをお話しされてました。

※ブログ↓で書かれてましたね

私が講演などでよく話している「クラウドインテグレーターの強みは、クラウド内もしくはクラウド間を結合させる化学式を知っているかどうかだ」という文脈においても、salesforceAWSという重要なクラウドの知識が両者のアライアンスで結集されることは非常に大きな意味を持つことになると確信しています。

現在の自分の状況

ついつい機能とかに目がいってしまう傾向に陥りがちですがそれが本当に必要なのか?というのを議論の中で見失わないように常に意識しており、そのかいあってか、効果測定したいポイント含めて当面検証しないいけないことが明確になってきました。

実際にユーザさんがその機能をつかってもらう前に、色々な準備(アプリをダウンロードするとか、ユーザ登録するとか・・・)が必要になるような仕組みだとそもそも使ってもらえないという状態になりそうなので、そういうユーザさんには、ネイティブのアプリではないけど、他の手段で代替できそうなアプローチを見つけてそちらでいくことにしました。

一方で、ユーザさんの中でも特定の属性の人には必須となる機能がネイティブのアプリでないと実現できない所が出てきたのですが、幸い、その属性にマッチする人は直接あって状況説明しつつこちらがアプリの設定まで出来そという目処があったのでネイティブのアプリを最低限作りこんでます。

議論を踏まえて必要な機能

あまり細かいことは流石に書けないのですが

  • ネイティブのアプリ
    • ユーザ向けの機能
  • Webアプリ
    • ユーザ向けの機能
    • 効果測定のためのツール(GoogleAnalyticsも含む)
  • バックエンドで定期的に動作するcron的なアプリ
    • ユーザ向けの機能
    • 効果測定のための集計処理

という感じでアプリが必要になりそうな気がしてきました。

とりあえず考えた構成

DBの機能+Web API+αを持ってるという部分で使い慣れてるACSを起点にして、JavaScript/CoffeeScriptで書けるもので周辺を固められないかなぁと思ったら意外とすんなり出来ました。

  • ネイティブアプリはTitanium Mobile一択。
  • Webアプリもユーザ向けについては、ペライチ的な1枚もの情報で済むので、基本的にはAmazonS3のStatic Web Hostingの機能でHTML/CSS/JavaScriptと画像で事足りそうな
    • ラッキングの処理とか細かい所で多少作りこみが必要だったのですが、最近のJavaScriptフレームワークで標準的に持ってる機能を使えばすぐに実現できそうだったので最近使い慣れていたAngularJSを使ったモノで検証して実際に意図したことが出来ることを確認
    • 効果測定のためのツールでGoogleAnalyticsは別として、それ以外にちょっと固有の日々集計処理が必要になりそうで後述のHubotとGoogle Apps Scriptあたりを組み合わせて行う予定
  • バックエンドで定期的に動作するcron的なアプリ
    • CoffeeScriptで書けるGitHub製のBotツールであるHubotを活用。Heroku上でcron的に動作させてACSに定期的に接続&特定の条件にマッチしたら処理を実行するイメージ
    • 効果測定のための集計処理もACSにある特定の情報抽出→何らかの数値集計処理→結果を社内で使ってるSlackに流す or 抽出したものをGoogleスプレッドシートに貼る→ピボットテーブルか必要だったらGoogle Apps Scriptとかで処理を書く

別のものに作り変えたくなるタイミングで違う化学式を思いつくかが自分の今後の課題

最初に引用したサーバーワークスの大石さんは、クラウドインテグレーターという立場だからというのもあると思いますが、個人とか小さい会社で働いてる人こそ、こういう化学式をいくつも知ってると、これからやろうとしてることの技術的な観点での実現可能性を把握しやすいっていうのを今回仕事してみて気づきました。

今考えた構成のものをずっと使っていくことはそもそも視野にいれてないし、捨てる前提で考えようとはしてるのですが今のところACSに依存してる所が多いため、別のものに作り変えたくなった場合に、違う化学式をサクッと思いついて実行できるのかが自分の課題な気がしてます。

ACS素因数分解(?)して

  • バックエンドはMongoLabを採用してデータはそっちに移行する
  • MongoLabのデータにアクセス出来るWebAPI的な仕組みをHeroku+Node.js的なもので実装する
  • フロント側のアプリ(ネイティブ、Webアプリ的なもの)を一部修正

という感じになりそうな気もしてるのですが、修正箇所とか移行作業が多く、もうちょっと違うアプローチないかなぁ・・

※最後に宣伝的な内容

最近の自分の活動成果を違う所で活かしたいと思って基本的にはプログラミング経験が無い方(プログラミングに興味があるけど、学び方のとっかかりがつかめない方とか仕事上、インターネット上のサイトの情報をよくチェックしてて、ひたすらコピペする作業に疲れを感じてる方)を対象に日々の面倒をプログラミングで解決!【入門編】というのを定期的に開催しようと思うので興味ある方のご参加お待ちしています