iPhoneアプリの勉強…、の前にObjective-Cの勉強ですね。

iPhoneアプリの開発がしたいがためにMacBookを買ったけど、立ちはだかる壁が高いと思い込んだまま1年が経過してしまった…。

iPhone5が発売されるということもあり、ちょっとここで本気を出してiPhoneアプリの勉強をしてみることにしました。

さて、何故iPhoneアプリの開発で壁を感じてしまったのか改めて考えてました。
まず、環境構築は問題なく構築できた。
HelloWorldの作成も、ネット上の情報からInterface Builderを使ってドラッグ&ドロップしながらなんとか作れた。

ここまでは問題なく理解できました。では、何が問題なのか。

今度はソースの中身を詳しく見てみました。
すると…。

@interface、@propertyみたいに@から始まる記述があったり、「-」や「+」がついていたり、[]で囲まれた記述があったりと、PHPJavaと全く違う記述がされているので、知識ゼロの状態では全く理解出来ない状況でした。

これはObjective-Cの理解が全然出来てないままiPhoneアプリの開発をしようとしていたために起こる問題で、PHPJavaが多少使える人でも、理解不能なため、ここで壁を感じて諦めてしまった人も多いのではないでしょうか。

そんな中見つけたのがこのサイトです。
http://libro.tuyano.com/index3?id=546005
いやー、目からウロコですね。これを見てiPhoneアプリ開発の勉強するモチベーションがいっきにあがりました。まずは、自分のレベルがどこなのかを整理し、それに応じて必要な知識を習得する必要があります。

上記サイトからの引用

◯基本的な文法から覚えたい
プログラムの書き方、値や変数の使い方、計算の仕方、制御構文といった構文の使い方、配列やポインタ、構造体といったものの使い方――ここまでは、Objective-Cではなく「C言語」の部分です。これらがわからない人は、Objective-Cの入門の前に、まず「C言語の入門」をしておく必要があります。

オブジェクト指向や基本的なクラスから覚えたい
オブジェクト指向の考え方、メッセージとかレシーバとかそういうものの意味や使い方、テキストとかさまざまなオブジェクトの基本的な使い方――こうしたものから覚えたい!と思う人は、まさに「Objective-C入門」をスタートする人たちです。

iphoneで使うクラスについて覚えたい
オブジェクト指向も、基本的なクラスの使い方もわかってる、iphoneipadのアプリで使われている「UIKit」の使い方を知りたいんだ――そういう人は、既にObjective-C入門を終わって、次の段階に進む人です。もうObjective-Cの入門は不要です。iOSのプログラミングについて勉強を開始しましょう。

自分の場合は、C言語は少し勉強したことがあるけど、Objective-Cのことは全くわからなかったので、Objective-C入門の勉強を始めることにしました。

先程のサイトにObjective-C入門のページがあるので、そこで勉強!!

このページで勉強するだけで、今まで理解できなかったものがかなり理解できるようになります。Objective-Cの基本文法とか、他の言語と違う特徴や使い方がだいたい分かるようになってきます。iPhoneアプリ開発で作ったサンプルのHelloWorldのソースを見てもかなり理解できるようになっていると思います。
http://libro.tuyano.com/index2?id=524006

Javaがある程度理解できる人であれば、JavaObjective-Cを比較しながら解説してくれいてるサイトがあるので、そこを見ると理解が深まると思います。
http://visible-true.blogspot.com/2011/06/javaobjective-c.html

ここまでの状態になって始めてiPhoneアプリの開発に進めるわけですね。

Cocoa Touch」というフレームワークの使い方を覚えたり、XcodeとInterface Builderという開発ツールを使って実際にアプリの開発を進めていけるわけです。
http://libro.tuyano.com/index2?id=578003


ふぅ、まずはここまでの下準備が必要だったわけですね。
ようやく大きな壁が取り払われたので、これで楽しい楽しいアプリ開発を進めていけそうです。

JavaScriptについて調べたことの覚書

JavaScriptを軽くする方法

圧縮加工

コメントや空白を取り除いて「圧縮」加工する(最近ではオンラインで対応しているところもある)

gzip圧縮

gzip圧縮を行って転送量を減らす「HTTP 圧縮(HTTP compression)」
http://blog.livedoor.jp/s_s11/archives/1018016.html

関数定義方法

関数を定義する方法その1 (普通のやり方)

関数を定義する方法その2 (無名関数を使う)

※JS特有のやり方

javascriptのライブラリとかを探していて良く見かける
(function (){hoge;hoge;})();
これは上記を踏まえて、無名関数を定義してすぐに実行することを意味します。

クロージャについて

なかなか理解が出来ませんでしたが、このサイトを見て脳内がかなり整理されました。
http://dqn.sakusakutto.jp/2009/01/javascript.html

ポイント
  • 関数内の関数
  • 関数を返す関数
  • 無名関数

そして、重要なのは、クロージャは関数内関数で外側の関数スコープ内の変数の状態を保持したまま関数としてreturnを返すことができるということ。


はまったところ


var method = code2name();
この時点で無名関数が実行され、クロージャ(関数内関数も実行)されるものとばかり思っていたが、そうじゃなかった・・・。
無名関数自体は実行されているが、return に指定している無名関数は実行されてない。
なので、これだけだと、クロージャオブジェクトを取得しているだけとなってしまう。
クロージャオブジェクトを取得し、それを実行させることで、始めてクロージャとして機能する・・・。
参考URL:http://hisasann.com/housetect/2007/12/post_44.html


こんな感じでajax使ってapiたたいて、次のapiたたく際の引数にしておきたい場合などに便利。

