岐阜人材育成講座 ~はじめるにあたり~

これは

2012年の岐阜県、スマートフォンアプリ開発関連人材育成事業でiOSアプリ開発の講師をしています。その講義で口頭で話した内容の概略メモです。 情報工学を受講したことがなく、C言語などは知らない方に、iOSアプリ開発に参加する上で知っておくべき、プログラミングの概念と技術の概要を伝えるのが、目的です。 このテキストは、講義を受けた方が、あとで内容を思い出すためのメモです。思い出すための糸口として概略をまとめています。

受講内容と想定している受講者

講義回数はは、1週間に2回、ほぼ1日の講義を、2ヶ月、全16回の予定です。 受講者は、C言語を知らない、またC++などで開発経験があるなど、スキルはさまざまな、経歴もさまざまです。

ぶっちゃけゼロから作れる開発者になるのは困難だと思っています

iPhoneの登場初期のような、真っ白な画面を表示するだけのアプリが”照明アプリ”として何十万ダウンロードを達成する時代は、大昔に終わっています。 iOSが出てから5年ほどですが、iOSアプリを企業また個人で作っている人の中には、10歳からプログラミングをしている人が、ゴロゴロいます。

そのなかで仕事としてiOSに関わるならば、たった数十時間で開発者になれる、という言葉の内容と意味を、自分が今まで受けた教育や蓄積した経験をもとに、考えてください。 私は、開発者になるのは困難だと思っています。無理だと言ってもいいでしょう。

しかし、iOSアプリの価値は、気持ちいい絵と音楽とユーザインタフェースです。純粋な開発者はそれを支える縁の下の力持ちです。この状況は、Windowsのような業務アプリとは全く違い、おそらくは、ゲーム開発会社に近いでしょう。その世界では、開発者の仕事が理解できて、アニメーションのパラメータ設定であれば自分で”コードを触れる”ことには、意味があります。

自分にとっての、iOSの知識と経験の活用を考えてください。また、自分が10時間でできることは、他人も10時間でできます。しかし、5年前に10時間でやったことをもとに、5年間の経験と蓄積を重ねているならば、その5年間はだれがやっても5年間かかります。その意味で、知識と経験の活用を、考えてください。

達成目標

習熟の目標設定は:

  • Obj-Cの言語仕様が”だいたい”わかる
  • サンプルコードをいじり(アニメーションの動きなどを変化させる)、そのいじった内容を論理的に他人に説明できる。

です。

