ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2012/02/09

「ぐぐっと!急上昇ワード Android」の誕生について。ちょっと昔話


10万ダウンロードというひとつの区切りを迎えた今、ちょっとこのアプリについて振り返ってみたいと思います。
(Androlibの情報によると、Android Marketにてダウンロード数が50,000を超えるアプリの割合は3.8%とのこと)

まずこのアプリをひとことで説明すると「トレンドキーワード検索・共有アプリ」です。
しかし最初からこのアイデアがあり、実現しようとアプリをつくったわけではありません。
(AndroidをターゲットにしたのはJavaの方がなじみがあったからですが)

まず最初に考えたのは「できるだけ端末から削除されないようなアプリをつくろう」というものでした。
一発ネタ的なアプリはおもしろいけどすぐ飽きてしまうし、誰もが使うような定番アプリは競争が激しい。
そこで何度も使えて、消さずに残しておいてもいいやと思ってもらえるようなアプリのネタを考えることにしました。

「Amazonのロングテールならぬロングターム戦略や!」と言ったとか言わないとかw

そしてネットをいろいろ巡っているときに「Google急上昇ワード」がネタとして良いかもしれないと思い、さらに調査を続け、キーワード・ランキングをツイートするTwitterBotがそこそこフォロワーがついていることを確認しました。
また同じようなアプリについて調べたところ、Androidには同種のアプリを見つけることができませんでした。(iPhoneにはランキングを紹介するアプリが1本だけありました。今ではiPhone/Androidとも、同種のアプリが多数あります)
「この方向はアリかも」と採用しました。

次にネタのベースが決まったところで、アプリとしてはどうしたらよいだろうかと考えていきました。
キーワードのランキングが見られるだけではアプリとして面白みに欠けるので、プラスアルファが欲しい訳です。

更新されるキーワードを眺めていると、時々知らないキーワードが出てきます。そうすると自然に検索して調べたくなります。
こうしてキーワードのランキングから任意のワードの検索ができるアプリのアイデアが生まれました。

結果このアイデアは大正解。検索という能動的な機能に結びつけたことが、当初のコンセプト(端末から削除されないようなアプリ)を実現できた一番の要因であると同時に、単なる情報収集ツールではなく、暇つぶしツールとしても「使える」アプリになり、10万ダウンロードを実現できた要因だと思います。

実際このアイデアが正しかったのは、その後同種のアプリがiPhone/Android向けに多数リリースされていることが証明していると思います。

爆発的にリリースされるアプリが増えている現在は、上記のようなアプリの作り方では、結果を出すのは難しいのではないかと思います。また既に多種多様なアプリがリリースされているので、差別化ばかりを考えると、ニーズのない誰得なアイデアばかりになってしまいがちです。
そんな状況においては、定番ジャンル・競争の激しいジャンルでも、後発だろうと先行者よりも良いアプリをつくってやろうという気概と実行力が必要ではないかと感じています。

ただし本質としては「ユーザに価値あるサービスを提供すること。そしてそれがたまたまアプリという形であった」になっていないとダメなのでしょう。

これまでアプリをつくってきて、思ったこと感じたことををつらつらと書いただけのエントリになってしましましたが、改めて、これからも楽しみつつアプリをつくっていきたいと思いました。

「ぐぐっと!急上昇ワード Android」10万ダウンロード突破

Androidアプリを公開しましたのエントリで初登場した「ぐぐっと!急上昇ワード」が10万ダウンロード突破しました。(昔のエントリには今みるとなつかしい画面がw)

お使いいただいているユーザの皆様をはじめ、少しでも興味を持ってダウンロードしてくれた方、レビューに取り上げていただいたサイトおよびメディアの方々に改めて感謝申し上げます。

公開してから1ヶ月で5000ダウンロードを超えたので、当時として順調な滑り出しと思います。
なにせAndroid OS 1.6の時代、ほとんどはdocomo SO-01B(Xperia X10)のユーザです。
(当時はアプリを日本にしか配信していませんでした)

そしてリリースから1年後、機能追加も一段落しダウンロード数は7万を超えています。
また、この時のアップデートでアイコンのデザインを変更しました。

そしてさらに10ヶ月、10万ダウンロード突破となりました。

始めてリリースしたアプリがここまで上手くいかなかったら、自身のスマートフォンに対する取り組み方も違っていたと思います。

機能についてのアイデアもまだまだあります。
引き続きのご愛顧を賜りますようお願い申し上げます。

Android Market「ぐぐっと!急上昇ワード」

2009/11/23

GoogleAppEngineにGaelykとT2を仕込んでみる

