読者です 読者をやめる 読者になる 読者になる

こちょこちょブログ

プログラミングとか学んだことの備忘録ブログです。

Google Developers Summit:Progressive Web Appsに行ってきた

Webサービス アプリ テクノロジー イベント

少し前に行われたGoogle Developers Summit : Progressive Web Appsに行ってきたので、PWAについて自分なりにまとめたいと思います。

f:id:kmatz90:20160508164153j:plain

 

Progressive Web Apps(PWA)とは?

無理やりシンプルに説明すると、今までのWebアプリ(サービス)に、

プッシュ通知やオフラインアクセスなどをできるようにした新しいWebアプリの概念です。

 

Webアプリでプッシュ通知やオフラインアクセスを使うにはどうするのか?

答え:Service Workerを使う!

 

Service Worker(SW)とは?

Webページとは別にバックグラウンドで実行されるJavascript環境(API)のことです。

プロキシ的な感覚が近い?と思います。

なので、技術的にはPWAを勉強するというより、

SWを勉強すると表現した方がいいかもしれません。

詳細はこちらを参照。 

 

Service Workerを使うには?

具体的な使い方はこちらを参照

なお、Service Workerを使うには、SSL化(HTTPS)が必須になります。

 

SUUMOのPWA導入事例

これは実際にカンファレンスで聞いてきた話です。

 

SSL化の課題

SUUMOでPWAを導入する際に1番ネックになったのがSSL化で、

かれこれ1年以上かかっているそう(大きな理由はlocalStorage)。。

しかも紙媒体のURL表記が「http」のものもあるので、

「HSTS」を導入する予定とのこと。

 

Add to Homescreen

ホーム画面にショートカットを追加させる施策です。

スーモに再来訪したら「ホーム画面に追加しませんか?」的なバナーを出して追加を促したそう。

ホーム画面から来た人はCVRが約1.2倍と言っていたので、導入効果はあるもよう。

 

Offline Cache

利用したことで表示速度が約4倍に。

 

プッシュ通知

ユーザーが新着案件(賃貸)情報を受け取る設定をしたら、

スマホにプッシュ通知できるような仕組みを検討中とのこと。

 

その他

ジオフェンシングもそのうちやりたいと話していた気が。

 

まとめ

スピーカーも話していましたが、ネイティブアプリは色々大変なんですよね。

リリースとアップデートに審査が必要だし、

GoogleAppleを挟む分、自由じゃないし時間がかかったり。

その点、PWAのようにWebにあるといつでも改修できるし、

各OSに依存しないのでネイティブアプリのデメリットを解消できます。

 

結構明るい技術だと思うのですが、

今のところブラウザのSafariMicrosoft Edgeに対応していないようです。

※対応状況はこちらで確認できます。

なので、iOS主流の日本ではすぐすぐ取り入れる技術ではないかもしれませんが、

今後のアプリのトレンドして抑えておく必要はありそうです。

パーフェクトJavaScript

パーフェクトJavaScript

 

プロダクトマネージャーになりたい人は「Inspired: 顧客の心を捉える製品の創り方」を読むといいかも

読書感想 テクノロジー キャリア

少し前からバズワードっぽくなっているプロダクトマネージャー。

結局どういう人なの?って思ったので、

Inspired: 顧客の心を捉える製品の創り方 を読んでみました。

 

※以下からPMと表記する箇所があります

 

プロダクトマネージャの役割(仕事)とは?

この書籍には「PMの役割とは?」みたいなものが散りばめられているのですが、

その中でもよりシンプルに表現されているのが以下。

 

プロダクトマネージャーの主な任務としては 2つある。

製品の市場性を評価すること(1)と、

開発すべき製品を定義すること(2)である。

 
(1)製品の市場性を評価すること

製品の仕様を決めることだけが仕事ではないのです。

そもそも作ろうとしているプロダクトが、

本当に価値のあるものなのか、

あるいはどうやって価値を高めていくのか

という検証をすることも仕事になります。

 

どうやって作るか(How)だけではなく、

何(what)を、なぜ(why)作るかのレイヤーまで手を出すイメージですかね。

 

また、製品の価値やユーザーの意向を測る指標として、

NPS(ネットプロモータースコア)というものがよく使われているようです。

 

(2)開発すべき製品を定義すること

プロダクトマネージャーの仕事は、

究極の製品を定義することではなく、

目的を達成するために必要最小限までそぎ落とされた製品を定義することである。

これ言うのは簡単なのですが、実際にはかなり難しいんですよね。

製品(機能)を削るというのは、偉い人や顧客の承認を得ないといけないので。

つまり「そぎ落とす理由をロジカルに説明できて」、

なおかつ「偉い人たちと臆せず戦えるキモを持ちあわせた人物」でないとPMは務まらないということですね。

 

プロダクトマネージャーはコードを書くのか?

書籍を読む限りほとんど書かないようです。

というのも、

エンジニアリング部門というのは、基本的に、

正しい製品を作ることではなく

製品を正しく作ることに専念することになっている。

と書いてあるように、 