テキストと資料

  • [http://iosbook.net]
    • 講座の教科書です
  • [https://developer.apple.com/jp/devcenter/ios/library/japanese.html]
    • Apple公式の日本語のドキュメントです。必要な項目、基本的なものは、熟読して、理解しておきましょう。
  • [http://stackoverflow.com]
    • Q&Aサイトです。質問に対して、人手による評価で、よい回答が上位に表示されます。Googleで検索するときに、ここをサイト限定で検索すると効率よいです。

このほか、Appleの開発者サイト[https://developer.apple.com/devcenter/ios/index.action]には、ドキュメントおよびフォーラムがあります。

”プログラミング”の経験がある方は、”動くからいい”、を捨ててください

ProcessingやArduino、MAXなど、何かしらの動作制御やデータ処理をコンピュータでした経験があるならば、それはプログラミングの経験と呼べます。 この講座を受ける方は、”動くからいい”、”動けばいい”、という考えを捨ててください。

  • 考えて作らない
  • 経験を蓄積しない
  • 非効率な開発をする

考えて作らない

コードを書いたなら、それが当たり前に動くから、プロとしてやっていけます。それは、目の前で動くのみならず、仕様の範囲での”ありとあらゆる状況”で動くもので、あるはずです。 しかし自分の想定と違って、思ったように動いていない場合は、よくあります。 その場合は:

  • 開発時の、こう考えて、こう作れば、こう動くはずだ、を再確認する
  • その確認に基づいて、思ったような動きをしていない部分の、コードを読み直す、またデバッグなどでその部分を特定する
  • その部分の動きを確認する、予想と照らしあわせて、差異を見つける

手順を取ります。そして、修正します。 ”動くからいい”と考える場合は、このフローが身につかない人が多いと、私は思っています。

経験を蓄積しない

動かない場合も、上記のフローを通して、なぜ動かなかったかを、知識として整理して、それが発生する状況を把握して、はじめて経験となります。

非効率な開発をする

iOSの開発に使うXcodeは、ステップ実行、ブレークポイントなど、アプリケーションの実行状態を直接確認できるデバッグ機能があります。

アプリケーションを1行づつ実行して、値の変化を追って、”動くようにした”という方がいるかもしれません。おそらく、それは、とても時間のかかる作業だったでしょう。 しかしそれは”作業”です。開発者に徹夜をして欲しいと思う人は、誰もいません。徹夜の回数を誇られても、残業代がかさんだなとか、トラブルメーカーになりそうだから、次の仕事ではこいつは外しておこうと、思うだけです。

もしも最初から、上記フローを使い、また経験を活用して、原因箇所を限定すれば、コードをよく読みなおすだけで、修正できたかもしれません。 動くものを作ることが仕事です。その結果に至るまでの、最も楽ができる、最も効率的な開発手法を、自分以外の人でも使える汎用なフローとして、身につけてください。

”プログラミング”をするまえに

概念を理解してください

概念はとても大切です。

  • それは、どんな概念か、
  • 歴史的な変遷もふくめて、どこから、どうして、その概念が生まれたのか、またそれが、こうして教え継がれる価値はなにか、

を吸収してください。

実作業の前準備が仕事の8割を決めます

目の前にある作業、コードを書くとか、Xcodeで何か作業をするとか、は肉体的な充実感があり、仕事をした気になります。 ですが、実作業をする前に、このクラス設計は正しいか、自分がこれから書こうとしているコードは、どこでどうつかわれるかを、理解しているか、”わかっているか”をチェックしてください。

英語は必要です

英文を読むことにアレルギーがあるなら、それを克服するか、この仕事は諦めてください。 ここでの”英語が必要”は、文章を読み開発に必要な情報を自分で吸収できること、です。

  • 英語構文の知識は、中学3年で十分です。
  • 技術用語およびわからない単語は、都度調べて覚えてください。
  • プログラミングガイドのような、長文を読むときは、文章の構造を利用して、短時間に無駄なく、どの詳細の階層を読んでいるかを意識すると楽ができます。
    • 英語は重要な情報が頭にくる、そして詳細が後ろに続く言語です。
    • タイトルと見出しは内容を濃縮した情報です。じっくり読んで全体を把握します。
    • タイトルに続く”概要”は、だれにむけて、どんな情報を、どう書いているのか、それを読むと何が得られるのか、をまとめています。読むべきか否かを判断するのに十二分の情報がここに含まれています。
    • 段落は、先頭の1行がその段落の内容を表しています。1行を読むのも時間が惜しい時は、接続詞と主語と助動詞(must, may, shall, そしてnotの有無)そして動詞を見ます。

独学はよいのですが独善になっていないか気をつけましょう

プログラミング言語でソースコードを書くときの、変数や関数の命名、また設計パターンは、何十年の先人が経験を蓄積してきた、定番の方法があります。独学はよいのですが、この点で、独善にならないように気をつけましょう。 プログラムのソースコードは、必要な機能をプログラミング言語で人間が読んでも分かりやすく表現する活動です。ソースコードで、他人が読みにくい”おりじなりてぃー(笑)”あふれるソースコードは、害悪です。もしも私がマネージャをしているなら、そのようなメンバーは即時はずします。それは、”開発後期”になって、原因が分かりにくい不具合を混入させる、その人のソースコードが読みにくい場合は他のメンバーにゼロから書きなおさせることになると、経験が告げるからです。 独善にならないよい方法は:

PassKit雑感メモ

Pass Kit 技術利用の予測

これは

6月13日に作成した、PassKitの技術概要から、iOS6が登場する2012年9月後半からの、動きの勝手想像。 PassKitについては、プログラミングガイドを参照

クライアントにメールで送ってたのだけど、ふっと見つけたので、ここに公開。

要点

iOSをプラットホームとして、電子メール、ウェブ(URL)、アプリから、ユーザにカードを提供する仕組み。

ビジネスなモデルは、i-mode。コンテンツを提供するインフラ。時代が違うのは、ユーザに直接かつリアルタイムに働きかけ行動を制御できる、チケットという概念を利用した、コンテンツとノーティフィケーションな代物。そのカードの提供には、Appleへの手数料はかからず、カード情報は、提供者自身のサーバから提供する。強いリアルタイム性が利用できる。

ユーザに広告チラシを渡して、それを所持し続けてもらえる感じ。その広告チラシ、メンバーズカードを通して、通知や提案ができて、それらがデバイスIDでヒモ付されている。

概念として、通知専用のウェブアプリをユーザヒモ付でワンクリックインストールする仕組みと理解すれば、応用の発想がしやすいだろう。

ユーザが、スマートフォンを持っていれば自動的に提案がくる、自動機械になる大きな転換点。もう、検索したり、操作したり、能動的なわざわざやらねばならない行動は面倒なだけな、強い方向性の提示。所持しておけば後は自動的に快適なものを提供する、糸口としてのモバイルなデバイス。

技術的には:

  • ビジュアルなカードを通知する、ノティフィケーション
  • 提供者は、自前のRESTfulなウェブサービスを通じて、JSON+画像をアーカイブ、電子署名した情報を、提供する
  • URLにはデバイス識別子が含まれる(デバイスの個別識別が可能)
  • 提供者は、パスをユーザのデバイスに、挿入、更新、削除、ができる
  • 扱いは、アプリへのノティフィケーションと同様。Appleに支払う手数料は発生しない。

Appleが提案する利用場面:

  • (航空券などの)チケット、クーポン、メンバーズカード
  • ユーザへの行動の催促、あるいは制御:(お店など)位置近接、(搭乗や上映)時間

ブレスト

  • こんなサービス提供しているところ、今までなかった?
    • インフラ的に提供しているとこは、しらない。Grouponとかが業態近いけど、メール保存のいちいちクリックでウェブなチケット表示?
  • アプリでもできたよね?
    • 自社アプリで同様のことはできた。アプリのインスト不要で、URL踏めばチケットなのが、違い?

ぱっと思いつく感じ、どんな感じ

  • 毎月、おすすめ商品写真がかわるメンバーズカード
    • 美容院の担当の方、予約可能時間が分かる、ワンボタン予約機能付きメンバカード
    • 先着100人限定クーポン
      • 100人きたら、クーポン消滅。もしくは、有効期限が翌日に伸びる。
  • キャンセル待ち予約チケット
    • キャンセルが出たら予約確定させます?な表示が出るチケットとか
  • 中古本売り買いだと
    • メンバーズカードー>買取価格をポイント化で10%アップ。
    • 購入した履歴にあわせた、在庫ありのおすすめ画像をカードにアップデート表示。限定キャラ絵とかもいいよね。
    • 買って売るユーザには、適当なタイミングで買取の提案してもいいかも。
  • チケット会社へのインパクト
    • 個人にチケットヒモ付により、自動的な転売屋の排除。

動き

対応する会社

  • POSなシステム (チケット管理システムとして、ウェブとアプリとその運用を必要とする)
  • チケット会社(ぴあ、セゾン)
  • イベント参加なウェブ会社 (ATND)
  • プリペイド発行会社

ギーク

  • 6月末には、ウェブサービスの基本ライブラリとサンプルアプリコードを使いこなすだろう
  • NDAで外には出せないので、社内やうちわで評価するだろう

技術手段な会社

  • Parse.comなどのノティフィケーションの代行サービスは、PassKitの代行サービスを提供するだろう。
  • iOSのPassKitを使いやすく、また同時にAndroidに同様なサービス提供できる形で、かつiOSのPassKitを一般の人が使えるウェブサービス会社が登場するだろう。
  • PassKitの代行会社は、ユーザの行動履歴を手にするだろう。ビックデータから、いかに適切にかつ好まれる提案ができるか、高い解析能力とセンスがあるところが、大きな成長を遂げるだろう。

機器メーカ

  • バーコードに限らず、汎用の画像を表示できるので、液晶画面のその表示を読み取ることで、既存のPOSを利用できるだろう
  • システム自体に組み込むことは容易なはずだが、iOSに必要なウェブサービスまでを開発/運用する能力はないだろう。→ 外注もしくは外部委託

特需?

  • 既存のメンバーズカード発行会社が、組み込むには。富士通とかあのあたりのものに増設。システムを分離すればいいから、難易度は低いが、動きは遅いだろう。ー> 食い込むチャンスかも
  • ビックデータでユーザの行動履歴分析のフラグが立っているから、NTT系列あたりが、システムごと移行でしかければ、楽かも
  • ヤマダ電機が、自社ポイントでゲーム、自社のポイントを仮想のゲームに投入して引当金を現金化させず、かつユーザを自社に惹きつけ留めようとするところは、利用価値、ありそう。

チケットなサービスの移り変わり

Grouponがサービス提供をするだろうが、後発のウェブサービスのみにしぼった後発の会社の登場で、衰退するだろう。 自身の店のチケットを発行する、低価格でだれにも使いやすいウェブサービスが登場するだろう。それは、iOSおよびAndroid(独自アプリ)を通じて、パスを発行し、またアップデートをするだろう。その手数料はとても安く、Grouponに支払う手数料分を、さらに割引に使うことが可能になるだろう。 ウェブサービス提供者は、デバイスを個別に識別するIDにひもづけられた行動履歴を入手するだろう。それは、より的確なクーポンの提案を可能とし、ウェブを見ない人に、消費活動を引き起こすだろう。

Googleは対応しない

Googleは対抗しないだろう。 PassKitが提供するクーポンは、極めて低価格になったチケット発行と管理コストでういた広告コストで、さらなる割引を可能とする。これは、ユーザに魅力的な広告だが、しかしウェブサービスを通さず、ユーザに直接届く。チケットが作る市場は、ローカルの流通に、入り込むだろう。 これは、Googleが欲しいが、手に入れられない市場だろう。だが、もしも、広告手数料を収入とするGoogleが参入するとすれば、iOSのプラットホームで3rdパーティが提供するウェブサービス自体を含めて、Androidで、提供することになるだろう。しかしそれは、Androidに露骨な利益を誘導する自社サービスをいれることであり、端末メーカはそれを許さないだろう。