Javaを勉強した後にLL系にいった自分としては、GAE/JでまたJavaをやるのはなぁと思っていた。だったらGroovyは?と思って調べていた時にGaelykと出会った。(GAE/Pはスルーしてました。PythonよりGroovyの方が好きなこともありますが…)
単純にGAE/JでGroovyを動くようにするには、こちらのブログに書いてある通りにすれば良いのだが、GaelykはGAEの様々な機能を使い易くしてくれている。特に「low-level datastore API」と「task queue API」に反応してしまった。

※詳しくはGaelykのTutorialページを参照。また、チュートリアルを日本語訳してくださっている方も

またT2を使うのは、URLが/hoge/foo.groovyとかになってしまうのがカッコ悪いから(笑)ではなく、WebアプリのURLはできるだけアーキテクチャに依存されないようにすべきという考えに基づき、/hoge.拡張子やら?p=fooを排除したいのと、T2でURLマッピングしていた方が、後々何かあったときに柔軟に対応できそうな気がするから。

思いの他、前置きが長くなってしまったが、とりあえず、セットアップのメモ。

環境はこんな感じ。
  • Mac OS X 10.5.8 (Leopard)
  • Eclipse 3.5
  • appengine-java-sdk-1.2.6
  • Groovy 1.7-beta-2
  • Gaelyk0.3.1
  • T2 0.6.2-ga
  • T2 extension modules 0.6.2-ga
  • Google Guice 1.0
あと、Javaは1.6を使います。(多分T2が1.6じゃないといけないから)

では、Eclipseでプロジェクトを作成し、それをカスタマイズしていきます。

1.GAEのプロジェクトを作成します。(GWTは使わないので外してます)


2.デフォルトで展開されるファイルはこんな感じ


3.下記から必要なファイルをダウンロードして必要なjarを集め、プロジェクトに追加していきます。

gaelyk-template-project-0.3.1.zip
http://gaelyk.appspot.com/download/

t2-0.6.2-ga.zip
t2-ext-0.6.2-ga.zip
http://code.google.com/p/t-2/downloads/list

guice-1.0.zip
http://code.google.com/p/google-guice/downloads/list

必要なjarはコレ



4.追加するとこんな感じ

※外して良いjarもあると思いますが、調べてないのでそのままいきます。

5.Javaコンパイラーを1.6に設定します


6.ビルドパスに「t2-0.6.2-ga.jar」を追加します


7.設定ファイルを編集します
・Gaelyk031_T2_Sample/build.groovy
new AntBuilder().sequential {
    webinf = "war/WEB-INF"

    gaeHome = System.getenv("APPENGINE_HOME")
    if(!gaeHome) {
        println "To build your file you have to set 'APPENGINE_HOME' env variable pointing to your GAE SDK."
        System.exit(1)
    }

    taskdef name: "groovyc", classname: "org.codehaus.groovy.ant.Groovyc"

    groovyc srcdir: "src", destdir: "${webinf}/classes", {
        classpath {
            fileset dir: "${webinf}/lib", {
                include name: "*.jar"
            }
            fileset dir: "${gaeHome}/lib/", {
                include name: "**/*.jar"
            }
            pathelement path: "${webinf}/classes"
        }
        javac source: "1.6", target: "1.6", debug: "on"
    }
}

・war/WEB-INF/web.xml



    
        Guice Servlet Filter
        com.google.inject.servlet.GuiceFilter
    
    
    
        t2
        org.t2framework.t2.filter.T2Filter
        
            t2.rootpackagepackage com.keygraphix.gae.sample
        
            t2.container.adapterorg.t2framework.t2.adapter.GuiceAdapter
        
            t2.eagerloadtrue
        
            t2.exclude-resourcescss, js, png, gif, jsp, jar
    
    
    
        Guice Servlet Filter
        /*
    
    
    
        t2
        /*
    
    
    
        GroovletServlet
        groovyx.gaelyk.GaelykServlet
    
    
    
        GroovyServlet
        groovy.servlet.GroovyServlet
    
    
        GroovyServlet
        *.groovy
    


7.src/com.keygraphix.gae.sample/IndexPage.javaを作成
package com.keygraphix.gae.sample;

import org.t2framework.t2.annotation.core.Default;
import org.t2framework.t2.annotation.core.Page;
import org.t2framework.t2.navigation.Forward;

@Page("/")
public class IndexPage {
    @Default
    public Forward index() {
        return Forward.to("/index.groovy");
    }
}
※ここがJavaなのは、Groovyでの動かし方が分からなかったから。でもGroovyで書いてもコード量減らないですよね。

8.war/WEB-INF/groovy/index.groovyを作成
html.html {
    head {
        title "Hello"
    }
    body {
        p "Hello Gealyk & T2 Sample"
    }
}

9.サーバの起動


10.で確認ブラウザ


これで最低限動くようになりました。あとは、バリバリ開発していくだけ?ですね。

プラグインで一発環境構築とかできるようになりたいなぁ。
あと、SyntaxHighlighterの表示が思った通りにならないので、これも課題だなぁ。