実際にプレイヤーになると「製品を正しく作ること」に専念してしまい、

「何が正しい製品なのか」混乱すると思います。

 

ではコードを書けなくてもいいのか?

優秀なプロダクトマネージャーになるためには、

自分で新しい技術を発明したり、使いこなしたりする能力を身につける必要はないけれど、

その技術を理解し、活用の可能性を調べられるぐらいには使いこなさなければならない。

書けなくてもいいようですが、 フィジビリティを判断する能力は必要とのこと。

 

プロダクトマネージャになるには?

プロダクトマネージャーは、

エンジニアが質の高い製品を作るために必要だと思っていることを自由にやらせるようにしなければいけないし、

エンジニアは、

プロダクトマネージャーが使いやすくて、価値の高い製品を自由に思い描けるように配慮しなければいけない。

 

すばらしい製品の定義を思いついて、それをエンジニアリングチームに丸投げしてしまう、というのがある。

そのせいで、何をしたいかと何ができるのかをすり合わせるという非常に重要な作業に取りかかるのが遅れて、

いろいろな情報をしっかり検討する時間もないまま意思決定をしなければならない状況に陥ってから、慌ててすり合わせをする羽目になる。

 

やっぱり実際の現場でエンジニアとして経験を積んだ人の方が、上記のような気持ちが分かると思います。

気持ちが理解できるということは、エンジニアチームと上手くコミュニケーションが取れるということだと思うので、

PMになるにはエンジニアとして修行を積むというのが近道だと思います。

※SEじゃダメ

 

まとめ

PMは「製品(プロダクト)のCEO」とどこかで聞きましたが、

ほんとにそんなイメージだと思いました。

 

プロダクトマネージャという言葉が、

世間に認知される前(できる前)からこの役割はあったと思いますが、

なぜここ最近でいっきにフォーカスされるようになったんですかね。

いわゆるITが成熟してきて、単純なサービスの内容だけでは勝負できなくなって、

製品をより良いものにする人、ひいては製品に責任を持つ人を作ろうといった背景ですかね。

 

ちなみにクックパッドでは、PMのことをディレクターと読んでいるらしいです。

呼び名は様々ですが、いずれにしても、

ユーザーを幸せにするサービスを作るためには、

学んで検証をするPDCAを回し続ける人物が必要ですね。

Inspired: 顧客の心を捉える製品の創り方

Inspired: 顧客の心を捉える製品の創り方

 

Swiftでランダムな文字列を生成する方法

アプリ テクノロジー プログラム

Xcodeのバージョン:7.1

Swiftのバージョン:2.1

 

方法

ランダムな数値を生成した後、

その数値の場所の文字列を取得すれば、

おのずとランダムな文字列が生成できます。

 

Swift 2以降は、

advancedBy(n)

を使って任意の場所の文字列を取得できます。

 

 

注意点

上述した通り、

letter[letter.startIndex.advancedBy(randNum)]

のように、

文字列の変数[]

で囲まないと正常に動作しませんでした。

具体的に言うと、advancedBy(n) の「n」に入った数値をそのまま出力してしまいました。

 

何か僕がミスってるのかもしれないですが、

同じような状況に陥った方は上記の方法を試してみてください。

 

詳解 Swift 改訂版

詳解 Swift 改訂版

 

Swiftでキャリア情報とかOS情報とかデバイス名とかIPアドレスとか取得する方法

アプリ プログラム テクノロジー

Xcodeのバージョン:7.1

Swiftのバージョン:2.1

 

ユーザーが使用している端末のデータを取得したいときがあります。

キャリア名とかOSのバージョンとかデバイス名とか。。

ある程度の情報は、以下の方法で簡単に取得できます。

 

IPアドレスだけ特殊で、

Bridging Header(ブリッジングヘッダー)を使わなければ取得できないようです。

ブリッジングヘッダー作成の方法はこちらを参考にしました。

追加したブリッジングヘッダー(.hファイル)に

#include <ifaddrs.h> 

を追加後、

で取得できます。

 

ちなみに、フレームワークプロジェクト(Cocoa Touch framework)だと、

ブリッジングヘッダーは使えないそうです。。

 

詳解 Swift 改訂版

詳解 Swift 改訂版

 

SwiftでBase64エンコードしたときに改行コードが入ってハマった

プログラム テクノロジー アプリ

新年早々めでたくハマって、

f:id:kmatz90:20160109171157j:plain

こんな顔になったので、メモしておきます。

 

Xcodeのバージョン:7.1

Swiftのバージョン:2.1

 

ちなみにBase64とは?

データを64種類の印字可能な英数字のみを用いて、

それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。

MIMEによって規定されていて、

7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。

- Wikipedia

 

改行コードを正規表現で削除(置換)する

SwiftBase64エンコードした場合、

「64文字」ごとに改行コードが入るようなので、

正規表現で改行コードを削除して対応しました。

MIMEの基準では「76文字」ごとと書いてあるんですけどね。

具体的なコードは下記です。

含まれていたのは「\r\n」でしたが、