こうしておくと、呼び出す側はreadMore("引数");
を繰り返し呼ぶだけでnextIdがどんどん変わった状態で実行させることが出来るようになる。

javascriptだと変数のスコープが分かりにくいのと、callback地獄になってわかりにくくなってしまうので、こうしておくとすっきりして分かりやすくなります。

KitchenSinkを入れてiPhone Simulatorで動かしてみた

Titaniumの勉強ということで、色んなドキュメントを読むことも大切ですが、まずはどんなことができるかをざっくり知るためにKitchenSinkをiPhone Simulator上で動かしてみることにしました。

KitchenSinkをDownload

まずはKitchenSinkのソースをここからDownloadしてきます。

githubなので、分かるかたはcloneしてローカルにリポジトリを作っておくと便利です。
gitが使えない場合は、普通にDownloadボタンがついているので、そこからDownloadしてきます。

macではGitHub for Macというアプリがあるので、これを使うと便利です。
以下からDownloadできます。
http://mac.github.com/

Downloadしてきたファイルをインポート

Downloadしてきたファイルをworkspaceに配置して、Titanium Studioでimportします。

iPhone Simulatorを起動して実行

Titanium StudioでKitchenSinkプロジェクトを選択した状態で、三角アイコンからiPhone Simulatorを選択して実行!!

実行後の画面

実行するとこんな画面が表示されるので、あとはいろいろいじってみてどんなことが出来るのか試してみましょうー!!

Tinaniumをいじってみた

TitaniumでiPhone用に作成したものが、ほとんど何もせずにAndroidでも動くかなぁと思ってやってみたけど、全然ダメでした…。

Android対応でやったこと

  1. Windows PCにtitaniumの開発環境を構築
  2. iPhone用に作成したソースをインポート
  3. Deployment TargetのAndroidにチェックを入れる

ここまでやって実行すると、ひとまずアプリが起動してくれるようになります。

で、ネットに接続するアプリなんだけど、ネットにつながらないんですよね…。
そうです、はい、Androidの場合は別途パーミッションの設定をしないとダメみたいです。

Tinaniumをいじってみた

TitaniumでiPhone用に作成したものが、ほとんど何もせずにAndroidでも動くかなぁと思ってやってみたけど、全然ダメでした…。

Android対応でやったこと

  1. Windows PCにtitaniumの開発環境を構築
  2. iPhone用に作成したソースをインポート
  3. Deployment TargetのAndroidにチェックを入れる

ここまでやって実行すると、ひとまずアプリが起動してくれるようになります。

で、ネットに接続するアプリなんだけど、ネットにつながらないんですよね…。
そうです、はい、Androidの場合は別途パーミッションの設定をしないとダメみたいです。
tiapp.xmlタグで囲まれている中に設定を追記します。

これでようやくネットにつながりました。

そうそう、デバッグとかしてるときにAndroidのようにログを出したいと思って
console.log();
とかやってみたけどダメでした。
まぁ、そうなるかwww。
ログ出力用に提供されているAPIがあるからそれ使いましょうってことですね。
Ti.API.debug()
これ使えばログも出せるようになりました。

海外SEO対策についてちょっと調べてみた。

インデックスについて

日本でインデックスされたものは海外でなくなるわけでなく、共有されています。
といっても、日本語で書かれているページがインデックスされているだけなので、日本語サイトとは別に海外版のサイトを作っている場合は別インデックスとなってしまいますね。

Localizationについて

Localizationの仕組みは、検索者の住んでいる物理的な場所や使用している言語などからいちばんふさわしいと判断した結果を返すようになっています。
Localizationの基準には、TLD、サイトで使用する言語、サーバーの設置場所(サーバーのIPアドレス)などさまざまな条件が加味されます。
もっとも比重が大きいとされるのは、その国のccTLD(日本なら、.jpがつくドメイン)でサイトを作ることです。

地域ターゲットについて

ウェブマスターツールで地域ターゲットを選択できる機能というものがあります。
これを使えば、任意の国にサイトをひもづけることができますが、この機能が使えるのは.comや.orgなどの中立トップドメインのみとなっているようです。
ちなみに「.co」は最近gTLD(汎用ドメイン:generic Top Level Domain)になったので、この地域ターゲット機能を利用することができるようになりました。

検索エンジンについて

海外では圧倒的にGoogleのシェアが高いですね。
Googleが60〜70%で、Yahooが10〜20%くらい。

対策するならGoogleは必須ですね。
Yahooだとディレクトリ登録できるけど、日本と違い申請時以外にも毎年審査料がかかってしまうので、費用対効果次第。

http://www.access-webconsulting.com/seo/seo06.html
http://d.hatena.ne.jp/teruyastar/20101031/1288459532

あと、韓国はNAVERがすごい人気みたい。
ここをうまく攻略できるかがポイントですね。

http://search.submit.ne.jp/guide/02/5.html
http://www.naver.com/
http://blog.naver.com/pah1202?Redirect=Log&logNo=40100743439

被リンクについて

あたりまえのことですが、海外サイトだと日本語サイトの被リンクって意味ないんですよね…。なので、海外サイトの被リンクが必要になってきます。
海外サイトを運営しているのであればいいですが、ない場合は海外SEO対策をしている業者に依頼する等の対策が必要ですね。

まとめ

まずは下記2つを対策することでクロールしてもらい、indexをどんどんしてもらえるようにする。

  1. ドメイン「.com」で取得
  2. ウェブマスターツールで各国用のURLを該当の国にひもづける

で、ここまでできたら上位表示を目指す対策を進めて行く

  1. 海外サイトでの被リンク
  2. 2ワードで検索にひっかかりやすくする(例:SEO 画像)

などなど。