念のため「\n」も消せるようにしておきました。

 

※追記

KishikawaKatsumiさんにコメントでご指摘頂きました通り、

encStr!.base64EncodedStringWithOptions([])

で改行を含まないようにできました!

オプションを空で指定する方法を知りませんでした。。

なので、正規表現とかわざわざ使わなくて大丈夫です。。

その他の疑問も丁寧に説明をして頂いて、大変助かりました。

 

詳解 Swift 改訂版

詳解 Swift 改訂版

 

ぜんぶインターネットのおかげ

考えてみた

僕はインターネットが好きだ。

本当にインターネットがあって良かった。

 

インターネットの良いところは、

自分が知らないことを知れる」ことだと思う。

進撃の巨人で言うと、壁の外のことを知れるイメージ。 

f:id:kmatz90:20151226235426j:plain

インターネットがあるおかげで、

東京で楽しく消耗しながら生きていけている。 

 

僕は田舎に生まれてから高校までずっと同じ場所で過ごしてきた。

その反動からか、小さい頃からずっと、華の都大東京(長渕風)で働かないと死ぬのと同じだと思っていた。

紆余曲折あったが、結局インターネットのおかげで東京で働けている。

 

インターネットが好きなのでエンジニアになった。

 

分からないことの大半はインターネットで調べたし、

何が分からないことなのかもインターネットが教えてくれた。

 

インターネットのおかげで、

自分をより必要としてくれる場、評価してくれる場も見つかった。

 

インターネットのおかげでいろんな人に出会えた。  

 

たぶんこの先生まれてくる子たちは、

インターネットは水や空気と同じように

当たり前に存在しているものという感覚になると思う。

でも当たり前にあるものにこそ感謝をしなくちゃいけない。

 

このブログが書けるのもインターネットのおかげ。

 

今年もありがとうございました。

来年もよろしくお願いします。

iOSアプリ(9対応)のリリース準備・対応で苦労したこと5つとおまけ

Webサービス アプリ テクノロジー プログラム

前回の開発編に続き、今回はリリース編です。

リリースというものは、そう何回もやるもんじゃないので方法を忘れがちです。

覚えている今のうちにメモしておきます。

※ちなみにXcode7を使っています。

f:id:kmatz90:20151108195807j:plain

 

1.リリースするための事前準備が意外と多かった

  • DistributionタイプのCertificateが必要
  • App IDが必要

※ここで出てくるBudle IDとXcode上のBundle Identifierがイコールじゃないとリリースできません

  • DistributionタイプのProvisioning Profileが必要

方法はこちらが参考になりました。

 

2. 1度iTunes ConnectにBuildしたらBuildの値を上げないと再Buildできない

アプリをリリースするにはiTunes ConnectにXcodeからBuildする必要があります。

※方法はこちらを参照。

しかし、Buildし終わってから、

「やっぱりあそこはこうしよう!」って思い立って修正したくなります。

きっとなります。ほぼなります。必ずなります。

その際はXcodeから、

「General」にある「Build」を「1.0.1」のように上げる必要があります。

そうすれば別のBuildとみなしてくれて再度Buildできます。

ちなみにリリース後にアップデートするときは「Version」を上げます。

 

3.スクリーンショットAppleの画像などがあると商標違反でリジェクトされる

アプリ申請時には、

アプリの見せ場的なものを載せたスクリーンショットを、

一緒にアップすることになるんですが、

そこにAppleの商標情報があるとリジェクトされます。

今回のアプリは見せ場的なシーンが少なかったので、

作ったアプリのアイコンが写っているホーム画面のキャプチャをアップしたら、

Apple製品のアイコンも載ってしまい怒られましたw

 

4. 「広告表示してないのにAdvertising Identifier使ってるよ」ってリジェクトされた

Advertising Identifier but does not include ad functionality...

「Advertising Identifier」っていうのは広告識別子のことです。

広告タグとかリンクコードの認識で大丈夫だと思います。

iADとか使ってないし、心当たりがなかったのですが、

nend、i-Mobile、Adstir?とかは裏で用意してるだけでも引っかかるようです。

※文字列だけでも引っかかりました

これ地味に引っかかる人いるんじゃないですかね?

 

5. リリース後のApp Storeのリンク作成

通常、PCのiTunesApp Store)からiOSアプリを探そうとすると結構苦労します。

(というかできるのか?)

そんなときは「Link Maker」を使うと簡単に辿り付けますし、URLも発行できます。

検索するときの注意点として、日本の場合は「Store Country」を「Japan」にし、

iOSアプリの場合は「Media Type」を「iOS Apps」に変更する必要があります。

 

おまけ

実はApp Storeの審査は特急で行うように申請ができます。

※方法はこちらを参照

試しに「Android版」が既にリリースされているので、

早く審査してくれって申請してみたところ、

案の定、却下されましたww

通常はクリティカルなバグの修正や、

ハロウィンなどのイベントに合わせたアプリじゃないと、速攻で審査してくれないようです。

ご利用は計画的に。

詳解 Swift

詳解 Swift